From 796f502a8e7090fcc19d882a787ad197abf0228e Mon Sep 17 00:00:00 2001 From: TuDatTr Date: Thu, 11 Jan 2018 12:13:27 +0100 Subject: [PATCH] Clean prelude install? --- emacs/.emacs.d/.gitignore | 26 - emacs/.emacs.d/.projectile | 3 - emacs/.emacs.d/CONTRIBUTING.md | 31 - emacs/.emacs.d/README.md | 730 - emacs/.emacs.d/core/prelude-core.el | 178 - emacs/.emacs.d/core/prelude-custom.el | 103 - emacs/.emacs.d/core/prelude-editor.el | 440 - .../core/prelude-global-keybindings.el | 116 - emacs/.emacs.d/core/prelude-mode.el | 149 - emacs/.emacs.d/core/prelude-osx.el | 75 - emacs/.emacs.d/core/prelude-packages.el | 217 - emacs/.emacs.d/core/prelude-ui.el | 92 - .../ace-window-autoloads.el | 68 - .../ace-window-pkg.el | 2 - .../ace-window-20171228.1109/ace-window.el | 767 - .../ace-window-20171228.1109/ace-window.elc | Bin 23018 -> 0 bytes .../elpa/anzu-20161017.907/anzu-autoloads.el | 78 - .../elpa/anzu-20161017.907/anzu-pkg.el | 2 - emacs/.emacs.d/elpa/anzu-20161017.907/anzu.el | 866 - .../.emacs.d/elpa/anzu-20161017.907/anzu.elc | Bin 35554 -> 0 bytes .../elpa/archives/gnu/archive-contents | 1212 - .../elpa/archives/gnu/archive-contents.signed | 1 - .../elpa/archives/melpa/archive-contents | 2 - .../async-20180103.2312/async-autoloads.el | 151 - .../async-20180103.2312/async-bytecomp.el | 177 - .../async-20180103.2312/async-bytecomp.elc | Bin 6422 -> 0 bytes .../elpa/async-20180103.2312/async-pkg.el | 6 - .../elpa/async-20180103.2312/async.el | 353 - .../elpa/async-20180103.2312/async.elc | Bin 10298 -> 0 bytes .../elpa/async-20180103.2312/dired-async.el | 401 - .../elpa/async-20180103.2312/dired-async.elc | Bin 13542 -> 0 bytes .../async-20180103.2312/smtpmail-async.el | 73 - .../async-20180103.2312/smtpmail-async.elc | Bin 1589 -> 0 bytes emacs/.emacs.d/elpa/auctex-12.1.0.signed | 1 - emacs/.emacs.d/elpa/auctex-12.1.0/.elpaignore | 10 - emacs/.emacs.d/elpa/auctex-12.1.0/.gitignore | 49 - emacs/.emacs.d/elpa/auctex-12.1.0/COPYING | 674 - .../elpa/auctex-12.1.0/ChangeLog-preview | 1897 -- .../elpa/auctex-12.1.0/ChangeLog-preview.1 | 3736 --- emacs/.emacs.d/elpa/auctex-12.1.0/ChangeLog.1 | 22506 ---------------- emacs/.emacs.d/elpa/auctex-12.1.0/GNUmakefile | 93 - emacs/.emacs.d/elpa/auctex-12.1.0/Makefile.in | 713 - emacs/.emacs.d/elpa/auctex-12.1.0/README | 238 - emacs/.emacs.d/elpa/auctex-12.1.0/README.GIT | 37 - emacs/.emacs.d/elpa/auctex-12.1.0/RELEASE | 101 - emacs/.emacs.d/elpa/auctex-12.1.0/aclocal.m4 | 653 - emacs/.emacs.d/elpa/auctex-12.1.0/auctex.el | 36 - .../.emacs.d/elpa/auctex-12.1.0/auctex.el.in | 10 - emacs/.emacs.d/elpa/auctex-12.1.0/auctex.info | 8924 ------ emacs/.emacs.d/elpa/auctex-12.1.0/auctex.spec | 226 - emacs/.emacs.d/elpa/auctex-12.1.0/autogen.sh | 65 - emacs/.emacs.d/elpa/auctex-12.1.0/bib-cite.el | 2607 -- .../build-aux/gitlog-to-auctexlog | 129 - .../build-aux/gitlog-to-changelog | 492 - emacs/.emacs.d/elpa/auctex-12.1.0/circ.tex | 479 - .../.emacs.d/elpa/auctex-12.1.0/configure.ac | 317 - .../.emacs.d/elpa/auctex-12.1.0/context-en.el | 225 - .../.emacs.d/elpa/auctex-12.1.0/context-nl.el | 200 - emacs/.emacs.d/elpa/auctex-12.1.0/context.el | 1825 -- emacs/.emacs.d/elpa/auctex-12.1.0/dir | 25 - .../elpa/auctex-12.1.0/doc/.gitignore | 34 - .../elpa/auctex-12.1.0/doc/Makefile.in | 224 - .../elpa/auctex-12.1.0/doc/auctex.texi | 5874 ---- .../elpa/auctex-12.1.0/doc/changes.texi | 1326 - .../elpa/auctex-12.1.0/doc/copying.texi | 48 - .../.emacs.d/elpa/auctex-12.1.0/doc/faq.texi | 138 - .../.emacs.d/elpa/auctex-12.1.0/doc/fdl.texi | 506 - .../elpa/auctex-12.1.0/doc/history.texi | 1918 -- .../elpa/auctex-12.1.0/doc/install.texi | 536 - .../elpa/auctex-12.1.0/doc/intro.texi | 106 - .../elpa/auctex-12.1.0/doc/macros.texi | 89 - .../elpa/auctex-12.1.0/doc/preview-dtxdoc.pl | 152 - .../elpa/auctex-12.1.0/doc/preview-faq.texi | 303 - .../elpa/auctex-12.1.0/doc/preview-latex.texi | 829 - .../auctex-12.1.0/doc/preview-problems.texi | 139 - .../auctex-12.1.0/doc/preview-readme.texi | 228 - .../elpa/auctex-12.1.0/doc/preview-todo.texi | 118 - .../elpa/auctex-12.1.0/doc/quickstart.texi | 326 - .../elpa/auctex-12.1.0/doc/tex-ref.tex | 681 - .../.emacs.d/elpa/auctex-12.1.0/doc/todo.texi | 287 - .../elpa/auctex-12.1.0/doc/wininstall.texi | 357 - .../elpa/auctex-12.1.0/etc/auctex-logo.tex | 27 - .../.emacs.d/elpa/auctex-12.1.0/font-latex.el | 2245 -- .../elpa/auctex-12.1.0/images/amstex.xpm | 207 - .../elpa/auctex-12.1.0/images/bibtex.xpm | 82 - .../elpa/auctex-12.1.0/images/dropdown.xpm | 30 - .../elpa/auctex-12.1.0/images/dvipdf.xpm | 65 - .../elpa/auctex-12.1.0/images/dvips.xpm | 89 - .../elpa/auctex-12.1.0/images/error.xpm | 35 - .../elpa/auctex-12.1.0/images/exec.xpm | 68 - .../elpa/auctex-12.1.0/images/execbibtex.xpm | 127 - .../elpa/auctex-12.1.0/images/execdvips.xpm | 52 - .../elpa/auctex-12.1.0/images/execerror.xpm | 49 - .../elpa/auctex-12.1.0/images/execpdftex.xpm | 205 - .../elpa/auctex-12.1.0/images/exectex.xpm | 203 - .../elpa/auctex-12.1.0/images/execviewdvi.xpm | 46 - .../elpa/auctex-12.1.0/images/execviewpdf.xpm | 42 - .../elpa/auctex-12.1.0/images/execviewps.xpm | 42 - .../.emacs.d/elpa/auctex-12.1.0/images/gv.xpm | 158 - .../elpa/auctex-12.1.0/images/jumpdvi.xpm | 74 - .../images/ltx-symb-turn-off.xpm | 47 - .../auctex-12.1.0/images/ltx-symb-turn-on.xpm | 46 - .../elpa/auctex-12.1.0/images/pdftex.xpm | 206 - .../elpa/auctex-12.1.0/images/prverr16.xpm | 31 - .../elpa/auctex-12.1.0/images/prverr20.xpm | 35 - .../elpa/auctex-12.1.0/images/prverr24.xbm | 9 - .../elpa/auctex-12.1.0/images/prverr24.xpm | 39 - .../auctex-12.1.0/images/prvtex-cap-up.xpm | 48 - .../elpa/auctex-12.1.0/images/prvtex12.xbm | 6 - .../elpa/auctex-12.1.0/images/prvtex12.xpm | 32 - .../elpa/auctex-12.1.0/images/prvtex16.xbm | 7 - .../elpa/auctex-12.1.0/images/prvtex16.xpm | 36 - .../elpa/auctex-12.1.0/images/prvtex20.xpm | 40 - .../elpa/auctex-12.1.0/images/prvtex24.xbm | 10 - .../elpa/auctex-12.1.0/images/prvtex24.xpm | 37 - .../elpa/auctex-12.1.0/images/prvwrk12.xpm | 32 - .../elpa/auctex-12.1.0/images/prvwrk14.xpm | 34 - .../elpa/auctex-12.1.0/images/prvwrk16.xpm | 36 - .../elpa/auctex-12.1.0/images/prvwrk20.xpm | 40 - .../elpa/auctex-12.1.0/images/prvwrk24.xbm | 12 - .../elpa/auctex-12.1.0/images/prvwrk24.xpm | 44 - .../elpa/auctex-12.1.0/images/pspdf.xpm | 83 - .../elpa/auctex-12.1.0/images/sep.xpm | 29 - .../elpa/auctex-12.1.0/images/spell.xpm | 64 - .../elpa/auctex-12.1.0/images/tex.xpm | 260 - .../elpa/auctex-12.1.0/images/view.xpm | 31 - .../elpa/auctex-12.1.0/images/viewdvi.xpm | 58 - .../elpa/auctex-12.1.0/images/viewpdf.xpm | 54 - .../elpa/auctex-12.1.0/images/viewps.xpm | 54 - emacs/.emacs.d/elpa/auctex-12.1.0/install-sh | 251 - emacs/.emacs.d/elpa/auctex-12.1.0/latex.el | 6695 ----- .../elpa/auctex-12.1.0/latex/.gitignore | 16 - .../elpa/auctex-12.1.0/latex/Makefile.in | 97 - .../.emacs.d/elpa/auctex-12.1.0/latex/README | 64 - .../elpa/auctex-12.1.0/latex/bootstrap.ins | 4 - .../elpa/auctex-12.1.0/latex/preview.dtx | 1877 -- emacs/.emacs.d/elpa/auctex-12.1.0/lpath.el | 10 - .../.emacs.d/elpa/auctex-12.1.0/mkinstalldirs | 99 - .../elpa/auctex-12.1.0/multi-prompt.el | 224 - .../.emacs.d/elpa/auctex-12.1.0/plain-tex.el | 320 - .../elpa/auctex-12.1.0/preview-latex.info | 2501 -- .../elpa/auctex-12.1.0/preview-latex.spec | 260 - .../.emacs.d/elpa/auctex-12.1.0/prv-emacs.el | 600 - .../elpa/auctex-12.1.0/prv-install.el | 114 - .../.emacs.d/elpa/auctex-12.1.0/prv-xemacs.el | 759 - .../elpa/auctex-12.1.0/style/.nosearch | 1 - .../elpa/auctex-12.1.0/style/Alegreya.el | 98 - .../elpa/auctex-12.1.0/style/AlegreyaSans.el | 110 - .../elpa/auctex-12.1.0/style/AnonymousPro.el | 90 - .../.emacs.d/elpa/auctex-12.1.0/style/CJK.el | 94 - .../elpa/auctex-12.1.0/style/CJKutf8.el | 39 - .../elpa/auctex-12.1.0/style/FiraMono.el | 70 - .../elpa/auctex-12.1.0/style/FiraSans.el | 102 - .../elpa/auctex-12.1.0/style/MinionPro.el | 69 - .../elpa/auctex-12.1.0/style/MyriadPro.el | 94 - .../elpa/auctex-12.1.0/style/XCharter.el | 90 - .../.emacs.d/elpa/auctex-12.1.0/style/acro.el | 294 - .../elpa/auctex-12.1.0/style/acronym.el | 179 - .../elpa/auctex-12.1.0/style/afterpage.el | 43 - .../elpa/auctex-12.1.0/style/alltt.el | 50 - .../elpa/auctex-12.1.0/style/alphanum.el | 100 - .../elpa/auctex-12.1.0/style/amsart.el | 12 - .../elpa/auctex-12.1.0/style/amsbook.el | 12 - .../elpa/auctex-12.1.0/style/amsbsy.el | 19 - .../elpa/auctex-12.1.0/style/amsfonts.el | 53 - .../elpa/auctex-12.1.0/style/amsmath.el | 229 - .../elpa/auctex-12.1.0/style/amsopn.el | 53 - .../elpa/auctex-12.1.0/style/amssymb.el | 250 - .../elpa/auctex-12.1.0/style/amstex.el | 61 - .../elpa/auctex-12.1.0/style/amstext.el | 17 - .../elpa/auctex-12.1.0/style/amsthm.el | 200 - .../elpa/auctex-12.1.0/style/arabxetex.el | 113 - .../elpa/auctex-12.1.0/style/array.el | 105 - .../elpa/auctex-12.1.0/style/article.el | 21 - .../elpa/auctex-12.1.0/style/attachfile.el | 119 - .../elpa/auctex-12.1.0/style/australian.el | 40 - .../elpa/auctex-12.1.0/style/austrian.el | 40 - .../elpa/auctex-12.1.0/style/babel.el | 196 - .../elpa/auctex-12.1.0/style/baskervaldx.el | 84 - .../elpa/auctex-12.1.0/style/beamer.el | 363 - .../elpa/auctex-12.1.0/style/biblatex.el | 636 - .../elpa/auctex-12.1.0/style/bicaption.el | 183 - .../.emacs.d/elpa/auctex-12.1.0/style/bidi.el | 59 - .../elpa/auctex-12.1.0/style/bidibeamer.el | 40 - .../elpa/auctex-12.1.0/style/bigdelim.el | 53 - .../elpa/auctex-12.1.0/style/bigstrut.el | 51 - emacs/.emacs.d/elpa/auctex-12.1.0/style/bm.el | 55 - .../.emacs.d/elpa/auctex-12.1.0/style/book.el | 21 - .../elpa/auctex-12.1.0/style/booktabs.el | 79 - .../elpa/auctex-12.1.0/style/breqn.el | 185 - .../elpa/auctex-12.1.0/style/bulgarian.el | 55 - .../elpa/auctex-12.1.0/style/canadian.el | 40 - .../elpa/auctex-12.1.0/style/captcont.el | 47 - .../elpa/auctex-12.1.0/style/caption.el | 463 - .../elpa/auctex-12.1.0/style/cleveref.el | 108 - .../elpa/auctex-12.1.0/style/color.el | 291 - .../elpa/auctex-12.1.0/style/colortbl.el | 92 - .../elpa/auctex-12.1.0/style/commath.el | 102 - .../elpa/auctex-12.1.0/style/comment.el | 69 - .../elpa/auctex-12.1.0/style/csquotes.el | 246 - .../elpa/auctex-12.1.0/style/currvita.el | 94 - .../elpa/auctex-12.1.0/style/czech.el | 9 - .../elpa/auctex-12.1.0/style/danish.el | 18 - .../elpa/auctex-12.1.0/style/dcolumn.el | 49 - .../elpa/auctex-12.1.0/style/dinbrief.el | 277 - .../elpa/auctex-12.1.0/style/dk-bib.el | 62 - emacs/.emacs.d/elpa/auctex-12.1.0/style/dk.el | 10 - .../.emacs.d/elpa/auctex-12.1.0/style/doc.el | 193 - .../elpa/auctex-12.1.0/style/dutch.el | 10 - .../.emacs.d/elpa/auctex-12.1.0/style/emp.el | 85 - .../elpa/auctex-12.1.0/style/empheq.el | 500 - .../elpa/auctex-12.1.0/style/english.el | 13 - .../elpa/auctex-12.1.0/style/enumitem.el | 455 - .../elpa/auctex-12.1.0/style/environ.el | 135 - .../elpa/auctex-12.1.0/style/epigraph.el | 98 - .../.emacs.d/elpa/auctex-12.1.0/style/epsf.el | 38 - .../elpa/auctex-12.1.0/style/erewhon.el | 91 - .../elpa/auctex-12.1.0/style/eso-pic.el | 90 - .../elpa/auctex-12.1.0/style/everysel.el | 45 - .../.emacs.d/elpa/auctex-12.1.0/style/exam.el | 378 - .../elpa/auctex-12.1.0/style/exercise.el | 63 - .../elpa/auctex-12.1.0/style/expl3.el | 58 - .../elpa/auctex-12.1.0/style/fancyhdr.el | 114 - .../elpa/auctex-12.1.0/style/fancynum.el | 47 - .../elpa/auctex-12.1.0/style/fancyref.el | 128 - .../elpa/auctex-12.1.0/style/fancyvrb.el | 538 - .../.emacs.d/elpa/auctex-12.1.0/style/fbb.el | 81 - .../elpa/auctex-12.1.0/style/filecontents.el | 61 - .../elpa/auctex-12.1.0/style/flashcards.el | 61 - .../elpa/auctex-12.1.0/style/floatrow.el | 726 - .../elpa/auctex-12.1.0/style/foils.el | 66 - .../elpa/auctex-12.1.0/style/fontaxes.el | 114 - .../elpa/auctex-12.1.0/style/fontenc.el | 52 - .../elpa/auctex-12.1.0/style/fontspec.el | 401 - .../elpa/auctex-12.1.0/style/footmisc.el | 73 - .../elpa/auctex-12.1.0/style/framed.el | 52 - .../elpa/auctex-12.1.0/style/francais.el | 42 - .../elpa/auctex-12.1.0/style/french.el | 49 - .../elpa/auctex-12.1.0/style/frenchb.el | 79 - .../elpa/auctex-12.1.0/style/fvextra.el | 139 - .../elpa/auctex-12.1.0/style/geometry.el | 151 - .../elpa/auctex-12.1.0/style/german.el | 50 - .../elpa/auctex-12.1.0/style/gloss-italian.el | 68 - .../elpa/auctex-12.1.0/style/graphics.el | 12 - .../elpa/auctex-12.1.0/style/graphicx.el | 290 - .../elpa/auctex-12.1.0/style/harvard.el | 130 - .../elpa/auctex-12.1.0/style/hologo.el | 233 - .../elpa/auctex-12.1.0/style/hyperref.el | 318 - .../elpa/auctex-12.1.0/style/icelandic.el | 54 - .../elpa/auctex-12.1.0/style/ifluatex.el | 65 - .../elpa/auctex-12.1.0/style/imakeidx.el | 100 - .../elpa/auctex-12.1.0/style/index.el | 84 - .../elpa/auctex-12.1.0/style/inputenc.el | 87 - .../elpa/auctex-12.1.0/style/italian.el | 60 - .../elpa/auctex-12.1.0/style/j-article.el | 11 - .../elpa/auctex-12.1.0/style/j-book.el | 11 - .../elpa/auctex-12.1.0/style/j-report.el | 11 - .../elpa/auctex-12.1.0/style/jarticle.el | 23 - .../elpa/auctex-12.1.0/style/jbook.el | 22 - .../elpa/auctex-12.1.0/style/jreport.el | 23 - .../elpa/auctex-12.1.0/style/jsarticle.el | 27 - .../elpa/auctex-12.1.0/style/jsbook.el | 31 - .../elpa/auctex-12.1.0/style/jsreport.el | 56 - .../.emacs.d/elpa/auctex-12.1.0/style/jura.el | 40 - .../elpa/auctex-12.1.0/style/jurabib.el | 634 - .../elpa/auctex-12.1.0/style/kantlipsum.el | 46 - .../elpa/auctex-12.1.0/style/kpfonts.el | 599 - .../elpa/auctex-12.1.0/style/latexinfo.el | 181 - .../elpa/auctex-12.1.0/style/letter.el | 185 - .../elpa/auctex-12.1.0/style/lettrine.el | 75 - .../elpa/auctex-12.1.0/style/lipsum.el | 46 - .../elpa/auctex-12.1.0/style/listings.el | 425 - .../elpa/auctex-12.1.0/style/longtable.el | 135 - .../elpa/auctex-12.1.0/style/lscape.el | 45 - .../elpa/auctex-12.1.0/style/ltablex.el | 49 - .../elpa/auctex-12.1.0/style/ltx-base.el | 87 - .../elpa/auctex-12.1.0/style/ltxdoc.el | 41 - .../elpa/auctex-12.1.0/style/ltxtable.el | 83 - .../elpa/auctex-12.1.0/style/luacode.el | 63 - .../elpa/auctex-12.1.0/style/luatextra.el | 44 - .../elpa/auctex-12.1.0/style/makeidx.el | 49 - .../elpa/auctex-12.1.0/style/mathtools.el | 484 - .../elpa/auctex-12.1.0/style/mdframed.el | 421 - .../elpa/auctex-12.1.0/style/mdsymbol.el | 99 - .../elpa/auctex-12.1.0/style/mdwlist.el | 64 - .../elpa/auctex-12.1.0/style/memoir.el | 85 - .../elpa/auctex-12.1.0/style/menukeys.el | 539 - .../elpa/auctex-12.1.0/style/metalogo.el | 85 - .../elpa/auctex-12.1.0/style/mflogo.el | 49 - .../elpa/auctex-12.1.0/style/minted.el | 468 - .../.emacs.d/elpa/auctex-12.1.0/style/mn2e.el | 175 - .../elpa/auctex-12.1.0/style/mnras.el | 176 - .../elpa/auctex-12.1.0/style/moodle.el | 213 - .../elpa/auctex-12.1.0/style/multicol.el | 63 - .../elpa/auctex-12.1.0/style/multido.el | 53 - .../elpa/auctex-12.1.0/style/multind.el | 62 - .../elpa/auctex-12.1.0/style/multirow.el | 52 - .../elpa/auctex-12.1.0/style/nameref.el | 57 - .../elpa/auctex-12.1.0/style/natbib.el | 191 - .../elpa/auctex-12.1.0/style/naustrian.el | 40 - .../elpa/auctex-12.1.0/style/newfloat.el | 217 - .../elpa/auctex-12.1.0/style/newpxmath.el | 74 - .../elpa/auctex-12.1.0/style/newpxtext.el | 81 - .../elpa/auctex-12.1.0/style/newtxmath.el | 84 - .../elpa/auctex-12.1.0/style/newtxsf.el | 57 - .../elpa/auctex-12.1.0/style/newtxtext.el | 80 - .../elpa/auctex-12.1.0/style/newtxttt.el | 62 - .../elpa/auctex-12.1.0/style/newzealand.el | 40 - .../elpa/auctex-12.1.0/style/ngerman.el | 50 - .../elpa/auctex-12.1.0/style/nicefrac.el | 46 - .../elpa/auctex-12.1.0/style/nomencl.el | 71 - .../elpa/auctex-12.1.0/style/ntheorem.el | 428 - .../elpa/auctex-12.1.0/style/paracol.el | 279 - .../elpa/auctex-12.1.0/style/paralist.el | 107 - .../elpa/auctex-12.1.0/style/pdflscape.el | 44 - .../elpa/auctex-12.1.0/style/pdfpages.el | 135 - .../elpa/auctex-12.1.0/style/pdfsync.el | 90 - .../elpa/auctex-12.1.0/style/placeins.el | 43 - .../elpa/auctex-12.1.0/style/plext.el | 78 - .../elpa/auctex-12.1.0/style/plfonts.el | 30 - .../.emacs.d/elpa/auctex-12.1.0/style/plhb.el | 30 - .../elpa/auctex-12.1.0/style/polish.el | 53 - .../elpa/auctex-12.1.0/style/polski.el | 56 - .../elpa/auctex-12.1.0/style/polyglossia.el | 355 - .../elpa/auctex-12.1.0/style/preview.el | 104 - .../elpa/auctex-12.1.0/style/prosper.el | 192 - .../elpa/auctex-12.1.0/style/psfig.el | 84 - .../elpa/auctex-12.1.0/style/pst-grad.el | 66 - .../elpa/auctex-12.1.0/style/pst-node.el | 193 - .../elpa/auctex-12.1.0/style/pst-plot.el | 139 - .../elpa/auctex-12.1.0/style/pst-slpe.el | 68 - .../elpa/auctex-12.1.0/style/pstricks.el | 871 - .../elpa/auctex-12.1.0/style/ragged2e.el | 65 - .../elpa/auctex-12.1.0/style/relsize.el | 69 - .../elpa/auctex-12.1.0/style/report.el | 22 - .../.emacs.d/elpa/auctex-12.1.0/style/ruby.el | 50 - .../elpa/auctex-12.1.0/style/scrartcl.el | 27 - .../elpa/auctex-12.1.0/style/scrbase.el | 225 - .../elpa/auctex-12.1.0/style/scrbook.el | 63 - .../elpa/auctex-12.1.0/style/scrlttr2.el | 240 - .../elpa/auctex-12.1.0/style/scrpage2.el | 130 - .../elpa/auctex-12.1.0/style/scrreprt.el | 65 - .../elpa/auctex-12.1.0/style/setspace.el | 62 - .../elpa/auctex-12.1.0/style/shortvrb.el | 83 - .../elpa/auctex-12.1.0/style/siunitx.el | 631 - .../elpa/auctex-12.1.0/style/slides.el | 51 - .../elpa/auctex-12.1.0/style/slovak.el | 12 - .../elpa/auctex-12.1.0/style/sourcecodepro.el | 80 - .../elpa/auctex-12.1.0/style/splitidx.el | 309 - .../elpa/auctex-12.1.0/style/subcaption.el | 184 - .../elpa/auctex-12.1.0/style/subfigure.el | 79 - .../elpa/auctex-12.1.0/style/subfiles.el | 88 - .../elpa/auctex-12.1.0/style/swedish.el | 15 - .../elpa/auctex-12.1.0/style/tabularx.el | 70 - .../elpa/auctex-12.1.0/style/tabulary.el | 67 - .../elpa/auctex-12.1.0/style/tarticle.el | 43 - .../elpa/auctex-12.1.0/style/tbook.el | 43 - .../elpa/auctex-12.1.0/style/tcolorbox.el | 704 - .../style/tcolorboxlib-raster.el | 192 - .../elpa/auctex-12.1.0/style/textcomp.el | 171 - .../elpa/auctex-12.1.0/style/textpos.el | 119 - .../elpa/auctex-12.1.0/style/theorem.el | 174 - .../.emacs.d/elpa/auctex-12.1.0/style/tikz.el | 283 - .../elpa/auctex-12.1.0/style/titleps.el | 233 - .../elpa/auctex-12.1.0/style/titlesec.el | 255 - .../elpa/auctex-12.1.0/style/titletoc.el | 193 - .../elpa/auctex-12.1.0/style/transparent.el | 53 - .../elpa/auctex-12.1.0/style/treport.el | 43 - .../.emacs.d/elpa/auctex-12.1.0/style/ulem.el | 107 - .../elpa/auctex-12.1.0/style/unicode-math.el | 74 - .../elpa/auctex-12.1.0/style/units.el | 50 - .../.emacs.d/elpa/auctex-12.1.0/style/url.el | 94 - .../elpa/auctex-12.1.0/style/varioref.el | 97 - .../elpa/auctex-12.1.0/style/verbatim.el | 44 - .../elpa/auctex-12.1.0/style/virtex.el | 83 - .../elpa/auctex-12.1.0/style/vwcol.el | 71 - .../elpa/auctex-12.1.0/style/wrapfig.el | 118 - .../elpa/auctex-12.1.0/style/xcolor.el | 629 - .../elpa/auctex-12.1.0/style/xltabular.el | 128 - .../elpa/auctex-12.1.0/style/xparse.el | 114 - .../elpa/auctex-12.1.0/style/xspace.el | 53 - .../elpa/auctex-12.1.0/style/zlmtt.el | 58 - .../tests/context/context-indentation-in.tex | 24 - .../tests/context/context-indentation-out.tex | 24 - .../tests/context/context-test.el | 44 - .../tests/japanese/error-parsing.el | 64 - .../tests/japanese/parse-timing-test.tex | 2 - .../tests/japanese/parse-timing.el | 52 - .../tests/japanese/preview-error-test.tex | 42 - .../tests/japanese/preview-error-test2.tex | 20 - .../tests/japanese/prv-dif-code.tex | 42 - .../tests/latex/fontification-general.tex | 358 - .../tests/latex/fontification-verb-macros.tex | 143 - .../tests/latex/latex-filling-in.tex | 28 - .../tests/latex/latex-filling-out.tex | 26 - .../auctex-12.1.0/tests/latex/latex-test.el | 165 - .../tests/latex/math-indent-in.tex | 17 - .../tests/latex/math-indent-out.tex | 17 - .../latex/tabular-count-ampersands-in.tex | 84 - .../latex/tabular-count-ampersands-out.tex | 100 - .../auctex-12.1.0/tests/latex/tabular-in.tex | 82 - .../auctex-12.1.0/tests/latex/tabular-out.tex | 82 - .../tests/make-test-deps.emacs-lisp | 49 - .../tests/tex/command-expansion.el | 87 - .../tests/tex/compilation-log.txt | 72 - .../auctex-12.1.0/tests/tex/error-parsing.el | 153 - .../auctex-12.1.0/tests/tex/path-expansion.el | 35 - .../elpa/auctex-12.1.0/tests/tex/utility.el | 31 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-bar.el | 523 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-buf.el | 3831 --- emacs/.emacs.d/elpa/auctex-12.1.0/tex-fold.el | 986 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-font.el | 173 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-info.el | 881 - .../.emacs.d/elpa/auctex-12.1.0/tex-ispell.el | 393 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-jp.el | 1016 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-mik.el | 73 - emacs/.emacs.d/elpa/auctex-12.1.0/tex-site.el | 181 - .../elpa/auctex-12.1.0/tex-site.el.in | 181 - .../.emacs.d/elpa/auctex-12.1.0/tex-style.el | 394 - .../.emacs.d/elpa/auctex-12.1.0/tex-wizard.el | 111 - emacs/.emacs.d/elpa/auctex-12.1.0/tex.el | 6824 ----- emacs/.emacs.d/elpa/auctex-12.1.0/texmathp.el | 424 - .../.emacs.d/elpa/auctex-12.1.0/toolbar-x.el | 2162 -- .../elpa/avy-20171230.220/avy-autoloads.el | 246 - .../.emacs.d/elpa/avy-20171230.220/avy-pkg.el | 2 - emacs/.emacs.d/elpa/avy-20171230.220/avy.el | 1970 -- emacs/.emacs.d/elpa/avy-20171230.220/avy.elc | Bin 70485 -> 0 bytes .../beacon-20171017.1540/beacon-autoloads.el | 43 - .../elpa/beacon-20171017.1540/beacon-pkg.el | 2 - .../elpa/beacon-20171017.1540/beacon.el | 482 - .../elpa/beacon-20171017.1540/beacon.elc | Bin 16052 -> 0 bytes .../browse-kill-ring-autoloads.el | 30 - .../browse-kill-ring-pkg.el | 2 - .../browse-kill-ring.el | 1171 - .../browse-kill-ring.elc | Bin 40633 -> 0 bytes .../company-20180101.1101/company-abbrev.el | 50 - .../company-20180101.1101/company-abbrev.elc | Bin 1172 -> 0 bytes .../company-autoloads.el | 318 - .../company-20180101.1101/company-bbdb.el | 61 - .../company-20180101.1101/company-bbdb.elc | Bin 1721 -> 0 bytes .../company-20180101.1101/company-capf.el | 170 - .../company-20180101.1101/company-capf.elc | Bin 3393 -> 0 bytes .../company-20180101.1101/company-clang.el | 348 - .../company-20180101.1101/company-clang.elc | Bin 13514 -> 0 bytes .../company-20180101.1101/company-cmake.el | 198 - .../company-20180101.1101/company-cmake.elc | Bin 5806 -> 0 bytes .../elpa/company-20180101.1101/company-css.el | 442 - .../company-20180101.1101/company-css.elc | Bin 16904 -> 0 bytes .../company-dabbrev-code.el | 104 - .../company-dabbrev-code.elc | Bin 3583 -> 0 bytes .../company-20180101.1101/company-dabbrev.el | 198 - .../company-20180101.1101/company-dabbrev.elc | Bin 6649 -> 0 bytes .../company-20180101.1101/company-eclim.el | 186 - .../company-20180101.1101/company-eclim.elc | Bin 5478 -> 0 bytes .../company-20180101.1101/company-elisp.el | 226 - .../company-20180101.1101/company-elisp.elc | Bin 6590 -> 0 bytes .../company-20180101.1101/company-etags.el | 107 - .../company-20180101.1101/company-etags.elc | Bin 3109 -> 0 bytes .../company-20180101.1101/company-files.el | 148 - .../company-20180101.1101/company-files.elc | Bin 4377 -> 0 bytes .../company-20180101.1101/company-gtags.el | 117 - .../company-20180101.1101/company-gtags.elc | Bin 3667 -> 0 bytes .../company-20180101.1101/company-ispell.el | 82 - .../company-20180101.1101/company-ispell.elc | Bin 1965 -> 0 bytes .../company-20180101.1101/company-keywords.el | 288 - .../company-keywords.elc | Bin 17411 -> 0 bytes .../company-20180101.1101/company-nxml.el | 142 - .../company-20180101.1101/company-nxml.elc | Bin 4226 -> 0 bytes .../company-20180101.1101/company-oddmuse.el | 57 - .../company-20180101.1101/company-oddmuse.elc | Bin 1425 -> 0 bytes .../elpa/company-20180101.1101/company-pkg.el | 7 - .../company-20180101.1101/company-semantic.el | 167 - .../company-semantic.elc | Bin 5231 -> 0 bytes .../company-20180101.1101/company-template.el | 260 - .../company-template.elc | Bin 8036 -> 0 bytes .../company-20180101.1101/company-tempo.el | 71 - .../company-20180101.1101/company-tempo.elc | Bin 2235 -> 0 bytes .../elpa/company-20180101.1101/company-tng.el | 163 - .../company-20180101.1101/company-tng.elc | Bin 3613 -> 0 bytes .../company-20180101.1101/company-xcode.el | 123 - .../company-20180101.1101/company-xcode.elc | Bin 3743 -> 0 bytes .../company-yasnippet.el | 147 - .../company-yasnippet.elc | Bin 3302 -> 0 bytes .../elpa/company-20180101.1101/company.el | 3150 --- .../elpa/company-20180101.1101/company.elc | Bin 102793 -> 0 bytes .../elpa/crux-20171230.1100/crux-autoloads.el | 32 - .../elpa/crux-20171230.1100/crux-pkg.el | 2 - .../.emacs.d/elpa/crux-20171230.1100/crux.el | 570 - .../.emacs.d/elpa/crux-20171230.1100/crux.elc | Bin 19877 -> 0 bytes .../elpa/dash-20180107.818/dash-autoloads.el | 15 - .../elpa/dash-20180107.818/dash-pkg.el | 2 - emacs/.emacs.d/elpa/dash-20180107.818/dash.el | 2770 -- .../.emacs.d/elpa/dash-20180107.818/dash.elc | Bin 92192 -> 0 bytes .../diff-hl-20170709.2000/diff-hl-amend.el | 68 - .../diff-hl-20170709.2000/diff-hl-amend.elc | Bin 6767 -> 0 bytes .../diff-hl-autoloads.el | 149 - .../diff-hl-20170709.2000/diff-hl-dired.el | 184 - .../diff-hl-20170709.2000/diff-hl-dired.elc | Bin 6463 -> 0 bytes .../diff-hl-20170709.2000/diff-hl-flydiff.el | 173 - .../diff-hl-20170709.2000/diff-hl-flydiff.elc | Bin 6948 -> 0 bytes .../diff-hl-20170709.2000/diff-hl-margin.el | 153 - .../diff-hl-20170709.2000/diff-hl-margin.elc | Bin 6768 -> 0 bytes .../elpa/diff-hl-20170709.2000/diff-hl-pkg.el | 8 - .../elpa/diff-hl-20170709.2000/diff-hl.el | 605 - .../elpa/diff-hl-20170709.2000/diff-hl.elc | Bin 22365 -> 0 bytes .../diminish-autoloads.el | 57 - .../diminish-20170419.1036/diminish-pkg.el | 2 - .../elpa/diminish-20170419.1036/diminish.el | 294 - .../elpa/diminish-20170419.1036/diminish.elc | Bin 4615 -> 0 bytes .../discover-my-major-autoloads.el | 28 - .../discover-my-major-pkg.el | 2 - .../discover-my-major.el | 215 - .../discover-my-major.elc | Bin 6066 -> 0 bytes .../easy-kill-autoloads.el | 42 - .../easy-kill-20151030.2229/easy-kill-pkg.el | 2 - .../elpa/easy-kill-20151030.2229/easy-kill.el | 865 - .../easy-kill-20151030.2229/easy-kill.elc | Bin 27717 -> 0 bytes .../editorconfig-autoloads.el | 127 - .../editorconfig-conf-mode.el | 94 - .../editorconfig-conf-mode.elc | Bin 4264 -> 0 bytes .../editorconfig-core-handle.el | 222 - .../editorconfig-core-handle.elc | Bin 10357 -> 0 bytes .../editorconfig-core.el | 210 - .../editorconfig-core.elc | Bin 4350 -> 0 bytes .../editorconfig-fnmatch.el | 305 - .../editorconfig-fnmatch.elc | Bin 5389 -> 0 bytes .../editorconfig-pkg.el | 6 - .../editorconfig.el | 569 - .../editorconfig.elc | Bin 18026 -> 0 bytes .../elisp-slime-nav-autoloads.el | 49 - .../elisp-slime-nav-pkg.el | 2 - .../elisp-slime-nav.el | 140 - .../elisp-slime-nav.elc | Bin 4308 -> 0 bytes .../elpa/epl-20150517.433/epl-autoloads.el | 15 - .../.emacs.d/elpa/epl-20150517.433/epl-pkg.el | 2 - emacs/.emacs.d/elpa/epl-20150517.433/epl.el | 695 - emacs/.emacs.d/elpa/epl-20150517.433/epl.elc | Bin 31480 -> 0 bytes .../cc-mode-expansions.el | 186 - .../cc-mode-expansions.elc | Bin 7799 -> 0 bytes .../clojure-mode-expansions.el | 106 - .../clojure-mode-expansions.elc | Bin 2656 -> 0 bytes .../cperl-mode-expansions.el | 67 - .../cperl-mode-expansions.elc | Bin 1623 -> 0 bytes .../css-mode-expansions.el | 52 - .../css-mode-expansions.elc | Bin 1120 -> 0 bytes .../enh-ruby-mode-expansions.el | 42 - .../enh-ruby-mode-expansions.elc | Bin 901 -> 0 bytes .../er-basic-expansions.el | 245 - .../er-basic-expansions.elc | Bin 6216 -> 0 bytes .../erlang-mode-expansions.el | 47 - .../erlang-mode-expansions.elc | Bin 837 -> 0 bytes .../expand-region-autoloads.el | 100 - .../expand-region-core.el | 299 - .../expand-region-core.elc | Bin 8276 -> 0 bytes .../expand-region-custom.el | 109 - .../expand-region-custom.elc | Bin 3070 -> 0 bytes .../expand-region-pkg.el | 4 - .../expand-region.el | 196 - .../expand-region.elc | Bin 3567 -> 0 bytes .../feature-mode-expansions.el | 68 - .../feature-mode-expansions.elc | Bin 1709 -> 0 bytes .../html-mode-expansions.el | 103 - .../html-mode-expansions.elc | Bin 2544 -> 0 bytes .../js-mode-expansions.el | 187 - .../js-mode-expansions.elc | Bin 4594 -> 0 bytes .../js2-mode-expansions.el | 59 - .../js2-mode-expansions.elc | Bin 1068 -> 0 bytes .../jsp-expansions.el | 64 - .../jsp-expansions.elc | Bin 1170 -> 0 bytes .../latex-mode-expansions.el | 104 - .../latex-mode-expansions.elc | Bin 2044 -> 0 bytes .../nxml-mode-expansions.el | 125 - .../nxml-mode-expansions.elc | Bin 3092 -> 0 bytes .../octave-expansions.el | 78 - .../octave-expansions.elc | Bin 1688 -> 0 bytes .../python-el-expansions.el | 92 - .../python-el-expansions.elc | Bin 1998 -> 0 bytes .../python-el-fgallina-expansions.el | 193 - .../python-el-fgallina-expansions.elc | Bin 4361 -> 0 bytes .../python-mode-expansions.el | 147 - .../python-mode-expansions.elc | Bin 3291 -> 0 bytes .../ruby-mode-expansions.el | 204 - .../ruby-mode-expansions.elc | Bin 4698 -> 0 bytes .../sml-mode-expansions.el | 64 - .../sml-mode-expansions.elc | Bin 1043 -> 0 bytes .../subword-mode-expansions.el | 50 - .../subword-mode-expansions.elc | Bin 1041 -> 0 bytes .../text-mode-expansions.el | 65 - .../text-mode-expansions.elc | Bin 1344 -> 0 bytes .../the-org-mode-expansions.el | 87 - .../the-org-mode-expansions.elc | Bin 1797 -> 0 bytes .../web-mode-expansions.el | 31 - .../web-mode-expansions.elc | Bin 692 -> 0 bytes .../flycheck-autoloads.el | 240 - .../flycheck-buttercup.el | 157 - .../flycheck-20171214.1215/flycheck-ert.el | 459 - .../flycheck-20171214.1215/flycheck-ert.elc | Bin 20813 -> 0 bytes .../flycheck-20171214.1215/flycheck-pkg.el | 11 - .../elpa/flycheck-20171214.1215/flycheck.el | 10064 ------- .../elpa/flycheck-20171214.1215/flycheck.elc | Bin 434743 -> 0 bytes .../forest-blue-theme-autoloads.el | 19 - .../forest-blue-theme-pkg.el | 2 - .../forest-blue-theme.el | 267 - .../geiser-20171217.1353/bin/geiser-racket.sh | 24 - emacs/.emacs.d/elpa/geiser-20171217.1353/dir | 18 - .../geiser-20171217.1353/geiser-autodoc.el | 243 - .../geiser-20171217.1353/geiser-autodoc.elc | Bin 9745 -> 0 bytes .../geiser-20171217.1353/geiser-autoloads.el | 125 - .../elpa/geiser-20171217.1353/geiser-base.el | 85 - .../elpa/geiser-20171217.1353/geiser-base.elc | Bin 2640 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-chez.el | 136 - .../elpa/geiser-20171217.1353/geiser-chez.elc | Bin 4158 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-chibi.el | 137 - .../geiser-20171217.1353/geiser-chibi.elc | Bin 3990 -> 0 bytes .../geiser-20171217.1353/geiser-chicken.el | 332 - .../geiser-20171217.1353/geiser-chicken.elc | Bin 10408 -> 0 bytes .../geiser-20171217.1353/geiser-company.el | 137 - .../geiser-20171217.1353/geiser-company.elc | Bin 4303 -> 0 bytes .../geiser-20171217.1353/geiser-compile.el | 79 - .../geiser-20171217.1353/geiser-compile.elc | Bin 2622 -> 0 bytes .../geiser-20171217.1353/geiser-completion.el | 195 - .../geiser-completion.elc | Bin 8695 -> 0 bytes .../geiser-20171217.1353/geiser-connection.el | 269 - .../geiser-connection.elc | Bin 9885 -> 0 bytes .../geiser-20171217.1353/geiser-custom.el | 77 - .../geiser-20171217.1353/geiser-custom.elc | Bin 2166 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-debug.el | 217 - .../geiser-20171217.1353/geiser-debug.elc | Bin 10557 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-doc.el | 486 - .../elpa/geiser-20171217.1353/geiser-doc.elc | Bin 23389 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-edit.el | 271 - .../elpa/geiser-20171217.1353/geiser-edit.elc | Bin 10179 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-eval.el | 209 - .../elpa/geiser-20171217.1353/geiser-eval.elc | Bin 9735 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-guile.el | 437 - .../geiser-20171217.1353/geiser-guile.elc | Bin 14675 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-image.el | 121 - .../geiser-20171217.1353/geiser-image.elc | Bin 4270 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-impl.el | 342 - .../elpa/geiser-20171217.1353/geiser-impl.elc | Bin 13481 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-log.el | 108 - .../elpa/geiser-20171217.1353/geiser-log.elc | Bin 5732 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-menu.el | 143 - .../elpa/geiser-20171217.1353/geiser-menu.elc | Bin 4686 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-mit.el | 165 - .../elpa/geiser-20171217.1353/geiser-mit.elc | Bin 5004 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-mode.el | 457 - .../elpa/geiser-20171217.1353/geiser-mode.elc | Bin 20019 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-pkg.el | 4 - .../elpa/geiser-20171217.1353/geiser-popup.el | 70 - .../geiser-20171217.1353/geiser-popup.elc | Bin 2171 -> 0 bytes .../geiser-20171217.1353/geiser-racket.el | 457 - .../geiser-20171217.1353/geiser-racket.elc | Bin 15190 -> 0 bytes .../geiser-20171217.1353/geiser-reload.el | 87 - .../geiser-20171217.1353/geiser-reload.elc | Bin 2502 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-repl.el | 901 - .../elpa/geiser-20171217.1353/geiser-repl.elc | Bin 38347 -> 0 bytes .../geiser-20171217.1353/geiser-syntax.el | 507 - .../geiser-20171217.1353/geiser-syntax.elc | Bin 19279 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-table.el | 136 - .../geiser-20171217.1353/geiser-table.elc | Bin 3769 -> 0 bytes .../geiser-20171217.1353/geiser-version.el | 20 - .../geiser-20171217.1353/geiser-version.elc | Bin 665 -> 0 bytes .../elpa/geiser-20171217.1353/geiser-xref.el | 165 - .../elpa/geiser-20171217.1353/geiser-xref.elc | Bin 7660 -> 0 bytes .../elpa/geiser-20171217.1353/geiser.el | 168 - .../elpa/geiser-20171217.1353/geiser.elc | Bin 4240 -> 0 bytes .../elpa/geiser-20171217.1353/geiser.info | 1860 -- .../elpa/geiser-20171217.1353/macros.info | 7 - .../scheme/chez/geiser/geiser.ss | 135 - .../scheme/chez/geiser/test.ss | 90 - .../scheme/chibi/geiser/geiser.scm | 93 - .../scheme/chibi/geiser/geiser.sld | 9 - .../scheme/chicken/geiser/emacs.scm | 687 - .../scheme/guile/geiser/completion.scm | 27 - .../scheme/guile/geiser/doc.scm | 255 - .../scheme/guile/geiser/emacs.scm | 58 - .../scheme/guile/geiser/evaluation.scm | 144 - .../scheme/guile/geiser/modules.scm | 77 - .../scheme/guile/geiser/utils.scm | 52 - .../scheme/guile/geiser/xref.scm | 84 - .../scheme/mit/geiser/compile.scm | 9 - .../scheme/mit/geiser/emacs.scm | 281 - .../scheme/mit/geiser/geiser.pkg | 20 - .../scheme/mit/geiser/load.scm | 11 - .../scheme/racket/geiser/autodoc.rkt | 315 - .../scheme/racket/geiser/completions.rkt | 29 - .../scheme/racket/geiser/enter.rkt | 155 - .../scheme/racket/geiser/eval.rkt | 83 - .../scheme/racket/geiser/images.rkt | 66 - .../scheme/racket/geiser/locations.rkt | 58 - .../scheme/racket/geiser/main.rkt | 57 - .../scheme/racket/geiser/modules.rkt | 227 - .../scheme/racket/geiser/server.rkt | 16 - .../scheme/racket/geiser/startup.rkt | 15 - .../scheme/racket/geiser/user.rkt | 172 - .../scheme/racket/geiser/utils.rkt | 25 - .../elpa/geiser-20171217.1353/top.info | 23 - .../elpa/geiser-20171217.1353/web.info | 1784 -- .../.emacs.d/elpa/gh-20171120.1302/gh-api.el | 269 - .../.emacs.d/elpa/gh-20171120.1302/gh-api.elc | Bin 13771 -> 0 bytes .../.emacs.d/elpa/gh-20171120.1302/gh-auth.el | 176 - .../elpa/gh-20171120.1302/gh-auth.elc | Bin 8861 -> 0 bytes .../elpa/gh-20171120.1302/gh-autoloads.el | 258 - .../elpa/gh-20171120.1302/gh-cache.el | 138 - .../elpa/gh-20171120.1302/gh-cache.elc | Bin 5517 -> 0 bytes .../elpa/gh-20171120.1302/gh-comments.el | 71 - .../elpa/gh-20171120.1302/gh-comments.elc | Bin 2775 -> 0 bytes .../elpa/gh-20171120.1302/gh-common.el | 174 - .../elpa/gh-20171120.1302/gh-common.elc | Bin 12415 -> 0 bytes .../.emacs.d/elpa/gh-20171120.1302/gh-gist.el | 182 - .../elpa/gh-20171120.1302/gh-gist.elc | Bin 19346 -> 0 bytes .../gh-20171120.1302/gh-issue-comments.el | 72 - .../gh-20171120.1302/gh-issue-comments.elc | Bin 1310 -> 0 bytes .../elpa/gh-20171120.1302/gh-issues.el | 282 - .../elpa/gh-20171120.1302/gh-issues.elc | Bin 21683 -> 0 bytes .../elpa/gh-20171120.1302/gh-oauth.el | 97 - .../elpa/gh-20171120.1302/gh-oauth.elc | Bin 8556 -> 0 bytes .../.emacs.d/elpa/gh-20171120.1302/gh-orgs.el | 113 - .../elpa/gh-20171120.1302/gh-orgs.elc | Bin 10075 -> 0 bytes .../.emacs.d/elpa/gh-20171120.1302/gh-pkg.el | 10 - .../elpa/gh-20171120.1302/gh-profile.el | 103 - .../elpa/gh-20171120.1302/gh-profile.elc | Bin 2800 -> 0 bytes .../elpa/gh-20171120.1302/gh-pull-comments.el | 78 - .../gh-20171120.1302/gh-pull-comments.elc | Bin 1397 -> 0 bytes .../elpa/gh-20171120.1302/gh-pulls.el | 166 - .../elpa/gh-20171120.1302/gh-pulls.elc | Bin 13653 -> 0 bytes .../elpa/gh-20171120.1302/gh-repos.el | 350 - .../elpa/gh-20171120.1302/gh-repos.elc | Bin 19081 -> 0 bytes .../elpa/gh-20171120.1302/gh-search.el | 62 - .../elpa/gh-20171120.1302/gh-search.elc | Bin 4065 -> 0 bytes .../.emacs.d/elpa/gh-20171120.1302/gh-url.el | 195 - .../.emacs.d/elpa/gh-20171120.1302/gh-url.elc | Bin 8192 -> 0 bytes .../elpa/gh-20171120.1302/gh-users.el | 86 - .../elpa/gh-20171120.1302/gh-users.elc | Bin 5464 -> 0 bytes emacs/.emacs.d/elpa/gh-20171120.1302/gh.el | 39 - emacs/.emacs.d/elpa/gh-20171120.1302/gh.elc | Bin 544 -> 0 bytes .../elpa/gist-20171127.2006/gist-autoloads.el | 100 - .../elpa/gist-20171127.2006/gist-pkg.el | 2 - .../.emacs.d/elpa/gist-20171127.2006/gist.el | 789 - .../.emacs.d/elpa/gist-20171127.2006/gist.elc | Bin 26733 -> 0 bytes .../git-timemachine-autoloads.el | 32 - .../git-timemachine-pkg.el | 2 - .../git-timemachine.el | 370 - .../git-timemachine.elc | Bin 14343 -> 0 bytes .../gitconfig-mode-autoloads.el | 24 - .../gitconfig-mode-pkg.el | 2 - .../gitconfig-mode.el | 138 - .../gitconfig-mode.elc | Bin 5012 -> 0 bytes .../gitignore-mode-autoloads.el | 24 - .../gitignore-mode-pkg.el | 2 - .../gitignore-mode.el | 61 - .../gitignore-mode.elc | Bin 3288 -> 0 bytes emacs/.emacs.d/elpa/gnupg/pubring.kbx | Bin 1177 -> 0 bytes emacs/.emacs.d/elpa/gnupg/trustdb.gpg | Bin 1200 -> 0 bytes .../god-mode-autoloads.el | 42 - .../god-mode-20171221.106/god-mode-isearch.el | 43 - .../god-mode-isearch.elc | Bin 1051 -> 0 bytes .../god-mode-20171221.106/god-mode-pkg.el | 4 - .../elpa/god-mode-20171221.106/god-mode.el | 310 - .../elpa/god-mode-20171221.106/god-mode.elc | Bin 9244 -> 0 bytes .../grizzl-20160818.37/grizzl-autoloads.el | 69 - .../elpa/grizzl-20160818.37/grizzl-pkg.el | 2 - .../elpa/grizzl-20160818.37/grizzl.el | 404 - .../elpa/grizzl-20160818.37/grizzl.elc | Bin 12505 -> 0 bytes .../guru-mode-autoloads.el | 44 - .../guru-mode-20170730.31/guru-mode-pkg.el | 2 - .../elpa/guru-mode-20170730.31/guru-mode.el | 101 - .../elpa/guru-mode-20170730.31/guru-mode.elc | Bin 6897 -> 0 bytes .../elpa/ht-20171213.1334/ht-autoloads.el | 15 - .../.emacs.d/elpa/ht-20171213.1334/ht-pkg.el | 2 - emacs/.emacs.d/elpa/ht-20171213.1334/ht.el | 296 - emacs/.emacs.d/elpa/ht-20171213.1334/ht.elc | Bin 10076 -> 0 bytes .../imenu-anywhere-autoloads.el | 53 - .../imenu-anywhere-pkg.el | 2 - .../imenu-anywhere.el | 366 - .../imenu-anywhere.elc | Bin 11708 -> 0 bytes .../.emacs.d/elpa/ivy-20180104.1212/colir.el | 122 - .../.emacs.d/elpa/ivy-20180104.1212/colir.elc | Bin 3377 -> 0 bytes emacs/.emacs.d/elpa/ivy-20180104.1212/dir | 18 - .../elpa/ivy-20180104.1212/ivy-autoloads.el | 135 - .../elpa/ivy-20180104.1212/ivy-help.org | 138 - .../elpa/ivy-20180104.1212/ivy-overlay.el | 132 - .../elpa/ivy-20180104.1212/ivy-overlay.elc | Bin 3196 -> 0 bytes .../elpa/ivy-20180104.1212/ivy-pkg.el | 7 - emacs/.emacs.d/elpa/ivy-20180104.1212/ivy.el | 4152 --- emacs/.emacs.d/elpa/ivy-20180104.1212/ivy.elc | Bin 152782 -> 0 bytes .../.emacs.d/elpa/ivy-20180104.1212/ivy.info | 1864 -- .../js2-imenu-extras.el | 349 - .../js2-imenu-extras.elc | Bin 15212 -> 0 bytes .../js2-mode-autoloads.el | 68 - .../js2-mode-20171224.1833/js2-mode-pkg.el | 8 - .../elpa/js2-mode-20171224.1833/js2-mode.el | 12828 --------- .../elpa/js2-mode-20171224.1833/js2-mode.elc | Bin 1134181 -> 0 bytes .../js2-mode-20171224.1833/js2-old-indent.el | 712 - .../js2-mode-20171224.1833/js2-old-indent.elc | Bin 15906 -> 0 bytes .../json-mode-autoloads.el | 58 - .../json-mode-20170719.2205/json-mode-pkg.el | 2 - .../elpa/json-mode-20170719.2205/json-mode.el | 234 - .../json-mode-20170719.2205/json-mode.elc | Bin 8823 -> 0 bytes .../json-reformat-autoloads.el | 26 - .../json-reformat-pkg.el | 2 - .../json-reformat.el | 221 - .../json-reformat.elc | Bin 5126 -> 0 bytes .../json-snatcher-autoloads.el | 22 - .../json-snatcher-pkg.el | 2 - .../json-snatcher.el | 351 - .../json-snatcher.elc | Bin 8488 -> 0 bytes emacs/.emacs.d/elpa/let-alist-1.0.5.signed | 1 - .../let-alist-1.0.5/let-alist-autoloads.el | 50 - .../elpa/let-alist-1.0.5/let-alist-pkg.el | 2 - .../elpa/let-alist-1.0.5/let-alist.el | 182 - .../elpa/let-alist-1.0.5/let-alist.elc | Bin 3057 -> 0 bytes .../logito-20120225.1255/logito-autoloads.el | 15 - .../elpa/logito-20120225.1255/logito-pkg.el | 2 - .../elpa/logito-20120225.1255/logito.el | 98 - .../elpa/logito-20120225.1255/logito.elc | Bin 6230 -> 0 bytes .../elpa/magit-popup-20171217.1235/dir | 18 - .../magit-popup-autoloads.el | 16 - .../magit-popup-pkg.el | 9 - .../magit-popup-20171217.1235/magit-popup.el | 1329 - .../magit-popup-20171217.1235/magit-popup.elc | Bin 55931 -> 0 bytes .../magit-popup.info | 708 - .../makey-20131231.630/makey-autoloads.el | 21 - .../elpa/makey-20131231.630/makey-pkg.el | 2 - .../.emacs.d/elpa/makey-20131231.630/makey.el | 556 - .../elpa/makey-20131231.630/makey.elc | Bin 16842 -> 0 bytes .../marshal-20180102.201/marshal-autoloads.el | 34 - .../elpa/marshal-20180102.201/marshal-pkg.el | 2 - .../elpa/marshal-20180102.201/marshal.el | 523 - .../elpa/marshal-20180102.201/marshal.elc | Bin 17196 -> 0 bytes .../move-text-autoloads.el | 82 - .../move-text-20170908.2030/move-text-pkg.el | 2 - .../elpa/move-text-20170908.2030/move-text.el | 196 - .../move-text-20170908.2030/move-text.elc | Bin 4296 -> 0 bytes .../operate-on-number-autoloads.el | 52 - .../operate-on-number-pkg.el | 2 - .../operate-on-number.el | 402 - .../operate-on-number.elc | Bin 8803 -> 0 bytes .../elpa/ov-20150311.2228/ov-autoloads.el | 33 - .../.emacs.d/elpa/ov-20150311.2228/ov-pkg.el | 2 - emacs/.emacs.d/elpa/ov-20150311.2228/ov.el | 683 - emacs/.emacs.d/elpa/ov-20150311.2228/ov.elc | Bin 18289 -> 0 bytes .../ox-twbs-autoloads.el | 118 - .../elpa/ox-twbs-20161103.1316/ox-twbs-pkg.el | 2 - .../elpa/ox-twbs-20161103.1316/ox-twbs.el | 3221 --- .../elpa/ox-twbs-20161103.1316/ox-twbs.elc | Bin 104105 -> 0 bytes .../pcache-20170105.1414/pcache-autoloads.el | 15 - .../elpa/pcache-20170105.1414/pcache-pkg.el | 2 - .../elpa/pcache-20170105.1414/pcache.el | 249 - .../elpa/pcache-20170105.1414/pcache.elc | Bin 8469 -> 0 bytes .../pkg-info-autoloads.el | 122 - .../pkg-info-20150517.443/pkg-info-pkg.el | 2 - .../elpa/pkg-info-20150517.443/pkg-info.el | 331 - .../elpa/pkg-info-20150517.443/pkg-info.elc | Bin 9910 -> 0 bytes .../rainbow-delimiters-autoloads.el | 32 - .../rainbow-delimiters-pkg.el | 2 - .../rainbow-delimiters.el | 300 - .../rainbow-delimiters.elc | Bin 9310 -> 0 bytes emacs/.emacs.d/elpa/rainbow-mode-0.13.signed | 1 - .../rainbow-mode-autoloads.el | 23 - .../rainbow-mode-0.13/rainbow-mode-pkg.el | 2 - .../elpa/rainbow-mode-0.13/rainbow-mode.el | 1258 - .../elpa/rainbow-mode-0.13/rainbow-mode.elc | Bin 33889 -> 0 bytes .../rich-minority-autoloads.el | 41 - .../rich-minority-pkg.el | 2 - .../rich-minority.el | 300 - .../rich-minority.elc | Bin 9400 -> 0 bytes .../elpa/s-20171102.227/s-autoloads.el | 15 - emacs/.emacs.d/elpa/s-20171102.227/s-pkg.el | 2 - emacs/.emacs.d/elpa/s-20171102.227/s.el | 709 - emacs/.emacs.d/elpa/s-20171102.227/s.elc | Bin 25961 -> 0 bytes emacs/.emacs.d/elpa/seq-2.20.signed | 1 - emacs/.emacs.d/elpa/seq-2.20/ChangeLog | 195 - emacs/.emacs.d/elpa/seq-2.20/seq-24.el | 496 - emacs/.emacs.d/elpa/seq-2.20/seq-24.elc | Bin 17415 -> 0 bytes emacs/.emacs.d/elpa/seq-2.20/seq-25.el | 530 - emacs/.emacs.d/elpa/seq-2.20/seq-25.elc | Bin 22019 -> 0 bytes emacs/.emacs.d/elpa/seq-2.20/seq-autoloads.el | 16 - emacs/.emacs.d/elpa/seq-2.20/seq-pkg.el | 2 - emacs/.emacs.d/elpa/seq-2.20/seq-pkg.elc | Bin 543 -> 0 bytes emacs/.emacs.d/elpa/seq-2.20/seq.el | 48 - emacs/.emacs.d/elpa/seq-2.20/seq.elc | Bin 548 -> 0 bytes .../.emacs.d/elpa/seq-2.20/tests/seq-tests.el | 382 - .../elpa/seq-2.20/tests/seq-tests.elc | Bin 147692 -> 0 bytes .../smart-mode-line-autoloads.el | 58 - .../smart-mode-line-dark-theme.el | 49 - .../smart-mode-line-dark-theme.elc | Bin 1516 -> 0 bytes .../smart-mode-line-light-theme.el | 47 - .../smart-mode-line-light-theme.elc | Bin 1371 -> 0 bytes .../smart-mode-line-pkg.el | 8 - .../smart-mode-line-respectful-theme.el | 49 - .../smart-mode-line-respectful-theme.elc | Bin 1260 -> 0 bytes .../smart-mode-line.el | 1746 -- .../smart-mode-line.elc | Bin 49431 -> 0 bytes .../smartparens-autoloads.el | 202 - .../smartparens-clojure.el | 56 - .../smartparens-clojure.elc | Bin 965 -> 0 bytes .../smartparens-config.el | 129 - .../smartparens-config.elc | Bin 3381 -> 0 bytes .../smartparens-elixir.el | 134 - .../smartparens-elixir.elc | Bin 3227 -> 0 bytes .../smartparens-ess.el | 224 - .../smartparens-ess.elc | Bin 4779 -> 0 bytes .../smartparens-haskell.el | 113 - .../smartparens-haskell.elc | Bin 2730 -> 0 bytes .../smartparens-html.el | 170 - .../smartparens-html.elc | Bin 3501 -> 0 bytes .../smartparens-javascript.el | 55 - .../smartparens-javascript.elc | Bin 678 -> 0 bytes .../smartparens-latex.el | 185 - .../smartparens-latex.elc | Bin 4736 -> 0 bytes .../smartparens-lua.el | 90 - .../smartparens-lua.elc | Bin 1332 -> 0 bytes .../smartparens-markdown.el | 86 - .../smartparens-ml.el | 57 - .../smartparens-ml.elc | Bin 631 -> 0 bytes .../smartparens-org.el | 65 - .../smartparens-org.elc | Bin 1264 -> 0 bytes .../smartparens-pkg.el | 6 - .../smartparens-python.el | 92 - .../smartparens-python.elc | Bin 2051 -> 0 bytes .../smartparens-racket.el | 55 - .../smartparens-racket.elc | Bin 627 -> 0 bytes .../smartparens-ruby.el | 407 - .../smartparens-ruby.elc | Bin 10385 -> 0 bytes .../smartparens-rust.el | 138 - .../smartparens-rust.elc | Bin 2229 -> 0 bytes .../smartparens-scala.el | 80 - .../smartparens-scala.elc | Bin 1307 -> 0 bytes .../smartparens-text.el | 65 - .../smartparens-text.elc | Bin 935 -> 0 bytes .../smartparens-20171201.242/smartparens.el | 9400 ------- .../smartparens-20171201.242/smartparens.elc | Bin 328692 -> 0 bytes .../smartrep-autoloads.el | 15 - .../smartrep-20150508.1930/smartrep-pkg.el | 2 - .../elpa/smartrep-20150508.1930/smartrep.el | 195 - .../elpa/smartrep-20150508.1930/smartrep.elc | Bin 4878 -> 0 bytes .../swiper-20180102.1035/swiper-autoloads.el | 32 - .../elpa/swiper-20180102.1035/swiper-pkg.el | 2 - .../elpa/swiper-20180102.1035/swiper.el | 988 - .../elpa/swiper-20180102.1035/swiper.elc | Bin 28477 -> 0 bytes .../undo-tree-autoloads.el | 59 - .../undo-tree-20170706.246/undo-tree-pkg.el | 2 - .../elpa/undo-tree-20170706.246/undo-tree.el | 4433 --- .../elpa/undo-tree-20170706.246/undo-tree.elc | Bin 123766 -> 0 bytes .../volatile-highlights-autoloads.el | 32 - .../volatile-highlights-pkg.el | 2 - .../volatile-highlights.el | 872 - .../volatile-highlights.elc | Bin 21743 -> 0 bytes .../elpa/with-editor-20171217.1239/dir | 18 - .../with-editor-autoloads.el | 16 - .../with-editor-pkg.el | 8 - .../with-editor-20171217.1239/with-editor.el | 814 - .../with-editor-20171217.1239/with-editor.elc | Bin 30110 -> 0 bytes .../with-editor.info | 331 - .../zenburn-theme-autoloads.el | 19 - .../zenburn-theme-pkg.el | 2 - .../zenburn-theme.el | 1461 - .../zop-to-char-autoloads.el | 36 - .../zop-to-char-pkg.el | 2 - .../zop-to-char-20160212.754/zop-to-char.el | 285 - .../zop-to-char-20160212.754/zop-to-char.elc | Bin 7819 -> 0 bytes emacs/.emacs.d/init.el | 148 - emacs/.emacs.d/modules/doc/README.md | 30 - emacs/.emacs.d/modules/doc/prelude-erc.md | 50 - emacs/.emacs.d/modules/doc/prelude-python.md | 18 - emacs/.emacs.d/modules/prelude-c.el | 59 - emacs/.emacs.d/modules/prelude-clojure.el | 66 - emacs/.emacs.d/modules/prelude-coffee.el | 60 - emacs/.emacs.d/modules/prelude-common-lisp.el | 85 - emacs/.emacs.d/modules/prelude-company.el | 48 - emacs/.emacs.d/modules/prelude-css.el | 51 - emacs/.emacs.d/modules/prelude-elixir.el | 40 - emacs/.emacs.d/modules/prelude-emacs-lisp.el | 120 - emacs/.emacs.d/modules/prelude-erc.el | 162 - emacs/.emacs.d/modules/prelude-erlang.el | 60 - emacs/.emacs.d/modules/prelude-evil.el | 152 - emacs/.emacs.d/modules/prelude-go.el | 84 - emacs/.emacs.d/modules/prelude-haskell.el | 53 - .../modules/prelude-helm-everywhere.el | 72 - emacs/.emacs.d/modules/prelude-helm.el | 67 - emacs/.emacs.d/modules/prelude-ido.el | 64 - emacs/.emacs.d/modules/prelude-ivy.el | 70 - emacs/.emacs.d/modules/prelude-js.el | 58 - emacs/.emacs.d/modules/prelude-key-chord.el | 60 - emacs/.emacs.d/modules/prelude-latex.el | 93 - emacs/.emacs.d/modules/prelude-lisp.el | 64 - emacs/.emacs.d/modules/prelude-mediawiki.el | 47 - emacs/.emacs.d/modules/prelude-ocaml.el | 92 - emacs/.emacs.d/modules/prelude-org.el | 58 - emacs/.emacs.d/modules/prelude-perl.el | 70 - emacs/.emacs.d/modules/prelude-programming.el | 91 - emacs/.emacs.d/modules/prelude-python.el | 111 - emacs/.emacs.d/modules/prelude-ruby.el | 78 - emacs/.emacs.d/modules/prelude-rust.el | 66 - emacs/.emacs.d/modules/prelude-scala.el | 48 - emacs/.emacs.d/modules/prelude-scheme.el | 50 - emacs/.emacs.d/modules/prelude-scss.el | 49 - emacs/.emacs.d/modules/prelude-shell.el | 51 - emacs/.emacs.d/modules/prelude-web.el | 73 - emacs/.emacs.d/modules/prelude-xml.el | 50 - emacs/.emacs.d/modules/prelude-yaml.el | 44 - emacs/.emacs.d/personal/.dir-locals.el | 5 - emacs/.emacs.d/personal/.gitkeep | 0 emacs/.emacs.d/personal/preload/.gitkeep | 0 emacs/.emacs.d/prelude-modules.el | 40 - emacs/.emacs.d/projectile-bookmarks.eld | 1 - emacs/.emacs.d/sample/prelude-modules.el | 40 - .../sample/prelude-pinned-packages.el | 133 - emacs/.emacs.d/themes/.gitkeep | 0 emacs/.emacs.d/utils/installer.sh | 246 - emacs/.emacs.d/vendor/.gitkeep | 0 1013 files changed, 253698 deletions(-) delete mode 100644 emacs/.emacs.d/.gitignore delete mode 100644 emacs/.emacs.d/.projectile delete mode 100644 emacs/.emacs.d/CONTRIBUTING.md delete mode 100644 emacs/.emacs.d/README.md delete mode 100644 emacs/.emacs.d/core/prelude-core.el delete mode 100644 emacs/.emacs.d/core/prelude-custom.el delete mode 100644 emacs/.emacs.d/core/prelude-editor.el delete mode 100644 emacs/.emacs.d/core/prelude-global-keybindings.el delete mode 100644 emacs/.emacs.d/core/prelude-mode.el delete mode 100644 emacs/.emacs.d/core/prelude-osx.el delete mode 100644 emacs/.emacs.d/core/prelude-packages.el delete mode 100644 emacs/.emacs.d/core/prelude-ui.el delete mode 100644 emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-pkg.el delete mode 100644 emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window.el delete mode 100644 emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window.elc delete mode 100644 emacs/.emacs.d/elpa/anzu-20161017.907/anzu-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/anzu-20161017.907/anzu-pkg.el delete mode 100644 emacs/.emacs.d/elpa/anzu-20161017.907/anzu.el delete mode 100644 emacs/.emacs.d/elpa/anzu-20161017.907/anzu.elc delete mode 100644 emacs/.emacs.d/elpa/archives/gnu/archive-contents delete mode 100644 emacs/.emacs.d/elpa/archives/gnu/archive-contents.signed delete mode 100644 emacs/.emacs.d/elpa/archives/melpa/archive-contents delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/async-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/async-bytecomp.el delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/async-bytecomp.elc delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/async-pkg.el delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/async.el delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/async.elc delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/dired-async.el delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/dired-async.elc delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/smtpmail-async.el delete mode 100644 emacs/.emacs.d/elpa/async-20180103.2312/smtpmail-async.elc delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0.signed delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/.elpaignore delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/.gitignore delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/COPYING delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/ChangeLog-preview delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/ChangeLog-preview.1 delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/ChangeLog.1 delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/GNUmakefile delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/Makefile.in delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/README delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/README.GIT delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/RELEASE delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/aclocal.m4 delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/auctex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/auctex.el.in delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/auctex.info delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/auctex.spec delete mode 100755 emacs/.emacs.d/elpa/auctex-12.1.0/autogen.sh delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/bib-cite.el delete mode 100755 emacs/.emacs.d/elpa/auctex-12.1.0/build-aux/gitlog-to-auctexlog delete mode 100755 emacs/.emacs.d/elpa/auctex-12.1.0/build-aux/gitlog-to-changelog delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/circ.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/configure.ac delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/context-en.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/context-nl.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/context.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/dir delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/.gitignore delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/Makefile.in delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/auctex.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/changes.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/copying.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/faq.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/fdl.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/history.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/install.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/intro.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/macros.texi delete mode 100755 emacs/.emacs.d/elpa/auctex-12.1.0/doc/preview-dtxdoc.pl delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/preview-faq.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/preview-latex.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/preview-problems.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/preview-readme.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/preview-todo.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/quickstart.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/tex-ref.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/todo.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/doc/wininstall.texi delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/etc/auctex-logo.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/font-latex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/amstex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/bibtex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/dropdown.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/dvipdf.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/dvips.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/error.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/exec.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execbibtex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execdvips.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execerror.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execpdftex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/exectex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execviewdvi.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execviewpdf.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/execviewps.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/gv.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/jumpdvi.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/ltx-symb-turn-off.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/ltx-symb-turn-on.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/pdftex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prverr16.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prverr20.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prverr24.xbm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prverr24.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex-cap-up.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex12.xbm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex12.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex16.xbm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex16.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex20.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex24.xbm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvtex24.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvwrk12.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvwrk14.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvwrk16.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvwrk20.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvwrk24.xbm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/prvwrk24.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/pspdf.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/sep.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/spell.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/tex.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/view.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/viewdvi.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/viewpdf.xpm delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/images/viewps.xpm delete mode 100755 emacs/.emacs.d/elpa/auctex-12.1.0/install-sh delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/latex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/latex/.gitignore delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/latex/Makefile.in delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/latex/README delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/latex/bootstrap.ins delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/latex/preview.dtx delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/lpath.el delete mode 100755 emacs/.emacs.d/elpa/auctex-12.1.0/mkinstalldirs delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/multi-prompt.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/plain-tex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/preview-latex.info delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/preview-latex.spec delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/prv-emacs.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/prv-install.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/prv-xemacs.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/.nosearch delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/Alegreya.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/AlegreyaSans.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/AnonymousPro.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/CJK.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/CJKutf8.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/FiraMono.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/FiraSans.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/MinionPro.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/MyriadPro.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/XCharter.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/acro.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/acronym.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/afterpage.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/alltt.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/alphanum.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsart.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsbook.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsbsy.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsfonts.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsmath.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsopn.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amssymb.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amstex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amstext.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/amsthm.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/arabxetex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/array.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/article.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/attachfile.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/australian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/austrian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/babel.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/baskervaldx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/beamer.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/biblatex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bicaption.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bidi.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bidibeamer.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bigdelim.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bigstrut.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bm.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/book.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/booktabs.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/breqn.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/bulgarian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/canadian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/captcont.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/caption.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/cleveref.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/color.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/colortbl.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/commath.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/comment.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/csquotes.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/currvita.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/czech.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/danish.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/dcolumn.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/dinbrief.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/dk-bib.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/dk.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/doc.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/dutch.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/emp.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/empheq.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/english.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/enumitem.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/environ.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/epigraph.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/epsf.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/erewhon.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/eso-pic.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/everysel.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/exam.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/exercise.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/expl3.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fancyhdr.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fancynum.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fancyref.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fancyvrb.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fbb.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/filecontents.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/flashcards.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/floatrow.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/foils.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fontaxes.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fontenc.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fontspec.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/footmisc.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/framed.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/francais.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/french.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/frenchb.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/fvextra.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/geometry.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/german.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/gloss-italian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/graphics.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/graphicx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/harvard.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/hologo.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/hyperref.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/icelandic.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ifluatex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/imakeidx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/index.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/inputenc.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/italian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/j-article.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/j-book.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/j-report.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jarticle.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jbook.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jreport.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jsarticle.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jsbook.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jsreport.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jura.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/jurabib.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/kantlipsum.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/kpfonts.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/latexinfo.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/letter.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/lettrine.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/lipsum.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/listings.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/longtable.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/lscape.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ltablex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ltx-base.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ltxdoc.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ltxtable.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/luacode.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/luatextra.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/makeidx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mathtools.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mdframed.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mdsymbol.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mdwlist.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/memoir.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/menukeys.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/metalogo.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mflogo.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/minted.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mn2e.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/mnras.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/moodle.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/multicol.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/multido.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/multind.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/multirow.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/nameref.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/natbib.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/naustrian.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newfloat.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newpxmath.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newpxtext.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newtxmath.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newtxsf.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newtxtext.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newtxttt.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/newzealand.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ngerman.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/nicefrac.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/nomencl.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ntheorem.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/paracol.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/paralist.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pdflscape.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pdfpages.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pdfsync.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/placeins.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/plext.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/plfonts.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/plhb.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/polish.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/polski.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/polyglossia.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/preview.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/prosper.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/psfig.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pst-grad.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pst-node.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pst-plot.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pst-slpe.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/pstricks.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ragged2e.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/relsize.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/report.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ruby.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/scrartcl.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/scrbase.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/scrbook.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/scrlttr2.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/scrpage2.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/scrreprt.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/setspace.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/shortvrb.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/siunitx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/slides.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/slovak.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/sourcecodepro.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/splitidx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/subcaption.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/subfigure.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/subfiles.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/swedish.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tabularx.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tabulary.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tarticle.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tbook.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tcolorbox.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tcolorboxlib-raster.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/textcomp.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/textpos.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/theorem.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/tikz.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/titleps.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/titlesec.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/titletoc.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/transparent.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/treport.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/ulem.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/unicode-math.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/units.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/url.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/varioref.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/verbatim.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/virtex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/vwcol.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/wrapfig.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/xcolor.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/xltabular.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/xparse.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/xspace.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/style/zlmtt.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/context/context-indentation-in.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/context/context-indentation-out.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/context/context-test.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/japanese/error-parsing.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/japanese/parse-timing-test.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/japanese/parse-timing.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/japanese/preview-error-test.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/japanese/preview-error-test2.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/japanese/prv-dif-code.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/fontification-general.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/fontification-verb-macros.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/latex-filling-in.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/latex-filling-out.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/latex-test.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/math-indent-in.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/math-indent-out.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/tabular-count-ampersands-in.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/tabular-count-ampersands-out.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/tabular-in.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/latex/tabular-out.tex delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/make-test-deps.emacs-lisp delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/tex/command-expansion.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/tex/compilation-log.txt delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/tex/error-parsing.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/tex/path-expansion.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tests/tex/utility.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-bar.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-buf.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-fold.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-font.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-info.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-ispell.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-jp.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-mik.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-site.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-site.el.in delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-style.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex-wizard.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/tex.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/texmathp.el delete mode 100644 emacs/.emacs.d/elpa/auctex-12.1.0/toolbar-x.el delete mode 100644 emacs/.emacs.d/elpa/avy-20171230.220/avy-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/avy-20171230.220/avy-pkg.el delete mode 100644 emacs/.emacs.d/elpa/avy-20171230.220/avy.el delete mode 100644 emacs/.emacs.d/elpa/avy-20171230.220/avy.elc delete mode 100644 emacs/.emacs.d/elpa/beacon-20171017.1540/beacon-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/beacon-20171017.1540/beacon-pkg.el delete mode 100644 emacs/.emacs.d/elpa/beacon-20171017.1540/beacon.el delete mode 100644 emacs/.emacs.d/elpa/beacon-20171017.1540/beacon.elc delete mode 100644 emacs/.emacs.d/elpa/browse-kill-ring-20171219.1108/browse-kill-ring-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/browse-kill-ring-20171219.1108/browse-kill-ring-pkg.el delete mode 100644 emacs/.emacs.d/elpa/browse-kill-ring-20171219.1108/browse-kill-ring.el delete mode 100644 emacs/.emacs.d/elpa/browse-kill-ring-20171219.1108/browse-kill-ring.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-abbrev.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-abbrev.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-bbdb.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-bbdb.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-capf.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-capf.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-clang.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-clang.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-cmake.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-cmake.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-css.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-css.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-dabbrev-code.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-dabbrev-code.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-dabbrev.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-dabbrev.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-eclim.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-eclim.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-elisp.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-elisp.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-etags.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-etags.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-files.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-files.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-gtags.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-gtags.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-ispell.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-ispell.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-keywords.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-keywords.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-nxml.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-nxml.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-oddmuse.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-oddmuse.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-pkg.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-semantic.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-semantic.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-template.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-template.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-tempo.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-tempo.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-tng.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-tng.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-xcode.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-xcode.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-yasnippet.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company-yasnippet.elc delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company.el delete mode 100644 emacs/.emacs.d/elpa/company-20180101.1101/company.elc delete mode 100644 emacs/.emacs.d/elpa/crux-20171230.1100/crux-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/crux-20171230.1100/crux-pkg.el delete mode 100644 emacs/.emacs.d/elpa/crux-20171230.1100/crux.el delete mode 100644 emacs/.emacs.d/elpa/crux-20171230.1100/crux.elc delete mode 100644 emacs/.emacs.d/elpa/dash-20180107.818/dash-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/dash-20180107.818/dash-pkg.el delete mode 100644 emacs/.emacs.d/elpa/dash-20180107.818/dash.el delete mode 100644 emacs/.emacs.d/elpa/dash-20180107.818/dash.elc delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-amend.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-amend.elc delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-dired.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-dired.elc delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-flydiff.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-flydiff.elc delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-margin.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-margin.elc delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl-pkg.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl.el delete mode 100644 emacs/.emacs.d/elpa/diff-hl-20170709.2000/diff-hl.elc delete mode 100644 emacs/.emacs.d/elpa/diminish-20170419.1036/diminish-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/diminish-20170419.1036/diminish-pkg.el delete mode 100644 emacs/.emacs.d/elpa/diminish-20170419.1036/diminish.el delete mode 100644 emacs/.emacs.d/elpa/diminish-20170419.1036/diminish.elc delete mode 100644 emacs/.emacs.d/elpa/discover-my-major-20170113.2306/discover-my-major-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/discover-my-major-20170113.2306/discover-my-major-pkg.el delete mode 100644 emacs/.emacs.d/elpa/discover-my-major-20170113.2306/discover-my-major.el delete mode 100644 emacs/.emacs.d/elpa/discover-my-major-20170113.2306/discover-my-major.elc delete mode 100644 emacs/.emacs.d/elpa/easy-kill-20151030.2229/easy-kill-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/easy-kill-20151030.2229/easy-kill-pkg.el delete mode 100644 emacs/.emacs.d/elpa/easy-kill-20151030.2229/easy-kill.el delete mode 100644 emacs/.emacs.d/elpa/easy-kill-20151030.2229/easy-kill.elc delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-conf-mode.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-conf-mode.elc delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-core-handle.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-core-handle.elc delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-core.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-core.elc delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-fnmatch.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-fnmatch.elc delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig-pkg.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig.el delete mode 100644 emacs/.emacs.d/elpa/editorconfig-20171208.2036/editorconfig.elc delete mode 100644 emacs/.emacs.d/elpa/elisp-slime-nav-20160128.1109/elisp-slime-nav-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/elisp-slime-nav-20160128.1109/elisp-slime-nav-pkg.el delete mode 100644 emacs/.emacs.d/elpa/elisp-slime-nav-20160128.1109/elisp-slime-nav.el delete mode 100644 emacs/.emacs.d/elpa/elisp-slime-nav-20160128.1109/elisp-slime-nav.elc delete mode 100644 emacs/.emacs.d/elpa/epl-20150517.433/epl-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/epl-20150517.433/epl-pkg.el delete mode 100644 emacs/.emacs.d/elpa/epl-20150517.433/epl.el delete mode 100644 emacs/.emacs.d/elpa/epl-20150517.433/epl.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/cc-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/cc-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/clojure-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/clojure-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/cperl-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/cperl-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/css-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/css-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/enh-ruby-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/enh-ruby-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/er-basic-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/er-basic-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/erlang-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/erlang-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region-core.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region-core.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region-custom.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region-custom.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region-pkg.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/expand-region.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/feature-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/feature-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/html-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/html-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/js-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/js-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/js2-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/js2-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/jsp-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/jsp-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/latex-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/latex-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/nxml-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/nxml-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/octave-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/octave-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/python-el-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/python-el-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/python-el-fgallina-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/python-el-fgallina-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/python-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/python-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/ruby-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/ruby-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/sml-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/sml-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/subword-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/subword-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/text-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/text-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/the-org-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/the-org-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/web-mode-expansions.el delete mode 100644 emacs/.emacs.d/elpa/expand-region-20171217.2125/web-mode-expansions.elc delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck-buttercup.el delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck-ert.el delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck-ert.elc delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck-pkg.el delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck.el delete mode 100644 emacs/.emacs.d/elpa/flycheck-20171214.1215/flycheck.elc delete mode 100644 emacs/.emacs.d/elpa/forest-blue-theme-20160627.142/forest-blue-theme-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/forest-blue-theme-20160627.142/forest-blue-theme-pkg.el delete mode 100644 emacs/.emacs.d/elpa/forest-blue-theme-20160627.142/forest-blue-theme.el delete mode 100755 emacs/.emacs.d/elpa/geiser-20171217.1353/bin/geiser-racket.sh delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/dir delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-autodoc.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-autodoc.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-base.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-base.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-chez.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-chez.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-chibi.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-chibi.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-chicken.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-chicken.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-company.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-company.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-compile.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-compile.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-completion.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-completion.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-connection.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-connection.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-custom.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-custom.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-debug.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-debug.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-doc.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-doc.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-edit.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-edit.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-eval.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-eval.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-guile.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-guile.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-image.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-image.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-impl.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-impl.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-log.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-log.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-menu.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-menu.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-mit.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-mit.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-mode.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-mode.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-pkg.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-popup.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-popup.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-racket.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-racket.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-reload.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-reload.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-repl.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-repl.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-syntax.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-syntax.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-table.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-table.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-version.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-version.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-xref.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser-xref.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser.el delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser.elc delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/geiser.info delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/macros.info delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/chez/geiser/geiser.ss delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/chez/geiser/test.ss delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/chibi/geiser/geiser.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/chibi/geiser/geiser.sld delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/chicken/geiser/emacs.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/completion.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/doc.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/emacs.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/evaluation.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/modules.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/utils.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/guile/geiser/xref.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/mit/geiser/compile.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/mit/geiser/emacs.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/mit/geiser/geiser.pkg delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/mit/geiser/load.scm delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/autodoc.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/completions.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/enter.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/eval.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/images.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/locations.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/main.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/modules.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/server.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/startup.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/user.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/scheme/racket/geiser/utils.rkt delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/top.info delete mode 100644 emacs/.emacs.d/elpa/geiser-20171217.1353/web.info delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-api.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-api.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-auth.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-auth.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-cache.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-cache.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-comments.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-comments.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-common.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-common.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-gist.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-gist.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-issue-comments.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-issue-comments.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-issues.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-issues.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-oauth.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-oauth.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-orgs.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-orgs.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-pkg.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-profile.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-profile.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-pull-comments.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-pull-comments.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-pulls.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-pulls.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-repos.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-repos.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-search.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-search.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-url.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-url.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-users.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh-users.elc delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh.el delete mode 100644 emacs/.emacs.d/elpa/gh-20171120.1302/gh.elc delete mode 100644 emacs/.emacs.d/elpa/gist-20171127.2006/gist-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/gist-20171127.2006/gist-pkg.el delete mode 100644 emacs/.emacs.d/elpa/gist-20171127.2006/gist.el delete mode 100644 emacs/.emacs.d/elpa/gist-20171127.2006/gist.elc delete mode 100644 emacs/.emacs.d/elpa/git-timemachine-20170325.220/git-timemachine-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/git-timemachine-20170325.220/git-timemachine-pkg.el delete mode 100644 emacs/.emacs.d/elpa/git-timemachine-20170325.220/git-timemachine.el delete mode 100644 emacs/.emacs.d/elpa/git-timemachine-20170325.220/git-timemachine.elc delete mode 100644 emacs/.emacs.d/elpa/gitconfig-mode-20170627.854/gitconfig-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/gitconfig-mode-20170627.854/gitconfig-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/gitconfig-mode-20170627.854/gitconfig-mode.el delete mode 100644 emacs/.emacs.d/elpa/gitconfig-mode-20170627.854/gitconfig-mode.elc delete mode 100644 emacs/.emacs.d/elpa/gitignore-mode-20160319.302/gitignore-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/gitignore-mode-20160319.302/gitignore-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/gitignore-mode-20160319.302/gitignore-mode.el delete mode 100644 emacs/.emacs.d/elpa/gitignore-mode-20160319.302/gitignore-mode.elc delete mode 100644 emacs/.emacs.d/elpa/gnupg/pubring.kbx delete mode 100644 emacs/.emacs.d/elpa/gnupg/trustdb.gpg delete mode 100644 emacs/.emacs.d/elpa/god-mode-20171221.106/god-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/god-mode-20171221.106/god-mode-isearch.el delete mode 100644 emacs/.emacs.d/elpa/god-mode-20171221.106/god-mode-isearch.elc delete mode 100644 emacs/.emacs.d/elpa/god-mode-20171221.106/god-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/god-mode-20171221.106/god-mode.el delete mode 100644 emacs/.emacs.d/elpa/god-mode-20171221.106/god-mode.elc delete mode 100644 emacs/.emacs.d/elpa/grizzl-20160818.37/grizzl-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/grizzl-20160818.37/grizzl-pkg.el delete mode 100644 emacs/.emacs.d/elpa/grizzl-20160818.37/grizzl.el delete mode 100644 emacs/.emacs.d/elpa/grizzl-20160818.37/grizzl.elc delete mode 100644 emacs/.emacs.d/elpa/guru-mode-20170730.31/guru-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/guru-mode-20170730.31/guru-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/guru-mode-20170730.31/guru-mode.el delete mode 100644 emacs/.emacs.d/elpa/guru-mode-20170730.31/guru-mode.elc delete mode 100644 emacs/.emacs.d/elpa/ht-20171213.1334/ht-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/ht-20171213.1334/ht-pkg.el delete mode 100644 emacs/.emacs.d/elpa/ht-20171213.1334/ht.el delete mode 100644 emacs/.emacs.d/elpa/ht-20171213.1334/ht.elc delete mode 100644 emacs/.emacs.d/elpa/imenu-anywhere-20170805.1155/imenu-anywhere-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/imenu-anywhere-20170805.1155/imenu-anywhere-pkg.el delete mode 100644 emacs/.emacs.d/elpa/imenu-anywhere-20170805.1155/imenu-anywhere.el delete mode 100644 emacs/.emacs.d/elpa/imenu-anywhere-20170805.1155/imenu-anywhere.elc delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/colir.el delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/colir.elc delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/dir delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy-help.org delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy-overlay.el delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy-overlay.elc delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy-pkg.el delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy.el delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy.elc delete mode 100644 emacs/.emacs.d/elpa/ivy-20180104.1212/ivy.info delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-imenu-extras.el delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-imenu-extras.elc delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-mode.el delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-mode.elc delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-old-indent.el delete mode 100644 emacs/.emacs.d/elpa/js2-mode-20171224.1833/js2-old-indent.elc delete mode 100644 emacs/.emacs.d/elpa/json-mode-20170719.2205/json-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/json-mode-20170719.2205/json-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/json-mode-20170719.2205/json-mode.el delete mode 100644 emacs/.emacs.d/elpa/json-mode-20170719.2205/json-mode.elc delete mode 100644 emacs/.emacs.d/elpa/json-reformat-20160212.53/json-reformat-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/json-reformat-20160212.53/json-reformat-pkg.el delete mode 100644 emacs/.emacs.d/elpa/json-reformat-20160212.53/json-reformat.el delete mode 100644 emacs/.emacs.d/elpa/json-reformat-20160212.53/json-reformat.elc delete mode 100644 emacs/.emacs.d/elpa/json-snatcher-20150511.2047/json-snatcher-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/json-snatcher-20150511.2047/json-snatcher-pkg.el delete mode 100644 emacs/.emacs.d/elpa/json-snatcher-20150511.2047/json-snatcher.el delete mode 100644 emacs/.emacs.d/elpa/json-snatcher-20150511.2047/json-snatcher.elc delete mode 100644 emacs/.emacs.d/elpa/let-alist-1.0.5.signed delete mode 100644 emacs/.emacs.d/elpa/let-alist-1.0.5/let-alist-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/let-alist-1.0.5/let-alist-pkg.el delete mode 100644 emacs/.emacs.d/elpa/let-alist-1.0.5/let-alist.el delete mode 100644 emacs/.emacs.d/elpa/let-alist-1.0.5/let-alist.elc delete mode 100644 emacs/.emacs.d/elpa/logito-20120225.1255/logito-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/logito-20120225.1255/logito-pkg.el delete mode 100644 emacs/.emacs.d/elpa/logito-20120225.1255/logito.el delete mode 100644 emacs/.emacs.d/elpa/logito-20120225.1255/logito.elc delete mode 100644 emacs/.emacs.d/elpa/magit-popup-20171217.1235/dir delete mode 100644 emacs/.emacs.d/elpa/magit-popup-20171217.1235/magit-popup-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/magit-popup-20171217.1235/magit-popup-pkg.el delete mode 100644 emacs/.emacs.d/elpa/magit-popup-20171217.1235/magit-popup.el delete mode 100644 emacs/.emacs.d/elpa/magit-popup-20171217.1235/magit-popup.elc delete mode 100644 emacs/.emacs.d/elpa/magit-popup-20171217.1235/magit-popup.info delete mode 100644 emacs/.emacs.d/elpa/makey-20131231.630/makey-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/makey-20131231.630/makey-pkg.el delete mode 100644 emacs/.emacs.d/elpa/makey-20131231.630/makey.el delete mode 100644 emacs/.emacs.d/elpa/makey-20131231.630/makey.elc delete mode 100644 emacs/.emacs.d/elpa/marshal-20180102.201/marshal-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/marshal-20180102.201/marshal-pkg.el delete mode 100644 emacs/.emacs.d/elpa/marshal-20180102.201/marshal.el delete mode 100644 emacs/.emacs.d/elpa/marshal-20180102.201/marshal.elc delete mode 100644 emacs/.emacs.d/elpa/move-text-20170908.2030/move-text-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/move-text-20170908.2030/move-text-pkg.el delete mode 100644 emacs/.emacs.d/elpa/move-text-20170908.2030/move-text.el delete mode 100644 emacs/.emacs.d/elpa/move-text-20170908.2030/move-text.elc delete mode 100644 emacs/.emacs.d/elpa/operate-on-number-20150706.2323/operate-on-number-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/operate-on-number-20150706.2323/operate-on-number-pkg.el delete mode 100644 emacs/.emacs.d/elpa/operate-on-number-20150706.2323/operate-on-number.el delete mode 100644 emacs/.emacs.d/elpa/operate-on-number-20150706.2323/operate-on-number.elc delete mode 100644 emacs/.emacs.d/elpa/ov-20150311.2228/ov-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/ov-20150311.2228/ov-pkg.el delete mode 100644 emacs/.emacs.d/elpa/ov-20150311.2228/ov.el delete mode 100644 emacs/.emacs.d/elpa/ov-20150311.2228/ov.elc delete mode 100644 emacs/.emacs.d/elpa/ox-twbs-20161103.1316/ox-twbs-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/ox-twbs-20161103.1316/ox-twbs-pkg.el delete mode 100644 emacs/.emacs.d/elpa/ox-twbs-20161103.1316/ox-twbs.el delete mode 100644 emacs/.emacs.d/elpa/ox-twbs-20161103.1316/ox-twbs.elc delete mode 100644 emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-pkg.el delete mode 100644 emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.el delete mode 100644 emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.elc delete mode 100644 emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-pkg.el delete mode 100644 emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.el delete mode 100644 emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.elc delete mode 100644 emacs/.emacs.d/elpa/rainbow-delimiters-20170929.432/rainbow-delimiters-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/rainbow-delimiters-20170929.432/rainbow-delimiters-pkg.el delete mode 100644 emacs/.emacs.d/elpa/rainbow-delimiters-20170929.432/rainbow-delimiters.el delete mode 100644 emacs/.emacs.d/elpa/rainbow-delimiters-20170929.432/rainbow-delimiters.elc delete mode 100644 emacs/.emacs.d/elpa/rainbow-mode-0.13.signed delete mode 100644 emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-pkg.el delete mode 100644 emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.el delete mode 100644 emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.elc delete mode 100644 emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-pkg.el delete mode 100644 emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.el delete mode 100644 emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.elc delete mode 100644 emacs/.emacs.d/elpa/s-20171102.227/s-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/s-20171102.227/s-pkg.el delete mode 100644 emacs/.emacs.d/elpa/s-20171102.227/s.el delete mode 100644 emacs/.emacs.d/elpa/s-20171102.227/s.elc delete mode 100644 emacs/.emacs.d/elpa/seq-2.20.signed delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/ChangeLog delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-24.el delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-24.elc delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-25.el delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-25.elc delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-pkg.el delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq-pkg.elc delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq.el delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/seq.elc delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/tests/seq-tests.el delete mode 100644 emacs/.emacs.d/elpa/seq-2.20/tests/seq-tests.elc delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-dark-theme.el delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-dark-theme.elc delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-light-theme.el delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-light-theme.elc delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-pkg.el delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.el delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.elc delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.el delete mode 100644 emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-clojure.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-clojure.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-config.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-config.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-elixir.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-elixir.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ess.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ess.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-markdown.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-org.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-org.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-pkg.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.elc delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.el delete mode 100644 emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.elc delete mode 100644 emacs/.emacs.d/elpa/smartrep-20150508.1930/smartrep-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/smartrep-20150508.1930/smartrep-pkg.el delete mode 100644 emacs/.emacs.d/elpa/smartrep-20150508.1930/smartrep.el delete mode 100644 emacs/.emacs.d/elpa/smartrep-20150508.1930/smartrep.elc delete mode 100644 emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-pkg.el delete mode 100644 emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.el delete mode 100644 emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.elc delete mode 100644 emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el delete mode 100644 emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el delete mode 100644 emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elc delete mode 100644 emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-pkg.el delete mode 100644 emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.el delete mode 100644 emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.elc delete mode 100644 emacs/.emacs.d/elpa/with-editor-20171217.1239/dir delete mode 100644 emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-pkg.el delete mode 100644 emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.el delete mode 100644 emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.elc delete mode 100644 emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.info delete mode 100644 emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-pkg.el delete mode 100644 emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme.el delete mode 100644 emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-autoloads.el delete mode 100644 emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-pkg.el delete mode 100644 emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.el delete mode 100644 emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.elc delete mode 100644 emacs/.emacs.d/init.el delete mode 100644 emacs/.emacs.d/modules/doc/README.md delete mode 100644 emacs/.emacs.d/modules/doc/prelude-erc.md delete mode 100644 emacs/.emacs.d/modules/doc/prelude-python.md delete mode 100644 emacs/.emacs.d/modules/prelude-c.el delete mode 100644 emacs/.emacs.d/modules/prelude-clojure.el delete mode 100644 emacs/.emacs.d/modules/prelude-coffee.el delete mode 100644 emacs/.emacs.d/modules/prelude-common-lisp.el delete mode 100644 emacs/.emacs.d/modules/prelude-company.el delete mode 100644 emacs/.emacs.d/modules/prelude-css.el delete mode 100644 emacs/.emacs.d/modules/prelude-elixir.el delete mode 100644 emacs/.emacs.d/modules/prelude-emacs-lisp.el delete mode 100644 emacs/.emacs.d/modules/prelude-erc.el delete mode 100644 emacs/.emacs.d/modules/prelude-erlang.el delete mode 100644 emacs/.emacs.d/modules/prelude-evil.el delete mode 100644 emacs/.emacs.d/modules/prelude-go.el delete mode 100644 emacs/.emacs.d/modules/prelude-haskell.el delete mode 100644 emacs/.emacs.d/modules/prelude-helm-everywhere.el delete mode 100644 emacs/.emacs.d/modules/prelude-helm.el delete mode 100644 emacs/.emacs.d/modules/prelude-ido.el delete mode 100644 emacs/.emacs.d/modules/prelude-ivy.el delete mode 100644 emacs/.emacs.d/modules/prelude-js.el delete mode 100644 emacs/.emacs.d/modules/prelude-key-chord.el delete mode 100644 emacs/.emacs.d/modules/prelude-latex.el delete mode 100644 emacs/.emacs.d/modules/prelude-lisp.el delete mode 100644 emacs/.emacs.d/modules/prelude-mediawiki.el delete mode 100644 emacs/.emacs.d/modules/prelude-ocaml.el delete mode 100644 emacs/.emacs.d/modules/prelude-org.el delete mode 100644 emacs/.emacs.d/modules/prelude-perl.el delete mode 100644 emacs/.emacs.d/modules/prelude-programming.el delete mode 100644 emacs/.emacs.d/modules/prelude-python.el delete mode 100644 emacs/.emacs.d/modules/prelude-ruby.el delete mode 100644 emacs/.emacs.d/modules/prelude-rust.el delete mode 100644 emacs/.emacs.d/modules/prelude-scala.el delete mode 100644 emacs/.emacs.d/modules/prelude-scheme.el delete mode 100644 emacs/.emacs.d/modules/prelude-scss.el delete mode 100644 emacs/.emacs.d/modules/prelude-shell.el delete mode 100644 emacs/.emacs.d/modules/prelude-web.el delete mode 100644 emacs/.emacs.d/modules/prelude-xml.el delete mode 100644 emacs/.emacs.d/modules/prelude-yaml.el delete mode 100644 emacs/.emacs.d/personal/.dir-locals.el delete mode 100644 emacs/.emacs.d/personal/.gitkeep delete mode 100644 emacs/.emacs.d/personal/preload/.gitkeep delete mode 100644 emacs/.emacs.d/prelude-modules.el delete mode 100644 emacs/.emacs.d/projectile-bookmarks.eld delete mode 100644 emacs/.emacs.d/sample/prelude-modules.el delete mode 100644 emacs/.emacs.d/sample/prelude-pinned-packages.el delete mode 100644 emacs/.emacs.d/themes/.gitkeep delete mode 100755 emacs/.emacs.d/utils/installer.sh delete mode 100644 emacs/.emacs.d/vendor/.gitkeep diff --git a/emacs/.emacs.d/.gitignore b/emacs/.emacs.d/.gitignore deleted file mode 100644 index ee058f6..0000000 --- a/emacs/.emacs.d/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*~ -*.elc -auto-save-list -recentf -savehist -saveplace -eshell -elpa -el-get -semanticdb -url -ede-projects.el -.DS_Store -custom.el -places -.smex-items -savefile/ -/prelude-modules.el -projectile-bookmarks.eld -session* -.cask -tramp -/var/pcache -.emacs.desktop -.emacs.desktop.lock -network-security.data diff --git a/emacs/.emacs.d/.projectile b/emacs/.emacs.d/.projectile deleted file mode 100644 index f47cd73..0000000 --- a/emacs/.emacs.d/.projectile +++ /dev/null @@ -1,3 +0,0 @@ -/elpa -/savefile -/.cask \ No newline at end of file diff --git a/emacs/.emacs.d/CONTRIBUTING.md b/emacs/.emacs.d/CONTRIBUTING.md deleted file mode 100644 index 695df55..0000000 --- a/emacs/.emacs.d/CONTRIBUTING.md +++ /dev/null @@ -1,31 +0,0 @@ -# Contributing - -If you discover issues, have ideas for improvements or new features, or -want to contribute a new module, please report them to the -[issue tracker][1] of the repository or submit a pull request. Please, -try to follow these guidelines when you do so. - -## Issue reporting - -* Check that the issue has not already been reported. -* Check that the issue has not already been fixed in the latest code - (a.k.a. `master`). -* Be clear, concise and precise in your description of the problem. -* Open an issue with a descriptive title and a summary in grammatically correct, - complete sentences. -* Include any relevant code to the issue summary. - -## Pull requests - -* Read [how to properly contribute to open source projects on Github][2]. -* Use a topic branch to easily amend a pull request later, if necessary. -* Write [good commit messages][3]. -* Use the same coding conventions as the rest of the project. -* Verify your Emacs Lisp code with `checkdoc` (C-c ? d). -* Open a [pull request][4] that relates to *only* one subject with a clear title - and description in grammatically correct, complete sentences. - -[1]: https://github.com/bbatsov/prelude/issues -[2]: http://gun.io/blog/how-to-github-fork-branch-and-pull-request -[3]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html -[4]: https://help.github.com/articles/using-pull-requests diff --git a/emacs/.emacs.d/README.md b/emacs/.emacs.d/README.md deleted file mode 100644 index dca7b31..0000000 --- a/emacs/.emacs.d/README.md +++ /dev/null @@ -1,730 +0,0 @@ -[![License GPL 3][badge-license]](http://www.gnu.org/licenses/gpl-3.0.txt) -[![Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/bbatsov/donate) -[![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/bbatsov) - -Emacs Prelude -============= - -[![Join the chat at https://gitter.im/bbatsov/prelude](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/bbatsov/prelude?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -Prelude is an Emacs distribution that aims to enhance the default -Emacs experience. Prelude alters a lot of the default settings, -bundles a plethora of additional packages and adds its own core -library to the mix. The final product offers an easy to use Emacs -configuration for Emacs newcomers and lots of additional power for -Emacs power users. - -Prelude is compatible **ONLY with GNU Emacs 24.4+**. In general you're -advised to always run Prelude with the latest Emacs - currently -**25.2**. - -You can support the development of Prelude via -[Salt](https://bountysource.com/teams/prelude), -[Patreon](https://www.patreon.com/bbatsov) and -[Liberapay](https://liberapay.com/bbatsov/donate). - -[![Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/bbatsov/donate) -[![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/bbatsov) - -**Table of Contents** - -- [Fast Forward](#fast-forward) -- [Installing Emacs](#installing-emacs) -- [Installation](#installation) - - [Automated](#automated) - - [Via Curl](#via-curl) - - [Via Wget](#via-wget) - - [Manual](#manual) -- [Updating Prelude](#updating-prelude) - - [Manual update](#manual-update) - - [Update all bundled packages](#update-all-bundled-packages) - - [Update Prelude's code](#update-preludes-code) - - [Restart Prelude](#restart-prelude) - - [Automatic update](#automatic-update) -- [Enabling additional modules](#enabling-additional-modules) -- [Running](#running) -- [Getting to know Prelude](#getting-to-know-prelude) - - [Keymap](#keymap) - - [Global](#global) - - [Prelude Mode](#prelude-mode) - - [macOS modifier keys](#macos-modifier-keys) - - [Projectile](#projectile) - - [Helm](#helm) - - [Key-chords](#key-chords) - - [Disabling key-chords](#disabling-key-chords) -- [Automatic package installation](#automatic-package-installation) - - [Color Themes](#color-themes) - - [Personalizing](#personalizing) - - [Disabling whitespace-mode](#disabling-whitespace-mode) - - [Disable flyspell-mode](#disable-flyspell-mode) -- [Caveats & Pitfalls](#caveats--pitfalls) - - [Updating bundled packages](#updating-bundled-packages) - - [Problems with flyspell-mode](#problems-with-flyspell-mode) - - [Ugly colors in the terminal Emacs version](#ugly-colors-in-the-terminal-emacs-version) - - [MELPA error on initial startup](#melpa-error-on-initial-startup) - - [Warnings on arrow navigation in editor buffers](#warnings-on-arrow-navigation-in-editor-buffers) - - [Customized C-a behavior](#customized-c-a-behavior) - - [Poor ido matching performance on large datasets](#poor-ido-matching-performance-on-large-datasets) - - [Windows compatibility](#windows-compatibility) -- [Known issues](#known-issues) -- [Support](#support) -- [Contributors](#contributors) -- [Bugs & Improvements](#bugs--improvements) - -## Fast Forward - -Assuming you're using an Unix-like OS (`*BSD`, `GNU/Linux`, `macOS`, `Solaris`, -etc), you already have Emacs 24.4+ installed, as well as `git` & `curl` you -can skip the whole manual and just type in your favorite shell the -following command: - -```bash -curl -L https://git.io/epre | sh -``` - -You can now power up your Emacs, sit back and enjoy Prelude, -forgetting about the rest of this manual. - -There are two environment variables you can use to control the -source repository and the installation directory. To change the -installation directory: - -```bash -export PRELUDE_INSTALL_DIR="$HOME/.emacs.d" && curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh -``` - -To change the source repository: - -```bash -export PRELUDE_URL="https://github.com/yourname/prelude.git" && curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh -``` - -Note that the installer will back up any existing `.emacs` file or -`.emacs.d` since it will unpack Prelude's code in `.emacs.d`. If -you're doing a manual install make sure you don't have a `.emacs` file -or back up your existing `.emacs.d` directory manually. - -Don't forget to adjust your `prelude-modules.el` file once the installation is done. -By default most of the modules that ship with Prelude are not loaded. - -## Installing Emacs - -Obviously to use the Emacs Prelude you have to install Emacs -first. Have a look at -the -[WikEmacs articles on installing Emacs](http://wikemacs.org/index.php/Installing_Emacs). - -## Installation - -### Automated - -You can install **Emacs Prelude** via the command line with either `curl` or -`wget`. Naturally `git` is also required. - -#### Via Curl - -If you're using `curl` type the following command: - -```bash -curl -L https://github.com/bbatsov/prelude/raw/master/utils/installer.sh | sh -``` - -#### Via Wget - -If you're using `wget` type: - -```bash -wget --no-check-certificate https://github.com/bbatsov/prelude/raw/master/utils/installer.sh -O - | sh -``` - -### Manual - -Make sure you do not have any `~/.emacs` file present. - -```bash -git clone git://github.com/bbatsov/prelude.git path/to/local/repo -ln -s path/to/local/repo ~/.emacs.d -cd ~/.emacs.d -``` - -If you are using Windows, you should check what Emacs thinks the `~` directory is by running Emacs and typing `C-x d ~/`, and then adjust the command appropriately. - -## Updating Prelude - -### Manual update - -The update procedure is fairly straightforward and consists of 3 steps: - -#### Update all bundled packages - -Just run M-x package-list-packages RET U x. - -#### Update Prelude's code - -```bash -cd path/to/prelude/installation -git pull -``` - -The `path/to/prelude/installation` is usually `~/.emacs.d` (at least -on Unix systems). - -#### Restart Prelude - -It's generally a good idea to stop Emacs after you do the update. The -next time Prelude starts it will install any new dependencies (if -there are such). - -### Automatic update - -Simply run M-x prelude-update from Emacs itself and restart Emacs afterwards. - -## Pinning packages - -By default, Prelude will install packages from the melpa and gnu package -repositories. Occasionally package integration can break when upgrading packages. -This can be avoided by pinning packages to stable versions in other repositories. -To do so, copy `prelude-pinned-packages.el` from the sample directory to -Prelude's root directory and adjust the [variables](https://www.gnu.org/software/emacs/manual/html_node/emacs/Package-Installation.html) -inside accordingly. - -## Enabling additional modules - -By default most of the modules that ship with Prelude are not loaded. For more information on the functionality provided by these modules visit the [docs](modules/doc/README.md). - -```lisp -;;; Uncomment the modules you'd like to use and restart Prelude afterwards - -(require 'prelude-c) -;; (require 'prelude-clojure) -;; (require 'prelude-coffee) -;; (require 'prelude-common-lisp) -;; (require 'prelude-css) -(require 'prelude-emacs-lisp) -(require 'prelude-erc) -;; (require 'prelude-erlang) -;; (require 'prelude-elixir) -;; (require 'prelude-haskell) -(require 'prelude-js) -;; (require 'prelude-latex) -(require 'prelude-lisp) -;; (require 'prelude-mediawiki) -(require 'prelude-org) -(require 'prelude-perl) -;; (require 'prelude-python) -;; (require 'prelude-ruby) -;; (require 'prelude-scala) -(require 'prelude-scheme) -;; (require 'prelude-scss) -;; (require 'prelude-web) -(require 'prelude-xml) -``` - -You'll need to adjust your `prelude-modules.el` file once the -installation is done. If you are doing a manual install then you first -need to copy the `prelude-modules.el` available in the sample -directory to the root of `path/to/prelude/installation` and then -adjust that one. - -After you've uncommented a module you should either restart Emacs or evaluate the module -`require` expression with C-x C-e. - -## Running - -Nothing fancy here. Just start Emacs as usual. Personally I run Emacs -in daemon mode: - -```bash -emacs --daemon -``` - -Afterwards I connect to the server with either a terminal or a GUI -client like this: - -```bash -emacsclient -t -emacsclient -c -``` - -You'd probably do well to put a few aliases in your `.zshrc` (or -`.bashrc`): - -```bash -alias e='emacsclient -t' -alias ec='emacsclient -c' -alias vim='emacsclient -t' -alias vi='emacsclient -t' -``` - -The last two aliases are helpful if you're used to editing files from -the command line using `vi(m)`. - -You can also open a file with the cursor positioned directly on a specific line: - -```bash -emacsclient somefile:1234 -``` - -This will open file 'somefile' and set cursor on line 1234. - -## Getting to know Prelude - -Certainly the best way to understand how Prelude enhances the default -Emacs experience is to peruse Prelude's source code (which is -obviously written in Emacs Lisp). Understanding the code is not -necessary of course. Prelude includes a `prelude-mode` minor Emacs mode -which collects some of the additional functionality added by -Prelude. It also adds an additional keymap that binds many of those -extensions to keybindings. - -### Keymap - -#### Global - -Keybinding | Description --------------------|------------------------------------------------------------ -C-x \\ | `align-regexp` -C-+ | Increase font size(`text-scale-increase`). -C-- | Decrease font size(`text-scale-decrease`). -C-x O | Go back to previous window (the inverse of `other-window` (`C-x o`)). -C-^ | Join two lines into one(`crux-top-join-line`). -C-x p | Start `proced` (manage processes from Emacs; works only in Linux). -C-x m | Start `eshell`. -C-x M-m | Start your default shell. -C-x C-m | Alias for `M-x`. -M-X | Like `M-x` but limited to commands that are relevant to the active major mode. -C-h A | Run `apropos` (search in all Emacs symbols). -C-h C-m | Display key bindings of current major mode and descriptions of every binding. -M-/ | Run `hippie-expand` (a replacement for the default `dabbrev-expand`). -C-x C-b | Open `ibuffer` (a replacement for the default `buffer-list`). -F11 | Make the window full screen. -F12 | Toggle the Emacs menu bar. -C-x g | Open Magit's status buffer. -C-x M-g | Open Magit's popup of popups. -M-Z | Zap up to char. -C-= | Run `expand-region` (incremental text selection). -C-a | Run `crux-move-beginning-of-line`. Read [this](http://emacsredux.com/blog/2013/05/22/smarter-navigation-to-the-beginning-of-a-line/) for details. - -#### Prelude Mode - -Keybinding | Description --------------------|------------------------------------------------------------ -C-c o | Open the currently visited file with an external program. -C-c i | Search for a symbol, only for buffers that contain code -C-c g | Search in Google for the thing under point (or an interactive query). -C-c G | Search in GitHub for the thing under point (or an interactive query). -C-c y | Search in YouTube for the thing under point (or an interactive query). -C-c U | Search in Duckduckgo for the thing under point (or an interactive query). -C-S-RET or Super-o | Insert an empty line above the current line and indent it properly. -S-RET or M-o | Insert an empty line and indent it properly (as in most IDEs). -C-S-up or M-S-up | Move the current line or region up. -C-S-down or M-S-down| Move the current line or region down. -C-c n | Fix indentation in buffer and strip whitespace. -C-c f | Open recently visited file. -C-M-\\ | Indent region (if selected) or the entire buffer. -C-c u | Open a new buffer containing the contents of URL. -C-c e | Eval a bit of Emacs Lisp code and replace it with its result. -C-c s | Swap two active windows. -C-c D | Delete current file and buffer. -C-c d | Duplicate the current line (or region). -C-c M-d | Duplicate and comment the current line (or region). -C-c r | Rename the current buffer and its visiting file if any. -C-c t | Open a terminal emulator (`ansi-term`). -C-c k | Kill all open buffers except the one you're currently in. -C-c TAB | Indent and copy region to clipboard -C-c I | Open user's init file. -C-c S | Open shell's init file. -C-c . + | Increment integer at point. Default is +1. -C-c . - | Decrement integer at point. Default is -1. -C-c . * | Multiply integer at point. Default is *2. -C-c . / | Divide integer at point. Default is /2. -C-c . \\ | Modulo integer at point. Default is modulo 2. -C-c . ^ | Power to the integer at point. Default is ^2. -C-c . < | Left-shift integer at point. Default is 1 position to the left. -C-c . > | Right-shift integer at point. Default is 1 position to the right. -C-c . # | Convert integer at point to specified base. Default is 10. -C-c . % | Replace integer at point with another specified integer. -C-c . ' | Perform arithmetic operations on integer at point. User specifies the operator. -Super-g | Toggle between God mode and non-God mode -Super-r | Recent files -Super-j | Join lines -Super-k | Kill whole line -Super-m m | Magit status -Super-m l | Magit log -Super-m f | Magit file log -Super-m b | Magit blame mode - -**Note**: For various arithmetic operations, the prefix `C-c .` only needs to be pressed once for the first operation. -For subsequent operations, only the appropriate operations (i.e. `+`, `-`, `*`, `/`... needs to be pressed). - -#### macOS modifier keys - -Prelude does not mess by default with the standard mapping of `Command` (to `Super`) and `Option` (to `Meta`). - -If you want to swap them add this to your personal config: - -```lisp -(setq mac-command-modifier 'meta) -(setq mac-option-modifier 'super) -``` - -You can also temporarily swap them with `C-c w` (`M-x prelude-swap-meta-and-super`). - -**Note**: I'd highly recommend to all macOS users to consider -[remapping Return to -Control](http://emacsredux.com/blog/2013/11/12/a-crazy-productivity-boost-remap-return-to-control/) -instead. That's an epic productivity boost and it's not as crazy as it sounds! - -#### Projectile - -Here's a list of functionality provided by [Projectile](https://github.com/bbatsov/projectile): - -Keybinding | Description --------------------|------------------------------------------------------------ -C-c p f | Display a list of all files in the project. With a prefix argument it will clear the cache first. -C-c p d | Display a list of all directories in the project. With a prefix argument it will clear the cache first. -C-c p T | Display a list of all test files(specs, features, etc) in the project. -C-c p s g | Run grep on the files in the project. -C-c p s s | Runs `ag` on the project. Requires the presence of `ag.el`. -M-- C-c p s g | Run grep on `projectile-grep-default-files` in the project. -C-c p b | Display a list of all project buffers currently open. -C-c p o | Runs `multi-occur` on all project buffers currently open. -C-c p r | Runs interactive query-replace on all files in the projects. -C-c p i | Invalidates the project cache (if existing). -C-c p R | Regenerates the projects `TAGS` file. -C-c p k | Kills all project buffers. -C-c p D | Opens the root of the project in `dired`. -C-c p e | Shows a list of recently visited project files. -C-c p a | Switch between files with the same name but different extensions. -C-c p c | Runs a standard compilation command for your type of project. -C-c p P | Runs a standard test command for your type of project. -C-c p z | Adds the currently visited to the cache. -C-c p p | Display a list of known projects you can switch to. - -Prelude adds an extra keymap prefix `S-p` (`S` stands for -`Super`), so you can use `S-p` instead of `C-c p`. By default on Windows keyboard -`Super` is mapped to the `Windows` key and on macOS keyboards `Super` is mapped -to the `Command` key. - -If you ever forget any of Projectile's keybindings just do a: - -C-c p C-h - -#### Helm - -Helm is setup according to this guide: [A Package in a league of its own: Helm](http://tuhdo.github.io/helm-intro.html). - -You can learn Helm usage and key bindings following the guide. C-c h is Prelude's default prefix key for Helm. -If you don't remember any key binding, append C-h after C-c h for a list of key bindings in Helm. - -If you love Helm and want to use Helm globally with enhanced `helm-find-files`, `helm-buffer-lists`..., you will have to also add `(require 'prelude-helm-everywhere)`. -When `prelude-helm-everywhere` is activated, Helm enables these global key bindings: - -Key binding | Description --------------------|---------------------------------------------- -M-x | Run [helm-M-x](http://tuhdo.github.io/helm-intro.html#sec-3), an interactive version of M-x. -M-y | Run [helm-show-kill-ring](http://tuhdo.github.io/helm-intro.html#sec-4), shows the content of `kill-ring`. -C-x b | Run [helm-mini](http://tuhdo.github.io/helm-intro.html#sec-5), an interactive version of `C-x b` with more features. -C-x C-f | Run [helm-find-files](http://tuhdo.github.io/helm-intro.html#sec-6), an interactive version of `find-file` with more features. -C-h f | Run [helm-apropos](http://tuhdo.github.io/helm-intro.html#sec-13), an interactive version of `apropos-command`. -C-h r | Run [helm-info-emacs](http://tuhdo.github.io/helm-intro.html#sec-14), an interactive version of `info-emacs-manual`. -C-h C-l | Run `helm-locate-library` that can search for locations of any file loaded into Emacs. - -This key binding is activated in `shell-mode`: - -Key Binding | Description --------------------|---------------------------------------------- -C-c C-l | Run `helm-comint-input-ring` that shows `shell` history using Helm interface. - -This key bindings is activated in `eshell-mode`: - -Key Binding | Description --------------------|---------------------------------------------- -C-c C-l | Run `helm-eshell-history` that shows `eshell` history using Helm interface. - -If you prefer Ido in everywhere, you should not add `prelude-helm-everywhere`, so you can use Helm along with Ido and Prelude's default commands. - -You can always reactivate Helm with `(prelude-global-helm-global-mode-on)`. - -**NOTICE**: In `helm-M-x`, you have to pass prefix argument *AFTER* you run `helm-M-x`, -because your prefix argument will be displayed in the modeline when in `helm-M-x` -buffer. Passing prefix argument **BEFORE** =helm-M-x= **has no effect**. - - -#### Key-chords - -**Key-chords are available only when the `prelude-key-chord` module has been enabled.** - -Keybinding | Description --------------------|---------------------------------------------- -jj | Jump to the beginning of a word(`avy-goto-word-1`) -jk | Jump to a character(`avy-goto-char`) -jl | Jump to the beginning of a line(`avy-goto-line`) -JJ | Jump back to previous buffer(`crux-switch-to-previous-buffer`) -uu | View edits as a tree(`undo-tree-visualize`) -xx | Executed extended command(`execute-extended-command`) -yy | Browse the kill ring(`browse-kill-ring`) - -##### Disabling key-chords - -In some cases you may not want to have a key-chord that is defined by prelude, -in which case you can disable the binding in your `personal.el` file by setting -its command to `nil`. For example, to disable the `jj` key-chord add the -following line: - -```lisp -(key-chord-define-global "jj" nil) -``` - -If you're an `evil-mode` user you'll probably do well to disable `key-chord-mode` altogether: - -```lisp -(key-chord-mode -1) -``` - -#### vim emulation - -If you want to use vim inside of emacs enable the `prelude-evil` module which provides -support for `evil-mode`. - -## Automatic package installation - -The default Prelude installation comes with a bare minimum of -functionality. It will however install add-ons for various programming -languages and frameworks on demand. For instance - if you try to open -a `.clj` file `clojure-mode`, `cider` and Prelude's enhanced Lisp -configuration will be installed automatically for you. - -You can, of course, install anything you wish manually as well. - -### Color Themes - -Emacs provides a dozen of -built-in themes you can use out-of-the-box by invoking the `M-x -load-theme` command. - -[Zenburn](https://github.com/bbatsov/zenburn-emacs) is the default -color theme in Prelude, but you can change it at your discretion. Why -Zenburn? I (and lots of hackers around the world) find it pretty neat -for some reason. Personally I find the default theme pretty tiresome -for the eyes, that's why I took that "controversial" decision to -replace it. You can, of course, easily go back to the default (or -select another theme entirely). - -To disable Zenburn just put in your personal config the following -line: - -```lisp -(disable-theme 'zenburn) -``` - -Or you can use another theme altogether by adding something in `personal/preload` like: - -```lisp -(prelude-require-package 'solarized) -(setq prelude-theme 'solarized-dark) -``` - -**Note** [Solarized](https://github.com/bbatsov/zenburn-emacs) is not -available by default - you'll have to install it from MELPA first, -therefore the need for `prelude-require-package`. Alternatively you -can manually install the package like this - `M-x package-install RET -solarized-theme`. - -Finally, if you don't want any theme at all, you can add this to your -`personal/preload`: - -```lisp -(setq prelude-theme nil) -``` - -### Personalizing - -**Fork** (instead of cloning) the official Prelude repo and add your -own touch to it. You're advised to **avoid changing stuff outside of -the personal folder** to avoid having to deal with git merge conflicts -in the future. - -If you'd like to add some auto installation of packages in your -personal config use the following code: - -```lisp -(prelude-require-packages '(some-package some-other-package)) -``` - -If you require just a single package you can also use: - -```lisp -(prelude-require-package 'some-package) -``` - -#### Preloading personal config - -Sometimes you might want to load code before Prelude has started loading. Prelude will automatically preload all -Emacs Lisp files in your `personal/preload` directory. Note that at this point you can't using anything from -Prelude, except a few variables like `prelude-dir`, etc (since nothing is yet loaded). - -#### Disabling whitespace-mode - -Although `whitespace-mode` is awesome, some people might find it too -intrusive. You can disable it in your -personal config with the following bit of code: - -```lisp -(setq prelude-whitespace nil) -``` - -If you like `whitespace-mode`, but prefer it to not automatically -cleanup your file on save, you can disable that behavior by setting -`prelude-clean-whitespace-on-save` to `nil` in your config file with: - -```lisp -(setq prelude-clean-whitespace-on-save nil) -``` - -The `prelude-clean-whitespace-on-save` setting can also be set on a -per-file or directory basis by using a file variable or a -`.dir-locals.el` file. - - -#### Disable flyspell-mode - -If you're not fond of spellchecking on the fly: - -```lisp -(setq prelude-flyspell nil) -``` - -## Caveats & Pitfalls - -### Updating bundled packages - -Generally it's a good idea to do a package update before running -updating Prelude, since the latest Prelude code might depend on newer -versions of the bundled packages than you would currently have -installed. - -If you're doing manual Prelude updates you should always do a package update first. - -`M-x package-list-packages RET U x` - -That's not necessary if you're using `M-x prelude-update`, since it -will automatically update the installed packages. - -### Problems with flyspell-mode - -Prelude makes heavy use of the flyspell-mode package for spell -checking of various things. The proper operation of flyspell depends -on the presence of the `aspell` program and an `en` dictionary on your -system. You can install `aspell` and the dictionary on OS X with -`homebrew` like this: - -```bash -brew install aspell --with-lang=en -``` - -On Linux distros - just use your distro's package manager. - -### Ugly colors in the terminal Emacs version - -If your Emacs looks considerably uglier in a terminal (compared to the -GUI version) try adding this to your `.bashrc` or `.zshrc`: - -```bash -export TERM=xterm-256color -``` - -Source the `.bashrc` file and start Emacs again. - -### MELPA error on initial startup - -If you get some http connection error related to the MELPA repo -just do a manual `M-x package-refresh-contents` and restart Emacs -afterwards. - -### Warnings on arrow navigation in editor buffers - -This is not a bug - it's a feature! I firmly believe that the one true -way to use Emacs is by using it the way it was intended to be used (as -far as navigation is concerned at least). - -If you'd like to be take this a step further and disable the arrow key navigation -completely put this in your personal config: - -```lisp -(setq guru-warn-only nil) -``` - -To disable `guru-mode` completely add the following snippet to your -personal Emacs config: - -```lisp -(setq prelude-guru nil) -``` - -### Customized C-a behavior - -Prelude overrides `C-a` to behave as described -[here](http://emacsredux.com/blog/2013/05/22/smarter-navigation-to-the-beginning-of-a-line/). If -you don't like that simply add this to your personal config: - -```lisp -(global-set-key [remap move-beginning-of-line] - 'move-beginning-of-line) -``` - -### Poor ido matching performance on large datasets - -Prelude swaps the default `ido` flex matching with the more powerful -[ido-flx](https://github.com/lewang/flx). - -The sorting algorithm `flx` uses is more complex, but yields better results. - -On slower machines, it may be necessary to lower `flx-ido-threshold` to -ensure a smooth experience. - -```lisp -(setq flx-ido-threshold 1000) -``` - -You can always disable the improved sorting algorithm all together like this: - -```lisp -(flx-ido-mode -1) -``` - -### Windows compatibility - -While everything in Prelude should work fine in Windows, I test it only -with Linux & OS X, so there are Windows related problems from time to -time. This situation will probably improve over time. - -## Known issues - -Check out the project's -[issue list](https://github.com/bbatsov/prelude/issues?sort=created&direction=desc&state=open) -a list of unresolved issues. By the way - feel free to fix any of them -and send me a pull request. :-) - -## Support - -Support is available via several channels: - -* Prelude's Google Group -* Prelude's Freenode channel (`#prelude-emacs`) -* [Gitter](https://gitter.im/bbatsov/prelude) -. -## Contributors - -Here's a [list](https://github.com/bbatsov/prelude/contributors) of all the people who have contributed to the -development of Emacs Prelude. - -## Bugs & Improvements - -Bug reports and suggestions for improvements are always -welcome. GitHub pull requests are even better! :-) - -Cheers,
-[Bozhidar](https://twitter.com/bbatsov) - -[badge-license]: https://img.shields.io/badge/license-GPL_3-green.svg diff --git a/emacs/.emacs.d/core/prelude-core.el b/emacs/.emacs.d/core/prelude-core.el deleted file mode 100644 index 216aa3e..0000000 --- a/emacs/.emacs.d/core/prelude-core.el +++ /dev/null @@ -1,178 +0,0 @@ -;;; prelude-core.el --- Emacs Prelude: Core Prelude functions. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Here are the definitions of most of the functions added by Prelude. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'thingatpt) -(require 'dash) -(require 'ov) - -(defun prelude-buffer-mode (buffer-or-name) - "Retrieve the `major-mode' of BUFFER-OR-NAME." - (with-current-buffer buffer-or-name - major-mode)) - -(defun prelude-search (query-url prompt) - "Open the search url constructed with the QUERY-URL. -PROMPT sets the `read-string prompt." - (browse-url - (concat query-url - (url-hexify-string - (if mark-active - (buffer-substring (region-beginning) (region-end)) - (read-string prompt)))))) - -(defmacro prelude-install-search-engine (search-engine-name search-engine-url search-engine-prompt) - "Given some information regarding a search engine, install the interactive command to search through them" - `(defun ,(intern (format "prelude-%s" search-engine-name)) () - ,(format "Search %s with a query or region if any." search-engine-name) - (interactive) - (prelude-search ,search-engine-url ,search-engine-prompt))) - -(prelude-install-search-engine "google" "http://www.google.com/search?q=" "Google: ") -(prelude-install-search-engine "youtube" "http://www.youtube.com/results?search_query=" "Search YouTube: ") -(prelude-install-search-engine "github" "https://github.com/search?q=" "Search GitHub: ") -(prelude-install-search-engine "duckduckgo" "https://duckduckgo.com/?t=lm&q=" "Search DuckDuckGo: ") - -(defun prelude-todo-ov-evaporate (_ov _after _beg _end &optional _length) - (let ((inhibit-modification-hooks t)) - (if _after (ov-reset _ov)))) - -(defun prelude-annotate-todo () - "Put fringe marker on TODO: lines in the current buffer." - (interactive) - (ov-set (format "[[:space:]]*%s+[[:space:]]*TODO:" comment-start) - 'before-string - (propertize (format "A") - 'display '(left-fringe right-triangle)) - 'modification-hooks '(prelude-todo-ov-evaporate))) - -(defun prelude-recompile-init () - "Byte-compile all your dotfiles again." - (interactive) - (byte-recompile-directory prelude-dir 0)) - -(defvar prelude-tips - '("Press to open a file with external program." - "Press to navigate a project's files with ido." - "Press to open a recently visited file." - "Press to run grep on a project." - "Press to switch between projects." - "Press to expand the selected region." - "Press to search in Google." - "Press to search in GitHub." - "Press to search in YouTube." - "Press to search in DuckDuckGo." - "Press to rename the current buffer and the file it's visiting if any." - "Press to open a terminal in Emacs." - "Press to kill all the buffers, but the active one." - "Press to run magit-status." - "Press to delete the current file and buffer." - "Press to swap two windows." - "Press or to open a line beneath the current one." - "Press to open a line above the current one." - "Press in a Elisp buffer to launch an interactive Elisp shell." - "Press to kill a line backwards." - "Press or to kill the whole line." - "Press or to join lines." - "Press or to jump to the start of a word in any visible window." - "Press to toggle fullscreen mode." - "Press to toggle the menu bar." - "Explore the Tools->Prelude menu to find out about some of Prelude extensions to Emacs." - "Access the official Emacs manual by pressing ." - "Visit the EmacsWiki at http://emacswiki.org to find out even more about Emacs.")) - -(defun prelude-tip-of-the-day () - "Display a random entry from `prelude-tips'." - (interactive) - (when (and prelude-tips (not (window-minibuffer-p))) - ;; pick a new random seed - (random t) - (message - (concat "Prelude tip: " (nth (random (length prelude-tips)) prelude-tips))))) - -(defun prelude-eval-after-init (form) - "Add `(lambda () FORM)' to `after-init-hook'. - - If Emacs has already finished initialization, also eval FORM immediately." - (let ((func (list 'lambda nil form))) - (add-hook 'after-init-hook func) - (when after-init-time - (eval form)))) - -(require 'epl) - -(defun prelude-update () - "Update Prelude to its latest version." - (interactive) - (when (y-or-n-p "Do you want to update Prelude? ") - (message "Updating installed packages...") - (epl-upgrade) - (message "Updating Prelude...") - (cd prelude-dir) - (shell-command "git pull") - (prelude-recompile-init) - (message "Update finished. Restart Emacs to complete the process."))) - -(defun prelude-update-packages (&optional arg) - "Update Prelude's packages. -This includes package installed via `prelude-require-package'. - -With a prefix ARG updates all installed packages." - (interactive "P") - (when (y-or-n-p "Do you want to update Prelude's packages? ") - (if arg - (epl-upgrade) - (epl-upgrade (-filter (lambda (p) (memq (epl-package-name p) prelude-packages)) - (epl-installed-packages)))) - (message "Update finished. Restart Emacs to complete the process."))) - -;;; Emacs in OSX already has fullscreen support -;;; Emacs has a similar built-in command in 24.4 -(defun prelude-fullscreen () - "Make Emacs window fullscreen. - -This follows freedesktop standards, should work in X servers." - (interactive) - (if (eq window-system 'x) - (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 - '(2 "_NET_WM_STATE_FULLSCREEN" 0)) - (error "Only X server is supported"))) - -(defun prelude-wrap-with (s) - "Create a wrapper function for smartparens using S." - `(lambda (&optional arg) - (interactive "P") - (sp-wrap-with-pair ,s))) - -(provide 'prelude-core) -;;; prelude-core.el ends here diff --git a/emacs/.emacs.d/core/prelude-custom.el b/emacs/.emacs.d/core/prelude-custom.el deleted file mode 100644 index 34f0584..0000000 --- a/emacs/.emacs.d/core/prelude-custom.el +++ /dev/null @@ -1,103 +0,0 @@ -;;; prelude-custom.el --- Emacs Prelude: Prelude's customizable variables. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Refinements of the core editing experience in Emacs. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;; customize -(defgroup prelude nil - "Emacs Prelude configuration." - :prefix "prelude-" - :group 'convenience) - -(defcustom prelude-auto-save t - "Non-nil values enable Prelude's auto save." - :type 'boolean - :group 'prelude) - -(defcustom prelude-guru t - "Non-nil values enable `guru-mode'." - :type 'boolean - :group 'prelude) - -(defcustom prelude-whitespace t - "Non-nil values enable Prelude's whitespace visualization." - :type 'boolean - :group 'prelude) - -(defcustom prelude-clean-whitespace-on-save t - "Cleanup whitespace from file before it's saved. -Will only occur if `prelude-whitespace' is also enabled." - :type 'boolean - :group 'prelude) - -(defcustom prelude-flyspell t - "Non-nil values enable Prelude's flyspell support." - :type 'boolean - :group 'prelude) - -(defcustom prelude-user-init-file (expand-file-name "personal/" - user-emacs-directory) - "Path to your personal customization file. -Prelude recommends you only put personal customizations in the -personal folder. This variable allows you to specify a specific -folder as the one that should be visited when running -`crux-find-user-init-file'. This can be easily set to the desired buffer -in lisp by putting `(setq prelude-user-init-file load-file-name)' -in the desired elisp file." - :type 'string - :group 'prelude) - -(defcustom prelude-indent-sensitive-modes - '(conf-mode coffee-mode haml-mode python-mode slim-mode yaml-mode) - "Modes for which auto-indenting is suppressed." - :type 'list - :group 'prelude) - -(defcustom prelude-yank-indent-modes '(LaTeX-mode TeX-mode) - "Modes in which to indent regions that are yanked (or yank-popped). -Only modes that don't derive from `prog-mode' should be listed here." - :type 'list - :group 'prelude) - -(defcustom prelude-yank-indent-threshold 1000 - "Threshold (# chars) over which indentation does not automatically occur." - :type 'number - :group 'prelude) - -(defcustom prelude-theme 'zenburn - "The default color theme, change this in your /personal/preload config." - :type 'symbol - :group 'prelude) - -(provide 'prelude-custom) - -;;; prelude-custom.el ends here diff --git a/emacs/.emacs.d/core/prelude-editor.el b/emacs/.emacs.d/core/prelude-editor.el deleted file mode 100644 index d6f5917..0000000 --- a/emacs/.emacs.d/core/prelude-editor.el +++ /dev/null @@ -1,440 +0,0 @@ -;;; prelude-editor.el --- Emacs Prelude: enhanced core editing experience. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Refinements of the core editing experience in Emacs. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;; Death to the tabs! However, tabs historically indent to the next -;; 8-character offset; specifying anything else will cause *mass* -;; confusion, as it will change the appearance of every existing file. -;; In some cases (python), even worse -- it will change the semantics -;; (meaning) of the program. -;; -;; Emacs modes typically provide a standard means to change the -;; indentation width -- eg. c-basic-offset: use that to adjust your -;; personal indentation width, while maintaining the style (and -;; meaning) of any files you load. -(setq-default indent-tabs-mode nil) ;; don't use tabs to indent -(setq-default tab-width 8) ;; but maintain correct appearance - -;; Newline at end of file -(setq require-final-newline t) - -;; delete the selection with a keypress -(delete-selection-mode t) - -;; store all backup and autosave files in the tmp dir -(setq backup-directory-alist - `((".*" . ,temporary-file-directory))) -(setq auto-save-file-name-transforms - `((".*" ,temporary-file-directory t))) - -;; autosave the undo-tree history -(setq undo-tree-history-directory-alist - `((".*" . ,temporary-file-directory))) -(setq undo-tree-auto-save-history t) - -;; revert buffers automatically when underlying files are changed externally -(global-auto-revert-mode t) - -;; hippie expand is dabbrev expand on steroids -(setq hippie-expand-try-functions-list '(try-expand-dabbrev - try-expand-dabbrev-all-buffers - try-expand-dabbrev-from-kill - try-complete-file-name-partially - try-complete-file-name - try-expand-all-abbrevs - try-expand-list - try-expand-line - try-complete-lisp-symbol-partially - try-complete-lisp-symbol)) - -;; smart tab behavior - indent or complete -(setq tab-always-indent 'complete) - -;; smart pairing for all -(require 'smartparens-config) -(setq sp-base-key-bindings 'paredit) -(setq sp-autoskip-closing-pair 'always) -(setq sp-hybrid-kill-entire-symbol nil) -(sp-use-paredit-bindings) - -(show-smartparens-global-mode +1) - -(define-key prog-mode-map (kbd "M-(") (prelude-wrap-with "(")) -;; FIXME: pick terminal friendly binding -;; (define-key prog-mode-map (kbd "M-[") (prelude-wrap-with "[")) -(define-key prog-mode-map (kbd "M-\"") (prelude-wrap-with "\"")) - -;; disable annoying blink-matching-paren -(setq blink-matching-paren nil) - -;; diminish keeps the modeline tidy -(require 'diminish) - -;; meaningful names for buffers with the same name -(require 'uniquify) -(setq uniquify-buffer-name-style 'forward) -(setq uniquify-separator "/") -(setq uniquify-after-kill-buffer-p t) ; rename after killing uniquified -(setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers - -;; saveplace remembers your location in a file when saving files -(setq save-place-file (expand-file-name "saveplace" prelude-savefile-dir)) -;; activate it for all buffers -(if (< emacs-major-version 25) - (progn (require 'saveplace) - (setq-default save-place t)) - (save-place-mode 1)) - -;; savehist keeps track of some history -(require 'savehist) -(setq savehist-additional-variables - ;; search entries - '(search-ring regexp-search-ring) - ;; save every minute - savehist-autosave-interval 60 - ;; keep the home clean - savehist-file (expand-file-name "savehist" prelude-savefile-dir)) -(savehist-mode +1) - -;; save recent files -(require 'recentf) -(setq recentf-save-file (expand-file-name "recentf" prelude-savefile-dir) - recentf-max-saved-items 500 - recentf-max-menu-items 15 - ;; disable recentf-cleanup on Emacs start, because it can cause - ;; problems with remote files - recentf-auto-cleanup 'never) - -(defun prelude-recentf-exclude-p (file) - "A predicate to decide whether to exclude FILE from recentf." - (let ((file-dir (file-truename (file-name-directory file)))) - (-any-p (lambda (dir) - (string-prefix-p dir file-dir)) - (mapcar 'file-truename (list prelude-savefile-dir package-user-dir))))) - -(add-to-list 'recentf-exclude 'prelude-recentf-exclude-p) - -(recentf-mode +1) - -;; use shift + arrow keys to switch between visible buffers -(require 'windmove) -(windmove-default-keybindings) - -;; automatically save buffers associated with files on buffer switch -;; and on windows switch -(defun prelude-auto-save-command () - "Save the current buffer if `prelude-auto-save' is not nil." - (when (and prelude-auto-save - buffer-file-name - (buffer-modified-p (current-buffer)) - (file-writable-p buffer-file-name)) - (save-buffer))) - -(defmacro advise-commands (advice-name commands class &rest body) - "Apply advice named ADVICE-NAME to multiple COMMANDS. - -The body of the advice is in BODY." - `(progn - ,@(mapcar (lambda (command) - `(defadvice ,command (,class ,(intern (concat (symbol-name command) "-" advice-name)) activate) - ,@body)) - commands))) - -;; advise all window switching functions -(advise-commands "auto-save" - (switch-to-buffer other-window windmove-up windmove-down windmove-left windmove-right) - before - (prelude-auto-save-command)) - -(add-hook 'mouse-leave-buffer-hook 'prelude-auto-save-command) - -(when (version<= "24.4" emacs-version) - (add-hook 'focus-out-hook 'prelude-auto-save-command)) - -(defadvice set-buffer-major-mode (after set-major-mode activate compile) - "Set buffer major mode according to `auto-mode-alist'." - (let* ((name (buffer-name buffer)) - (mode (assoc-default name auto-mode-alist 'string-match))) - (when (and mode (consp mode)) - (setq mode (car mode))) - (with-current-buffer buffer (if mode (funcall mode))))) - -;; highlight the current line -(global-hl-line-mode +1) - -(require 'volatile-highlights) -(volatile-highlights-mode t) -(diminish 'volatile-highlights-mode) - -;; note - this should be after volatile-highlights is required -;; add the ability to cut the current line, without marking it -(require 'rect) -(crux-with-region-or-line kill-region) - -;; tramp, for sudo access -(require 'tramp) -;; keep in mind known issues with zsh - see emacs wiki -(setq tramp-default-method "ssh") - -(set-default 'imenu-auto-rescan t) - -;; flyspell-mode does spell-checking on the fly as you type -(require 'flyspell) -(setq ispell-program-name "aspell" ; use aspell instead of ispell - ispell-extra-args '("--sug-mode=ultra")) - -(defun prelude-enable-flyspell () - "Enable command `flyspell-mode' if `prelude-flyspell' is not nil." - (when (and prelude-flyspell (executable-find ispell-program-name)) - (flyspell-mode +1))) - -(defun prelude-cleanup-maybe () - "Invoke `whitespace-cleanup' if `prelude-clean-whitespace-on-save' is not nil." - (when prelude-clean-whitespace-on-save - (whitespace-cleanup))) - -(defun prelude-enable-whitespace () - "Enable `whitespace-mode' if `prelude-whitespace' is not nil." - (when prelude-whitespace - ;; keep the whitespace decent all the time (in this buffer) - (add-hook 'before-save-hook 'prelude-cleanup-maybe nil t) - (whitespace-mode +1))) - -(add-hook 'text-mode-hook 'prelude-enable-flyspell) -(add-hook 'text-mode-hook 'prelude-enable-whitespace) - -;; enable narrowing commands -(put 'narrow-to-region 'disabled nil) -(put 'narrow-to-page 'disabled nil) -(put 'narrow-to-defun 'disabled nil) - -;; enabled change region case commands -(put 'upcase-region 'disabled nil) -(put 'downcase-region 'disabled nil) - -;; enable erase-buffer command -(put 'erase-buffer 'disabled nil) - -(require 'expand-region) - -;; bookmarks -(require 'bookmark) -(setq bookmark-default-file (expand-file-name "bookmarks" prelude-savefile-dir) - bookmark-save-flag 1) - -;; projectile is a project management mode -(require 'projectile) -(setq projectile-cache-file (expand-file-name "projectile.cache" prelude-savefile-dir)) -(projectile-global-mode t) - -;; avy allows us to effectively navigate to visible things -(require 'avy) -(setq avy-background t) -(setq avy-style 'at-full) - -;; anzu-mode enhances isearch & query-replace by showing total matches and current match position -(require 'anzu) -(diminish 'anzu-mode) -(global-anzu-mode) - -(global-set-key (kbd "M-%") 'anzu-query-replace) -(global-set-key (kbd "C-M-%") 'anzu-query-replace-regexp) - -;; dired - reuse current buffer by pressing 'a' -(put 'dired-find-alternate-file 'disabled nil) - -;; always delete and copy recursively -(setq dired-recursive-deletes 'always) -(setq dired-recursive-copies 'always) - -;; if there is a dired buffer displayed in the next window, use its -;; current subdir, instead of the current subdir of this dired buffer -(setq dired-dwim-target t) - -;; enable some really cool extensions like C-x C-j(dired-jump) -(require 'dired-x) - -;; ediff - don't start another frame -(require 'ediff) -(setq ediff-window-setup-function 'ediff-setup-windows-plain) - -;; clean up obsolete buffers automatically -(require 'midnight) - -;; smarter kill-ring navigation -(require 'browse-kill-ring) -(browse-kill-ring-default-keybindings) -(global-set-key (kbd "s-y") 'browse-kill-ring) - -(defadvice exchange-point-and-mark (before deactivate-mark activate compile) - "When called with no active region, do not activate mark." - (interactive - (list (not (region-active-p))))) - -(require 'tabify) -(defmacro with-region-or-buffer (func) - "When called with no active region, call FUNC on current buffer." - `(defadvice ,func (before with-region-or-buffer activate compile) - (interactive - (if mark-active - (list (region-beginning) (region-end)) - (list (point-min) (point-max)))))) - -(with-region-or-buffer indent-region) -(with-region-or-buffer untabify) - -;; automatically indenting yanked text if in programming-modes -(defun yank-advised-indent-function (beg end) - "Do indentation, as long as the region isn't too large." - (if (<= (- end beg) prelude-yank-indent-threshold) - (indent-region beg end nil))) - -(advise-commands "indent" (yank yank-pop) after - "If current mode is one of `prelude-yank-indent-modes', -indent yanked text (with prefix arg don't indent)." - (if (and (not (ad-get-arg 0)) - (not (member major-mode prelude-indent-sensitive-modes)) - (or (derived-mode-p 'prog-mode) - (member major-mode prelude-yank-indent-modes))) - (let ((transient-mark-mode nil)) - (yank-advised-indent-function (region-beginning) (region-end))))) - -;; abbrev config -(add-hook 'text-mode-hook 'abbrev-mode) - -;; make a shell script executable automatically on save -(add-hook 'after-save-hook - 'executable-make-buffer-file-executable-if-script-p) - -;; .zsh file is shell script too -(add-to-list 'auto-mode-alist '("\\.zsh\\'" . shell-script-mode)) - -;; whitespace-mode config -(require 'whitespace) -(setq whitespace-line-column 80) ;; limit line length -(setq whitespace-style '(face tabs empty trailing lines-tail)) - -;; saner regex syntax -(require 're-builder) -(setq reb-re-syntax 'string) - -(require 'eshell) -(setq eshell-directory-name (expand-file-name "eshell" prelude-savefile-dir)) - -(setq semanticdb-default-save-directory - (expand-file-name "semanticdb" prelude-savefile-dir)) - -;; Compilation from Emacs -(defun prelude-colorize-compilation-buffer () - "Colorize a compilation mode buffer." - (interactive) - ;; we don't want to mess with child modes such as grep-mode, ack, ag, etc - (when (eq major-mode 'compilation-mode) - (let ((inhibit-read-only t)) - (ansi-color-apply-on-region (point-min) (point-max))))) - -(require 'compile) -(setq compilation-ask-about-save nil ; Just save before compiling - compilation-always-kill t ; Just kill old compile processes before - ; starting the new one - compilation-scroll-output 'first-error ; Automatically scroll to first - ; error - ) - -;; Colorize output of Compilation Mode, see -;; http://stackoverflow.com/a/3072831/355252 -(require 'ansi-color) -(add-hook 'compilation-filter-hook #'prelude-colorize-compilation-buffer) - -;; enable Prelude's keybindings -(prelude-global-mode t) - -;; sensible undo -(global-undo-tree-mode) -(diminish 'undo-tree-mode) - -;; enable winner-mode to manage window configurations -(winner-mode +1) - -;; diff-hl -(global-diff-hl-mode +1) -(add-hook 'dired-mode-hook 'diff-hl-dired-mode) -(add-hook 'magit-post-refresh-hook 'diff-hl-magit-post-refresh) - -;; easy-kill -(global-set-key [remap kill-ring-save] 'easy-kill) -(global-set-key [remap mark-sexp] 'easy-mark) - -;; operate-on-number -(require 'operate-on-number) -(require 'smartrep) - -(smartrep-define-key global-map "C-c ." - '(("+" . apply-operation-to-number-at-point) - ("-" . apply-operation-to-number-at-point) - ("*" . apply-operation-to-number-at-point) - ("/" . apply-operation-to-number-at-point) - ("\\" . apply-operation-to-number-at-point) - ("^" . apply-operation-to-number-at-point) - ("<" . apply-operation-to-number-at-point) - (">" . apply-operation-to-number-at-point) - ("#" . apply-operation-to-number-at-point) - ("%" . apply-operation-to-number-at-point) - ("'" . operate-on-number-at-point))) - -(defadvice server-visit-files (before parse-numbers-in-lines (files proc &optional nowait) activate) - "Open file with emacsclient with cursors positioned on requested line. -Most of console-based utilities prints filename in format -'filename:linenumber'. So you may wish to open filename in that format. -Just call: - - emacsclient filename:linenumber - -and file 'filename' will be opened and cursor set on line 'linenumber'" - (ad-set-arg 0 - (mapcar (lambda (fn) - (let ((name (car fn))) - (if (string-match "^\\(.*?\\):\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?$" name) - (cons - (match-string 1 name) - (cons (string-to-number (match-string 2 name)) - (string-to-number (or (match-string 3 name) "")))) - fn))) files))) - -;; use settings from .editorconfig file when present -(require 'editorconfig) -(editorconfig-mode 1) - -(provide 'prelude-editor) - -;;; prelude-editor.el ends here diff --git a/emacs/.emacs.d/core/prelude-global-keybindings.el b/emacs/.emacs.d/core/prelude-global-keybindings.el deleted file mode 100644 index 425a189..0000000 --- a/emacs/.emacs.d/core/prelude-global-keybindings.el +++ /dev/null @@ -1,116 +0,0 @@ -;;; prelude-global-keybindings.el --- Emacs Prelude: some useful keybindings. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Lots of useful keybindings. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;; Align your code in a pretty way. -(global-set-key (kbd "C-x \\") 'align-regexp) - -;; Font size -(global-set-key (kbd "C-+") 'text-scale-increase) -(global-set-key (kbd "C--") 'text-scale-decrease) - -;; Window switching. (C-x o goes to the next window) -(global-set-key (kbd "C-x O") (lambda () - (interactive) - (other-window -1))) ;; back one - -;; Indentation help -(global-set-key (kbd "C-^") 'crux-top-join-line) -;; Start proced in a similar manner to dired -(unless (eq system-type 'darwin) - (global-set-key (kbd "C-x p") 'proced)) - -;; Start eshell or switch to it if it's active. -(global-set-key (kbd "C-x m") 'eshell) - -;; Start a new eshell even if one is active. -(global-set-key (kbd "C-x M") (lambda () (interactive) (eshell t))) - -;; Start a regular shell if you prefer that. -(global-set-key (kbd "C-x M-m") 'shell) - -;; If you want to be able to M-x without meta -(global-set-key (kbd "C-x C-m") 'smex) - -;; A complementary binding to the apropos-command (C-h a) -(define-key 'help-command "A" 'apropos) - -;; A quick major mode help with discover-my-major -(define-key 'help-command (kbd "C-m") 'discover-my-major) - -(define-key 'help-command (kbd "C-f") 'find-function) -(define-key 'help-command (kbd "C-k") 'find-function-on-key) -(define-key 'help-command (kbd "C-v") 'find-variable) -(define-key 'help-command (kbd "C-l") 'find-library) - -(define-key 'help-command (kbd "C-i") 'info-display-manual) - -;; replace zap-to-char functionality with the more powerful zop-to-char -(global-set-key (kbd "M-z") 'zop-up-to-char) -(global-set-key (kbd "M-Z") 'zop-to-char) - -;; kill lines backward -(global-set-key (kbd "C-") (lambda () - (interactive) - (kill-line 0) - (indent-according-to-mode))) - -(global-set-key [remap kill-whole-line] 'crux-kill-whole-line) - -;; Activate occur easily inside isearch -(define-key isearch-mode-map (kbd "C-o") 'isearch-occur) - -;; use hippie-expand instead of dabbrev -(global-set-key (kbd "M-/") 'hippie-expand) - -;; replace buffer-menu with ibuffer -(global-set-key (kbd "C-x C-b") 'ibuffer) - -(unless (fboundp 'toggle-frame-fullscreen) - (global-set-key (kbd "") 'prelude-fullscreen)) - -;; toggle menu-bar visibility -(global-set-key (kbd "") 'menu-bar-mode) - -(global-set-key (kbd "C-x g") 'magit-status) -(global-set-key (kbd "C-x M-g") 'magit-dispatch-popup) - -(global-set-key (kbd "C-=") 'er/expand-region) - -(global-set-key (kbd "C-c j") 'avy-goto-word-or-subword-1) -(global-set-key (kbd "s-.") 'avy-goto-word-or-subword-1) -(global-set-key (kbd "s-w") 'ace-window) - -(provide 'prelude-global-keybindings) - -;;; prelude-global-keybindings.el ends here diff --git a/emacs/.emacs.d/core/prelude-mode.el b/emacs/.emacs.d/core/prelude-mode.el deleted file mode 100644 index 8ea8101..0000000 --- a/emacs/.emacs.d/core/prelude-mode.el +++ /dev/null @@ -1,149 +0,0 @@ -;;; prelude-mode.el --- Emacs Prelude: minor mode -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; A minor mode defining a local keymap, plus a menu. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(require 'easymenu) -(require 'imenu-anywhere) -(require 'crux) - -(defvar prelude-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "C-c o") 'crux-open-with) - (define-key map (kbd "C-c g") 'prelude-google) - (define-key map (kbd "C-c G") 'prelude-github) - (define-key map (kbd "C-c y") 'prelude-youtube) - (define-key map (kbd "C-c U") 'prelude-duckduckgo) - ;; mimic popular IDEs binding, note that it doesn't work in a terminal session - (define-key map (kbd "C-a") 'crux-move-beginning-of-line) - (define-key map [(shift return)] 'crux-smart-open-line) - (define-key map (kbd "M-o") 'crux-smart-open-line) - (define-key map [(control shift return)] 'crux-smart-open-line-above) - (define-key map [(control shift up)] 'move-text-up) - (define-key map [(control shift down)] 'move-text-down) - (define-key map [(meta shift up)] 'move-text-up) - (define-key map [(meta shift down)] 'move-text-down) - (define-key map (kbd "C-c n") 'crux-cleanup-buffer-or-region) - (define-key map (kbd "C-c f") 'crux-recentf-ido-find-file) - (define-key map (kbd "C-M-z") 'crux-indent-defun) - (define-key map (kbd "C-c u") 'crux-view-url) - (define-key map (kbd "C-c e") 'crux-eval-and-replace) - (define-key map (kbd "C-c s") 'crux-swap-windows) - (define-key map (kbd "C-c D") 'crux-delete-file-and-buffer) - (define-key map (kbd "C-c d") 'crux-duplicate-current-line-or-region) - (define-key map (kbd "C-c M-d") 'crux-duplicate-and-comment-current-line-or-region) - (define-key map (kbd "C-c r") 'crux-rename-buffer-and-file) - (define-key map (kbd "C-c t") 'crux-visit-term-buffer) - (define-key map (kbd "C-c k") 'crux-kill-other-buffers) - (define-key map (kbd "C-c TAB") 'crux-indent-rigidly-and-copy-to-clipboard) - (define-key map (kbd "C-c I") 'crux-find-user-init-file) - (define-key map (kbd "C-c S") 'crux-find-shell-init-file) - (define-key map (kbd "C-c i") 'imenu-anywhere) - ;; extra prefix for projectile - (define-key map (kbd "s-p") 'projectile-command-map) - ;; make some use of the Super key - (define-key map (kbd "s-g") 'god-local-mode) - (define-key map (kbd "s-r") 'crux-recentf-ido-find-file) - (define-key map (kbd "s-j") 'crux-top-join-line) - (define-key map (kbd "s-k") 'crux-kill-whole-line) - (define-key map (kbd "s-m m") 'magit-status) - (define-key map (kbd "s-m l") 'magit-log) - (define-key map (kbd "s-m f") 'magit-log-buffer-file) - (define-key map (kbd "s-m b") 'magit-blame) - (define-key map (kbd "s-o") 'crux-smart-open-line-above) - - map) - "Keymap for Prelude mode.") - -(defun prelude-mode-add-menu () - "Add a menu entry for `prelude-mode' under Tools." - (easy-menu-add-item nil '("Tools") - '("Prelude" - ("Files" - ["Open with..." crux-open-with] - ["Delete file and buffer" crux-delete-file-and-buffer] - ["Rename buffer and file" crux-rename-buffer-and-file]) - - ("Buffers" - ["Clean up buffer or region" crux-cleanup-buffer-or-region] - ["Kill other buffers" crux-kill-other-buffers]) - - ("Editing" - ["Insert empty line" prelude-insert-empty-line] - ["Move line up" prelude-move-line-up] - ["Move line down" prelude-move-line-down] - ["Duplicate line or region" prelude-duplicate-current-line-or-region] - ["Indent rigidly and copy to clipboard" crux-indent-rigidly-and-copy-to-clipboard] - ["Insert date" crux-insert-date] - ["Eval and replace" crux-eval-and-replace] - ) - - ("Windows" - ["Swap windows" crux-swap-windows]) - - ("General" - ["Visit term buffer" crux-visit-term-buffer] - ["Search in Google" prelude-google] - ["View URL" crux-view-url])) - "Search Files (Grep)...") - - (easy-menu-add-item nil '("Tools") '("--") "Search Files (Grep)...")) - -(defun prelude-mode-remove-menu () - "Remove `prelude-mode' menu entry." - (easy-menu-remove-item nil '("Tools") "Prelude") - (easy-menu-remove-item nil '("Tools") "--")) - -;; define minor mode -(define-minor-mode prelude-mode - "Minor mode to consolidate Emacs Prelude extensions. - -\\{prelude-mode-map}" - :lighter " Pre" - :keymap prelude-mode-map - (if prelude-mode - ;; on start - (prelude-mode-add-menu) - ;; on stop - (prelude-mode-remove-menu))) - -(define-globalized-minor-mode prelude-global-mode prelude-mode prelude-on) - -(defun prelude-on () - "Turn on `prelude-mode'." - (prelude-mode +1)) - -(defun prelude-off () - "Turn off `prelude-mode'." - (prelude-mode -1)) - -(provide 'prelude-mode) -;;; prelude-mode.el ends here diff --git a/emacs/.emacs.d/core/prelude-osx.el b/emacs/.emacs.d/core/prelude-osx.el deleted file mode 100644 index 0c4d418..0000000 --- a/emacs/.emacs.d/core/prelude-osx.el +++ /dev/null @@ -1,75 +0,0 @@ -;;; prelude-osx.el --- Emacs Prelude: OSX specific settings. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some OSX specific stuff. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;; On OS X Emacs doesn't use the shell PATH if it's not started from -;; the shell. Let's fix that: -(prelude-require-packages '(exec-path-from-shell vkill)) - -(require 'exec-path-from-shell) -(exec-path-from-shell-initialize) - -;; It's all in the Meta -(setq ns-function-modifier 'hyper) - -;; proced-mode doesn't work on OS X so we use vkill instead -(autoload 'vkill "vkill" nil t) -(global-set-key (kbd "C-x p") 'vkill) - -(defun prelude-swap-meta-and-super () - "Swap the mapping of Meta and Super. -Very useful for people using their Mac with a -Windows external keyboard from time to time." - (interactive) - (if (eq mac-command-modifier 'super) - (progn - (setq mac-command-modifier 'meta) - (setq mac-option-modifier 'super) - (message "Command is now bound to META and Option is bound to SUPER.")) - (progn - (setq mac-command-modifier 'super) - (setq mac-option-modifier 'meta) - (message "Command is now bound to SUPER and Option is bound to META.")))) - -(define-key prelude-mode-map (kbd "C-c w") 'prelude-swap-meta-and-super) -(define-key prelude-mode-map (kbd "s-/") 'hippie-expand) - -(menu-bar-mode +1) - -;; Enable emoji, and stop the UI from freezing when trying to display them. -(if (fboundp 'set-fontset-font) - (set-fontset-font t 'unicode "Apple Color Emoji" nil 'prepend)) - - -(provide 'prelude-osx) -;;; prelude-osx.el ends here diff --git a/emacs/.emacs.d/core/prelude-packages.el b/emacs/.emacs.d/core/prelude-packages.el deleted file mode 100644 index 195ea4f..0000000 --- a/emacs/.emacs.d/core/prelude-packages.el +++ /dev/null @@ -1,217 +0,0 @@ -;;; prelude-packages.el --- Emacs Prelude: default package selection. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Takes care of the automatic installation of all the packages required by -;; Emacs Prelude. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(require 'cl) -(require 'package) - -;; accessing a package repo over https on Windows is a no go, so we -;; fallback to http there -(if (eq system-type 'windows-nt) - (add-to-list 'package-archives - '("melpa" . "http://melpa.org/packages/") t) - (add-to-list 'package-archives - '("melpa" . "https://melpa.org/packages/") t)) - -;; load the pinned packages -(let ((prelude-pinned-packages-file (expand-file-name "prelude-pinned-packages.el" prelude-dir))) - (if (file-exists-p prelude-pinned-packages-file) - (load prelude-pinned-packages-file))) - -;; set package-user-dir to be relative to Prelude install path -(setq package-user-dir (expand-file-name "elpa" prelude-dir)) -(package-initialize) - -(defvar prelude-packages - '(ace-window - avy - anzu - beacon - browse-kill-ring - crux - dash - discover-my-major - diff-hl - diminish - easy-kill - editorconfig - epl - expand-region - flycheck - gist - git-timemachine - gitconfig-mode - gitignore-mode - god-mode - grizzl - guru-mode - imenu-anywhere - ov - projectile - magit - move-text - operate-on-number - smart-mode-line - smartparens - smartrep - undo-tree - volatile-highlights - which-key - zenburn-theme - zop-to-char) - "A list of packages to ensure are installed at launch.") - -(defun prelude-packages-installed-p () - "Check if all packages in `prelude-packages' are installed." - (every #'package-installed-p prelude-packages)) - -(defun prelude-require-package (package) - "Install PACKAGE unless already installed." - (unless (memq package prelude-packages) - (add-to-list 'prelude-packages package)) - (unless (package-installed-p package) - (package-install package))) - -(defun prelude-require-packages (packages) - "Ensure PACKAGES are installed. -Missing packages are installed automatically." - (mapc #'prelude-require-package packages)) - -(define-obsolete-function-alias 'prelude-ensure-module-deps 'prelude-require-packages) - -(defun prelude-install-packages () - "Install all packages listed in `prelude-packages'." - (unless (prelude-packages-installed-p) - ;; check for new packages (package versions) - (message "%s" "Emacs Prelude is now refreshing its package database...") - (package-refresh-contents) - (message "%s" " done.") - ;; install the missing packages - (prelude-require-packages prelude-packages))) - -;; run package installation -(prelude-install-packages) - -(defun prelude-list-foreign-packages () - "Browse third-party packages not bundled with Prelude. - -Behaves similarly to `package-list-packages', but shows only the packages that -are installed and are not in `prelude-packages'. Useful for -removing unwanted packages." - (interactive) - (package-show-package-list - (set-difference package-activated-list prelude-packages))) - -(defmacro prelude-auto-install (extension package mode) - "When file with EXTENSION is opened triggers auto-install of PACKAGE. -PACKAGE is installed only if not already present. The file is opened in MODE." - `(add-to-list 'auto-mode-alist - `(,extension . (lambda () - (unless (package-installed-p ',package) - (package-install ',package)) - (,mode))))) - -(defvar prelude-auto-install-alist - '(("\\.clj\\'" clojure-mode clojure-mode) - ("\\.cmake\\'" cmake-mode cmake-mode) - ("CMakeLists\\.txt\\'" cmake-mode cmake-mode) - ("\\.coffee\\'" coffee-mode coffee-mode) - ("\\.css\\'" css-mode css-mode) - ("\\.csv\\'" csv-mode csv-mode) - ("Cask" cask-mode cask-mode) - ("\\.d\\'" d-mode d-mode) - ("\\.dart\\'" dart-mode dart-mode) - ("\\.elm\\'" elm-mode elm-mode) - ("\\.ex\\'" elixir-mode elixir-mode) - ("\\.exs\\'" elixir-mode elixir-mode) - ("\\.elixir\\'" elixir-mode elixir-mode) - ("\\.erl\\'" erlang erlang-mode) - ("\\.feature\\'" feature-mode feature-mode) - ("\\.go\\'" go-mode go-mode) - ("\\.groovy\\'" groovy-mode groovy-mode) - ("\\.haml\\'" haml-mode haml-mode) - ("\\.hs\\'" haskell-mode haskell-mode) - ("\\.json\\'" json-mode json-mode) - ("\\.kt\\'" kotlin-mode kotlin-mode) - ("\\.kv\\'" kivy-mode kivy-mode) - ("\\.latex\\'" auctex LaTeX-mode) - ("\\.less\\'" less-css-mode less-css-mode) - ("\\.lua\\'" lua-mode lua-mode) - ("\\.markdown\\'" markdown-mode markdown-mode) - ("\\.md\\'" markdown-mode markdown-mode) - ("\\.ml\\'" tuareg tuareg-mode) - ("\\.pp\\'" puppet-mode puppet-mode) - ("\\.php\\'" php-mode php-mode) - ("\\.proto\\'" protobuf-mode protobuf-mode) - ("\\.pyd\\'" cython-mode cython-mode) - ("\\.pyi\\'" cython-mode cython-mode) - ("\\.pyx\\'" cython-mode cython-mode) - ("PKGBUILD\\'" pkgbuild-mode pkgbuild-mode) - ("\\.rs\\'" rust-mode rust-mode) - ("\\.sass\\'" sass-mode sass-mode) - ("\\.scala\\'" scala-mode scala-mode) - ("\\.scss\\'" scss-mode scss-mode) - ("\\.slim\\'" slim-mode slim-mode) - ("\\.styl\\'" stylus-mode stylus-mode) - ("\\.swift\\'" swift-mode swift-mode) - ("\\.textile\\'" textile-mode textile-mode) - ("\\.thrift\\'" thrift thrift-mode) - ("\\.yml\\'" yaml-mode yaml-mode) - ("\\.yaml\\'" yaml-mode yaml-mode) - ("Dockerfile\\'" dockerfile-mode dockerfile-mode))) - -;; markdown-mode doesn't have autoloads for the auto-mode-alist -;; so we add them manually if it's already installed -(when (package-installed-p 'markdown-mode) - (add-to-list 'auto-mode-alist '("\\.markdown\\'" . gfm-mode)) - (add-to-list 'auto-mode-alist '("\\.md\\'" . gfm-mode))) - -(when (package-installed-p 'pkgbuild-mode) - (add-to-list 'auto-mode-alist '("PKGBUILD\\'" . pkgbuild-mode))) - -;; build auto-install mappings -(mapc - (lambda (entry) - (let ((extension (car entry)) - (package (cadr entry)) - (mode (cadr (cdr entry)))) - (unless (package-installed-p package) - (prelude-auto-install extension package mode)))) - prelude-auto-install-alist) - -(provide 'prelude-packages) -;; Local Variables: -;; byte-compile-warnings: (not cl-functions) -;; End: - -;;; prelude-packages.el ends here diff --git a/emacs/.emacs.d/core/prelude-ui.el b/emacs/.emacs.d/core/prelude-ui.el deleted file mode 100644 index 60051d1..0000000 --- a/emacs/.emacs.d/core/prelude-ui.el +++ /dev/null @@ -1,92 +0,0 @@ -;;; prelude-ui.el --- Emacs Prelude: UI optimizations and tweaks. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; We dispense with most of the point and click UI, reduce the startup noise, -;; configure smooth scolling and a nice theme that's easy on the eyes (zenburn). - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;; the toolbar is just a waste of valuable screen estate -;; in a tty tool-bar-mode does not properly auto-load, and is -;; already disabled anyway -(when (fboundp 'tool-bar-mode) - (tool-bar-mode -1)) - -(menu-bar-mode -1) - -;; the blinking cursor is nothing, but an annoyance -(blink-cursor-mode -1) - -;; disable the annoying bell ring -(setq ring-bell-function 'ignore) - -;; disable startup screen -(setq inhibit-startup-screen t) - -;; nice scrolling -(setq scroll-margin 0 - scroll-conservatively 100000 - scroll-preserve-screen-position 1) - -;; mode line settings -(line-number-mode t) -(column-number-mode t) -(size-indication-mode t) - -;; enable y/n answers -(fset 'yes-or-no-p 'y-or-n-p) - -;; more useful frame title, that show either a file or a -;; buffer name (if the buffer isn't visiting a file) -(setq frame-title-format - '("" invocation-name " Prelude - " (:eval (if (buffer-file-name) - (abbreviate-file-name (buffer-file-name)) - "%b")))) - -;; use zenburn as the default theme -(when prelude-theme - (load-theme prelude-theme t)) - -(require 'smart-mode-line) -(setq sml/no-confirm-load-theme t) -;; delegate theming to the currently active theme -(setq sml/theme nil) -(add-hook 'after-init-hook #'sml/setup) - -;; show the cursor when moving after big movements in the window -(require 'beacon) -(beacon-mode +1) - -;; show available keybindings after you start typing -(require 'which-key) -(which-key-mode +1) - -(provide 'prelude-ui) -;;; prelude-ui.el ends here diff --git a/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-autoloads.el b/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-autoloads.el deleted file mode 100644 index b211f04..0000000 --- a/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-autoloads.el +++ /dev/null @@ -1,68 +0,0 @@ -;;; ace-window-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "ace-window" "ace-window.el" (23124 14342 502053 -;;;;;; 963000)) -;;; 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-delete-other-windows "ace-window" "\ -Ace delete other windows. - -\(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 `ace-window-display-mode' command -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/.emacs.d/elpa/ace-window-20171228.1109/ace-window-pkg.el b/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-pkg.el deleted file mode 100644 index 45e4963..0000000 --- a/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "ace-window" "20171228.1109" "Quickly switch windows." '((avy "0.2.0")) :commit "c0fbdd51be8fdd43fd7a89140ebd4b4c311d45fc" :url "https://github.com/abo-abo/ace-window" :keywords '("window" "location")) diff --git a/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window.el b/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window.el deleted file mode 100644 index 81d10f6..0000000 --- a/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window.el +++ /dev/null @@ -1,767 +0,0 @@ -;;; 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: 20171228.1109 -;; 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' -;; by assigning each window a short, unique label. When there are only -;; two windows present, `other-window' is called (unless -;; aw-dispatch-always is set non-nil). If there are more, each -;; window will have its first label character highlighted. Once a -;; unique label is typed, ace-window 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. -;; -;; By default, ace-window uses numbers for window labels so the window -;; labeling is intuitively ordered. But if you prefer to type keys on -;; your home row for quicker access, use this setting: -;; -;; (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)) -;; -;; Whenever ace-window prompts for a window selection, it grays out -;; all the window characters, highlighting window labels in red. To -;; disable this behavior, set this: -;; -;; (setq aw-background nil) -;; -;; If you want to know the selection characters ahead of time, turn on -;; `ace-window-display-mode'. -;; -;; When prefixed with one `universal-argument', instead of switching -;; to the selected window, the selected window is swapped with the -;; current one. -;; -;; When prefixed with two `universal-argument', the selected window is -;; deleted instead. - -;;; Code: -(require 'avy) -(require 'ring) -(require 'subr-x) - -;;* 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." - :type '(repeat character)) - -(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-minibuffer-flag nil - "When non-nil, also display `ace-window-mode' string in the minibuffer when ace-window is active." - :type 'boolean) - -(defcustom aw-ignored-buffers '("*Calc Trail*" "*LV*") - "List of buffers and major-modes to ignore when choosing a window from the window list. -Active only when `aw-ignore-on' is non-nil. Windows displaying these -buffers can still be chosen by typing their specific labels." - :type '(repeat string)) - -(defcustom aw-ignore-on t - "When t, `ace-window' will ignore buffers and major-modes in `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) - -(defcustom aw-dispatch-when-more-than 2 - "If the number of windows is more than this, activate ace-window-ness." - :type 'integer) - -(defcustom aw-reverse-frame-list nil - "When non-nil `ace-window' will order frames for selection in -the reverse of `frame-list'" - :type 'boolean) - -(defcustom aw-frame-offset '(13 . 23) - "Increase in pixel offset for new ace-window frames relative to the selected frame. -Its value is an (x-offset . y-offset) pair in pixels." - :type '(cons integer integer)) - -(defcustom aw-frame-size nil - "Frame size to make new ace-window frames. -Its value is a (width . height) pair in pixels or nil for the default frame size. -(0 . 0) is special and means make the frame size the same as the last selected frame size." - :type '(cons integer integer)) - -;; Must be defined before `aw-make-frame-char' since its :set function references this. -(defvar aw-dispatch-alist - '((?x aw-delete-window "Delete Window") - (?m aw-swap-window "Swap Windows") - (?M aw-move-window "Move Window") - (?j aw-switch-buffer-in-window "Select Buffer") - (?n aw-flip-window) - (?u aw-switch-buffer-other-window "Switch Buffer Other Window") - (?c aw-split-window-fair "Split Fair Window") - (?v aw-split-window-vert "Split Vert Window") - (?b aw-split-window-horz "Split Horz Window") - (?o delete-other-windows "Delete Other Windows") - (?? aw-show-dispatch-help)) - "List of actions for `aw-dispatch-default'. -Each action is a list of either: - (char function description) where function takes a single window argument -or - (char function) where function takes no argument and the description is omitted.") - -(defun aw-set-make-frame-char (option value) - ;; Signal an error if `aw-make-frame-char' is ever set to an invalid - ;; or conflicting value. - (when value - (cond ((not (characterp value)) - (user-error "`aw-make-frame-char' must be a character, not `%s'" value)) - ((memq value aw-keys) - (user-error "`aw-make-frame-char' is `%c'; this conflicts with the same character in `aw-keys'" value)) - ((assq value aw-dispatch-alist) - (user-error "`aw-make-frame-char' is `%c'; this conflicts with the same character in `aw-dispatch-alist'" value)))) - (set option value)) - -(defcustom aw-make-frame-char ?z - "Non-existing ace window label character that triggers creation of a new single-window frame for display." - :set 'aw-set-make-frame-char - :type 'character) - -(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.") - -(defface aw-key-face - '((t :inherit font-lock-builtin-face)) - "Face used by `aw-show-dispatch-help'.") - -;;* Implementation -(defun aw-ignored-p (window) - "Return t if WINDOW should be ignored when choosing from the window list." - (or (and aw-ignore-on - ;; Ignore major-modes and buffer-names in `aw-ignored-buffers'. - (or (memq (buffer-local-value 'major-mode (window-buffer window)) - aw-ignored-buffers) - (member (buffer-name (window-buffer window)) aw-ignored-buffers))) - ;; Ignore selected window if `aw-ignore-current' is non-nil. - (and aw-ignore-current - (equal window (selected-window))) - ;; When `ignore-window-parameters' is nil, ignore windows whose - ;; `no-other-window’ or `no-delete-other-windows' parameter is non-nil. - (unless ignore-window-parameters - (cl-case this-command - (ace-select-window (window-parameter window 'no-other-window)) - (ace-delete-window (window-parameter window 'no-delete-other-windows)) - (ace-delete-other-windows (window-parameter - window 'no-delete-other-windows)))))) - -(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) - (when (and aw-minibuffer-flag ace-window-mode) - (message "%s" (string-trim-left str))) - (force-mode-line-update)) - -(defun aw--dispatch-action (char) - "Return item from `aw-dispatch-alist' matching CHAR." - (assoc char aw-dispatch-alist)) - -(defun aw-make-frame () - "Make a new Emacs frame using the values of `aw-frame-size' and `aw-frame-offset'." - (make-frame - (delq nil - (list - ;; This first parameter is important because an - ;; aw-dispatch-alist command may not want to leave this - ;; frame with input focus. If it is given focus, the - ;; command may not be able to return focus to a different - ;; frame since this is done asynchronously by the window - ;; manager. - '(no-focus-on-map . t) - (when aw-frame-size - (cons 'width - (if (zerop (car aw-frame-size)) - (frame-width) - (car aw-frame-size)))) - (when aw-frame-size - (cons 'height - (if (zerop (cdr aw-frame-size)) - (frame-height) - (car aw-frame-size)))) - (cons 'left (+ (car aw-frame-offset) - (car (frame-position)))) - (cons 'top (+ (cdr aw-frame-offset) - (cdr (frame-position)))))))) - -(defun aw-use-frame (window) - "Create a new frame using the contents of WINDOW. - -The new frame is set to the same size as the previous frame, offset by -`aw-frame-offset' (x . y) pixels." - (aw-switch-to-window window) - (aw-make-frame)) - -(defun aw-clean-up-avy-current-path () - "Edit `avy-current-path' so only window label characters remain." - ;; Remove any possible ace-window command char that may - ;; precede the last specified window label, so - ;; functions can use `avy-current-path' as the chosen - ;; window label. - (when (and (> (length avy-current-path) 0) - (assq (aref avy-current-path 0) aw-dispatch-alist)) - (setq avy-current-path (substring avy-current-path 1)))) - -(defun aw-dispatch-default (char) - "Perform an action depending on CHAR." - (cond ((avy-mouse-event-window char)) - ((= char (aref (kbd "C-g") 0)) - (throw 'done 'exit)) - ((= char aw-make-frame-char) - ;; Make a new frame and perform any action on its window. - (let ((start-win (selected-window)) - (end-win (frame-selected-window (aw-make-frame)))) - (if aw-action - ;; Action must be called from the start-win. The action - ;; determines which window to leave selected. - (progn (select-frame-set-input-focus (window-frame start-win)) - (funcall aw-action end-win)) - ;; Select end-win when no action - (aw-switch-to-window end-win))) - (throw 'done 'exit)) - (t - (let ((action (aw--dispatch-action char))) - (if action - (cl-destructuring-bind (_key fn &optional description) action - (if (and fn description) - (prog1 (setq aw-action fn) - (aw-set-mode-line (format " Ace - %s" description))) - (funcall fn) - (throw 'done 'exit))) - (aw-clean-up-avy-current-path) - ;; Prevent any char from triggering an avy dispatch command. - (let ((avy-dispatch-alist)) - (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) aw-dispatch-when-more-than) - (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-delete-other-windows () - "Ace delete other windows." - (interactive) - (aw-select " Ace - Delete Other Windows" - #'delete-other-windows)) - -(define-obsolete-function-alias - 'ace-maximize-window 'ace-delete-other-windows "0.10.0") - -;;;###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)) - aw-reverse-frame-list) - ((< (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-show-dispatch-help () - "Display action shortucts in echo area." - (interactive) - (message "%s" (mapconcat - (lambda (action) - (cl-destructuring-bind (key fn &optional description) action - (format "%s: %s" - (propertize - (char-to-string key) - 'face 'aw-key-face) - (or description fn)))) - aw-dispatch-alist - "\n")) - ;; Prevent this from replacing any help display - ;; in the minibuffer. - (let (aw-minibuffer-flag) - (mapc #'delete-overlay aw-overlays-back) - (call-interactively 'ace-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))))) - -(defun aw-switch-buffer-in-window (window) - "Select buffer in WINDOW." - (aw-switch-to-window window) - (aw--switch-buffer)) - -(declare-function ivy-switch-buffer "ext:ivy") - -(defun aw--switch-buffer () - (cond ((bound-and-true-p ivy-mode) - (ivy-switch-buffer)) - ((bound-and-true-p ido-mode) - (ido-switch-buffer)) - (t - (call-interactively 'switch-to-buffer)))) - -(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)) - -(defcustom aw-fair-aspect-ratio 2 - "The aspect ratio to aim for when splitting windows. -Sizes are based on the number of characters, not pixels. -Increase to prefer wider windows, or decrease for taller windows." - :type 'number) - -(defun aw-split-window-fair (window) - "Split WINDOW vertically or horizontally, based on its current dimensions. -Modify `aw-fair-aspect-ratio' to tweak behavior." - (let ((w (window-body-width window)) - (h (window-body-height window))) - (if (< (* h aw-fair-aspect-ratio) w) - (aw-split-window-horz window) - (aw-split-window-vert window)))) - -(defun aw-switch-buffer-other-window (window) - "Switch buffer in WINDOW without selecting WINDOW." - (aw-switch-to-window window) - (aw--switch-buffer) - (aw-flip-window)) - -(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) - ;; Add at the end so does not precede select-frame call. - (add-hook 'after-make-frame-functions (lambda (_) (aw-update)) t)) - (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) - (remove-hook 'after-make-frame-functions 'aw-update))) - -(defun aw-update () - "Update ace-window-path window parameter for all windows. - -Ensure all windows are labeled so the user can select a specific -one, even from the set of windows typically ignored when making a -window list." - (let ((aw-ignore-on) - (aw-ignore-current) - (ignore-window-parameters t)) - (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/.emacs.d/elpa/ace-window-20171228.1109/ace-window.elc b/emacs/.emacs.d/elpa/ace-window-20171228.1109/ace-window.elc deleted file mode 100644 index c964a8202cae8b2942b2abd2d766c4a5207cb78f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23018 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 diff --git a/emacs/.emacs.d/elpa/anzu-20161017.907/anzu-autoloads.el b/emacs/.emacs.d/elpa/anzu-20161017.907/anzu-autoloads.el deleted file mode 100644 index a11c539..0000000 --- a/emacs/.emacs.d/elpa/anzu-20161017.907/anzu-autoloads.el +++ /dev/null @@ -1,78 +0,0 @@ -;;; anzu-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "anzu" "anzu.el" (23124 14342 908722 546000)) -;;; 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 `global-anzu-mode' command -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" "\ -Replace symbol at cursor with to-string. - -\(fn)" t nil) - -(autoload 'anzu-query-replace-at-cursor-thing "anzu" "\ -Replace symbol at cursor within `anzu-replace-at-cursor-thing' area. - -\(fn)" t nil) - -(autoload 'anzu-query-replace "anzu" "\ -anzu version of `query-replace'. - -\(fn ARG)" t nil) - -(autoload 'anzu-query-replace-regexp "anzu" "\ -anzu version of `query-replace-regexp'. - -\(fn ARG)" t nil) - -(autoload 'anzu-replace-at-cursor-thing "anzu" "\ -anzu-query-replace-at-cursor-thing without query. - -\(fn)" t nil) - -(autoload 'anzu-isearch-query-replace "anzu" "\ -anzu version of `isearch-query-replace'. - -\(fn ARG)" t nil) - -(autoload 'anzu-isearch-query-replace-regexp "anzu" "\ -anzu version of `isearch-query-replace-regexp'. - -\(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/.emacs.d/elpa/anzu-20161017.907/anzu-pkg.el b/emacs/.emacs.d/elpa/anzu-20161017.907/anzu-pkg.el deleted file mode 100644 index 650a559..0000000 --- a/emacs/.emacs.d/elpa/anzu-20161017.907/anzu-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "anzu" "20161017.907" "Show number of matches in mode-line while searching" '((emacs "24.3")) :commit "e6c56ca8b23ac433f7be58b6f3f50801dd4164e4" :url "https://github.com/syohex/emacs-anzu") diff --git a/emacs/.emacs.d/elpa/anzu-20161017.907/anzu.el b/emacs/.emacs.d/elpa/anzu-20161017.907/anzu.el deleted file mode 100644 index 58a72e8..0000000 --- a/emacs/.emacs.d/elpa/anzu-20161017.907/anzu.el +++ /dev/null @@ -1,866 +0,0 @@ -;;; 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: 20161017.907 -;; Version: 0.62 -;; Package-Requires: ((emacs "24.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: - -;; `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-mode-line-no-match - '((t (:inherit anzu-mode-line))) - "face of anzu modeline in no match case") - -(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)))) - (face (if (and (zerop total) (not (string= isearch-string ""))) - 'anzu-mode-line-no-match - 'anzu-mode-line))) - (propertize status 'face face)))) - -(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 - (setq-local 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 () - "Replace symbol at cursor with to-string." - (interactive) - (anzu--query-replace-common t :at-cursor t)) - -;;;###autoload -(defun anzu-query-replace-at-cursor-thing () - "Replace symbol at cursor within `anzu-replace-at-cursor-thing' area." - (interactive) - (anzu--query-replace-common t :at-cursor t :thing anzu-replace-at-cursor-thing)) - -;;;###autoload -(defun anzu-query-replace (arg) - "anzu version of `query-replace'." - (interactive "p") - (anzu--query-replace-common nil :prefix-arg arg)) - -;;;###autoload -(defun anzu-query-replace-regexp (arg) - "anzu version of `query-replace-regexp'." - (interactive "p") - (anzu--query-replace-common t :prefix-arg arg)) - -;;;###autoload -(defun anzu-replace-at-cursor-thing () - "anzu-query-replace-at-cursor-thing without query." - (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) - "anzu version of `isearch-query-replace'." - (interactive "p") - (anzu--isearch-query-replace-common nil arg)) - -;;;###autoload -(defun anzu-isearch-query-replace-regexp (arg) - "anzu version of `isearch-query-replace-regexp'." - (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/.emacs.d/elpa/anzu-20161017.907/anzu.elc b/emacs/.emacs.d/elpa/anzu-20161017.907/anzu.elc deleted file mode 100644 index e6388946227443d937d7b8dde2afd3ff3dacd808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35554 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 diff --git a/emacs/.emacs.d/elpa/archives/gnu/archive-contents b/emacs/.emacs.d/elpa/archives/gnu/archive-contents deleted file mode 100644 index c6d9070..0000000 --- a/emacs/.emacs.d/elpa/archives/gnu/archive-contents +++ /dev/null @@ -1,1212 +0,0 @@ -(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 3 1) - ((wisi - (1 1 6)) - (cl-lib - (0 4)) - (emacs - (24 3))) - "major-mode for editing Ada sources" tar - ((:keywords "languages" "ada") - (:url . "http://www.nongnu.org/ada-mode/"))]) - (ada-ref-man . - [(2012 3) - nil "Ada Reference Manual 2012" tar - ((:keywords "languages" "ada") - (:url . "http://stephe-leake.org/ada/arm.html"))]) - (adaptive-wrap . - [(0 5 1) - 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 3) - ((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 8 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 93) - ((cl-lib - (0 5))) - "Package for chess tournaments administration" single - ((:url . "http://elpa.gnu.org/packages/arbitools.html") - (:keywords))]) - (ascii-art-to-unicode . - [(1 11) - nil "a small artist adjunct" single - ((:url . "http://www.gnuvola.org/software/aa2u/") - (:keywords "ascii" "unicode" "box-drawing"))]) - (async . - [(1 9 2) - nil "Asynchronous processing in Emacs" tar - ((:keywords "async") - (:url . "http://elpa.gnu.org/packages/async.html"))]) - (auctex . - [(12 1 0) - 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-correct . - [(1 1 3) - nil "Remembers and automatically fixes past corrections" single - ((:url . "http://elpa.gnu.org/packages/auto-correct.html") - (:keywords "editing"))]) - (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"))]) - (bbdb . - [(3 2) - ((emacs - (24))) - "core of BBDB" tar - ((:url . "http://elpa.gnu.org/packages/bbdb.html"))]) - (beacon . - [(1 3 3) - ((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))]) - (captain . - [(1 0 3) - nil "CAPiTalization is Automatic IN emacs" single - ((:url . "http://elpa.gnu.org/packages/captain.html") - (:keywords "editing"))]) - (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 6 1) - nil "Properly prefixed CL functions and macros" single - ((:url . "http://elpa.gnu.org/packages/cl-lib.html") - (:keywords))]) - (cl-print . - [(1 0) - ((emacs - (25))) - "CL-style generic printing" single - ((:url . "http://elpa.gnu.org/packages/cl-print.html") - (:keywords))]) - (cobol-mode . - [(1 0 0) - ((cl-lib - (0 5))) - "Mode for editing COBOL code" single - ((:url . "http://elpa.gnu.org/packages/cobol-mode.html") - (:keywords "languages"))]) - (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 4) - ((emacs - (24 3))) - "Modular text completion framework" tar - ((:keywords "abbrev" "convenience" "matching") - (:url . "http://company-mode.github.io/"))]) - (company-ebdb . - [(1) - ((company - (0 9 4)) - (ebdb - (0 2))) - "company-mode completion backend for EBDB in message-mode" single - ((:url . "http://elpa.gnu.org/packages/company-ebdb.html") - (:keywords))]) - (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 3) - ((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 1 0) - ((emacs - (24 3))) - "Highlight by scope" tar - ((:keywords "convenience" "faces" "tools") - (:url . "https://github.com/jacksonrayhamilton/context-coloring"))]) - (counsel-ebdb . - [(1) - ((ivy - (0 8 0)) - (ebdb - (0 2))) - "Counsel integration for EBDB" single - ((:url . "http://elpa.gnu.org/packages/counsel-ebdb.html") - (:keywords))]) - (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 7) - 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 14) - ((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 14) - ((trie - (0 3)) - (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"))]) - (dired-du . - [(0 5) - ((emacs - (24 4)) - (cl-lib - (0 5))) - "Dired with recursive directory sizes" tar - ((:keywords "files" "unix" "convenience") - (:url . "http://elpa.gnu.org/packages/dired-du.html"))]) - (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"))]) - (ebdb . - [(0 4 2) - ((emacs - (25 1)) - (cl-lib - (0 5)) - (seq - (2 15))) - "Contact management package" tar - ((:keywords "convenience" "mail") - (:url . "https://github.com/girzel/ebdb"))]) - (ebdb-gnorb . - [(1 0 2) - ((gnorb - (1 1 0)) - (ebdb - (0 2))) - "Utilities for connecting EBDB to Gnorb" single - ((:url . "http://elpa.gnu.org/packages/ebdb-gnorb.html") - (:keywords))]) - (ebdb-i18n-chn . - [(1 2) - ((pyim - (1 6 0)) - (ebdb - (0 2))) - "China-specific internationalization support for EBDB" single - ((:url . "http://elpa.gnu.org/packages/ebdb-i18n-chn.html") - (:keywords))]) - (ediprolog . - [(1 2) - nil "Emacs Does Interactive Prolog" single - ((:url . "http://elpa.gnu.org/packages/ediprolog.html") - (:keywords "languages" "processes"))]) - (el-search . - [(1 4 0 17) - ((emacs - (25)) - (stream - (2 2 4))) - "Expression based interactive search for Emacs Lisp" 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 . - [(2 0) - ((emacs - (25 1))) - "The Emacs Network Client" tar - ((:keywords "external" "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 6) - ((emacs - (24 1)) - (fsm - (0 2)) - (soap-client - (3 1 1)) - (url-http-ntlm - (2 0 3))) - "Exchange integration" tar - ((:keywords "calendar") - (:url . "http://elpa.gnu.org/packages/excorporate.html"))]) - (exwm . - [(0 16) - ((xelb - (0 12))) - "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 12) - ((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"))]) - (gited . - [(0 3 3) - ((emacs - (24 4)) - (cl-lib - (0 5))) - "Operate on Git branches like dired" tar - ((:keywords "git" "vc" "convenience") - (:url . "http://elpa.gnu.org/packages/gited.html"))]) - (gle-mode . - [(1 1) - ((cl-lib - (0 5))) - "Major mode to edit Graphics Layout Engine files" single - ((:url . "http://elpa.gnu.org/packages/gle-mode.html") - (:keywords))]) - (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 4 2) - ((cl-lib - (0 5))) - "Glue code between Gnus, Org, and BBDB" tar - ((:keywords "mail" "org" "gnus" "bbdb" "todo" "task") - (:url . "http://elpa.gnu.org/packages/gnorb.html"))]) - (gnugo . - [(3 1 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 5) - 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"))]) - (helm-ebdb . - [(1) - ((helm - (1 0)) - (ebdb - (0 2))) - "Helm integration for EBDB" single - ((:url . "http://elpa.gnu.org/packages/helm-ebdb.html") - (:keywords "mail" "convenience"))]) - (highlight-escape-sequences . - [(0 3) - nil "Highlight escape sequences" single - ((:url . "https://github.com/dgutov/highlight-escape-sequences") - (:keywords "convenience"))]) - (hook-helpers . - [(1 1) - ((emacs - (25 1))) - "Anonymous, modifiable hook functions" tar - ((:keywords "development" "hooks") - (:url . "https://savannah.nongnu.org/projects/hook-helpers-el/"))]) - (html5-schema . - [(0 1) - nil "Add HTML5 schemas for use by nXML" tar - ((:keywords "html" "xml") - (:url . "https://github.com/validator/validator"))]) - (hydra . - [(0 14 0) - ((cl-lib - (0 5))) - "Make bindings that stick around." tar - ((:keywords "bindings") - (:url . "https://github.com/abo-abo/hydra"))]) - (hyperbole . - [(7 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 10 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 . - [(20170721) - ((emacs - (24 1)) - (cl-lib - (0 5))) - "Improved JavaScript editing mode" tar - ((:keywords "languages" "javascript") - (:url . "https://github.com/mooz/js2-mode/"))]) - (json-mode . - [(0 1) - ((emacs - (25 1))) - "Major mode for editing JSON files" single - ((:url . "http://elpa.gnu.org/packages/json-mode.html") - (:keywords "data"))]) - (jumpc . - [(3 0) - nil "jump to previous insertion points" single - ((:url . "http://elpa.gnu.org/packages/jumpc.html") - (:keywords))]) - (kmb . - [(0 1) - ((emacs - (24 1))) - "Kill buffers matching a regexp w/o confirmation" single - ((:url . "http://elpa.gnu.org/packages/kmb.html") - (:keywords "lisp" "convenience"))]) - (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 5) - ((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) - ((emacs - (24)) - (cl-lib - (0 5))) - "Little Man Computer in Elisp" single - ((:url . "http://elpa.gnu.org/packages/lmc.html") - (:keywords))]) - (load-dir . - [(0 0 5) - ((cl-lib - (0 5))) - "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 3) - 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 3) - ((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 3) - ((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"))]) - (mines . - [(1 2) - ((emacs - (24 4)) - (cl-lib - (0 5))) - "Minesweeper game" tar - ((:keywords "games") - (:url . "https://github.com/calancha/Minesweeper"))]) - (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 2) - ((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 8 1) - 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 1 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-edna . - [(1 0 -2 4) - ((emacs - (25 1)) - (seq - (2 19)) - (org - (9 0 5))) - "Extensible Dependencies 'N' Actions" tar - ((:keywords "convenience" "text" "org") - (:url . "https://savannah.nongnu.org/projects/org-edna-el/"))]) - (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 4) - ((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))]) - (paced . - [(1 0) - ((emacs - (25 1)) - (async - (1 9 1))) - "Predictive Abbreviation Completion and Expansion using Dictionaries" tar - ((:keywords "convenience" "completion") - (:url . "https://savannah.nongnu.org/projects/paced-el/"))]) - (parsec . - [(0 1 3) - ((emacs - (24)) - (cl-lib - (0 5))) - "Parser combinator library" tar - ((:keywords "extensions") - (:url . "https://github.com/cute-jumper/parsec.el"))]) - (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"))]) - (psgml . - [(1 3 4) - nil "SGML-editing mode with parsing support" tar - ((:keywords "languages") - (:url . "http://elpa.gnu.org/packages/psgml.html"))]) - (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 2) - nil "Queue data structure" single - ((:url . "http://www.dr-qubit.org/emacs.php") - (:keywords "extensions" "data structures" "queue"))]) - (rainbow-mode . - [(0 13) - nil "Colorize color names in buffers" single - ((:url . "http://elpa.gnu.org/packages/rainbow-mode.html") - (:keywords "faces"))]) - (rcirc-color . - [(0 3) - nil "color nicks" single - ((:url . "http://elpa.gnu.org/packages/rcirc-color.html") - (:keywords "comm"))]) - (rcirc-menu . - [(1 1) - nil "A menu of all your rcirc connections" single - ((:url . "http://elpa.gnu.org/packages/rcirc-menu.html") - (:keywords "comm"))]) - (realgud . - [(1 4 4) - ((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 - ((:keywords "gdb" "python" "perl" "go" "bash" "nodejs" "zsh" "bashdb" "zshdb" "remake" "make" "trepan" "perldb") - (: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 2) - 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 1) - ((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 20) - 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 8) - ((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 3) - ((cl-lib - (0 6 1))) - "Access SOAP web services" tar - ((:keywords "soap" "web-services" "comm" "hypermedia") - (:url . "http://elpa.gnu.org/packages/soap-client.html"))]) - (sokoban . - [(1 4 6) - ((emacs - (23 1))) - "Implementation of Sokoban for Emacs." tar - ((:keywords "games") - (:url . "http://elpa.gnu.org/packages/sokoban.html"))]) - (sotlisp . - [(1 6 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 3) - 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"))]) - (sql-indent . - [(1 0) - nil "Support for indenting code in SQL files." tar - ((:keywords "languages" "sql") - (:url . "http://elpa.gnu.org/packages/sql-indent.html"))]) - (stream . - [(2 2 4) - ((emacs - (25))) - "Implementation of streams" tar - ((:keywords "stream" "laziness" "sequences") - (:url . "http://elpa.gnu.org/packages/stream.html"))]) - (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 3 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 2 1) - nil "Quickly generate linear ranges in Emacs" tar - ((:keywords "convenience") - (:url . "https://github.com/abo-abo/tiny"))]) - (tramp-theme . - [(0 2) - ((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 4) - ((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 4) - ((cl-lib - (0 5)) - (ntlm - (2 1 0))) - "NTLM authentication for the url library" single - ((:url . "http://elpa.gnu.org/packages/url-http-ntlm.html") - (:keywords "comm" "data" "processes" "hypermedia"))]) - (validate . - [(1 0 4) - ((emacs - (24 1)) - (cl-lib - (0 5)) - (seq - (2 16))) - "Schema validation for Emacs-lisp" single - ((:url . "http://elpa.gnu.org/packages/validate.html") - (:keywords "lisp"))]) - (vdiff . - [(0 2 3) - ((emacs - (24 4)) - (hydra - (0 13 0))) - "A diff tool similar to vimdiff" single - ((:url . "https://github.com/justbur/emacs-vdiff") - (:keywords "diff"))]) - (vigenere . - [(1 0) - ((emacs - (25 1))) - "Run a vigenere cipher on a block of text ;" single - ((:url . "https://elpa.gnu.org/packages/vigenere.html") - (:keywords "data" "vigenere" "cipher"))]) - (vlf . - [(1 7 1) - 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 1) - ((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 8) - ((cl-lib - (0 5))) - "Emacs WebSocket client and server" tar - ((:keywords "communication" "websocket" "server") - (:url . "http://elpa.gnu.org/packages/websocket.html"))]) - (which-key . - [(3 0 2) - ((emacs - (24 4))) - "Display available keybindings in popup" tar - ((:url . "https://github.com/justbur/emacs-which-key"))]) - (windresize . - [(0 1) - nil "Resize windows interactively" single - ((:url . "http://elpa.gnu.org/packages/windresize.html") - (:keywords "window"))]) - (wisi . - [(1 1 6) - ((cl-lib - (0 4)) - (emacs - (24 3))) - "Utilities for implementing an indentation/navigation engine using a generalized LALR parser" tar - ((:keywords "parser" "indentation" "navigation") - (:url . "http://www.nongnu.org/ada-mode/wisi/wisi.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 4) - nil "use xclip to copy&paste" single - ((:url . "http://elpa.gnu.org/packages/xclip.html") - (:keywords "convenience" "tools"))]) - (xelb . - [(0 12) - ((emacs - (24 4)) - (cl-generic - (0 2))) - "X protocol Emacs Lisp Binding" tar - ((:keywords "unix") - (:url . "https://github.com/ch11ng/xelb"))]) - (xpm . - [(1 0 4) - nil "edit XPM images" tar - ((:keywords "multimedia" "xpm") - (:url . "http://www.gnuvola.org/software/xpm/"))]) - (yasnippet . - [(0 12 2) - ((cl-lib - (0 5))) - "Yet another snippet extension for Emacs." tar - ((:keywords "convenience" "emulation") - (:url . "http://github.com/joaotavora/yasnippet"))]) - (ztree . - [(1 0 5) - ((cl-lib - (0))) - "Text mode directory tree" tar - ((:keywords "files" "tools") - (:url . "https://github.com/fourier/ztree"))])) diff --git a/emacs/.emacs.d/elpa/archives/gnu/archive-contents.signed b/emacs/.emacs.d/elpa/archives/gnu/archive-contents.signed deleted file mode 100644 index 76436d7..0000000 --- a/emacs/.emacs.d/elpa/archives/gnu/archive-contents.signed +++ /dev/null @@ -1 +0,0 @@ -Good signature from 474F05837FBDEF9B GNU ELPA Signing Agent (trust undefined) created at 2018-01-08T23:10:02+0100 using DSA \ No newline at end of file diff --git a/emacs/.emacs.d/elpa/archives/melpa/archive-contents b/emacs/.emacs.d/elpa/archives/melpa/archive-contents deleted file mode 100644 index 37e78b1..0000000 --- a/emacs/.emacs.d/elpa/archives/melpa/archive-contents +++ /dev/null @@ -1,2 +0,0 @@ - -(1 (zzz-to-char . [(20171231 2219) ((emacs (24 4)) (cl-lib (0 5)) (avy (0 3 0))) "Fancy version of `zap-to-char' command" single ((:commit . "8ddda49de3356d8fa0308d79b5d68272baf2c57b") (:url . "https://github.com/mrkkrp/zzz-to-char") (:keywords "convenience"))]) (zygospore . [(20140703 152) nil "reversible C-x 1 (delete-other-windows)" single ((:commit . "1af5ee663f5a7aa08d96a77cacff834dcdf55ea8") (:url . "https://github.com/louiskottmann/zygospore.el"))]) (zweilight-theme . [(20170112 2205) nil "A dark color theme for Emacs." single ((:commit . "7f45ab9e23164d65538edb2beb9692ecdc24c31e") (:url . "http://github.com/philiparvidsson/zweilight-emacs"))]) (ztree . [(20170223 1014) ((cl-lib (0))) "Text mode directory tree" tar ((:commit . "febc2d02373312ce69f56c9dbe54cabea3e0813c") (:url . "https://github.com/fourier/ztree") (:keywords "files" "tools"))]) (zpresent . [(20171008 2152) ((emacs (25 1)) (org-parser (0 4)) (dash (2 12 0)) (request (0 3 0))) "Simple presentation mode based on org files." single ((:url . "https://bitbucket.org/zck/zpresent.el") (:keywords "comm"))]) (zoutline . [(20170722 651) nil "Simple outline library." single ((:commit . "e86e739b53a1c8a0a2cf6de43dffabb15d465507") (:url . "https://github.com/abo-abo/zoutline") (:keywords "outline"))]) (zotxt . [(20170109 2040) ((request-deferred (0 2 0))) "Tools to integrate emacs with Zotero via the zotxt plugin." tar ((:commit . "1a010ea5db617269adc132e4cc028a44d9b629bd"))]) (zotelo . [(20160602 249) ((cl-lib (0 5))) "Manage Zotero collections from emacs" single ((:commit . "d9dc089b9adfcc70a63f2a84269a12eb7cb4c748") (: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 ((:commit . "991676635c374d2a12714dcf48c1ce2d6f97a375") (:url . "https://github.com/technomancy/zossima") (:keywords "ruby" "convenience"))]) (zop-to-char . [(20160212 754) ((cl-lib (0 5))) "A replacement of zap-to-char." single ((:commit . "816ea90337db0545a2f0a5079f4d7b3a2822af7d") (:url . "https://github.com/thierryvolpiatto/zop-to-char"))]) (zoom-window . [(20170302 27) ((emacs (24 3))) "Zoom window like tmux" single ((:commit . "cd6ecc103fc30b171bda7daf1f44a550854d0dbf") (:url . "https://github.com/syohex/emacs-zoom-window"))]) (zoom-frm . [(20170309 1439) ((frame-fns (0)) (frame-cmds (0))) "Commands to zoom frame font size." single ((:url . "https://www.emacswiki.org/emacs/download/zoom-frm.el") (:keywords "frames" "extensions" "convenience"))]) (zoom . [(20171110 715) ((emacs (24 4))) "Fixed and automatic balanced window layout" single ((:commit . "d4f417b24fe022b6512a1a0ffebf898044393250") (:url . "https://github.com/cyrus-and/zoom") (:keywords "frames"))]) (zones . [(20170802 1406) nil "Zones of text - like multiple regions" single ((:url . "https://www.emacswiki.org/emacs/download/zones.el") (:keywords "narrow" "restriction" "widen" "region" "zone"))]) (zone-sl . [(20160201 410) ((emacs (24 3))) "Zone out with steam locomotives." single ((:commit . "7ec22e3661c6348382f9fc39a9d0063dbd2352ff") (:url . "https://github.com/kawabata/zone-sl") (:keywords "games"))]) (zone-select . [(20160118 619) ((emacs (24 3)) (dash (2 8))) "Select zone programs." single ((:commit . "bf30da12f1625fe6563448fccf3c506acad10af7") (:url . "https://github.com/kawabata/zone-select") (:keywords "games"))]) (zone-rainbow . [(20160120 534) ((emacs (24 3))) "Zone out with rainbow." single ((:commit . "2ba4f1a87c69c4712124ebf12c1f3ea171e1af36") (:url . "https://github.com/kawabata/zone-rainbow") (:keywords "games"))]) (zone-nyan . [(20170818 944) ((esxml (0 3 1))) "Zone out with nyan cat" single ((:commit . "4b1f8d95f130946718d52806489ffe2762aebfdc") (: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 ((:commit . "7f0c45fdda3a44c3b6d1762d116abb1421b8fba2") (:keywords "languages"))]) (zombie . [(20141222 816) nil "major mode for editing ZOMBIE programs" single ((:commit . "ff8cd1b4cdbb4b0b9b8fd1ec8f6fb93eba249345") (:url . "http://hins11.yu-yake.com/"))]) (znc . [(20160627 1332) ((cl-lib (0 2))) "ZNC + ERC" single ((:commit . "ce468d185e4a949c45fdd7586313144bc69d4fe5") (:url . "https://github.com/sshirokov/ZNC.el"))]) (zlc . [(20151010 1857) nil "Provides zsh like completion system to Emacs" single ((:commit . "4dd2ba267ecdeac845a7cbb3147294ee7daa25f4") (:keywords "matching" "convenience"))]) (zig-mode . [(20170920 802) ((emacs (24))) "A major mode for the Zig programming language" single ((:commit . "814657c5b6b0600ace78a7bbd216c3e90d611cfd") (:url . "https://github.com/AndreaOrru/zig-mode") (:keywords "zig" "languages"))]) (zerodark-theme . [(20180103 535) ((all-the-icons (2 0 0)) (magit (2 8 0)) (flycheck (29))) "A dark, medium contrast theme for Emacs" single ((:commit . "12ca2cc6348decc964c148c36a3cde0846f4fc1a") (:url . "https://github.com/NicolasPetton/zerodark-theme") (:keywords "themes"))]) (zephir-mode . [(20170917 2125) ((cl-lib (0 5)) (pkg-info (0 4)) (emacs (24 3))) "Major mode for editing Zephir code" single ((:commit . "c2c6b7451667e68e29c353616f54ef9195c3fffd") (:url . "https://github.com/sergeyklay/zephir-mode") (:keywords "languages"))]) (zenity-color-picker . [(20160302 354) ((emacs (24 4))) "Insert and adjust colors using Zenity" single ((:commit . "4f4f46676a461ebc881487fb70c8c181e323db5e") (:url . "https://bitbucket.org/Soft/zenity-color-picker.el") (:keywords "colors"))]) (zencoding-mode . [(20140213 22) nil "Unfold CSS-selector-like expressions to markup" single ((:commit . "58e42af182c98cb9941d27cd042d227fbf4e146c") (:url . "https://github.com/rooney/zencoding") (:keywords "convenience"))]) (zenburn-theme . [(20171216 1027) nil "A low contrast color theme for Emacs." single ((:commit . "62d91fd7c054b0747f1309c012976deb471d4608") (:url . "http://github.com/bbatsov/zenburn-emacs"))]) (zen-and-art-theme . [(20120622 737) nil "zen and art color theme for GNU Emacs 24" single ((:commit . "a7226cbce0bca2501d69a620cb2aeabfc396c232"))]) (zel . [(20171014 132) ((emacs (25)) (frecency (0 1))) "Access frecent files easily" single ((:commit . "9dae2d212224d1deae1f62561fa8e4d689fd09f2") (:url . "https://github.com/rudolfochrist/zel") (:keywords "convenience" "files" "matching"))]) (zeal-at-point . [(20170427 2042) nil "Search the word at point with Zeal" single ((:commit . "50a1bd4240ff0db7c8f2046c3b00c5a8e14b9d2f") (:url . "https://github.com/jinzhu/zeal-at-point"))]) (z3-mode . [(20151120 1455) ((flycheck (0 23)) (emacs (24))) "A z3/SMTLIBv2 interactive development environment" single ((:commit . "163dc01d59e9880b4dc188d4e1ad84d6c0c852e1") (:url . "https://github.com/zv/z3-mode") (:keywords "z3" "yices" "mathsat" "smt" "beaver"))]) (youdao-dictionary . [(20170226 49) ((popup (0 5 0)) (pos-tip (0 4 6)) (chinese-word-at-point (0 2)) (names (0 5)) (emacs (24))) "Youdao Dictionary interface for Emacs" single ((:commit . "44548f56a1c736e6a7fae4546657bff0a94bf3cb") (:url . "https://github.com/xuchunyang/youdao-dictionary.el") (:keywords "convenience" "chinese" "dictionary"))]) (yoshi-theme . [(20170330 0) nil "Theme named after my cat" single ((:commit . "eab4fb67e8fec47c25c4c1393ac1211f043dbd44") (:url . "http://projects.ryuslash.org/yoshi-theme/") (:keywords "faces"))]) (yoficator . [(20171206 1630) nil "Interactively yoficate Russian texts" tar ((:commit . "5ad60258097147cdd8d71147722cc4203a59a0b0") (:url . "https://gitlab.com/link2xt/yoficator"))]) (yesql-ghosts . [(20150220 437) ((s (1 9 0)) (dash (2 10 0)) (cider (0 8 0))) "Display ghostly yesql defqueries inline" single ((:commit . "8f1faf0137b85a5072d13e1240a463d9a35ce2bb"))]) (ydk-mode . [(20170113 121) nil "Language support for Yu-Gi-Oh! deck files" single ((:commit . "f3f125b29408e0b0a34fec27dcb7c02c5dbfd04e") (:url . "https://github.com/jacksonrayhamilton/ydk-mode") (:keywords "faces" "games" "languages" "ydk" "yugioh" "yu-gi-oh"))]) (ycmd . [(20171111 854) ((emacs (24 4)) (dash (2 13 0)) (s (1 11 0)) (deferred (0 5 1)) (cl-lib (0 6 1)) (let-alist (1 0 5)) (request (0 3 0)) (request-deferred (0 3 0)) (pkg-info (0 6))) "emacs bindings to the ycmd completion server" tar ((:commit . "7f394d02f6f3149b215adcc96043c78d5f32d612") (:url . "https://github.com/abingham/emacs-ycmd"))]) (ycm . [(20150822 1136) nil "Emacs client for the YouCompleteMe auto-completion server." single ((:commit . "4da8a14abcd0f4fa3235042ade2e12b5068c0601") (:keywords "c" "abbrev"))]) (yaxception . [(20150105 652) nil "Provide framework about exception like Java for Elisp" single ((:commit . "4e94cf3e0b9b5631b0e90eb4b7de597ee7185875") (:url . "https://github.com/aki2o/yaxception") (:keywords "exception" "error" "signal"))]) (yatex . [(20180106 654) nil "Yet Another tex-mode for emacs //野鳥//" tar nil]) (yatemplate . [(20161108 1305) ((yasnippet (0 8 1)) (emacs (24 3))) "File templates with yasnippet" tar ((:commit . "07da11de32feb6cbce0f8c140c0304e3ba1b42c0") (:url . "https://github.com/mineo/yatemplate") (:keywords "files" "convenience"))]) (yasnippet-snippets . [(20180107 147) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:commit . "3ab16fb46517d3f084ce838bb5fce71d22601a16") (:keywords "snippets"))]) (yasnippet . [(20180102 1824) ((cl-lib (0 5))) "Yet another snippet extension for Emacs." tar ((:commit . "04062d8b4f7391069058345e1efd673add0357f8") (:url . "http://github.com/joaotavora/yasnippet") (:keywords "convenience" "emulation"))]) (yascroll . [(20170315 1206) ((cl-lib (0 3))) "Yet Another Scroll Bar Mode" single ((:commit . "fe4494e5f4faf2832e665c7de0fed99cdbb39478") (:keywords "convenience"))]) (yarn-mode . [(20170709 1237) ((emacs (24 3))) "Major mode for yarn.lock files." single ((:commit . "998b408d6be05fd1c3a9fd8db6ffaab3bf86d06b") (:url . "https://github.com/anachronic/yarn-mode") (:keywords "convenience"))]) (yari . [(20151127 2339) nil "Yet Another RI interface for Emacs" single ((:commit . "a2cb9656ee5dfe1fc2ee3854f3079a1c8e85dbe9") (:keywords "tools"))]) (yard-mode . [(20170817 537) nil "Minor mode for Ruby YARD comments" single ((:commit . "ba74a47463b0320ae152bd42a7dd7aeecd7b5748") (:url . "https://github.com/pd/yard-mode.el"))]) (yara-mode . [(20170719 2351) ((emacs (24))) "Major mode for editing yara rule file" single ((:commit . "af5c05b34a29fc1bd73a6d21c82cc76320b33e5c") (:url . "not distributed yet") (:keywords "yara"))]) (yapfify . [(20180105 1447) nil "(automatically) format python buffers using YAPF." single ((:commit . "9e63a9135bd8dbfbee55819837a3aa0d119c5e6f") (:url . "https://github.com/JorisE/yapfify"))]) (yaoddmuse . [(20170325 1752) nil "Major mode for EmacsWiki and other Oddmuse wikis" single ((:url . "http://www.emacswiki.org/emacs/download/yaoddmuse.el") (:keywords "yaoddmuse" "oddmuse"))]) (yankpad . [(20171221 636) ((emacs (24))) "Paste snippets from an org-mode file" single ((:commit . "aa643aeaaf72fa19c4610ce47088a1fbc4e33ecb") (:url . "http://github.com/Kungsgeten/yankpad") (:keywords "abbrev" "convenience"))]) (yang-mode . [(20170323 1104) nil "major mode for editing YANG files" single ((:commit . "0d5d5df86dbb6cbb2de3c0f2d0d5f8c8f29d0695"))]) (yandex-weather . [(20160311 1237) nil "Fetch Yandex Weather forecasts." tar ((:commit . "6f823fd9e04ff9efb2aa65f333079e9f7e6e5b28"))]) (yaml-tomato . [(20151122 2353) ((s (1 9))) "copy or show the yaml path currently under cursor." single ((:commit . "f9df1c9bdfcec629b03031b2d2032f9dc533cb14") (:keywords "yaml"))]) (yaml-mode . [(20170727 1531) ((emacs (24 1))) "Major mode for editing YAML files" single ((:commit . "28c34033194130d452d5c958b5241c88d42ca02b") (:keywords "data" "yaml"))]) (yalinum . [(20130217 243) nil "yet another display line numbers." single ((:commit . "d3e0cbe3f4f5ca311e3298e684901d6fea3ad973") (:keywords "convenience" "tools"))]) (yahtzee . [(20171022 712) ((emacs (24 3))) "The yahtzee game" single ((:commit . "b851eb86a8a78378ad0f734e2c56f3f5f4d052ec") (:url . "https://github.com/drdv/yahtzee") (:keywords "games"))]) (yahoo-weather . [(20170822 1544) ((emacs (24))) "Displays weather information in mode-line" single ((:commit . "a74e29bc81b13efe285b87fa4d0694d75f8e2bb5") (: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 ((:commit . "dcdbd84f348414815d02f3da8a6ee0ac271632d4") (:url . "https://github.com/mhayashi1120/yagist.el") (:keywords "tools"))]) (yafolding . [(20170304 1917) nil "Yet another folding extension for Emacs" single ((:commit . "57c015ddd7c3454571c80825bc5391d7a10fa1d7") (:keywords "folding"))]) (yabin . [(20140205 1951) nil "Yet Another Bignum package (A thin wrapper of calc.el)." single ((:commit . "db8c404507560ef9147fcce2b94cd706fbfa03b5") (:keywords "data"))]) (xwidgete . [(20171118 1316) ((emacs (25))) "enhances usability of current xwidget browser" single ((:commit . "e4e8410fe32176df85b46234717824519443fb04") (:url . "https://github.com/tuhdo/xwidgete") (:keywords "xwidgete" "tools"))]) (xtest . [(20141214 906) ((cl-lib (0 5))) "Simple Testing with Emacs & ERT" single ((:commit . "2c2bdf32667506dd9ddf6eb311832add616bdf1c") (:url . "https://github.com/promethial/xtest") (:keywords "testing" "ert"))]) (xterm-title . [(20091203 1023) nil "Update xterm titles" single ((:commit . "b6ea73d297d191d48bba7dd1e2adc23bbdfa1c3c"))]) (xterm-keybinder . [(20160522 1756) ((emacs (24 3)) (cl-lib (0 5)) (let-alist (1 0 1))) "Let you extra keybinds in xterm/urxvt" tar ((:commit . "b29c4f700b0fa0c9f627f6725b36462b8fab06d6") (:keywords "convenient"))]) (xterm-frobs . [(20161207 1609) nil "manipulate xterm when running emacs in tty mode" single ((:commit . "0832d588598dbf6bd8aa8e05c611d7c098c3f9d8"))]) (xterm-color . [(20170102 1525) ((cl-lib (0 5))) "ANSI & XTERM 256 color support" single ((:commit . "5873477fd7bd6e54142ab35fbc623ea9b55200aa") (:url . "https://github.com/atomontage/xterm-color") (:keywords "faces"))]) (xresources-theme . [(20160331 702) nil "Use your .Xresources as your emacs theme" single ((:commit . "feb0552d31cb54210eabbc1abe32c8ea62841b6f") (:keywords "xresources" "theme"))]) (xref-js2 . [(20170530 126) ((emacs (25)) (js2-mode (20150909))) "Jump to references/definitions using ag & js2-mode's AST" single ((:commit . "d5f93605405989529c2f66b542def6c32429b927") (:url . "https://github.com/NicolasPetton/xref-js2") (:keywords "javascript" "convenience" "tools"))]) (xquery-tool . [(20170605 126) nil "A simple interface to saxonb's xquery." single ((:commit . "0d1e2960c48701b83be5255d56324f65a6ee182e") (:url . "https://github.com/paddymcall/xquery-tool.el") (:keywords "xml" "xquery" "emacs"))]) (xquery-mode . [(20170214 319) ((cl-lib (0 5))) "A simple mode for editing xquery programs" single ((:commit . "1b655ccf83d02a7bd473d2cf02359ed60bdf7369") (:url . "https://github.com/xquery-mode/xquery-mode"))]) (xo . [(20160402 2346) nil "XO linter integration with compilation mode" single ((:commit . "72fcd867cfa332fdb82f732925cf8977e690af78") (:keywords "processes"))]) (xmlunicode . [(20160319 912) nil "Unicode support for XML" tar ((:commit . "f5d185da46414c0509ebd0aa0fab416becf94612") (:keywords "utf-8" "unicode" "xml" "characters"))]) (xmlgen . [(20170411 617) nil "A DSL for generating XML." single ((:commit . "dba66681f0c5e621a9e70e8afb34903c9ffe93c4"))]) (xml-rpc . [(20160430 1458) nil "An elisp implementation of clientside XML-RPC" single ((:commit . "0ab093d60140d19e31d217c8abdc7dbdac944486") (:url . "http://github.com/hexmode/xml-rpc-el") (:keywords "xml" "rpc" "network"))]) (xml-quotes . [(20151230 1449) nil "read quotations from an XML document" tar ((:commit . "26db170e80b9295861227cdf970721b12539ed44") (:url . "https://github.com/ndw/xml-quotes") (:keywords "xml" "quotations"))]) (xml+ . [(20170727 1651) ((emacs (24 4)) (dash (2 12 0))) "Utilities for xml and html trees" single ((:commit . "232fa863c08fc159b21dd58c39ea45dce3334895") (:url . "https://github.com/bddean/xml-plus") (:keywords "xml" "html"))]) (xkcd . [(20160419 430) ((json (1 3))) "View xkcd from Emacs" single ((:commit . "66e928706fd660cfdab204c98a347b49c4267bdf") (:url . "https://github.com/vibhavp/emacs-xkcd") (:keywords "xkcd" "webcomic"))]) (xcscope . [(20160628 2324) nil "cscope interface for (X)Emacs" single ((:commit . "1e4c8e60eb841a3ecb56ff4115b6a8ae5c0bf779") (:url . "https://github.com/dkogan/xcscope.el") (:keywords "languages" "c"))]) (xcode-project . [(20170922 612) ((emacs (25))) "A package for reading Xcode project files." tar ((:commit . "ec5d503a51430205daa6f5f382d921b6412b4b55") (:url . "https://github.com/nhojb/xcode-project.git") (:keywords "languages" "tools"))]) (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 ((:commit . "2ae4f512d6c601ea39d5ab785c2b5288eac24b59") (:keywords "conveniences"))]) (xbm-life . [(20160103 217) nil "A XBM version of Conway's Game of Life" single ((:commit . "dd6a98ac9ea81b681e68f6318fed47158e5d469e") (:url . "https://github.com/wasamasa/xbm-life") (:keywords "games"))]) (xahk-mode . [(20170821 407) ((emacs (24 1))) "Major mode for editing AutoHotkey scripts." single ((:commit . "02012b20603c00e3b2ef32159a690ed1e05d12c3") (:url . "http://xahlee.info/mswin/emacs_autohotkey_mode.html") (:keywords "languages"))]) (xah-replace-pairs . [(20170823 2028) ((emacs (24 1))) "emacs lisp functions for multi-pair find/replace." single ((:commit . "f051772e097723bafd05a7a05f283b900375ebd7") (:url . "http://ergoemacs.org/emacs/elisp_replace_string_region.html") (:keywords "lisp" "tools" "find replace"))]) (xah-reformat-code . [(20170821 411) nil "commands to reformat source code." single ((:commit . "7fec8b28e46b8cc2813fac5149e3bbb56c0aa6b1") (:url . "http://ergoemacs.org/emacs/emacs_reformat_lines.html") (:keywords "convenience"))]) (xah-math-input . [(20170905 849) ((emacs (24 1))) "a minor mode for inputting math and Unicode symbols." single ((:commit . "fcdfbed46ff81c8da84422611e0009c6b267e359") (:url . "http://ergoemacs.org/emacs/xmsi-math-symbols-input.html") (:keywords "abbrev" "convenience" "unicode" "math" "latex"))]) (xah-lookup . [(20171108 241) ((emacs (24 1))) "look up word on internet." single ((:commit . "3029d8ec04e841c57b7482c244a1733eb4c77cb5") (:url . "http://ergoemacs.org/emacs/xah-lookup.html") (:keywords "help" "docs" "convenience"))]) (xah-get-thing . [(20170821 353) ((emacs (24 1))) "get thing or selection at point." single ((:commit . "e3ef069ea9fea3a092689d45c94c6211b51d0ea4") (:url . "http://ergoemacs.org/emacs/elisp_get-selection-or-unit.html") (:keywords "extensions" "lisp" "tools"))]) (xah-fly-keys . [(20180107 1546) ((emacs (24 1))) "ergonomic modal keybinding minor mode." single ((:commit . "c7ebabe6ccff0bce35cf7feb1cef34f4c69aee50") (:url . "http://ergoemacs.org/misc/ergoemacs_vi_mode.html") (:keywords "convenience" "emulations" "vim" "ergoemacs"))]) (xah-find . [(20170821 358) ((emacs (24 1))) "find replace in pure emacs lisp. Purpose similar to grep/sed." single ((:commit . "6b7a60d6210d42559b46f0e17d7a0e4a2607f887") (:url . "http://ergoemacs.org/emacs/elisp-xah-find-text.html") (:keywords "convenience" "extensions" "files" "tools" "unix"))]) (xah-elisp-mode . [(20170828 1) ((emacs (24 3))) "Major mode for editing emacs lisp." single ((:commit . "6e94446566df206911afa107d06aec50ac3a56fc") (:url . "http://ergoemacs.org/emacs/xah-elisp-mode.html") (:keywords "lisp" "languages"))]) (xah-css-mode . [(20170821 400) ((emacs (24 3))) "Major mode for editing CSS code." single ((:commit . "7167c7a9a0f0dcc167dafa833efd43a0c9ae4307") (:url . "http://ergoemacs.org/emacs/xah-css-mode.html") (:keywords "languages" "convenience" "css" "color"))]) (x86-lookup . [(20161215 448) ((emacs (24 3)) (cl-lib (0 3))) "jump to x86 instruction documentation" single ((:commit . "544a1ad4e8551c60e58e6c431470b6ef4ce7c5cb") (:url . "https://github.com/skeeto/x86-lookup"))]) (x509-mode . [(20170909 632) ((emacs (24 1)) (cl-lib (0 5))) "View certificates, CRLs and keys using OpenSSL." tar ((:commit . "240b5045dcce18190bdabd91d74f48d3610a6fe2"))]) (x-path-walker . [(20160922 1135) ((helm-core (1 9 2))) "Navigation feature for JSON/XML/HTML based on path (imenu like)" tar ((:commit . "3b01dbd7a039c6c84fdf8c8ee53ba72090ee950a") (:keywords "convenience"))]) (x-dict . [(20091203 1023) nil "emacs interface for several online dictionaries" single ((:commit . "920b2430bff9fb8c4bb7944aa358622545c00cee"))]) (www-synonyms . [(20170128 1451) ((request (0 2 0)) (cl-lib (0 5))) "insert synonym for a word" single ((:commit . "7e37ea35064ff31c9945f0198a653647d408c936") (:keywords "lisp"))]) (wwtime . [(20151122 810) nil "Insert a time of day with appropriate world-wide localization" single ((:commit . "d04d8fa814b5d3644efaeb28f25520ada69acbbd") (:keywords "time"))]) (wttrin . [(20170614 506) ((emacs (24 4)) (xterm-color (1 0))) "Emacs frontend for weather web service wttr.in" single ((:commit . "df5427ce2a5ad4dab652dbb1c4a1834d7ddc2abc") (:url . "https://github.com/bcbcarl/emacs-wttrin") (:keywords "comm" "weather" "wttrin"))]) (wsd-mode . [(20170731 837) nil "Emacs major-mode for www.websequencediagrams.com" tar ((:commit . "566ae4b45b4a34b985f1b363d6cdbd463ab6aba6") (:url . "https://github.com/josteink/wsd-mode") (:keywords "wsd" "diagrams" "design" "process" "modelling" "uml"))]) (ws-butler . [(20170111 1534) nil "Unobtrusively remove trailing whitespace." single ((:commit . "80dabd5d158929e8433e46207bb521282b21e4f3") (:url . "https://github.com/lewang/ws-butler"))]) (writeroom-mode . [(20170623 327) ((emacs (24 1)) (visual-fill-column (1 9))) "Minor mode for distraction-free writing" tar ((:commit . "9e924dd7dd83f10b026c89cddef7e1646f1a3869") (:keywords "text"))]) (writegood-mode . [(20170925 647) nil "Polish up poor writing on the fly" single ((:commit . "416453af5a44da52646052fa2ee3a63acfd7bf8a") (: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 ((:commit . "fbae9b0f106187af19823f1a6260b5c68b7252e6") (:url . "http://github.com/rejeep/wrap-region") (:keywords "speed" "convenience"))]) (wotd . [(20170328 1248) ((emacs (24 4)) (org (8 2 10))) "Fetch word-of-the-day from multiple online sources" single ((:commit . "d2937a3d91e014f8028a1f33d21c18cc0b065a64") (:keywords "extensions"))]) (world-time-mode . [(20140627 107) nil "show whole days of world-time diffs" single ((:commit . "ce7a3b45c87eb24cfe61eee453175d64f741d7cc") (: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 ((:commit . "928d509157ec8a4a2e343b6115dff034c3243a7a") (:url . "https://github.com/pashinin/workgroups2") (:keywords "session" "management" "window-configuration" "persistence"))]) (workgroups . [(20110726 941) nil "workgroups for windows (for Emacs)" single ((:commit . "9572b3492ee09054dc329f64ed846c962b395e39") (:keywords "session" "management" "window-configuration" "persistence"))]) (worf . [(20171002 1118) ((swiper (0 7 0)) (ace-link (0 1 0)) (hydra (0 13 0)) (zoutline (0 1 0))) "A warrior does not press so many keys! (in org-mode)" tar ((:commit . "cf2f382b368bcb3c8ba4785a7fac8ee9300e80b5") (:url . "https://github.com/abo-abo/worf") (:keywords "lisp"))]) (wordsmith-mode . [(20171025 730) nil "Syntax analysis and NLP text-processing in Emacs (OSX-only)" single ((:commit . "589a97412138145bea70e0450eeddeb7f138d538"))]) (wordnut . [(20151002 1457) ((emacs (24 4))) "Major mode interface to WordNet" tar ((:commit . "6e223dced5b865e9d38af6f9b7e57b3a56d362bb"))]) (wordgen . [(20170803 1120) ((emacs (24)) (cl-lib (0 5))) "Random word generator" single ((:commit . "aacad928ae99a953e034a831dfd0ebdf7d52ac1d") (:url . "https://github.com/Fanael/wordgen.el"))]) (wonderland . [(20130912 1819) ((dash (2 0 0)) (dash-functional (1 0 0)) (multi (2 0 0)) (emacs (24))) "declarative configuration for Emacsen" single ((:commit . "89d274ad694b0e748efdac23ccd60b7d8b73d7c6") (:url . "http://github.com/kurisuwhyte/emacs-wonderland") (:keywords "configuration" "profile" "wonderland"))]) (wolfram . [(20170122 2356) nil "Wolfram Alpha Integration" single ((:commit . "6b5dceae3fd6cdb4d7562510deeafa02c93c010b") (:keywords "math"))]) (wn-mode . [(20151109 2152) ((emacs (24))) "numeric window switching shortcuts" single ((:commit . "f05c3151523e529af5a0a3fa8c948b61fb369f6e") (:url . "https://github.com/luismbo/wn-mode") (:keywords "buffers" "windows" "switching-windows"))]) (with-simulated-input . [(20170820 2317) ((emacs (24 4)) (seq (2 0)) (s (0))) "A macro to simulate user input non-interactively" single ((:commit . "af9a38ce28a741e6d8742750bef5d7b5afa13796") (:keywords "lisp" "tools" "extensions"))]) (with-namespace . [(20130407 1122) ((dash (1 1 0)) (loop (1 1))) "interoperable elisp namespaces" single ((:commit . "8ac52da3a09cf46087720e30cf730d00f140cde6") (:keywords "namespaces"))]) (with-editor . [(20171217 1239) ((emacs (24 4)) (async (1 9))) "Use the Emacsclient as $EDITOR" tar ((:commit . "05338d893f3879391d7283324364b472e3f4f4d1") (:url . "https://github.com/magit/with-editor") (:keywords "tools"))]) (wispjs-mode . [(20170720 1219) ((clojure-mode (0))) "Major mode for Wisp code." single ((:commit . "60f9f5fd9d1556e2d008939f67eb1b1d0f325fa8") (:url . "https://github.com/krisajenkins/wispjs-mode"))]) (wisp-mode . [(20160419 1232) nil "Tools for wisp: the Whitespace-to-Lisp preprocessor" single ((:keywords "languages" "lisp"))]) (winum . [(20171028 702) ((cl-lib (0 5)) (dash (2 13 0))) "Navigate windows and frames using numbers." single ((:commit . "c56d1cdb8d1723eb4c0d7a7eb3ecd2697739146c") (:url . "http://github.com/deb0ch/winum.el") (:keywords "convenience" "frames" "windows" "multi-screen"))]) (winring . [(20150804 1108) nil "Window configuration rings" single ((:commit . "ad400939b420b5a7914103b7cfe3f0f6574ea48f") (:url . "https://gitlab.com/warsaw/winring") (:keywords "frames" "tools"))]) (winpoint . [(20131023 1013) nil "Remember buffer positions per-window, not per buffer" single ((:commit . "e6050093c076308184566fa1d1012423d6934773") (:url . "https://github.com/jorgenschaefer/winpoint") (:keywords "convenience"))]) (winnow . [(20170903 506) ((emacs (24))) "winnow ag/grep results by matching/excluding lines" single ((:commit . "18cb6b94338f3b7b4f2cd0331dad22f82dd9e0d3") (:url . "https://github.com/dgtized/winnow.el") (:keywords "matching"))]) (windwow . [(20170815 1848) ((dash (2 11 0)) (cl-lib (0 6 1)) (emacs (24))) "simple workspace management" single ((:commit . "77bad26f651744b68d31b389389147014d250f23") (:url . "github.com/vijumathew/windwow") (:keywords "frames"))]) (windsize . [(20151121 540) nil "Simple, intuitive window resizing" single ((:commit . "beb6376fdf52afa6f220c89032448460faf76e7f") (:url . "http://github.com/grammati/windsize") (:keywords "window" "resizing" "convenience"))]) (window-purpose . [(20171107 659) ((emacs (24)) (cl-lib (0 5)) (let-alist (1 0 3)) (imenu-list (0 1))) "Purpose-based window management for Emacs" tar ((:commit . "2655bbe3399f00d3297ded58f92e7be22876148a") (:url . "https://github.com/bmag/emacs-purpose") (:keywords "frames"))]) (window-numbering . [(20160809 1110) nil "Numbered window shortcuts" single ((:commit . "10809b3993a97c7b544240bf5d7ce9b1110a1b89") (:url . "http://nschum.de/src/emacs/window-numbering-mode/") (:keywords "faces" "matching"))]) (window-number . [(20170731 1851) nil "Select windows by numbers." single ((:commit . "d41722de646ffeb3f70d26e4a86a5a1ba5c6be87") (:url . "https://github.com/nikolas/window-number") (:keywords "windows"))]) (window-layout . [(20170214 1633) nil "window layout manager" single ((:commit . "cd2e4f967b610c2bbef53182829e47250d027056") (:keywords "window" "layout"))]) (window-jump . [(20170809 1508) nil "Move left/right/up/down through your windows." single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (: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 ((:commit . "525500fb2ebc08f3f9ea493972e5f2e1d79f89ef") (:url . "http://github.com/rolandwalker/window-end-visible") (:keywords "extensions"))]) (window+ . [(20170309 1437) nil "Extensions to `window.el'." single ((:url . "https://www.emacswiki.org/emacs/download/window%2b.el") (:keywords "internal" "window"))]) (windata . [(20090830 340) nil "convert window configuration to list" single ((:commit . "a723fc446ceaec23d5f29ecc8245d94c99d91625") (:keywords "convenience" "frames"))]) (win-switch . [(20161009 927) nil "fast, dynamic bindings for window-switching/resizing" single ((:commit . "954eb5e4c5737f0c06368c42a7f1c3dd374d782f") (:url . "http://www.stat.cmu.edu/~genovese/emacs/win-switch/") (:keywords "window" "switch" "key bindings" "ergonomic" "efficient"))]) (wimpy-del . [(20170309 1436) nil "Require confirmation for large region deletion." single ((:url . "https://www.emacswiki.org/emacs/download/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 ((:commit . "5febe367c6c3729848654358af4d17ee2987da8d") (:url . "https://github.com/sixty-north/emacs-wilt"))]) (wiki-summary . [(20150408 1422) ((emacs (24))) "View Wikipedia summaries in Emacs easily." single ((:commit . "ed3755dd09f5f73ef78ec295fe842d08b316c8a0") (: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 ((:commit . "f9082feb329432fcf2ac49a95e64bed9fda24d58") (: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 ((:commit . "1b09b1b2848ab21c412f2fe7a259b1dcea2c733c") (:keywords "help"))]) (widget-mvc . [(20150101 2006) nil "MVC framework for the emacs widgets" single ((:commit . "ff5a85880df7b87f9f480fe3c28438a0712b7b87") (:keywords "lisp" "widget"))]) (wide-column . [(20170925 913) nil "Calls functions dependant on column position." single ((:commit . "ce9ef4675485a7bea381077866368ef875226b10") (:keywords "minor mode" "cursor colour" "column width"))]) (wid-edit+ . [(20170309 1434) nil "Extensions to standard library `wid-edit.el'." single ((:url . "https://www.emacswiki.org/emacs/download/wid-edit%2b.el") (:keywords "widget" "color"))]) (whole-line-or-region . [(20170815 212) nil "operate on current line if region undefined" single ((:commit . "1220974153b7eaca5192ed87f86182d121e228e4") (:keywords "convenience" "wp"))]) (whizzml-mode . [(20171015 938) ((emacs (24 4))) "Programming mode for editing WhizzML files" tar ((:commit . "9060fdce07c137abc2c494cb72641b9b9d6fbe22") (:keywords "languages" "lisp"))]) (whitespace-cleanup-mode . [(20170505 1923) nil "Intelligently call whitespace-cleanup on save" single ((:commit . "6d0a35159ee04ef9f3b1a80c548f545643ddb397") (:url . "https://github.com/purcell/whitespace-cleanup-mode") (:keywords "convenience"))]) (white-theme . [(20160917 1043) ((emacs (24))) "Minimalistic light color theme inspired by basic-theme" single ((:commit . "e9e6d5b9d43da6eb15e86f5fbc8b1ba83abe8c78") (: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 ((:commit . "97621edd69267dd143760d94393db2c2558c9ea4"))]) (whitaker . [(20150814 422) ((dash (2 10 0))) "Comint interface for Whitaker's Words" single ((:commit . "eaf26ea647b729ca705b73ea70312d5ffdf89448") (:keywords "processes"))]) (which-key . [(20180108 1719) ((emacs (24 4))) "Display available keybindings in popup" single ((:commit . "7559a79e95aada65601f7413a1c3f08bfa34557b") (:url . "https://github.com/justbur/emacs-which-key"))]) (what-the-commit . [(20150901 616) nil "Random commit message generator" single ((:commit . "868c80a1b8614bcbd2225cd0290142c72f2a7956") (: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 ((:commit . "1cdd7c136f1e7565bb13d2df69be3dc77b83698d") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-pt.el") (:keywords "grep" "edit" "extensions"))]) (wgrep-helm . [(20170510 1539) ((wgrep (2 1 1))) "Writable helm-grep-mode buffer and apply the changes to files" single ((:commit . "1cdd7c136f1e7565bb13d2df69be3dc77b83698d") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-helm.el") (:keywords "grep" "edit" "extensions"))]) (wgrep-ag . [(20160923 403) ((wgrep (2 1 5)) (cl-lib (0 5))) "Writable ag buffer and apply the changes to files" single ((:commit . "1cdd7c136f1e7565bb13d2df69be3dc77b83698d") (: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 ((:commit . "1cdd7c136f1e7565bb13d2df69be3dc77b83698d") (: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 ((:commit . "1cdd7c136f1e7565bb13d2df69be3dc77b83698d") (: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 ((:commit . "a8abb50b7602fe15fe2bc6400ac29780e956b390") (: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 ((:commit . "a8fd557c8f335322f132c1c6c08b6741d6394e2e") (:url . "https://github.com/kungi/weechat-alert") (:keywords "irc" "chat" "network" "weechat"))]) (weechat . [(20171128 440) ((s (1 3 1)) (cl-lib (0 2)) (emacs (24)) (tracking (1 2))) "Chat via WeeChat's relay protocol in Emacs" tar ((:commit . "f8e6a2361f4de2299b861dd8fea1d0a5502be7c4"))]) (wedge-ws . [(20140714 1449) nil "Wedge whitespace between columns in text" single ((:commit . "4669115f02d9c6fee067cc5369bb38c0f9db88b2") (:keywords "formatting" "indentation"))]) (websocket . [(20171113 2045) ((cl-lib (0 5))) "Emacs WebSocket client and server" single ((:commit . "7d2adf218743c52578c8e8fd5584a5e54732e256") (:keywords "communication" "websocket" "server"))]) (webpaste . [(20171025 956) ((emacs (24 4)) (request (0 2 0)) (cl-lib (0 5))) "Paste to pastebin-like services" single ((:commit . "f047313c656e0ea85033bacc564d02ae6f4605ff") (:url . "https://github.com/etu/webpaste.el") (:keywords "convenience" "comm" "paste"))]) (weblogger . [(20110926 918) ((xml-rpc (1 6 8))) "Weblog maintenance via XML-RPC APIs" single ((:commit . "b3dd4aead9d3a87e6d85e7fef4f4f3bd40d87b53") (: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 ((:commit . "469cd3bc117bfb8da0c03a2a2fb185e80c81d068") (:url . "https://github.com/eschulte/emacs-web-server") (:keywords "http" "server" "network"))]) (web-search . [(20170911 1246) ((emacs (24 3))) "Open a web search" tar ((:commit . "bdf590e7d6d62e874810aa4c5017c48e4e93f823") (:url . "https://github.com/xuchunyang/web-search.el") (:keywords "web" "search"))]) (web-narrow-mode . [(20170406 1910) ((web-mode (14 0 27))) "quick narrow code block in web-mode" single ((:commit . "73bdcb7d0701abe65dab4fc295d944885e05ae33") (:url . "https://github.com/Qquanwei/web-narrow-mode") (:keywords "web-mode" "react" "narrow" "web"))]) (web-mode-edit-element . [(20161114 954) ((emacs (24 4)) (web-mode (14))) "Helper-functions for attribute- and element-handling" tar ((:commit . "8b8ac07aa8c920dafd94c96a51effb0d6c0ed1ce") (:url . "https://github.com/jtkDvlp/web-mode-edit-element") (:keywords "languages" "convenience"))]) (web-mode . [(20171118 1132) ((emacs (23 1))) "major mode for editing web templates" single ((:commit . "78d49396b0ddb5e60596dc4a2c09d7cbb5812ff5") (:url . "http://web-mode.org") (:keywords "languages"))]) (web-completion-data . [(20160318 148) nil "Shared completion data for ac-html and company-web" tar ((:commit . "c272c94e8a71b779c29653a532f619acad433a4f") (:url . "https://github.com/osv/web-completion-data") (:keywords "html" "auto-complete" "company"))]) (web-beautify . [(20161115 1447) nil "Format HTML, CSS and JavaScript/JSON" single ((:commit . "e1b45321d8c11b404b12c8e55afe55eaa7c84ee9") (:url . "https://github.com/yasuyk/web-beautify"))]) (web . [(20141231 1201) ((dash (2 9 0)) (s (1 5 0))) "useful HTTP client" single ((:commit . "483188dac4bc6b409b985c9dae45f3324a425efd") (: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 ((:commit . "bfc7137095e0ee71aad70ac46f2af677f3c051b6"))]) (wcheck-mode . [(20160711 2213) nil "General interface for text checkers" tar ((:commit . "d56345a1ec910a7d95103a441536cfba10ec9672"))]) (wc-mode . [(20170126 2029) nil "Running word count with goals (minor mode)" single ((:commit . "f218f42709a651b34d6c1ddd98856f44648ef707") (:url . "https://github.com/bnbeckwith/wc-mode"))]) (wc-goal-mode . [(20140829 659) nil "Running word count with goals (minor mode)" single ((:commit . "bf21ab9c5a449bcc20dd207a4915dcec218d2699") (:url . "https://github.com/bnbeckwith/wc-goal-mode"))]) (wavefront-obj-mode . [(20170808 1016) nil "Major mode for Wavefront obj files" single ((:commit . "34027915de6496460d8e68b5991dd24d47d54859") (:url . "http://github.com/abend/wavefront-obj-mode"))]) (watch-buffer . [(20120331 1344) nil "run a shell command when saving a buffer" single ((:commit . "761fd7252e6d7bf5148283c2a7ee935f087d9427") (:url . "https://github.com/mjsteger/watch-buffer") (:keywords "automation" "convenience"))]) (warm-night-theme . [(20161101 728) ((emacs (24))) "Emacs 24 theme with a dark background." single ((:commit . "020f084d23409b5035150508ba6e57c2509edd64"))]) (wanderlust . [(20171209 227) ((semi (1 14 7))) "Yet Another Message Interface on Emacsen" tar ((:commit . "2a058670d9f65e7c9e5b203b31d5946bcb2bf144"))]) (wandbox . [(20170603 531) ((emacs (24)) (request (0 3 0)) (s (1 10 0))) "Wandbox client" tar ((:commit . "e002fe41f2cd9b4ce2b1dc80b83301176e9117f1") (:url . "https://github.com/kosh04/emacs-wandbox") (:keywords "tools"))]) (wand . [(20171103 513) ((dash (20161121 55)) (s (20160928 636))) "Magic wand for Emacs - Select and execute" tar ((:commit . "83c0c723dae7d8a37e67a9d9f2d00e005b5486ca") (:url . "https://github.com/cmpitg/wand") (:keywords "extensions" "tools"))]) (wakatime-mode . [(20170517 2053) nil "Automatic time tracking extension for WakaTime" single ((:commit . "b1eae15f38a367017e519c10837c44650631b154") (:keywords "calendar" "comm"))]) (waher-theme . [(20141115 430) ((emacs (24 1))) "Emacs 24 theme based on waher for st2 by dduckster" single ((:commit . "60d31519fcfd8e797723d47961b255ae2f2e2c0a") (:url . "https://github.com/jasonm23/emacs-waher-theme"))]) (waf-mode . [(20170403 1240) nil "Waf integration for Emacs" single ((:commit . "20c75eabd1d54fbce8e0dbef785c9fb68577ee4f") (:url . "https://bitbucket.org/dvalchuk/waf-mode"))]) (wacspace . [(20140826 2232) ((dash (1 2 0)) (cl-lib (0 2))) "The WACky WorkSPACE manager for emACS" tar ((:commit . "4a11168d58c9c129cfcd04a1c9581962565eca4a"))]) (w3m . [(20171221 2317) nil "an Emacs interface to w3m" tar ((:commit . "948a1a0f3e96e6c09c938e060f352ec126054ab1") (:keywords "w3m" "www" "hypermedia"))]) (w32browser-dlgopen . [(20170309 1433) nil "Use w32browser with standard Windows Open File box." single ((:url . "https://www.emacswiki.org/emacs/download/w32browser-dlgopen.el") (:keywords "files" "extensions" "convenience" "dialog"))]) (w32-browser . [(20170308 1518) nil "Run Windows application associated with a file." single ((:url . "https://www.emacswiki.org/emacs/download/w32-browser.el") (:keywords "mouse" "dired" "w32" "explorer"))]) (vue-mode . [(20180104 1611) ((mmm-mode (0 5 4)) (vue-html-mode (0 1)) (ssass-mode (0 1)) (edit-indirect (0 1 4))) "Major mode for vue component based on mmm-mode" single ((:commit . "b489a63dabe0f2fee2730121ecabb1b4f4c11761") (:keywords "languages"))]) (vue-html-mode . [(20180104 1421) nil "Major mode for editing Vue.js templates" single ((:commit . "3fa65f8ac8a4c54f13c32fd43c9865c92c22ce07") (:url . "http://github.com/AdamNiederer/vue-html-mode") (:keywords "languages" "vue" "template"))]) (volume . [(20150718 1309) nil "tweak your sound card volume from Emacs" single ((:commit . "ecc1550b3c8b501d37e0f0116b54b535d15f90f6") (:url . "http://www.brockman.se/software/volume-el/"))]) (volatile-highlights . [(20160611 1855) nil "Minor mode for visual feedback on some operations." single ((:commit . "9a20091f0ce7fc0a6b3e641a6a46d5f3ac4d8392") (:url . "http://www.emacswiki.org/emacs/download/volatile-highlights.el") (:keywords "emulations" "convenience" "wp"))]) (voca-builder . [(20161101 945) ((popup (0 5 2))) "Helps you build up your vocabulary" single ((:commit . "51573beec8cd8308477b0faf453aad93e17f57c5") (:url . "https://github.com/yitang/voca-builder") (:keywords "english" "vocabulary"))]) (vmd-mode . [(20161106 125) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess." single ((:commit . "e3b27f4f179002984643895292bb207c3e221a5c") (: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 . [(20170830 1148) nil "View Large Files" tar ((:commit . "a01e9ed416cd81ccddebebbf05d4ca80060b07dc") (:url . "https://github.com/m00natic/vlfi") (:keywords "large files" "utilities"))]) (vkill . [(20091203 1022) nil "view and kill Unix processes from within Emacs" single ((:commit . "8ffe640ed03ddcc23db1c74c76d1acbf25250ad9"))]) (visual-regexp-steroids . [(20170221 1853) ((visual-regexp (1 1))) "Extends visual-regexp to support other regexp engines" tar ((:commit . "a6420b25ec0fbba43bf57875827092e1196d8a9e") (:url . "https://github.com/benma/visual-regexp-steroids.el/") (:keywords "external" "foreign" "regexp" "replace" "python" "visual" "feedback"))]) (visual-regexp . [(20170228 1716) ((cl-lib (0 2))) "A regexp/replace command for Emacs with interactive visual feedback" single ((:commit . "b3096c2d391ff4e28a2a4e8cd82efbf11071ea85") (:url . "https://github.com/benma/visual-regexp.el/") (:keywords "regexp" "replace" "visual" "feedback"))]) (visual-fill-column . [(20170502 1300) ((emacs (24 3))) "fill-column for visual-line-mode" single ((:commit . "57c2a72d46900117ea92e0a01b97e19481800503"))]) (visual-ascii-mode . [(20150129 246) nil "Visualize ascii code (small integer) on buffer." single ((:commit . "99285a099a17472ddd9f1b4f74e9d092dd8c5947") (:url . "https://github.com/Dewdrops/visual-ascii-mode") (:keywords "presentation"))]) (visible-mark . [(20150623 2150) nil "Make marks visible." single ((:commit . "a584db9bc88953b23a9648b3e14ade90767207f8") (:url . "https://gitlab.com/iankelling/visible-mark") (:keywords "marking" "color" "faces"))]) (virtualenvwrapper . [(20171119 1403) ((dash (1 5 0)) (s (1 6 1))) "a featureful virtualenv tool for Emacs" single ((:commit . "fa49954d44cb47a46d7a2bd8566ea21dd0823dea") (:url . "http://github.com/porterjamesj/virtualenvwrapper.el") (:keywords "python" "virtualenv" "virtualenvwrapper"))]) (virtualenv . [(20140220 1501) nil "Virtualenv for Python" single ((:commit . "276c0f4d6493b402dc4d22ecdf17b2b072e911b3") (:keywords "python" "virtualenv"))]) (vimrc-mode . [(20170814 1837) nil "Major mode for vimrc files" single ((:commit . "ba8140fba6e03a35b123acbd62fc8c6f0a03bf4a") (:url . "https://github.com/mcandre/vimrc-mode") (:keywords "languages" "vim"))]) (vimish-fold . [(20171231 2212) ((emacs (24 4)) (cl-lib (0 5)) (f (0 18 0))) "Fold text like in Vim" single ((:commit . "1469c953bc20d21d87ce5d92def767e551cda07c") (:url . "https://github.com/mrkkrp/vimish-fold") (:keywords "convenience"))]) (vim-region . [(20140329 924) ((expand-region (20140127))) "Select region as vim" single ((:commit . "7c4a99ce3678fee40c83ab88e8ad075d2a935fdf") (: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 ((:commit . "d4a5034ca8ea0c962ad6e92c86c0fa2a74d2964b") (:url . "https://github.com/jmickelin/vim-empty-lines-mode") (:keywords "emulations"))]) (viking-mode . [(20160705 1327) nil "kill first, ask later" single ((:commit . "c76aa265d13ad91d6890d242e142d05e31f0340b") (:url . "https://github.com/tlinden/viking-mode") (:keywords "kill" "delete"))]) (viewer . [(20170106 1802) nil "View-mode extension" single ((:commit . "6c8db025bf4021428f7f2c3ef9d74fb13f5d267a") (:url . "http://github.com/rubikitch/viewer/") (:keywords "view" "extensions"))]) (vi-tilde-fringe . [(20141027 1942) ((emacs (24))) "Displays tildes in the fringe on empty lines a la Vi." single ((:commit . "f1597a8d54535bb1d84b442577b2024e6f910308") (:url . "https://github.com/syl20bnr/vi-tilde-fringe") (:keywords "emulation"))]) (vhdl-tools . [(20171111 930) ((ggtags (0 8 12)) (emacs (25 2)) (outshine (2 0)) (helm (2 8 5))) "Utilities for navigating vhdl sources." single ((:commit . "6bbcbdfbff7154517178290371b0182a176c09b5") (:url . "https://csantosb.github.io/vhdl-tools/") (:keywords "vhdl"))]) (vhdl-capf . [(20160221 934) nil "Completion at point function (capf) for vhdl-mode." single ((:commit . "290abe217050f33532bc9ccb04f894123402f414") (: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 ((:commit . "70b56a57c3a37735cc9e92ffaa6dc27c64437738") (:url . "https://github.com/noctuid/vertigo.el") (:keywords "vim" "vertigo"))]) (vertica . [(20131217 711) ((sql (3 0))) "Vertica SQL mode extension" single ((:commit . "3c9647b425c5c13c30bf0cba483646af18196588") (:keywords "sql" "vertica"))]) (verify-url . [(20160426 528) ((cl-lib (0 5))) "find out invalid urls in the buffer or region" single ((:commit . "d6f3623cda8cd526a2d198619b137059cb1ba1ab") (:url . "https://github.com/lujun9972/verify-url") (:keywords "convenience" "usability" "url"))]) (vector-utils . [(20140508 1341) nil "Vector-manipulation utility functions" single ((:commit . "c38ca1c6a23b2b51a6ac36c2c64e50e21cbe9d21") (:url . "http://github.com/rolandwalker/vector-utils") (:keywords "extensions"))]) (vdirel . [(20170605 43) ((emacs (24 4)) (org-vcard (0 1 0)) (helm (1 7 0)) (seq (1 11))) "Manipulate vdir (i.e., vCard) repositories" single ((:commit . "72399f5e09f53aa25a068be8689cb711b8accf08"))]) (vdiff-magit . [(20170519 1407) ((emacs (24 4)) (vdiff (0 3)) (magit (2 10 0))) "magit integration for vdiff" single ((:commit . "1ccf0a8be5aad18648fd59c775a8dd6070398b74") (:url . "https://github.com/justbur/emacs-vdiff-magit") (:keywords "diff"))]) (vdiff . [(20170525 1231) ((emacs (24 4)) (hydra (0 13 0))) "A diff tool similar to vimdiff" single ((:commit . "66ae1ac324d9ec7ef87abee38f260734f036cf3d") (:url . "https://github.com/justbur/emacs-vdiff") (:keywords "diff"))]) (vcomp . [(20140906 1508) nil "compare version strings" single ((:commit . "092ef48a78e950c0576269d889be6caf9f6e61c5") (:url . "https://github.com/tarsius/vcomp") (:keywords "versions"))]) (vcl-mode . [(20170119 1251) nil "Syntax highlighting for Varnish Command Language" single ((:commit . "3d86c1352a7370d558d25f4c8f7be744e7d27332"))]) (vc-osc . [(20161119 1155) nil "non-resident support for osc version-control" single ((:commit . "8c09a0d5f69237285101554261b77d76b546a24b"))]) (vc-msg . [(20171106 1747) ((emacs (24 3)) (popup (0 5 0))) "Show commit information of current line" tar ((:commit . "9d40d94c0a73f46047e2f6d40be795638e5c3ebc") (:url . "http://github.com/redguardtoo/vc-msg") (:keywords "git" "vc" "svn" "hg" "messenger"))]) (vc-fossil . [(20171018 2216) nil "VC backend for the fossil sofware configuraiton management system" tar ((:commit . "abdb5487831e641c291c0dcb3848f539ca11f400"))]) (vc-darcs . [(20170904 2020) ((emacs (24))) "a VC backend for darcs" single ((:commit . "390fb1ebdda1ffac45b9be02626dde3b6d95ac11") (:keywords "vc"))]) (vc-check-status . [(20170107 534) nil "Warn you when quitting emacs and leaving repo dirty." tar ((:commit . "37734beb16bfd8633ea328059bf9a47eed826d5c") (:url . "https://github.com/thisirs/vc-check-status") (:keywords "vc" "convenience"))]) (vc-auto-commit . [(20170107 533) nil "Auto-committing feature for your repository" tar ((:commit . "446f664f4ec835532f4f18ba18b5fb731f6030aa") (: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 ((:commit . "8c61a492d7c15218ae1a96e2aebfe6f78bfff6db") (:url . "https://github.com/aki2o/emacs-vbasense") (:keywords "vba" "completion"))]) (vala-snippets . [(20150428 2052) ((yasnippet (0 8 0))) "Yasnippets for Vala" tar ((:commit . "671439501060449bd100b9fffd524a86064fbfbb") (:url . "https://github.com/gopar/vala-snippets"))]) (vala-mode . [(20150324 1525) nil "Vala mode derived mode" single ((:commit . "fb2871a4492d75d03d72e60474919ab89adb267b") (:keywords "vala" "languages" "oop"))]) (vagrant-tramp . [(20160427 1632) ((dash (2 12 0))) "Vagrant method for TRAMP" tar ((:commit . "453ba605b28d2964bb4e10074f1e6891ebb4d2d6") (:url . "https://github.com/dougm/vagrant-tramp") (:keywords "vagrant"))]) (vagrant . [(20170301 1406) nil "Manage a vagrant box from emacs" single ((:commit . "636ce2f9af32ea199170335a9cf1201b64873440") (: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 ((:commit . "b7d19bb594b43ea3824a6f215dd1e5d1d4c0e8ad") (:url . "https://github.com/aborn/v2ex-mode") (:keywords "v2ex" "v2ex.com"))]) (uuidgen . [(20140918 1601) nil "Provides various UUID generating functions" single ((:commit . "7eb96415484c3854a3f383d1a3e10b87ae674e22") (:keywords "extensions" "lisp" "tools"))]) (uuid . [(20120910 151) nil "UUID's for EmacsLisp" single ((:commit . "1519bfeb0e31602b840bc8dd35d7c7e732c159fe") (:keywords "lisp"))]) (utop . [(20170508 2343) ((emacs (24))) "Universal toplevel for OCaml" single ((:commit . "d6e873cafc40291f0fe27ac9fffb1051c0ab448d") (:url . "https://github.com/diml/utop") (:keywords "ocaml" "languages"))]) (use-package-ensure-system-package . [(20171205 1029) ((use-package (2 1)) (system-packages (0 1))) "auto install system packages" single ((:commit . "8a82221a395619ba325a611b50938f6bbca0ebed") (:url . "https://github.com/waymondo/use-package-ensure-system-package") (:keywords "convenience" "tools" "extensions"))]) (use-package-chords . [(20171207 2240) ((use-package (2 1)) (bind-key (1 0)) (bind-chord (0 2)) (key-chord (0 6))) "key-chord keyword for use-package" single ((:commit . "012c6b6c11234c9463deab9b8d0b266ef6509463") (:url . "https://github.com/waymondo/use-package-chords") (:keywords "convenience" "tools" "extensions"))]) (use-package . [(20180108 1754) ((emacs (24 3)) (bind-key (2 4))) "A configuration macro for simplifying your .emacs" tar ((:commit . "05a4033b830bf52c596ceedea10b2cbd91f85fdb") (: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 ((:commit . "835a6dcb783bbe84714bae87a3464aa0b128bfac") (:url . "https://github.com/buzztaiki/urlenc-el") (:keywords "url"))]) (url-shortener . [(20170804 1942) nil "shorten long url and expand tinyurl" single ((:commit . "06db8270213b9e352d6c335b0663059a1353d05e") (:url . "https://github.com/yuyang0/url-shortener"))]) (uptimes . [(20170830 533) ((cl-lib (0 5)) (emacs (24))) "Track and display emacs session uptimes." single ((:commit . "c2c1b44b16a0fd873193b17c580ef3dfdacea580") (:url . "https://github.com/davep/uptimes.el") (:keywords "processes" "uptime"))]) (untitled-new-buffer . [(20161212 708) ((emacs (24 4)) (magic-filetype (0 2 0))) "Open untitled new buffer like other text editors." single ((:commit . "4eabc6937b0e83062ffce9de0d42110224063a6c") (:url . "https://github.com/zonuexe/untitled-new-buffer.el") (:keywords "files" "convenience"))]) (unkillable-scratch . [(20160504 1903) nil "Disallow buffers from being killed by regexp -- default is *scratch* buffer" single ((:commit . "676a5a97658830caece18fa65a23e3d113933151") (:keywords "scratch"))]) (universal-emotions-emoticons . [(20171209 1820) ((emacs (24 4))) "Emoticons For The Six Universal Expressions" single ((:commit . "9f249b39172bf9b8e148856ad941eee485161215") (:url . "https://github.com/grettke/universal-emotions-emoticons") (:keywords "convenience" "docs" "languages"))]) (unison-mode . [(20160513 801) nil "Syntax highlighting for unison file synchronization program" single ((:commit . "0bd6a65c0d12f87fcf7bdff15fe54444959b93bf") (:url . "https://github.com/impaktor/unison-mode") (:keywords "symchronization" "unison"))]) (unison . [(20160704 40) ((emacs (24 1))) "sync with Unison" single ((:commit . "a78a04c0d1398d00f75a1bd4799622a65bcb0f28") (:url . "http://github.com/unhammer/unison.el") (:keywords "sync"))]) (unipoint . [(20140113 1424) nil "a simple way to insert unicode characters by TeX name" single ((:commit . "5da04aebac35a5c9e1d8704f2231808d42f4b36a") (:url . "https://github.com/apgwoz/unipoint"))]) (unify-opening . [(20171122 1212) ((emacs (24 4))) "Unify the mechanism to open files" single ((:commit . "502469ddba6d8d52159f53976265f7d956b6b17c") (:url . "https://github.com/DamienCassou/unify-opening"))]) (unidecode . [(20140317 2118) ((cl-lib (0 4))) "Convert Unicode text into safe ASCII strings" tar ((:commit . "9e279e88a689584027d5a1b088fe5def25d0f75c"))]) (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 ((:commit . "a18c6b38d78b94f2eb1dcc4cb4fa91b6a17efabe") (:url . "http://github.com/rolandwalker/unicode-whitespace") (:keywords "faces" "wp" "interface"))]) (unicode-troll-stopper . [(20151023 1831) nil "Minor mode for Highlighting Unicode homoglyphs" single ((:commit . "15e4b57b78bf643bb56e5000078030cbb5c66e2a") (: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 ((:commit . "5e66724fd7d15743213b082474d798117b194494") (: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 ((:commit . "a36597d83e0248bd0e6b2c1d5fb95bff72add527") (: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 ((:commit . "fc69ec780d9e54c364a9252bd0cf1d2507f3fab7") (: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 ((:commit . "77074fac1994a4236f111d6a1d0cf79ea3fca151") (:url . "http://github.com/rolandwalker/unicode-enbox") (:keywords "extensions" "interface"))]) (unicode-emoticons . [(20150204 308) nil "Shortcuts for common unicode emoticons" single ((:commit . "fb18631f342b0243cf77cf59ed2067c47aae5233") (:url . "https://github.com/hagleitn/unicode-emoticons") (:keywords "games" "entertainment" "comms"))]) (unfill . [(20170722 1846) nil "Unfill paragraphs or regions, and toggle between filled & unfilled" single ((:commit . "df0c4dee19a3874b11c7c7f04e8a2fba629fda9b") (:url . "https://github.com/purcell/unfill") (:keywords "utilities"))]) (undohist . [(20150315 542) ((cl-lib (1 0))) "Persistent undo history for GNU Emacs" single ((:commit . "d2239a5f736724ceb9e3b6bcaa86f4064805cda0") (:keywords "convenience"))]) (undo-tree . [(20170706 246) nil "Treat undo history as a tree" single ((:commit . "e9a9102f515acd7523158f20e83f300600374989") (: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 ((:commit . "4eb9ef014f580adc135d91d1cd68d37a310640b6") (:keywords "faces"))]) (underline-with-char . [(20170814 223) ((emacs (24))) "Underline with a char" single ((:commit . "6daeba77e17dc11558ca3ccb0495524f5104d581") (:keywords "convenience"))]) (undercover . [(20170502 912) ((emacs (24)) (dash (2 0 0)) (shut-up (0 3 2))) "Test coverage library for Emacs Lisp" single ((:commit . "d947e6410a3b269c657645b499a413d90d4b69ca") (:url . "https://github.com/sviridov/undercover.el") (:keywords "lisp" "tests" "coverage" "tools"))]) (uncrustify-mode . [(20130707 659) nil "Minor mode to automatically uncrustify." single ((:commit . "73893d000361e95784911e5ec268ad0ab2a1473c") (:keywords "uncrustify"))]) (unbound . [(20160505 2355) nil "Find convenient unbound keystrokes" single ((:keywords "keyboard"))]) (ukrainian-holidays . [(20130720 649) nil "Ukrainian holidays for Emacs calendar." single ((:commit . "e52b0c92843e9f4d0415a7ba3b8559785497d23d") (:url . "https://github.com/abo-abo/ukrainian-holidays"))]) (ujelly-theme . [(20170905 1505) nil "Ujelly theme for GNU Emacs 24 (deftheme)" single ((:commit . "d08fe8e01db6df151b38c3001fba239a9a22369a") (:url . "http://github.com/marktran/color-theme-ujelly"))]) (uimage . [(20160901 521) nil "An iimage like mode with the ability to display url images" single ((:commit . "9893d09160ef7e8c0ecdcd74fca99ffeb5f9d70d") (: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 ((:commit . "cbfd42f822bf5717934fa2d92060e6e24a813433") (:url . "http://github.com/rolandwalker/ucs-utils") (:keywords "i18n" "extensions"))]) (ucs-cmds . [(20170308 1512) nil "Commands to create commands that insert Unicode chars." single ((:url . "https://www.emacswiki.org/emacs/download/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 ((:commit . "88b0eefc75d4cbcde103057e1c5968d4c3052f69") (:url . "http://github.com/rocher/ubuntu-theme"))]) (typoscript-mode . [(20170126 112) ((emacs (24 4)) (use-package (0))) "mode for TypoScript files" single ((:commit . "44e7567e921573c4f33c537b827f71fb1f565c32") (:url . "https://github.com/ksjogo/typoscript-mode") (:keywords "typo3" "typoscript"))]) (typo . [(20171209 223) nil "Minor mode for typographic editing" single ((:commit . "9dad93b6f367f02f52c8d9bf15d446d922cec294") (:url . "https://github.com/jorgenschaefer/typoel") (:keywords "convenience" "wp"))]) (typit . [(20171231 2214) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:commit . "41309d8a64a992f532753093742c15d413c446b5") (:url . "https://github.com/mrkkrp/typit") (:keywords "games"))]) (typing-game . [(20160426 520) nil "a simple typing game" single ((:commit . "616435a5270274f4c7b698697674dbb2039049a4") (:keywords "lisp" "game"))]) (typing . [(20171115 2331) nil "The Typing Of Emacs" single ((:commit . "1ada06484695b8959f4a7c41cacf7f78c2aad998") (:url . "http://www.emacswiki.org/emacs/TypingOfEmacs") (:keywords "games"))]) (typescript-mode . [(20171229 810) nil "Major mode for editing typescript" single ((:commit . "330c887241cf585aa4e2e3f3e9d851f28b92b08e") (: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 ((:commit . "3abd53d8cc1ad77ffe76e02849d0ab7731fd8364") (:url . "https://github.com/typedclojure/typed-clojure-mode"))]) (twittering-mode . [(20180107 412) nil "Major mode for Twitter" single ((:commit . "c27d9b5b1dd20a1600e89909ac9c0ccd08af9bf9") (:url . "http://twmode.sf.net/") (:keywords "twitter" "web"))]) (twilight-theme . [(20120412 603) nil "Twilight theme for GNU Emacs 24 (deftheme)" single ((:commit . "77c4741cb3dcf16e53d06d6c2ffdc660c40afb5b"))]) (twilight-bright-theme . [(20130605 143) nil "A Emacs 24 faces port of the TextMate theme" single ((:commit . "322157cb2f3bf7920ecd209dafc31bc1c7959f49") (: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 ((:commit . "523b95fcdbf4a6a6483af314ad05354a3d80f23f") (:url . "https://github.com/jimeh/twilight-anti-bright-theme.el") (:keywords "themes"))]) (twig-mode . [(20130220 1050) nil "A major mode for twig" single ((:commit . "2849f273a4855d3314a9c0cc84134f5b28ad5ea6"))]) (turnip . [(20150308 2329) ((dash (2 6 0)) (s (1 9 0))) "Interacting with tmux from Emacs" single ((:commit . "2fd32562fc6fc1cda6d91aa939cfb29f9b16e9de") (:keywords "terminals" "tools"))]) (turkish . [(20170910 811) nil "Convert to Turkish characters on-the-fly" single ((:commit . "9831a316c176bb21a1b91226323ea4133163e00c") (:url . "http://www.denizyuret.com/2006/11/emacs-turkish-mode.html") (:keywords "turkish" "languages" "automatic" "conversion"))]) (turing-machine . [(20170512 1438) ((emacs (24 4)) (cl-lib (0 6 1))) "Single-tape Turing machine simulator" single ((:commit . "4b5901a13b38028b05ce19cecc78bcd2f708f97d") (:url . "http://github.com/therockmandolinist/turing-machine") (:keywords "turing" "machine" "simulation"))]) (tup-mode . [(20140410 914) nil "Major mode for editing files for Tup" single ((:commit . "bcc100c6485f1c81fdcd1215dfc6c41a81c215c8") (: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 ((:commit . "85a6cdc2db3390593fd886c474959b675460b310"))]) (tumble . [(20160111 2329) ((http-post-simple (0)) (cl-lib (0 5))) "an Tumblr mode for Emacs" single ((:commit . "e8fd7643cccf2b6ea4170f0c5f1f87d007e7fa00") (:keywords "tumblr"))]) (tuareg . [(20171204 1417) ((caml (3 12 0 1))) "OCaml mode for Emacs." tar ((:commit . "a6d1589e256d861bfb51c59756b0aa25e88dfb89") (:url . "https://github.com/ocaml/tuareg") (:keywords "ocaml" "languages"))]) (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 ((:commit . "85ed3832e7eef391f7879d9990d59c7a3493c15e"))]) (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 ((:commit . "81ac6351a2ae258fd0ebf916dae9bd5a179fefd0") (:url . "https://github.com/aki2o/emacs-tss") (:keywords "typescript" "completion"))]) (ts-comint . [(20171105 2247) nil "Run a Typescript interpreter in an inferior process window." single ((:commit . "8817dc7b3a6eb78c3cad42e5677c2113274a1963") (:url . "https://github.com/josteink/ts-comint") (:keywords "typescript" "node" "inferior-mode" "convenience"))]) (try . [(20170226 805) ((emacs (24))) "Try out Emacs packages." single ((:commit . "271b0a362cadf44d0694628b9e213f54516ef913") (:url . "http://github.com/larstvei/try") (:keywords "packages"))]) (truthy . [(20140508 1341) ((list-utils (0 4 2))) "Test the content of a value" single ((:commit . "8ed8d07772aa8457554547eb17e264b5df2b4a69") (:url . "http://github.com/rolandwalker/truthy") (:keywords "extensions"))]) (trr . [(20170221 42) nil "a type-writing training program on GNU Emacs." tar ((:commit . "83660d8343ef3367837354dc684dfdde2f95826a") (:keywords "games" "faces"))]) (trident-mode . [(20130726 1207) ((emacs (24)) (slime (20130526)) (skewer-mode (1 5 0)) (dash (1 0 3))) "Live Parenscript interaction" single ((:commit . "ad3201f47e114de35df189c3d80f0fdea9507ea9") (:url . "https://github.com/johnmastro/trident-mode.el") (:keywords "languages" "lisp" "processes" "tools"))]) (treepy . [(20170722 355) ((emacs (25 1))) "Generic tree traversal tools" single ((:commit . "282fbc94747fe2a00d36e2a74d147c8fa0ac4be7") (:url . "https://github.com/volrath/treepy.el") (:keywords "lisp" "maint" "tools"))]) (treemacs-projectile . [(20171204 845) ((projectile (0 14 0)) (treemacs (0))) "Projectile integration for treemacs" single ((:commit . "bca3ee8cea8ea56a25f81b0f88d6747bdeaa7722") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treemacs-evil . [(20171225 951) ((evil (1 2 12)) (treemacs (0))) "Evil mode integration for treemacs" single ((:commit . "4397c144c5bbff91f86101397cc10855be3aa8d5") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treemacs . [(20180107 1246) ((emacs (24 4)) (cl-lib (0 5)) (dash (2 11 0)) (s (1 10 0)) (f (0 11 0)) (ace-window (0 9 0)) (pfuture (1 2)) (hydra (0 13 2))) "A tree style file explorer package" tar ((:commit . "2dabf88d5948a04d0313b0195be397761fc22b58") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (tree-mode . [(20151104 531) nil "A mode to manage tree widgets" single ((:commit . "b06078826d5875d74b0e7b7ac47b0d0917610534") (: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 ((:commit . "754ef07c17fed17ab03664ad11e2b0b2ef5e78ed") (:url . "https://github.com/nlamirault/emacs-travis") (:keywords "travis"))]) (transpose-mark . [(20150405 16) nil "Transpose data using the Emacs mark" single ((:commit . "667327602004794de97214cf336ac61650ef75b7") (:keywords "transpose" "convenience"))]) (transpose-frame . [(20151126 626) nil "Transpose windows arrangement in a frame" single ((:commit . "011f420c3496b69fc22d789f64cb8091834feba7") (:keywords "window"))]) (transmission . [(20180101 1803) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" single ((:commit . "b52760e0160f99312a1773953e7725800c13bb40") (:keywords "comm" "tools"))]) (transfer-sh . [(20160828 424) ((async (1 0))) "Simple interface for sending buffer contents to transfer.sh" single ((:commit . "70cd5c50b56ed2597221796014298417f503d10f") (:keywords "cloud" "upload" "share"))]) (tramp-term . [(20141104 1345) nil "Automatic setup of directory tracking in ssh sessions." single ((:commit . "983ed67ee65d26a51c641f306fa6b921ec83eeaf") (:url . "https://github.com/randymorris/tramp-term.el") (:keywords "tramp" "ssh"))]) (tramp-hdfs . [(20170821 620) ((emacs (24 4))) "Tramp extension to access hadoop/hdfs file system in Emacs" single ((:commit . "b64f24d0419a80dffaa2c4ecec317aa2bba56e35") (:keywords "tramp" "emacs" "hdfs" "hadoop" "webhdfs" "rest"))]) (tracwiki-mode . [(20150119 821) ((xml-rpc (1 6 8))) "Emacs Major mode for working with Trac" single ((:commit . "6a620444d59b438f42383b48cd4c19c03105dba6") (:keywords "trac" "wiki" "tickets"))]) (tracking . [(20171210 1302) nil "Buffer modification tracking" tar ((:commit . "e71a66df56008baa97e657f4fdf1e7d3daf4e578") (:url . "https://github.com/jorgenschaefer/circe/wiki/Tracking"))]) (traad . [(20180104 2351) ((dash (2 13 0)) (deferred (0 3 2)) (popup (0 5 0)) (request (0 2 0)) (request-deferred (0 2 0)) (virtualenvwrapper (20151123))) "emacs interface to the traad refactoring server." single ((:commit . "ad160e32f4cc9849aa570ed8e29269a0845921ae") (:url . "https://github.com/abingham/traad"))]) (tql-mode . [(20170723 1954) ((emacs (24))) "TQL mode" single ((:commit . "488add79eb3fc8ec02aedaa997fe1ed9e5c3e638") (:keywords "languages" "tql"))]) (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 ((:commit . "7655eb254038d5e34433e8a9d66b3ffc9c72e40c") (: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 ((:commit . "ca47b618ea8290776cdb5b0f1c2c335691f69660") (:keywords "help"))]) (total-lines . [(20171227 439) ((emacs (24 3))) "Keep track of a buffer's total number of lines" single ((:commit . "c762f08d039c8103f71c747e00304f209c2254f4") (:url . "https://github.com/hinrik/total-lines") (:keywords "convenience" "mode-line"))]) (tornado-template-mode . [(20141128 208) nil "A major mode for editing tornado templates" single ((:commit . "667c0663dbbd279b6c345446b9f2bc50eb52b747"))]) (top-mode . [(20130605 1039) nil "run \"top\" from emacs" single ((:keywords "extensions" "processes"))]) (tool-bar+ . [(20170307 1542) nil "Extensions to standard library tool-bar.el" single ((:url . "https://www.emacswiki.org/emacs/download/tool-bar%2b.el") (:keywords "tool-bar" "convenience" "mouse" "button" "frame"))]) (tommyh-theme . [(20131004 1630) nil "A bright, bold-colored theme for emacs" single ((:commit . "46d1c69ee0a1ca7c67b569b891a2f28fed89e7d5"))]) (toml-mode . [(20161107 1000) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing TOML files" single ((:commit . "f6c61817b00f9c4a3cab1bae9c309e0fc45cdd06") (:url . "https://github.com/dryman/toml-mode.el") (:keywords "data" "toml"))]) (toml . [(20130903 555) nil "TOML (Tom's Obvious, Minimal Language) parser" single ((:commit . "9633a6872928e737a2335aae1065768b23d8c3b3") (:url . "https://github.com/gongo/emacs-toml") (:keywords "toml" "parser"))]) (tomatinho . [(20161023 1853) nil "Simple and beautiful pomodoro timer" tar ((:commit . "7c301d343ecf7feac7348d1146075b2d9ba7d77a") (:keywords "time" "productivity" "pomodoro technique"))]) (toggle-window . [(20141207 748) nil "toggle current window size between half and full" single ((:commit . "e82c60e543933880402ede11e9423e48a17dde53") (: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 ((:commit . "e969321f274903d705995a7d0345a257576ec5ff") (: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 ((:commit . "33abc221d6887f0518337851318065cd86c34b03") (: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 ((:commit . "c1b59448e103e32202423a56c873967033778a92") (:keywords "files" "extensions" "convenience"))]) (togetherly . [(20170425 2316) ((cl-lib (0 3))) "allow multiple clients to edit a single buffer online" single ((:commit . "a6491bd5dd84f2aded0cd112ff06ae76ff78dfeb") (:url . "http://hins11.yu-yake.com/"))]) (todotxt-mode . [(20150424 704) nil "Major mode for editing todo.txt files" single ((:commit . "dc6ae151edee88f329ba7abc5d39b7440002232f") (:keywords "wp" "files"))]) (todotxt . [(20170919 1141) nil "A major mode for editing todo.txt files" single ((:commit . "afa4079f15f705a4fa34ea8e14b122e73028f285") (:url . "https://github.com/rpdillon/todotxt.el") (:keywords "todo.txt" "todotxt" "todotxt.el"))]) (toc-org . [(20171009 156) nil "add table of contents to org-mode files (formerly, org-toc)" single ((:commit . "4d259c9cea3f575e5210974c025ebe3d51cc317f") (: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 ((:commit . "532aa6978e994e2b069ffe37aaf9a0011a07dadc") (:keywords "minor mode" "font lock" "toggling."))]) (tldr . [(20171023 1929) ((emacs (24 3))) "tldr client for Emacs" single ((:commit . "fe1bd5cee3d30741c816f3ccc118b94105ceba4c") (:url . "https://github.com/kuanyui/tldr.el") (:keywords "tools" "docs"))]) (tinysegmenter . [(20141124 213) ((cl-lib (0 5))) "Super compact Japanese tokenizer in Javascript ported to emacs lisp" single ((:commit . "872134704bd25c13a4c59552433da4c6881b5230") (:url . "https://github.com/myuhe/tinysegmenter.el") (:keywords "convenience"))]) (tiny-menu . [(20161213 435) ((emacs (24 4))) "Display tiny menus." single ((:commit . "05563b94537b6eb22aeddedef2a6e59e3f88d073") (:url . "https://github.com/aaronbieber/tiny-menu.el") (:keywords "menu" "tools"))]) (tiny . [(20170903 249) nil "Quickly generate linear ranges in Emacs" single ((:commit . "012b2e7a67b9f067bbfa0292479861ffbaa201fa") (:url . "https://github.com/abo-abo/tiny") (:keywords "convenience"))]) (tinkerer . [(20170906 524) ((s (1 2 0))) "Elisp wrapper for Tinkerer Blogging Engine." single ((:commit . "e34135555f3748b578c7f8706dfd0c888fb87581") (: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 ((:commit . "66b21934b1eb8ee428c06dd64b3562ad44776a35") (:url . "https://github.com/mola-T/timp") (:keywords "internal" "lisp" "processes" "tools"))]) (timonier . [(20170411 100) ((emacs (24 4)) (s (1 11 0)) (f (0 19 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (hydra (0 13 6)) (request (0 2 0)) (all-the-icons (2 0 0))) "Manage Kubernetes Applications" tar ((:commit . "0a150ea87bf695b43cf1740dfd7e553e0ae7601c") (:url . "https://github.com/nlamirault/timonier") (:keywords "kubernetes" "docker"))]) (timesheet . [(20160530 1445) ((s (1)) (org (7)) (auctex (11))) "Timesheet management add-on for org-mode" tar ((:commit . "2ed6fea9b508eb7eaff659d9a34a09ba064d4df8") (: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 ((:commit . "615c91dec8b440d2b9b7c725dd733d7432564e45"))]) (timecop . [(20160520 352) ((cl-lib (0 5)) (datetime-format (0 0 1))) "Freeze Time for testing" single ((:commit . "e6427538b547cbe02e1bd6ed4b765c73620bdae8") (:url . "https://github.com/zonuexe/emacs-datetime") (:keywords "datetime" "testing"))]) (time-ext . [(20170126 415) nil "more function for time/date" single ((:commit . "d128becf660fe3f30178eb1b05cd266741f4784a") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/time-ext.el") (:keywords "lisp"))]) (tile . [(20161224 1957) ((emacs (25 1)) (s (1 9 0)) (dash (2 12 0)) (stream (2 2 3))) "Tile windows with layouts" single ((:commit . "22660f21f6e95de5aba55cd5d293d4841e9a4661") (:url . "https://github.com/IvanMalison/tile") (:keywords "tile" "tiling" "window" "manager" "dynamic" "frames"))]) (tidy . [(20111222 956) nil "Interface to the HTML Tidy program" single ((:url . "http://www.emacswiki.org/elisp/tidy.el") (:keywords "languages"))]) (tide . [(20171214 543) ((dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (typescript-mode (0 1)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "008f8f9cf44c81e230d58ed3d932e0ee43c2e09f") (:url . "http://github.com/ananthakumaran/tide") (:keywords "typescript"))]) (tidal . [(20171207 1452) ((haskell-mode (16)) (emacs (24))) "Interact with TidalCycles for live coding patterns" single ((:commit . "9c7a5bd0a237e199da83258f8b383ed74d992c74") (:url . "https://github.com/tidalcycles/Tidal") (:keywords "tools"))]) (tickscript-mode . [(20171218 1803) ((emacs (24 1))) "A major mode for Tickscript files" single ((:commit . "f0579f38ff14954df5002ce30ae6d4a2c978d461") (:url . "https://github.com/msherry/tickscript-mode") (:keywords "languages"))]) (thumb-through . [(20120118 2134) nil "Plain text reader of HTML documents" single ((:commit . "08d8fb720f93c6172653e035191a8fa9c3305e63") (:keywords "html"))]) (thumb-frm . [(20170307 1540) ((frame-fns (0)) (frame-cmds (0))) "Commands for thumbnail frames." single ((:url . "https://www.emacswiki.org/emacs/download/thumb-frm.el") (:keywords "frame" "icon"))]) (thrift . [(20140312 1348) nil "Major mode for Apache Thrift files" single ((:commit . "1b855d47aab32dc89e6e4271e8ac8872b049e1ba") (:keywords "files"))]) (threes . [(20160820 542) ((emacs (24)) (seq (1 11))) "A clone of Threes (a tiny puzzle game)" single ((:commit . "6981acb30b856c77cba6aba63fefbf102cbdfbb2") (:url . "https://github.com/xuchunyang/threes.el") (:keywords "games"))]) (thread-dump . [(20170816 1150) nil "Java thread dump viewer" single ((:commit . "204c9600242756d4b514bb5ff6293e052bf4b49d") (:url . "http://github.com/nd/thread-dump.el"))]) (thinks . [(20170802 428) ((cl-lib (0 5))) "Insert text in a think bubble." single ((:commit . "c02f236abc8c2025d9f01460b09b89ebdc96e28d") (:url . "https://github.com/davep/thinks.el") (:keywords "convenience" "quoting"))]) (thingopt . [(20160520 1618) nil "Thing at Point optional utilities" single ((:commit . "5679815852652479f3b3c9f3a98affc927384b2c") (:keywords "convenience"))]) (thingatpt+ . [(20170307 1539) nil "Extensions to `thingatpt.el'." single ((:url . "https://www.emacswiki.org/emacs/download/thingatpt%2b.el") (:keywords "extensions" "matching" "mouse"))]) (thing-cmds . [(20170726 1355) ((hide-comnt (0))) "Commands that use things, as defined by `thingatpt.el'." single ((:url . "https://www.emacswiki.org/emacs/download/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 ((:commit . "775a92bb7b6b0fcc5b38c0b5198a9d0a1bef788a") (:url . "https://github.com/abingham/therapy"))]) (theme-looper . [(20170425 606) ((cl-lib (0 5))) "Loop thru the available color-themes" single ((:commit . "0feeed3c93fc54305499bda5953112487f25a3a0") (:url . "http://ismail.teamfluxion.com") (:keywords "convenience" "color-themes"))]) (theme-changer . [(20171221 1127) nil "Sunrise/Sunset Theme Changer for Emacs" single ((:commit . "61945695a30d678e6a5d47cbe7c8aff59a8c30ea") (: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"))]) (tf2-conf-mode . [(20161209 820) nil "TF2 Configuration files syntax highlighting" single ((:commit . "536950f64c071ffd8495fb2c7ac7c63a11e25f93") (:url . "https://github.com/wynro/emacs-tf2-conf-mode") (:keywords "languages"))]) (textx-mode . [(20170516 211) ((emacs (24 3))) "Major mode for editing TextX files" single ((:commit . "72f9f0c5855b382024f0da8f56833c22a70a5cb3") (:url . "https://github.com/novakboskov/textx-mode") (:keywords "textx"))]) (textmate-to-yas . [(20160409 1008) nil "Import Textmate macros into yasnippet syntax" tar ((:commit . "be3a768b7ac4c2e24b9d4aa6e9ac1d916cdc5a73") (:url . "https://github.com/mlf176f2/textmate-to-yas.el/") (:keywords "yasnippet" "textmate"))]) (textmate . [(20110816 1446) nil "TextMate minor mode for Emacs" single ((:commit . "350918b070148f0ace6d9d3cd4ebcaf15c1a8781") (:keywords "textmate" "osx" "mac"))]) (textile-mode . [(20170304 916) nil "Textile markup editing major mode" single ((:commit . "c37aaab809503df008209390e31e19abf4e23630"))]) (texfrag . [(20171229 1913) ((emacs (25)) (auctex (11 90 2))) "preview LaTeX fragments in alien major modes" single ((:commit . "ba1382c073b1f73cb411fb30e618480b9a804916") (:url . "https://github.com/TobiasZawada/texfrag") (:keywords "tex" "languages" "wp"))]) (tex-smart-umlauts . [(20160427 58) nil "Smart umlaut conversion for TeX." single ((:commit . "5261b931443558f4252489a1e6616034848aff02") (:url . "http://hub.darcs.net/lyro/tex-smart-umlauts") (:keywords "tex" "wp"))]) (test-simple . [(20170527 832) ((cl-lib (0))) "Simple Unit Test Framework for Emacs Lisp" single ((:commit . "b3b69f52207d3a8111421ad7ab9ed82abbe85316") (:url . "http://github.com/rocky/emacs-test-simple") (:keywords "unit-test"))]) (test-kitchen . [(20171129 1235) nil "Run test-kitchen inside of emacs" single ((:commit . "0fc0ca4808425f03fbeb8125246043723e2a179a") (: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 ((:commit . "6074df10ebc97ddfcc228c71c73db179e672dac3") (:url . "http://nschum.de/src/emacs/test-case-mode/") (:keywords "tools"))]) (test-c . [(20170316 1432) ((emacs (24 3))) "quickly test c code" single ((:commit . "5a8c22a0e5ae6e2b0157bf1c41f0fe798c562a21") (:url . "http://github.com/aaptel/test-c"))]) (terraform-mode . [(20170111 2117) ((emacs (24 3)) (hcl-mode (0 3))) "Major mode for terraform configuration file" single ((:commit . "6973d1acaba2835dfdf174f5a5e27de6366002e1") (: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 ((:commit . "46f2cd5e96bc804069f18455a828b8e4c5ec358a") (:url . "https://github.com/proofit404/tern-django"))]) (tern-context-coloring . [(20161217 2347) ((emacs (24 3)) (context-coloring (8 1 0)) (tern (0 0 1))) "Use Tern for context coloring" single ((:commit . "3a8e979d6cc83aabcb3dda3f5f31a6422532efba") (:url . "https://github.com/jacksonrayhamilton/tern-context-coloring") (:keywords "convenience" "faces" "tools"))]) (tern-auto-complete . [(20170521 1235) ((tern (0 0 1)) (auto-complete (1 4)) (cl-lib (0 5)) (emacs (24))) "Tern Completion by auto-complete.el" single ((:commit . "ae83725819286d3f134a6b9956f1117b341e1040"))]) (tern . [(20170925 1333) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" single ((:commit . "ae83725819286d3f134a6b9956f1117b341e1040") (:url . "http://ternjs.net/"))]) (terminal-here . [(20171022 552) ((emacs (24)) (cl-lib (0 5))) "Run an external terminal in current directory" single ((:commit . "b3659e13d3d41503b4fc59dd2c7ea622631fc3ec") (:url . "https://github.com/davidshepherd7/terminal-here") (:keywords "tools" "frames"))]) (termbright-theme . [(20151030 1935) ((emacs (24 1))) "a more usable theme for white-on-black terminals" single ((:commit . "bec6ab14336c0611e85f45486276004f16d20607") (:url . "https://github.com/bmastenbrook/termbright-theme-el") (:keywords "themes"))]) (term-run . [(20151228 105) nil "Run arbitrary command in terminal buffer" single ((:commit . "54650dbbabb13cb2a6c0670ff6b24b29717a6a8b") (:url . "https://github.com/10sr/term-run-el") (:keywords "utility" "shell" "command" "term-mode"))]) (term-projectile . [(20170421 105) ((emacs (24)) (term-manager (0 1 0)) (projectile (0 13 0))) "projectile terminal management" single ((:commit . "13a0f1637a1f075d70211ccb8162e63a18a474da") (:url . "https://www.github.com/IvanMalison/term-manager") (:keywords "projectile" "tools" "terminals" "vc"))]) (term-manager . [(20171020 141) ((dash (2 12 0)) (emacs (24 4))) "Contextual terminal management" tar ((:commit . "13a0f1637a1f075d70211ccb8162e63a18a474da") (:url . "https://www.github.com/IvanMalison/term-manager") (:keywords "terminals" "tools"))]) (term-cmd . [(20160517 345) ((emacs (24 0)) (dash (2 12 0)) (f (0 18 2))) "Send commands from programs running in term.el." tar ((:commit . "6c9cbc659b70241d2ed1601eea34aeeca0646dac"))]) (term-alert . [(20161119 145) ((emacs (24 0)) (term-cmd (1 1)) (alert (1 1)) (f (0 18 2))) "Notifications when commands complete in term.el." tar ((:commit . "47af9e6fe483ef0d393098c145f499362a33292a"))]) (term+mux . [(20140210 2349) ((term+ (0 1)) (tab-group (0 1))) "term+ terminal multiplexer and session management" single ((:commit . "81b60e80cf008472bfd7fad9233af2ef722c208a") (: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 ((:commit . "fd0771fd66b8c7a909aaac972194485c79ba48c4") (:url . "http://github.com/tarao/term+-el") (:keywords "terminal" "emulation"))]) (term+ . [(20170508 1717) ((emacs (24)) (cl-lib (0 5))) "term-mode enhancement" tar ((:commit . "c3c9239b339c127231860de43abfa08c44c0201a") (:url . "https://github.com/tarao/term-plus-el") (:keywords "terminal" "emulation"))]) (ten-hundred-mode . [(20161028 1536) ((cl-lib (0 5))) "use only the ten hundred most usual words" tar ((:commit . "bdcfda49b1819e82d61fe90947e50bb948cf7933"))]) (temporary-persistent . [(20161210 333) ((emacs (24 3)) (names (20151201 0)) (dash (2 12 1)) (s (1 10 0))) "Keep temp notes buffers persistent -*- lexical-binding: t" single ((:commit . "ac66f3054fc701d53f11ada9d2d9ab18ea481dc0") (:url . "https://github.com/kostafey/temporary-persistent") (:keywords "temp" "buffers" "notes"))]) (telephone-line . [(20171109 1616) ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) "Rewrite of Powerline" tar ((:commit . "b3eaf4b8254bb1031f85ce7ac73ffdc856059d9a") (:url . "https://github.com/dbordak/telephone-line") (:keywords "mode-line"))]) (telepathy . [(20131209 458) nil "Access Telepathy from Emacs" single ((:commit . "211d785b02a29ddc254422fdcc3db45262582f8c") (:keywords "telepathy" "tools"))]) (tea-time . [(20120331 120) nil "Simple timer package, useful to make perfect tea." single ((:commit . "1f6cf0bdd27c5eb3508989c5095427781f858eca") (:keywords "timer" "tea-time"))]) (tdd-status-mode-line . [(20131123 916) nil "TDD status on the mode-line" single ((:commit . "4c082e62f4915b573338a97efcc6854d132323dc") (: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 ((:commit . "97529ed7a0939c51ce0084c0aa8b12b313654735"))]) (tc . [(20150113 1926) nil "a Japanese input method with T-Code on Emacs" tar ((:commit . "6aa9d27c475be8d009adf9cd417f2cdf348a91e8"))]) (tbx2org . [(20140224 759) ((dash (2 5 0)) (s (1 8 0)) (cl-lib (0 4))) "Tinderbox to org-mode conversion" single ((:commit . "08e9816ba6066f56936050b58d07ceb2187ae6f7") (:url . "https://github.com/istib/tbx2org") (:keywords "org-mode"))]) (tblui . [(20161007 1212) ((dash (2 12 1)) (magit-popup (2 6 0)) (tablist (0 70)) (cl-lib (0 5))) "Define tabulated list UI easily" single ((:commit . "bb29323bb3e27093d50cb42db3a9329a096b6e4d") (:url . "https://github.com/Yuki-Inoue/tblui.el"))]) (tawny-mode . [(20170422 1502) ((cider (0 12)) (emacs (25))) "Ontology Editing with Tawny-OWL" single ((:commit . "a8fc8300481a1e033a3811ccda54e552392d1689"))]) (tao-theme . [(20171221 1001) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang." tar ((:commit . "a97df8c51d77696787aaf55c67207f19c803fabe"))]) (tangotango-theme . [(20170924 809) nil "Tango Palette color theme for Emacs 24." single ((:commit . "e2f2ea9c35f06dfc43a29c91c14cf0cdb19f2144") (:url . "https://github.com/juba/color-theme-tangotango") (:keywords "tango" "palette" "color" "theme" "emacs"))]) (tango-plus-theme . [(20170214 908) nil "A color theme based on the tango palette" single ((:commit . "8ba8901397e3e9f1d53110487bfa0effc65015e7") (:url . "https://github.com/tmalsburg/tango-plus-theme"))]) (tango-2-theme . [(20120312 1325) nil "Tango 2 color theme for GNU Emacs 24" single ((:commit . "64e44c98e41ebbe3b827d54280e3b9615787daaa"))]) (take-off . [(20140531 217) ((emacs (24 3)) (web-server (0 1 0))) "Emacs remote web access" tar ((:commit . "aa9ea45566fc74febbb6ee9c409ecc4b59246215") (:url . "https://github.com/tburette/take-off"))]) (tagedit . [(20161121 55) ((s (1 3 1)) (dash (1 0 3))) "Some paredit-like features for html-mode" single ((:commit . "b3a70101a0dcf85498c92b7fcfa7fdbac869746c") (:keywords "convenience"))]) (tabula-rasa . [(20141215 2147) ((emacs (24 4))) "Distraction free writing mode" single ((:commit . "e85fff9de18dc31bc6a7aca726e34a95cc5459f5") (:url . "https://github.com/idomagal/Tabula-Rasa/blob/master/tabula-rasa.el") (:keywords "distraction free" "writing"))]) (tablist . [(20170219 1935) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:commit . "c834a84efb6efa32497efe1e73160fade741b836") (: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 ((:commit . "535568189aa12a3eff7f977d2783e57b6a65ab6a") (: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 ((:commit . "b6c285a7d59dcdb1f17716f0b60787922fa4be82") (:keywords "convenience"))]) (tab-jump-out . [(20151005 1830) ((dash (2 10)) (emacs (24 4))) "Use tab to jump out of delimiter pairs." single ((:commit . "1c3fec1826d2891177ea78e4e7cce1dc67e83e51") (:keywords "tab" "editing"))]) (tab-group . [(20140306 650) nil "Grouped tabs and their tabbar" single ((:commit . "5a290ec2608e4100fb188fd60ecb77affcc3465b") (: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 ((:commit . "668ad41e71f374f8c32c8d0532f3d8485b355d35") (:url . "http://github.com/kuanyui/ta.el") (:keywords "tools"))]) (systemtap-mode . [(20151122 1140) nil "A mode for SystemTap" single ((:commit . "1a968c2b1f3a054bebf91ac49739d3a81ce050a9") (:url . "https://github.com/ruediger/systemtap-mode") (:keywords "tools" "languages"))]) (systemd . [(20180101 1803) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:commit . "228f0b99ca3e1f3139ae8cacd15f9698d5b6da90") (:keywords "tools" "unix"))]) (system-specific-settings . [(20140818 757) nil "Apply settings only on certain systems" single ((:commit . "0050d85b2175095aa5ecf580a2fe43c069b0eef3") (:url . "https://github.com/DarwinAwardWinner/emacs-system-specific-settings") (:keywords "configuration"))]) (system-packages . [(20180108 820) ((cl-lib (0 5))) "functions to manage system packages" single ((:commit . "50defa4e24d337da495dd90122025a7d212fa9f9") (:url . "https://github.com/jabranham/system-packages"))]) (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 ((:commit . "7ddc4502c831abe1c4ad4c7d1ca628a2c9e13968") (:url . "http://github.com/rolandwalker/syntactic-sugar") (:keywords "extensions"))]) (syntactic-close . [(20180105 831) ((emacs (24)) (cl-lib (0 5))) "Insert closing delimiter" single ((:commit . "01fa7cf280d27dbb2af2261cc0e8ff2aa14742b1") (:url . "https://github.com/emacs-berlin/syntactic-close") (:keywords "languages" "convenience"))]) (synquid . [(20160930 850) ((flycheck (27)) (emacs (24 3))) "Major mode for editing Synquid files" single ((:commit . "28701ce1a15437202f53ab93a14bcba1de83fd2c") (:url . "https://github.com/cpitclaudel/synquid-mode") (:keywords "languages"))]) (synosaurus . [(20170621 957) ((cl-lib (0 5))) "An extensible thesaurus supporting lookup and substitution." tar ((:commit . "acc4c634eb7c7f6dd9bce8610efa7fc900e9c47b") (:url . "https://github.com/hpdeifel/synosaurus"))]) (synonyms . [(20170307 1537) nil "Look up synonyms for a word or phrase in a thesaurus." single ((:url . "https://www.emacswiki.org/emacs/download/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 ((:commit . "1cbdc016c70ed3834c514621f9a33adc93707024") (:url . "http://github.com/toroidal-code/synonymous.el") (:keywords "utility"))]) (syndicate . [(20160603 823) ((evil (1 0))) "evil keybindings for org-mode" single ((:commit . "90cee202a06f5bab48268ebf9f62c43334b69f50") (: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 ((:commit . "0052561d5c5b5c2684faedc3eead776aec06c3ed") (: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 ((:commit . "056d1a473e36992ff5881e5ce6fdc331cead975f") (:url . "http://hins11.yu-yake.com/"))]) (symon . [(20170224 33) nil "tiny graphical system monitor" single ((:commit . "8dd8b6df49b03cd7d31b85aedbe9dd08fb922335") (:url . "http://hins11.yu-yake.com/"))]) (symbol-overlay . [(20171103 2306) ((emacs (24 3))) "Highlight symbols with keymap-enabled overlays" single ((:commit . "305ef1d283923d2b0f1cd751f57f71754ab714e6") (:url . "https://github.com/wolray/symbol-overlay/") (:keywords "faces" "matching"))]) (sx . [(20171225 1159) ((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 ((:commit . "9488c03726464e4bd0ed0b448d203c5c7f8c212f") (:url . "https://github.com/vermiculus/sx.el/") (:keywords "help" "hypermedia" "tools"))]) (sws-mode . [(20150317 1245) nil "(S)ignificant (W)hite(S)pace mode" single ((:commit . "4dbde92542fc7ad61df38776980905a4721d642e") (: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 ((:commit . "a5e475db7a9f5db02ba3d08cd3c1c3594e2e01d7") (:url . "https://github.com/ShingoFukuyama/emacs-swoop") (:keywords "swoop" "inner" "buffer" "search" "navigation"))]) (switch-window . [(20170718 1932) ((cl-lib (0 5))) "A *visual* way to choose a window to switch to" tar ((:commit . "67113287ba61ce1951363a49f54148743dcea51e") (:url . "https://github.com/dimitri/switch-window") (:keywords "window" "navigation"))]) (switch-buffer-functions . [(20171011 1004) nil "Hook run when current buffer changed" single ((:commit . "651696ef9dec7affbe51c81d9318288376c35899") (: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 ((:commit . "57012ab626486fcb3dfba0ee6720b0625e489b8c") (:url . "https://github.com/abo-abo/swiper-helm") (:keywords "matching"))]) (swiper . [(20180102 1035) ((emacs (24 1)) (ivy (0 9 0))) "Isearch with an overview. Oh, man!" single ((:commit . "71476ff62b6c42f8a5cd7776f37ef8db0c1d8945") (:url . "https://github.com/abo-abo/swiper") (:keywords "matching"))]) (swift3-mode . [(20160918 550) ((emacs (24 4))) "Major-mode for Apple's Swift programming language." tar ((:commit . "4e51265c6905e17d8910e35b0b37cf51e20ecdfe") (:url . "https://github.com/taku0/swift3-mode") (:keywords "languages" "swift"))]) (swift-mode . [(20171228 2315) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language." tar ((:commit . "8c45f69a078c41619a7a3db6d54a732c3fad8e3f") (:url . "https://github.com/swift-emacs/swift-mode") (: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 ((:commit . "a456dd7948a25da8ff007a142cf1325b4855d908") (: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 ((:commit . "8d5b2bec12503509554f9dd83b97c198b259db2b") (:keywords "extensions" "convenience"))]) (swap-regions . [(20160413 1023) ((emacs (24 3))) "Swap two regions of text" single ((:commit . "2789091b6f34c0d4b82546eb39c4e73dc96e8679") (: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 ((:commit . "46ab31359b70d935add6c6e9533443116dc51103") (: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 ((:commit . "181357c71ea24bede263f5706d8781ad65e16877") (: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 ((:commit . "80a0e01839cafbd66899202e7764c33231974259") (:url . "https://github.com/sabof/svg-mode-line-themes"))]) (suscolors-theme . [(20161109 1215) nil "Colorful theme, inspired by Gruvbox." single ((:commit . "b946e7924aa02fa7441c970026898f17fe97601f") (:url . "https://github.com/TheSuspiciousWombat/SusColors-emacs"))]) (supergenpass . [(20130328 2248) nil "SuperGenPass for Emacs" single ((:commit . "549072ef7b5b82913cadd4758e8a0a9926f0a04a") (:keywords "supergenpass"))]) (super-save . [(20171008 3) ((emacs (24 4))) "Auto-save buffers, based on your activity." single ((:commit . "1c8fbd5e18277e4af0ada2678a854b1c9072db38") (:url . "https://github.com/bbatsov/super-save") (:keywords "convenience"))]) (suomalainen-kalenteri . [(20170801 126) nil "Finnish national and Christian holidays for calendar" tar ((:commit . "c702e33cb6e13cb28bd761844e95be112a3c04f3"))]) (sunshine . [(20160410 1317) ((cl-lib (0 5))) "Provide weather and forecast information." single ((:commit . "11e49846a116bdec6e2e463bed2db4c2df9c8ad2") (:url . "https://github.com/aaronbieber/sunshine.el") (:keywords "tools" "weather"))]) (sunny-day-theme . [(20140413 1425) nil "Emacs24 theme with a light background." single ((:commit . "420e0a6eb33fcc9b75c2c9e88ab60a975d782a00") (:url . "http://github.com/mswift42/sunny-day-theme"))]) (sunburn-theme . [(20171101 1126) ((emacs (24))) "A low contrast color theme" single ((:commit . "c57190f87e2e6c5ef6c7fbfd40964eb8f11b32ca") (:url . "http://github.com/mvarela/Sunburn-Theme"))]) (summarye . [(20130328 327) nil "list up matched strings from a buffer, and display them in summary buffer" single nil]) (suggestion-box . [(20170830 107) ((emacs (25 1)) (popup (0 5 3))) "show tooltip on the cursor" single ((:commit . "50af0776c8caf3c79c4d37fd51cbf304ea34b68e") (:keywords "convenience"))]) (suggest . [(20171229 1712) ((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 ((:commit . "5caf98ab49c6b3c421d8f274c0682bbb7fc662fe") (:url . "https://github.com/Wilfred/suggest.el") (:keywords "convenience"))]) (sudoku . [(20161110 2306) ((emacs (24 4))) "Simple sudoku game, can download puzzles" single ((:commit . "77c11b5041b58fc943cf1668b44b40bae039cb5b") (:keywords "games"))]) (sudo-ext . [(20170126 414) nil "sudo support" single ((:commit . "9d4580f304121ce7b8104bd4bd3b64e4dfa3c9b3") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sudo-ext.el") (:keywords "unix"))]) (sudo-edit . [(20170803 2052) ((emacs (24)) (cl-lib (0 5))) "Open files as another user" single ((:commit . "bcb12aaa0da0c56d851cfa2f1b3ea4afdd2a755b") (:url . "https://github.com/nflath/sudo-edit") (:keywords "convenience"))]) (subr+ . [(20170501 916) nil "Extensions to standard library `subr.el'." single ((:url . "https://www.emacswiki.org/emacs/download/subr%2b.el") (:keywords "strings" "text"))]) (sublimity . [(20170820 827) ((cl-lib (0 3))) "smooth-scrolling, minimap and distraction-free mode" tar ((:commit . "62b0c526c599a0178a16a75f16513fc1f93a0d53") (:url . "https://github.com/zk-phi/sublimity"))]) (sublime-themes . [(20170606 1144) nil "A collection of themes based on Sublime Text" tar ((:commit . "60ee40af82eb55b79d5ed4026f1911326311603f") (:keywords "faces"))]) (subemacs . [(20170401 234) nil "Evaluating expressions in a fresh Emacs subprocess" single ((:commit . "18d53939fec8968c08dfc5aff7240ca07efb1aac") (:url . "https://github.com/kbauer/subemacs") (:keywords "extensions" "lisp" "multiprocessing"))]) (subatomic256-theme . [(20130620 1910) nil "Fork of subatomic-theme for terminals." single ((:commit . "326177d6f99cd2b1d30df695e67ee3bc441cd96f") (:url . "https://github.com/cryon/subatomic256"))]) (subatomic-theme . [(20160126 738) nil "Low contrast bluish color theme" single ((:commit . "6a4086af748b1ecb27f6ba2aa2614988db16d594") (: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 ((:commit . "4dbde92542fc7ad61df38776980905a4721d642e") (:url . "https://github.com/brianc/jade-mode"))]) (stylefmt . [(20161025 124) nil "Stylefmt interface" single ((:commit . "7a38f26bf8ff947215f34f0a064c7ca80575ccbc") (:url . "https://github.com/KeenS/stylefmt.el") (:keywords "style" "code" "formatter"))]) (stupid-indent-mode . [(20170525 417) nil "Plain stupid indentation minor mode" single ((:commit . "3295e7de5e2cfddc3bf0e462e852bf58972f5d70"))]) (stumpwm-mode . [(20140130 1816) nil "special lisp mode for evaluating code into running stumpwm" single ((:commit . "61a7cf27e49e0779a53c018b2342f5f1c5cc70b4") (:keywords "comm" "lisp" "tools"))]) (stripe-buffer . [(20141208 708) ((cl-lib (1 0))) "Use a different background for even and odd lines" single ((:commit . "c252080f55cb78c951b19ebab9687f6d00237baf") (:url . "https://github.com/sabof/stripe-buffer"))]) (strings . [(20170307 1533) nil "Miscellaneous string functions." single ((:url . "https://www.emacswiki.org/emacs/download/strings.el") (:keywords "internal" "strings" "text"))]) (string-utils . [(20140508 1341) ((list-utils (0 4 2))) "String-manipulation utilities" single ((:commit . "c2232d691617973ecf12a970c6008a161c21da14") (:url . "http://github.com/rolandwalker/string-utils") (:keywords "extensions"))]) (string-inflection . [(20180102 643) nil "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" single ((:commit . "d3bbc560bad160ba183778ca4628a2cce34fdd65") (:keywords "elisp"))]) (string-edit . [(20160410 2356) ((dash (1 2 0))) "Avoid escape nightmares by editing string in separate buffer" single ((:commit . "c44b65b4c5e9f52be9c14d88ca2f402a18d9e1dd"))]) (strie . [(20160211 1422) ((cl-lib (0 5))) "A simple trie data structure implementation" single ((:commit . "eb7efb0cccc127c414f6a64db11454869d9c10a8"))]) (strace-mode . [(20171116 1239) nil "strace output syntax highlighting" single ((:commit . "2901baa968d5180ab985ac40ca22cc20914d01f5") (:keywords "languages"))]) (stock-ticker . [(20150204 252) ((s (1 9 0)) (request (0 2 0))) "Show stock prices in mode line" single ((:commit . "f2e564142c9de84232839a5b01979cf95b04d6a9") (:url . "https://github.com/hagleitn/stock-ticker") (:keywords "comms"))]) (stickyfunc-enhance . [(20150429 1114) ((emacs (24 3))) "An enhancement to stock `semantic-stickyfunc-mode'" single ((:commit . "13bdba51fcd83ccbc3267959d23afc94d458dcb0") (: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"))]) (stem-english . [(20170113 24) ((emacs (24 3))) "- routines for stemming English word" single ((:commit . "c8d9ccf1ea38ea403ba360b79b1042b0fd449a70") (:url . "http://github.com/kawabata/stem-english") (:keywords "text"))]) (stem . [(20131102 409) nil "Routines for stemming" single ((:commit . "d74e6611d6ba5025e0276a2cc7c8a90f46bfa9ac") (:url . "https://github.com/yuutayamada/stem") (:keywords "stemming"))]) (steam . [(20171108 1613) ((cl-lib (0 5))) "Organize and launch Steam games" single ((:commit . "d6ca2a828b0824da51978397e198bf91c51ce793") (:url . "http://github.com/Kungsgeten/steam.el") (:keywords "games"))]) (status . [(20151230 608) nil "This package adds support for status icons to Emacs." tar ((:commit . "b62c74bf272566f82a68622f29fb9edafea0f241"))]) (state . [(20170107 535) ((emacs (24))) "Quick navigation between workspaces" single ((:commit . "ea6e2cf6f592cbcfc5800b68f0fc2462555cacce") (:url . "https://github.com/thisirs/state.git") (:keywords "convenience" "workspaces"))]) (stash . [(20151117 627) nil "lightweight persistent caching" single ((:commit . "c2e494d20c752b80ebbdffbf66687b3cdfc425ad") (: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 ((:commit . "f7d33fed7ad2dc61156f1c1cff9e1805366fbd69") (:url . "https://github.com/lujun9972/el-start-menu") (:keywords "convenience" "menu"))]) (standoff-mode . [(20171115 931) nil "Create stand-off markup, also called external markup." tar ((:commit . "cf84b14066d63694d931395c6026fd0245d8a62b"))]) (stan-snippets . [(20161023 1958) ((stan-mode (9 2 0)) (yasnippet (0 8 0))) "Yasnippets for Stan" tar ((:commit . "45b8242611fe0437fcff48f5f4f7d8f0552531ac") (:url . "http://github.com/stan-dev/stan-mode") (:keywords "snippets"))]) (stan-mode . [(20161023 1958) nil "Major mode for editing Stan files" tar ((:commit . "45b8242611fe0437fcff48f5f4f7d8f0552531ac") (: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 ((:commit . "f3481e239dde9817152ec00e32bfc3ebf5aaf2cb") (:url . "https://github.com/commercialhaskell/stack-ide") (:keywords "haskell" "stack"))]) (ssh-tunnels . [(20141219 318) ((cl-lib (0 5)) (emacs (24))) "Manage SSH tunnels" single ((:commit . "b08ba7a560ba5b16aa95c3cc17ed6fea59529cc4") (:url . "http://github.com/death/ssh-tunnels") (:keywords "tools" "convenience"))]) (ssh-deploy . [(20171211 311) nil "Deployment via TRAMP, global or per directory." single ((:commit . "ee808acef916c7cf828923e6517a6867044caaf5") (:url . "https://github.com/cjohansson/emacs-ssh-deploy") (:keywords "tools" "convenience"))]) (ssh-config-mode . [(20171109 1549) nil "Mode for fontification of ~/.ssh/config" tar ((:commit . "7824d5f8baf2c97856f5bc7b1ef88befbb1978f3") (:url . "https://github.com/jhgorrell/ssh-config-mode-el") (:keywords "ssh" "config" "emacs"))]) (ssh-agency . [(20170807 1152) ((emacs (24 4)) (dash (2 10 0))) "manage ssh-agent from Emacs" single ((:commit . "e572e031852561f98a7053afcdc9a3796dde2137") (:url . "https://github.com/magit/ssh-agency"))]) (ssh . [(20120904 1342) nil "Support for remote logins using ssh." single ((:commit . "c17cf5b43df8ac4662a0580f85898e1f078df0d1") (:keywords "unix" "comm"))]) (ssass-mode . [(20171201 509) ((emacs (24 3))) "Edit Sass without a Turing Machine" single ((:commit . "a95c4c9f99895cc582849b35e90ae13f1587ddce") (:url . "http://github.com/AdamNiederer/ssass-mode") (:keywords "languages" "sass"))]) (srefactor . [(20170223 540) ((emacs (24 4))) "A refactoring tool based on Semantic parser framework" tar ((:commit . "531753fdc24570a1341c169f36b9fa0d4c09ff42") (:url . "https://github.com/tuhdo/semantic-refactor") (:keywords "c" "languages" "tools"))]) (sr-speedbar . [(20161025 131) nil "Same frame speedbar" single ((:commit . "77a83fb50f763a465c021eca7343243f465b4a47") (:url . "http://www.emacswiki.org/emacs/download/sr-speedbar.el") (:keywords "speedbar" "sr-speedbar.el"))]) (sqlup-mode . [(20170610 837) nil "Upcase SQL words for you" single ((:commit . "04970977b4abb4d44301651618bbf1cdb0b263dd") (:url . "https://github.com/trevoke/sqlup-mode.el") (:keywords "sql" "tools" "redis" "upcase"))]) (sqlplus . [(20170710 150) 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 ((:commit . "9a7fb5836a19bc0ea8b4c5a50177112524380986"))]) (sql-indent . [(20170112 1507) nil "indentation of SQL statements" single ((:commit . "761a5724d181b75f30e64040408b8836d41f9db9") (:url . "https://github.com/bsvingen/sql-indent") (:keywords "languages"))]) (sql-impala . [(20160427 1658) nil "comint support for Cloudera Impala" single ((:commit . "e7a2d79d60b0a6339d730fc39ca024c3d6c56de7") (:url . "https://github.com/jterk/sql-impala") (:keywords "sql" "impala"))]) (spu . [(20161213 1924) ((emacs (24 4)) (signal (1 0)) (timp (1 2 0))) "Silently upgrade package in the background" tar ((:commit . "41eec86b595816e3852e8ad1a8e07e51a27fd065") (: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 ((:commit . "0fd386b8b29c4175022a04ad70ea5643185b6726") (:keywords "tools"))]) (sproto-mode . [(20151115 1005) nil "Major mode for editing sproto." single ((:commit . "0583a88273204dccd884b7edaa3590cefd31e7f7") (:keywords "sproto"))]) (sprintly-mode . [(20121005 2234) ((furl (0 0 2))) "Major mode for dealing with sprint.ly" single ((:commit . "6695892bae5860b5268bf3ae62be990ee9b63c11") (:url . "https://github.com/sprintly/sprintly-mode"))]) (springboard . [(20170105 2355) ((helm (1 6 9))) "Temporarily change default-directory for one command" single ((:commit . "263a8cd4582c81bfc29d7db37d5267e2488b148c") (:url . "https://github.com/jwiegley/springboard") (:keywords "helm"))]) (spray . [(20160304 1420) nil "a speed reading mode" single ((:commit . "df326991acb2bd64af373bcf09816df9c6424d0d") (: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 ((:commit . "ab902900f22e7d1ea2dd8169441d2da7155aaa68") (:url . "http://www.pragmaticemacs.com") (:keywords "search" "external"))]) (spotify . [(20170302 2229) ((cl-lib (0 5))) "Control the spotify application from emacs" single ((:commit . "2825b5cac8406969405096660aeab6e5fef765eb") (:url . "https://github.com/remvee/spotify-el") (:keywords "convenience"))]) (splitter . [(20170809 1508) nil "Manage window splits" single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (: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 ((:commit . "e2945ee269e6e90f0243d6f2a33e067bb0a2873c") (:url . "https://github.com/syohex/emacs-splitjoin"))]) (spiral . [(20180105 1253) ((emacs (25 1)) (a (0 1 0 -3 4)) (avy (0 4 0)) (clojure-mode (5 6 0)) (highlight (0)) (treepy (1 0 0))) "Clojure IDE based on UNREPL" tar ((:commit . "b25c42dd5add3192e846a5fe34be689e73f0c28c") (:url . "https://github.com/Unrepl/spiral") (:keywords "languages" "clojure"))]) (spike-theme . [(20160530 733) nil "A light color theme with muted, autumnal colors." single ((:commit . "7a7766be0b6197103840644bb074f864d0d91cd8") (:url . "https://github.com/m31271n/spike-theme") (:keywords "color" "theme" "green"))]) (spice-mode . [(20171027 2343) ((emacs (24 3))) "Major mode for SPICE" single ((:commit . "702bf2d5c3561be44771ea77b476532d32068504") (:url . "http://spice-mode.4t.com/") (:keywords "spice" "spice2g6" "spice3" "eldo" "hspice" "layla" "mondriaan" "fasthenry" "cdl" "spectre compatibility" "netlist editing"))]) (sphinx-mode . [(20170607 1436) nil "Minor mode providing sphinx support." tar ((:commit . "0a9fcd60639f1f4235b4747e8449b9f48651705f"))]) (sphinx-frontend . [(20161025 58) nil "Launch build process for rst documents via sphinx." single ((:commit . "0cbb03361c245382d3e679dded30c4fc1713c252") (: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 ((:commit . "f39da2e6cae55d5d7c7ce887e69755b7529bcd67") (:url . "https://github.com/naiquevin/sphinx-doc.el") (:keywords "sphinx" "python"))]) (speed-type . [(20171230 847) ((emacs (24 3)) (cl-lib (0 3))) "Practice touch and speed typing" single ((:commit . "7a67fcd7bf825eee890097bd4a1b3c4f531a1135") (:url . "https://github.com/parkouss/speed-type") (:keywords "games"))]) (speechd-el . [(20160710 359) nil "Client to speech synthesizers and Braille displays." tar ((:commit . "ec344edd498f95e3c945958475b31bae6505c34c"))]) (speech-tagger . [(20170728 1129) ((cl-lib (0 5))) "tag parts of speech using coreNLP" tar ((:commit . "61955b40d4e8b09e66a3e8033e82893f81657c06") (: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 . [(20171116 510) ((cl-lib (0 5)) (emacs (25 1))) "Edit and interactively evaluate SPARQL queries." tar ((:commit . "00527b8172ae61b667bc70a802c112132e06ba0b") (:url . "https://github.com/ljos/sparql-mode"))]) (sparkline . [(20150101 519) ((cl-lib (0 3))) "Make sparkline images from a list of numbers" single ((:commit . "a2b5d817d272d6363b67ed8f8cc75499a19fa8d2") (:keywords "extensions"))]) (spark . [(20160414 1901) ((emacs (24 3))) "sparkline generation" single ((:commit . "0bf148c3ede3b31d56fd75f347cdd0b0eae60025") (:url . "https://github.com/alvinfrancis/spark") (:keywords "lisp" "data"))]) (spaces . [(20170809 1508) nil "Create and switch between named window configurations." single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:url . "https://github.com/chumpage/chumpy-windows") (:keywords "frames" "convenience"))]) (spacemacs-theme . [(20180107 1039) nil "Color theme with a dark and light versions" tar ((:commit . "3c43532474164ff5829a7558b49173b5b565a048") (:keywords "color" "theme") (:url . "https://github.com/nashamri/spacemacs-theme"))]) (spaceline-all-the-icons . [(20170829 120) ((emacs (24 4)) (all-the-icons (2 6 0)) (spaceline (2 0 0)) (memoize (1 0 1))) "A Spaceline theme using All The Icons" tar ((:commit . "e2e195f64a541d72b6d0ba0451f1e3072234b820") (:url . "https://github.com/domtronn/spaceline-all-the-icons.el") (:keywords "convenience" "lisp" "tools"))]) (spaceline . [(20171111 334) ((emacs (24 4)) (cl-lib (0 5)) (powerline (2 3)) (dash (2 11 0)) (s (1 10 0))) "Modeline configuration library for powerline" tar ((:commit . "ca20430271f80d46892d62cb7624b4dee6cafe72") (:url . "https://github.com/TheBB/spaceline") (:keywords "mode-line" "powerline" "spacemacs"))]) (spacegray-theme . [(20150719 1231) ((emacs (24 1))) "A Hyperminimal UI Theme" single ((:commit . "7f70ee36297e5ccf9bc90b1f81472024f5a7a749") (:url . "http://github.com/bruce/emacs-spacegray-theme") (:keywords "themes"))]) (sourcetrail . [(20170410 1437) ((emacs (24 4))) "Communication with Sourcetrail" single ((:commit . "b8d5557aa565ae979622312576db20515f65f977") (:keywords "external" "tool"))]) (sourcerer-theme . [(20161014 925) nil "A version of sourcerer by xero" single ((:commit . "c7f8e665d53bb48fb72f95f706710d53d24bd407") (:url . "http://github.com/gilbertw1/sourcerer-emacs") (:keywords "themes"))]) (sourcemap . [(20161215 2140) ((emacs (24 3))) "Sourcemap parser" single ((:commit . "64c89d296186f48d9135fb8aad501de19f64bceb") (:url . "https://github.com/syohex/emacs-sourcemap"))]) (sourcekit . [(20180101 34) ((emacs (24 3)) (dash (2 12 1)) (dash-functional (1 2 0)) (request (0 2 0))) "Library to interact with sourcekittendaemon" single ((:commit . "abf9bc5a0102eb666d3aa6d6bf22f6efcc852781") (: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 ((:commit . "09ec030843482594beae2664b8fe1e0ad1e66472") (: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 ((:commit . "f998d4276ea90258909c698f6a5a51fccb667c08") (:keywords "soundcloud" "music" "audio"))]) (sound-wav . [(20160725 724) ((deferred (0 3 1)) (cl-lib (0 5))) "Play wav file" single ((:commit . "406868043761524118c27b1207be0f8bbda8798e") (:url . "https://github.com/syohex/emacs-sound-wav"))]) (sotlisp . [(20170429 1945) ((emacs (24 1))) "Write lisp at the speed of thought." single ((:commit . "89dfed2b5d2e9a3b16bfc47f169412b583626059") (:url . "https://github.com/Malabarba/speed-of-thought-lisp") (:keywords "convenience" "lisp"))]) (sotclojure . [(20170921 1708) ((emacs (24 1)) (clojure-mode (4 0 0)) (cider (0 8)) (sotlisp (1 3))) "Write clojure at the speed of thought." tar ((:commit . "ceac82aa691e8d98946471be6aaff9c9a4603c32") (:url . "https://github.com/Malabarba/speed-of-thought-clojure") (:keywords "convenience" "clojure"))]) (sos . [(20141214 2003) ((org (7))) "StackOverflow Search" single ((:commit . "1573adca912b88b5010d99a25c83a5b2313bd39c") (:url . "https://github.com/omouse/emacs-sos") (:keywords "tools" "search" "questions"))]) (sort-words . [(20160929 635) nil "Sort words in a selected region" single ((:commit . "7b6e108f80237363faf7ec28b2c58dec270b8601") (:url . "http://github.org/dotemacs/sort-words.el") (:keywords "tools"))]) (soothe-theme . [(20141027 741) ((emacs (24 1))) "a dark colorful theme for Emacs24." single ((:commit . "0786fe70c6c1b4ddcfb932fdc6862b9611cfc09b") (:url . "https://github.com/jasonm23/emacs-soothe-theme"))]) (sonic-pi . [(20171205 405) ((cl-lib (0 5)) (osc (0 1)) (dash (2 2 0)) (emacs (24)) (highlight (0))) "A Emacs client for SonicPi" tar ((:commit . "3cf101b3b299735ed91658c7791ea4f04164e076") (:url . "http://www.github.com/repl-electric/sonic-pi.el") (:keywords "sonicpi" "ruby"))]) (solidity-mode . [(20171231 741) nil "Major mode for ethereum's solidity language" tar ((:commit . "b5d95ef678305ca70b17e94fc2ee4289a8328048") (:keywords "languages"))]) (solarized-theme . [(20180101 42) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 6 0))) "The Solarized color theme, ported to Emacs." tar ((:commit . "2dd2699b2f315374333292b132dc0dc03719aba2"))]) (solaire-mode . [(20171209 1350) ((emacs (24 4)) (cl-lib (0 5))) "make certain buffers grossly incandescent" single ((:commit . "dd93cfd6c02e4575e6c7048ecf9dac8c09864bf2") (:url . "https://github.com/hlissner/emacs-solaire-mode") (:keywords "dim" "bright" "window" "buffer" "faces"))]) (soft-stone-theme . [(20140614 135) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "fb475514cfb02cf30ce358a61c48e46614344d48") (:url . "http://github.com/mswift42/soft-stone-theme"))]) (soft-morning-theme . [(20150918 1341) nil "Emacs24 theme with a light background." single ((:commit . "c0f9c70c97ef2be2a093cf839c4bfe27740a111c") (:url . "http://github.com/mswift42/soft-morning-theme"))]) (soft-charcoal-theme . [(20140420 943) nil "Dark charcoal theme with soft colors" single ((:commit . "5607ab977fae6638e78b1495e02da8955c9ba19f") (:url . "http://github.com/mswift42/soft-charcoal-theme"))]) (socyl . [(20170211 2242) ((s (1 11 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Frontend for several search tools" tar ((:commit . "1ef2da42f66f3ab31a34131e51648f352416f0ba") (:url . "https://github.com/nlamirault/socyl") (:keywords "ripgrep" "sift" "ack" "pt" "ag" "grep" "search"))]) (snoopy . [(20171008 1304) ((emacs (24)) (cl-lib (0 6))) "minor mode for number row unshifted character insertion" single ((:commit . "ec4123bdebfe0bb7bf4feaac2dc02b59caffe386") (:keywords "lisp"))]) (snippet . [(20130210 1515) nil "Insert snippets of text into a buffer" single ((:commit . "11d00dd803874b93836f2010b08bd2c97b0f3c63"))]) (snazzy-theme . [(20170823 1132) ((emacs (24)) (base16-theme (2 1))) "An elegant syntax theme with bright colors" single ((:commit . "479351a34cd7f754375ee45f161f83a19d0fd29c") (:url . "https://github.com/weijiangan/emacs-snazzy/") (:keywords "faces" "theme" "color" "snazzy"))]) (snapshot-timemachine-rsnapshot . [(20170324 513) ((snapshot-timemachine (20160222 132)) (seq (2 19))) "rsnapshot backend for snapshot-timemachine" single ((:commit . "72b0b700d80f1a0442e62bbbb6a0c8c59182f97f"))]) (snapshot-timemachine . [(20161221 129) ((emacs (24 4))) "Step through (Btrfs, ZFS, ...) snapshots of files" single ((:commit . "99efcebab309b11ed512a8dc62555d3834df5efb") (:url . "https://github.com/mrBliss/snapshot-timemachine"))]) (snakemake-mode . [(20171030 1016) ((emacs (24)) (cl-lib (0 5)) (magit-popup (2 4 0))) "Major mode for editing Snakemake files" tar ((:commit . "990d6d8e98b96b9afe5b9b340507b1aecd8de1ce") (:url . "https://github.com/kyleam/snakemake-mode") (:keywords "tools"))]) (smyx-theme . [(20141127 28) nil "smyx Color Theme" single ((:commit . "6263f6b401bbabaed388c8efcfc0be2e58c51401") (:keywords "color" "theme" "smyx"))]) (smtpmail-multi . [(20160218 1549) nil "Use different smtp servers for sending mail" single ((:commit . "81eabfe56f620ee044ff9dd52fa8b6148d0a9f30") (:url . "https://github.com/vapniks/smtpmail-multi") (:keywords "comm"))]) (smotitah . [(20150218 230) nil "Modular emacs configuration framework" tar ((:commit . "f9ab562128a5460549d016913533778e8c94bcf3"))]) (smooth-scrolling . [(20161002 1249) nil "Make emacs scroll smoothly" single ((:commit . "2462c13640aa4c75ab3ddad443fedc29acf68f84") (:url . "http://github.com/aspiers/smooth-scrolling/") (:keywords "convenience"))]) (smooth-scroll . [(20130321 2114) nil "Minor mode for smooth scrolling and in-place scrolling." single ((:commit . "02320f28abb5cae28b3a18f6b9ce93129bdbfc45") (:url . "http://www.emacswiki.org/emacs/download/smooth-scroll.el") (:keywords "convenience" "emulations" "frames"))]) (smmry . [(20161024 201) nil "SMMRY client" single ((:commit . "986a1b0aec8ab1ef17dbfb7886f47e5558cf738a") (:url . "https://github.com/microamp/smmry.el") (:keywords "api" "smmry"))]) (sml-modeline . [(20170614 1411) nil "Show position in a scrollbar like way in mode-line" single ((:commit . "d2f9f70174c4cf68c67eb3bb8088235735e34d9a") (: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 ((:commit . "fbb381758adcb000a0c304be1b797f985f00e2de") (:keywords "smiles"))]) (smex . [(20151212 1409) ((emacs (24))) "M-x interface with Ido-style fuzzy matching." single ((:commit . "55aaebe3d793c2c990b39a302eb26c184281c42c") (:url . "http://github.com/nonsequitur/smex/") (:keywords "convenience" "usability"))]) (smeargle . [(20161212 1558) ((emacs (24 3))) "Highlighting region by last updated time" single ((:commit . "0665b1ff5109731898bc4a0ca6d939933b804777") (:url . "https://github.com/syohex/emacs-smeargle"))]) (smblog . [(20170419 321) ((emacs (24 3))) "samba log viewer" single ((:commit . "5245e7aeac20915121946f59bba30899305d950b") (:url . "http://github.com/aaptel/smblog-mode"))]) (smbc . [(20171229 1008) nil "View SMBC from Emacs" single ((:commit . "10538e3d575ba6ef3c94d555af2744b42dfd36c7") (:url . "https://github.com/sakshamsharma/emacs-smbc") (:keywords "smbc" "webcomic"))]) (smarty-mode . [(20100703 458) nil "major mode for editing smarty templates" single ((:commit . "3dfdfe1571f5e9ef55a29c51e5a80046d4cb7568") (:url . "none yet") (:keywords "smarty" "php" "languages" "templates"))]) (smartscan . [(20170211 1233) nil "Jumps between other symbols found at point" single ((:commit . "234e077145710a174c20742de792b97ed2f965f6") (:keywords "extensions"))]) (smartrep . [(20150508 1930) nil "Support sequential operation which omitted prefix keys." single ((:commit . "f0ff5a6d7b8603603598ae3045c98b011e58d86e") (:url . "https://github.com/myuhe/smartrep.el") (:keywords "convenience"))]) (smartparens . [(20171201 242) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "65fbcfc849afb89e2642f9b87f66e6a96382f88c"))]) (smart-window . [(20160716 1830) ((cl-lib (0 5))) "vim-like window controlling plugin" single ((:commit . "5996461b7cbc5ab4509ac48537916eb29a8e4c16") (:url . "https://github.com/dryman/smart-window.el") (:keywords "window"))]) (smart-tabs-mode . [(20160629 752) nil "Intelligently indent with tabs, align with spaces!" single ((:commit . "9cc2594b82b03e7d68645a4878f9359f8b8c34c5") (:url . "http://www.emacswiki.org/emacs/SmartTabs") (:keywords "languages"))]) (smart-tab . [(20170902 1407) nil "Intelligent tab completion and indentation." single ((:commit . "76a8ec13384975d39aa1b25e5384a02558dba574") (:url . "http://github.com/genehack/smart-tab/tree/master") (:keywords "extensions"))]) (smart-shift . [(20150202 2325) nil "Smart shift text left/right." single ((:commit . "a26ab2b240137e62ec4bce1698ed9c5f7b6d13ae") (:url . "https://github.com/hbin/smart-shift") (:keywords "convenience" "tools"))]) (smart-semicolon . [(20171007 1833) ((emacs (25))) "Insert semicolon smartly" single ((:commit . "c11096679dbed3875c37413337ee490ee7951b63") (:url . "https://github.com/iquiw/smart-semicolon"))]) (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 ((:commit . "5a8017fd8e8dc3483865951c4942cab3f96f69f6") (:url . "https://github.com/uk-ar/smart-region") (:keywords "marking" "region"))]) (smart-newline . [(20131207 1940) nil "Provide smart newline for one keybind." single ((:commit . "0553a9e4be7188352de1a28f2eddfd28e7436f94"))]) (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 ((:commit . "1facbe9816b602c640ddb23602e30588d6d904ca") (:url . "http://github.com/Bruce-Connor/smart-mode-line") (:keywords "mode-line" "faces" "themes"))]) (smart-mode-line . [(20171013 849) ((emacs (24 3)) (rich-minority (0 1 1))) "A color coded smart mode-line." tar ((:commit . "1facbe9816b602c640ddb23602e30588d6d904ca") (: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 ((:commit . "04b522a23e3aae8381c6a976fc978532fcb2e7d0") (:keywords "mark" "restore"))]) (smart-jump . [(20180107 1054) ((emacs (25 1)) (dumb-jump (0 5 1))) "Smart go to definition." tar ((:commit . "7042923b6edff126d59808fa718bf38c5f53464e") (:url . "https://github.com/jojojames/smart-jump") (:keywords "tools"))]) (smart-indent-rigidly . [(20141205 1615) nil "Smart rigid indenting" single ((:commit . "323d1fe4d0b81e598249aad01bc44adb180ece0e") (:url . "https://github.com/re5et/smart-indent-rigidly") (:keywords "indenting" "coffee-mode" "haml-mode" "sass-mode"))]) (smart-hungry-delete . [(20170412 643) ((emacs (24 3))) "smart hungry deletion of whitespace" single ((:commit . "7c1d56a92481594e14d40b5fdf6c48657a0108a0") (:url . "https://github.com/hrehfeld/emacs-smart-hungry-delete") (:keywords "convenience"))]) (smart-forward . [(20140430 13) ((expand-region (0 8 0))) "Semantic navigation" single ((:commit . "7b6dbfdbd4b646376a567c70e1a161545431b72b") (:keywords "navigation"))]) (smart-dash . [(20110130 1916) nil "Smart-Dash minor mode" single nil]) (smart-cursor-color . [(20141124 919) nil "Change cursor color dynamically" single ((:commit . "1d190f49ca77734b55ac58f1b6276e42ada967b0") (:url . "https://github.com/7696122/smart-cursor-color/") (:keywords "cursor" "color" "face"))]) (smart-compile . [(20171104 2333) nil "an interface to `compile'" single ((:commit . "2a0c9b33bd97461d100e24df0103d4e5526a30d6") (:keywords "tools" "unix"))]) (smart-comment . [(20160322 1139) nil "smarter commenting" single ((:commit . "17ddbd83205818763e6d68aa7a1aa9aaf414cbd4") (:keywords "lisp"))]) (smart-backspace . [(20171013 2226) nil "intellj like backspace" single ((:commit . "a10ec44ff325ec8c4c98b1a6e44e89e60a9aa4ac") (:url . "https://github.com/itome/smart-backspace"))]) (sly-quicklisp . [(20170112 135) ((sly (1 0 0 -2 2))) "Quicklisp support for SLY" tar ((:commit . "8a9e3c0c07c6861ec33b338cc46ac12e7ce6a477") (: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 ((:commit . "df4ed79064cf85275804e201899b677bef4ab3f5") (: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 ((:commit . "eb16778d104413a3e2a8d5537437c4ad76c2954b") (: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 ((:commit . "1bfcca692b6ec0670ed309ffe29eb9384397c183") (: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 ((:commit . "08aef69394fbef31dfeb3d3bb72a4557df9d7624") (:keywords "convenience" "lisp" "abbrev"))]) (sly . [(20171220 1443) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:commit . "436094626698e77efa38cbf45681db7ea6b7e9f7") (:url . "https://github.com/joaotavora/sly") (:keywords "languages" "lisp" "sly"))]) (slstats . [(20170823 149) ((cl-lib (0 5)) (emacs (24))) "Acquire and display stats about Second Life" single ((:commit . "e9696066abf3f2b7b818a57c062530dfd9377033") (:url . "https://github.com/davep/slstats.el") (:keywords "games"))]) (slovak-holidays . [(20150418 155) nil "Adds a list of slovak holidays to Emacs calendar" single ((:commit . "effb16dfcd14797bf7448f5113085479db339c02") (:keywords "calendar"))]) (slirm . [(20160201 625) ((emacs (24 4))) "Systematic Literature Review Mode for Emacs." single ((:commit . "9adfbe1fc67580e7d0d90f7e927a25d63a797464") (:url . "http://github.com/fbie/slirm"))]) (slime-volleyball . [(20140717 2141) nil "An SVG Slime Volleyball Game" tar ((:commit . "159b5c0f40b109e3854e94b89ec5383854c46ae3") (:keywords "games"))]) (slime-theme . [(20170808 622) ((emacs (24 0))) "an Emacs 24 theme based on Slime (tmTheme)" single ((:commit . "8e5880ac69e0b6a079103001cc3a90bdb688998f") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (slime-docker . [(20171004 1151) ((emacs (24)) (slime (2 16)) (docker-tramp (0 1)) (cl-lib (0 5))) "Integration of SLIME with Docker containers." tar ((:commit . "13fa8be2fca516f3ff5fb70fa79dd8404bf86439") (:url . "https://github.com/daewok/slime-docker") (:keywords "docker" "lisp" "slime"))]) (slime-company . [(20180108 426) ((slime (2 13)) (company (0 9 0))) "slime completion backend for company mode" single ((:commit . "fb54d166ca3e61e8f82020b7c5cfeafd3f4ad425") (:keywords "convenience" "lisp" "abbrev"))]) (slime . [(20171230 1630) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:commit . "179741a0616f78f4e5901fe04dea79654c504fba") (:url . "https://github.com/slime/slime") (:keywords "languages" "lisp" "slime"))]) (slim-mode . [(20170728 648) nil "Major mode for editing Slim files" single ((:commit . "3636d18ab1c8b316eea71c4732eb44743e2ded87") (:url . "http://github.com/slim-template/emacs-slim") (:keywords "markup" "language"))]) (slideview . [(20150324 1540) ((cl-lib (0 3))) "File slideshow" single ((:commit . "b6d170bda139aedf81b47dc55cbd1a3af512fb4c") (:url . "https://github.com/mhayashi1120/Emacs-slideview") (:keywords "files"))]) (slack . [(20180103 1928) ((websocket (1 8)) (request (0 2 0)) (oauth2 (0 10)) (circe (2 2)) (alert (1 2)) (emojify (0 2))) "Slack client for Emacs" tar ((:commit . "58b1309255563819ee8f83f625af49ac0353bed1") (:url . "https://github.com/yuya373/emacs-slack"))]) (sl . [(20161217 604) ((cl-lib (0 5))) "An Emacs clone of sl(1)" tar ((:commit . "0882117728be91276b815e18c2a66106bf9d69d3") (:url . "https://github.com/xuchunyang/sl.el"))]) (skype . [(20160711 124) nil "skype UI for emacs users.." tar ((:commit . "8e3b33e620ed355522aa36434ff41e3ced080629") (:keywords "skype" "chat"))]) (skewer-reload-stylesheets . [(20160725 520) ((skewer-mode (1 5 3))) "live-edit CSS, SCSS, Less, and friends." tar ((:commit . "b9cc5635230ac3c0603a6da690c6e632d0a7490a"))]) (skewer-mode . [(20170730 1241) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "live browser JavaScript, CSS, and HTML interaction" tar ((:commit . "7df248a4b7ec2eb0f3cabcbdfb052593d1f86590"))]) (skewer-less . [(20160828 1321) ((skewer-mode (1 5 3))) "Skewer support for live LESS stylesheet updates" single ((:commit . "927d6848a1ea9428d4cc995f76bd42f7b8da6bc8") (:keywords "languages" "tools"))]) (skeletor . [(20170616 1746) ((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 ((:commit . "01c330ec115fc29bba5d9bdf6c15beb4a44e2281"))]) (simplezen . [(20130421 300) ((s (1 4 0)) (dash (1 1 0))) "A simple subset of zencoding-mode for Emacs." single ((:commit . "119fdf2c6890a0c56045ae72cf4fce0071a81481"))]) (simplenote2 . [(20171201 1806) ((request-deferred (0 2 0))) "Interact with app.simplenote.com" tar ((:commit . "0fd6dbd0566af29964078e4b74baf69c2f52381a") (:keywords "simplenote"))]) (simplenote . [(20141118 640) nil "Interact with simple-note.appspot.com" single ((:commit . "e836fcdb5a6497a9ffd6bceddd19b4bc52189078") (:keywords "simplenote"))]) (simpleclip . [(20170803 540) nil "Simplified access to the system clipboard" single ((:commit . "d461c462c237cd896553adb468cd77499d0d26ad") (:url . "http://github.com/rolandwalker/simpleclip") (:keywords "convenience"))]) (simple-screen . [(20141023 758) nil "Simple screen configuration manager" single ((:commit . "4fcbdb4575310c0a2b4dd17fc8aeb4d7e6e9ffae") (: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 ((:commit . "8c7cd96cf66ef112be5c363e3378e304f8f83999") (:keywords "remember" "the" "milk" "productivity" "todo"))]) (simple-paren . [(20180104 1016) ((emacs (24)) (cl-lib (0 5))) "Insert paired delimiter, wrap" single ((:commit . "6a8c33443a1e8d502d272584a4a09b23a2342679") (:url . "https://github.com/andreas-roehler/simple-paren") (:keywords "convenience"))]) (simple-mpc . [(20161103 1219) ((s (1 10 0))) "provides a simple interface to mpc" tar ((:commit . "61b39d02313fa51a1dd7326fe24871666c64a077") (:url . "https://github.com/jorenvo/simple-mpc") (:keywords "multimedia" "mpd" "mpc"))]) (simple-httpd . [(20171004 938) ((cl-lib (0 3))) "pure elisp HTTP server" single ((:commit . "e7775d3bc5c6b73255814d0a62dc954e23a12c15") (:url . "https://github.com/skeeto/emacs-http-server"))]) (simple-call-tree . [(20171223 1037) ((emacs (24 3)) (anaphora (1 0 0))) "analyze source code based on font-lock text-properties" single ((:commit . "51cbb9baac4a71c9e2759b3dbbd48829b7b0ea79") (: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 ((:commit . "6c58337f2b7dbe9e58b5e097b1567f046a01d071") (:url . "https://github.com/jtkDvlp/simple-bookmarks") (:keywords "bookmark" "functioncall"))]) (simple+ . [(20170307 1529) ((strings (0))) "Extensions to standard library `simple.el'." single ((:url . "https://www.emacswiki.org/emacs/download/simple%2b.el") (:keywords "internal" "lisp" "extensions" "abbrev"))]) (simp . [(20161206 2151) nil "Simple project definition, chiefly for file finding, and grepping" tar ((:commit . "13959cabdc7a10d8878592ef4333b3e6df2f1483") (:url . "https://github.com/re5et/simp") (:keywords "project" "grep" "find"))]) (silkworm-theme . [(20160217 509) ((emacs (24))) "Light theme with pleasant, low contrast colors." single ((:commit . "7951b53e5caf9daf6a5a15a57ae3a668cb78bd7b"))]) (signature . [(20140730 1249) nil "Signature Survey" tar ((:commit . "c47df2e1189a84505f9224aa78e87b6c65d13d37"))]) (signal . [(20160816 738) ((emacs (24)) (cl-lib (0 5))) "Advanced hook" single ((:commit . "aa58327e2297df921d72a0370468b48663efd438") (: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 ((:commit . "4ce8878a0fc396ded7521ce38852d93e1d863065") (:url . "https://github.com/nlamirault/sift.el") (:keywords "sift" "ack" "pt" "ag" "grep" "search"))]) (sicp . [(20171028 1523) nil "Structure and Interpretation of Computer Programs in info format" tar ((:commit . "8e13f7ff4695a05471486d37a6c5f979a5b965fb") (:url . "https://mitpress.mit.edu/sicp"))]) (sibilant-mode . [(20151119 1345) nil "Support for the Sibilant programming language" single ((:commit . "bc1b5d8cd597918bafc9b2880ee49024740e54ab") (:url . "http://sibilantjs.info") (:keywords "languages"))]) (shx . [(20171230 1219) ((emacs (24 4))) "\"Extras\" for the (comint-mode) shell" single ((:commit . "33383bd359d795df2d7ef725b5349c953f5a6aa8") (:url . "https://github.com/riscy/shx-for-emacs") (:keywords "processes" "tools"))]) (shut-up . [(20150423 522) ((cl-lib (0 3)) (emacs (24))) "Shut up would you!" single ((:commit . "a4fd18f37e20ae991c0dbba821b2c8e6f1679c39") (:url . "http://github.com/rejeep/shut-up.el"))]) (shrink-whitespace . [(20150916 1215) nil "Whitespace removal DWIM key" single ((:commit . "8d4263d974fbe66417c0bb9edc155ecc2f48e4b7") (:url . "https://github.com/jcpetkovich/shrink-whitespace.el") (:keywords "editing"))]) (shrink-path . [(20170812 1947) ((emacs (24)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0))) "fish-style path" single ((:commit . "9d06c453d1537df46a4b703a29213cc7f7857aa0") (:url . "https://gitlab.com/bennya/shrink-path.el"))]) (shr-tag-pre-highlight . [(20171113 114) ((emacs (25 1)) (language-detection (0 1 0))) "Syntax highlighting code block in HTML" single ((:commit . "6182f43a36b0f82ba6edcf6e423b5f69a46a814e") (:url . "https://github.com/xuchunyang/shr-tag-pre-highlight.el") (:keywords "html"))]) (shpec-mode . [(20150530 222) nil "Minor mode for shpec specification" single ((:commit . "146adc8281d0f115df39a3a3f982ac59ab61b754") (:url . "http://github.com/shpec/shpec-mode") (:keywords "languages" "tools"))]) (showtip . [(20090830 340) nil "Show tip at cursor" single ((:commit . "930da302809a4257e8d69425455b29e1cc91949b") (:keywords "help"))]) (showkey . [(20170307 1528) nil "Show keys as you use them." single ((:url . "https://www.emacswiki.org/emacs/download/showkey.el") (:keywords "help" "keys" "mouse"))]) (show-marks . [(20130805 749) ((fm (1 0))) "Navigate and visualize the mark-ring" single ((:commit . "97609566582e65eed0d0a854efa5c312f209115d") (: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 ((:commit . "771daeddd4df7a7c10f66419a837145649bab63b") (:url . "https://github.com/smmcg/showcss-mode") (:keywords "hypermedia"))]) (shoulda . [(20140616 1133) ((cl-lib (0 5))) "Shoulda test support for ruby" single ((:commit . "fbe8eb8efc6cfcca1713283a290882cfcdc8725e") (:keywords "ruby" "tests" "shoulda"))]) (shm . [(20170523 238) nil "Structured Haskell Mode" tar ((:commit . "bd08a0b2297667e2ac7896e3b480033ae5721d4d") (:keywords "development" "haskell" "structured"))]) (shimbun . [(20171224 1958) nil "interfacing with web newspapers" tar ((:commit . "948a1a0f3e96e6c09c938e060f352ec126054ab1") (: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 ((:commit . "1be9cbf994000022172ceb746fe1d597f57ea8ba") (:url . "https://github.com/sabof/shift-text"))]) (shift-number . [(20170301 659) nil "Increase/decrease the number at point" single ((:commit . "cd099a5582fc996b800ac7607f6c38a004ce9740") (:url . "https://github.com/alezost/shift-number.el") (:keywords "convenience"))]) (shen-elisp . [(20170427 1502) ((emacs (24 4))) "Shen implementation in Elisp" tar ((:commit . "ffe17dee05f75539cf5e4c59395e4c7400ececaa") (:keywords "shen" "elisp") (:url . "http://github.com/deech/shen-elisp"))]) (shelltest-mode . [(20141227 248) nil "Major mode for shelltestrunner" single ((:commit . "b4bdd547bcdac427561aa1452f2aeb65e3a3c9f5") (: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 ((:commit . "5df2264eb60e45066f3633df4f34834751667346") (:url . "http://github.com/mhayashi1120/Emacs-shelldoc") (:keywords "applications"))]) (shell-toggle . [(20150226 611) nil "Toggle to and from the shell buffer" single ((:commit . "0d01bd9a780fdb7fe6609c552523f4498649a3b9") (:url . "https://github.com/knu/shell-toggle.el") (:keywords "processes"))]) (shell-switcher . [(20161028 2252) ((emacs (24))) "Provide fast switching between shell buffers." tar ((:commit . "28a7f753dd7addd2933510526f52620cb5a22048"))]) (shell-split-string . [(20151224 208) nil "Split strings using shell-like syntax" single ((:commit . "19f6f999c33cc66a4c91bacdcc3697c25d97bf5a") (:url . "https://github.com/10sr/shell-split-string-el") (:keywords "utility" "library" "shell" "string"))]) (shell-pop . [(20170304 616) ((emacs (24)) (cl-lib (0 5))) "helps you to use shell easily on Emacs. Only one key action to work." single ((:commit . "4a3a9d093ad1add792bba764c601aa28de302b34") (:url . "http://github.com/kyagi/shell-pop-el") (:keywords "shell" "terminal" "tools"))]) (shell-history . [(20100505 139) nil "integration with shell history" single ((:commit . "ee371a81f2d2bf5a308344078329ca1e9b5ed38c") (: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 ((:commit . "251309141e18978d2b8014345acc6f5afcd4d509") (:keywords "unix" "tools" "processes"))]) (shell-current-directory . [(20140101 1554) nil "create new shell based on buffer directory" single ((:commit . "bf843771bf9a4aa05e054ade799eb8862f3be89a") (:keywords "shell" "comint"))]) (shell-command . [(20090830 340) nil "enables tab-completion for `shell-command'" single ((:commit . "7e22125f746ce9ffbe9b0282d62f4b4bbbe672bd") (:keywords "shell"))]) (shampoo . [(20131230 219) nil "A remote Smalltalk development mode" tar ((:commit . "bc193c39636c30182159c5c91c37a9a4cb50fedf"))]) (shakespeare-mode . [(20160908 1511) nil "A major mode for editing Shakespearean templates." single ((:commit . "0406a5ac4c98fcd171f0539c5cd88050aa351ea8") (:url . "http://github.com/CodyReichert/shakespeare-mode") (:keywords "shakespeare" "hamlet" "lucius" "julius" "mode"))]) (shader-mode . [(20180105 1500) ((emacs (24))) "Major mode for shader" single ((:commit . "c141841feeee48299cff6651ed2e201a052e0570") (:url . "https://github.com/midnightSuyama/shader-mode"))]) (shadchen . [(20141102 1039) nil "pattern matching for elisp" single ((:commit . "35f2b9c304eec990c16efbd557198289dc7cbb1f"))]) (shackle . [(20171209 1401) ((cl-lib (0 5))) "Enforce rules for popups" single ((:commit . "4189c1c773aab533969b587f7801ffbcd1d7d613") (:url . "https://github.com/wasamasa/shackle") (:keywords "convenience"))]) (sexy-monochrome-theme . [(20171125 1212) nil "A sexy dark Emacs >= 24 theme for your sexy code" single ((:commit . "529a1c75196391d7f2f1f42cf9d9f4a52c7d9007") (:url . "https://github.com/voloyev/sexy-monochrome-theme") (:keywords "themes"))]) (sexp-move . [(20150915 1030) nil "Improved S-Expression Movement" single ((:commit . "117f7a91ab7c25e438413753e916570122011ce7") (:url . "https://gitlab.com/elzair/sexp-move") (:keywords "sexp"))]) (seti-theme . [(20161208 836) nil "A dark colored theme, inspired by Seti Atom Theme" single ((:commit . "cbfef2fc15d19ce4c8326e65fafdd61737077132") (:url . "https://github.com/caisah/seti-theme") (:keywords "themes"))]) (session . [(20120510 1700) nil "use variables, registers and buffer places across sessions" single ((:commit . "19ea0806873daac3539a4b956e15655e99e3dd6c") (:url . "http://emacs-session.sourceforge.net/") (:keywords "session" "session management" "desktop" "data" "tools"))]) (services . [(20170802 430) ((cl-lib (0 5))) "Services database access functions." single ((:commit . "04c7986041a33dfa0b0ae57c7d6fbd600548c596") (:url . "https://github.com/davep/services.el") (:keywords "convenience" "net" "services"))]) (serverspec . [(20150623 455) ((dash (2 6 0)) (s (1 9 0)) (f (0 16 2)) (helm (1 6 1))) "Serverspec minor mode" tar ((:commit . "b6dfe82af9869438de5e5d860ced196641f372c0") (: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 ((:commit . "4d2aa8250b54b28e6e7ee4cd5ebd98a33db2c134") (: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 . [(20170818 552) ((emacs (24))) "Ports of some Clojure sequence functions." single ((:commit . "564ebbd93b0beea4e75acfbf824350e90b5d5738") (:keywords "convenience"))]) (seoul256-theme . [(20171213 1209) ((emacs (24 3))) "Low-contrast color scheme based on Seoul Colors." single ((:commit . "1b487722ba817347030b50df01491dbbff4b2891") (:url . "http://github.com/anandpiyer/seoul256-emacs") (:keywords "theme"))]) (sentence-navigation . [(20171215 1007) ((ample-regexps (0 1)) (cl-lib (0 5)) (emacs (24 4))) "Commands to navigate one-spaced sentences." single ((:commit . "8ddf1dfe3f13f8ac753a6465a4bd965f88d0dbe5") (:url . "https://github.com/noctuid/emacs-sentence-navigation") (:keywords "sentence" "evil"))]) (sensitive . [(20170818 551) ((emacs (24)) (sequences (0 1 0))) "A dead simple way to load sensitive information" single ((:commit . "69dd6125a41d8b55f4b6ba61daa4d1aa1f716fa8") (:keywords "convenience"))]) (sendto . [(20160425 550) ((emacs (24 4))) "send the region content to a function" single ((:commit . "076b81d7a53f75b0a59b0ef3448f35570567054c") (:url . "https://github.com/lujun9972/sendto.el") (:keywords "convenience" "region"))]) (semi . [(20160816 239) ((flim (1 14 9))) "A library to provide MIME features." tar ((:commit . "6b9c62a76f22caf1476c837ee1976eaf0eaf38e7"))]) (selectric-mode . [(20170216 311) nil "IBM Selectric mode for Emacs" tar ((:commit . "a35cb3815caceaf273ad7d16ac3b2dd3c7a3003e") (:url . "https://github.com/rbanffy/selectric-mode") (:keywords "multimedia" "convenience" "typewriter" "selectric"))]) (selected . [(20170222 34) nil "Keymap for when region is active" single ((:commit . "03edaeac90bc6000d263f03be3d889b4685e1bf7") (:url . "http://github.com/Kungsgeten/selected.el") (:keywords "convenience"))]) (select-themes . [(20160220 1706) nil "Color theme selection with completing-read" single ((:commit . "236f54287519a3ea6dd7b3992d053e4f4ff5d0fe") (:url . "https://github.com/jasonm23/emacs-select-themes"))]) (sekka . [(20170803 547) ((cl-lib (0 3)) (concurrent (0 3 1)) (popup (0 5 2))) "A client for Sekka IME server" single ((:commit . "61840b57d9ae32bf8e297b175942590a1319c7e7") (:url . "https://github.com/kiyoka/sekka") (:keywords "ime" "skk" "japanese"))]) (seethru . [(20150218 1029) ((shadchen (1 4))) "Easily change Emacs' transparency" single ((:commit . "d87e231f99313bea75b1e69e48c0f32968c82060") (:url . "http://github.com/benaiah/seethru") (:keywords "lisp" "tools" "alpha" "transparency"))]) (seeing-is-believing . [(20170214 520) nil "minor mode for running the seeing-is-believing ruby gem" single ((:commit . "fbbe246c0fda87bb26227bb826eebadb418a220f"))]) (secretaria . [(20180104 720) ((emacs (24 4)) (alert (1 2)) (s (1 12)) (f (0 19 0))) "A personal assistant based on org-mode" tar ((:commit . "e9d59d264ba30f8055a1ee1576fe9296d5b41055") (:url . "https://bitbucket.org/shackra/secretaria.el") (:keywords "org" "convenience"))]) (second-sel . [(20170702 729) nil "Secondary selection commands" single ((:url . "https://www.emacswiki.org/emacs/download/second-sel.el") (:keywords "region" "selection" "yank" "paste" "edit"))]) (seclusion-mode . [(20121118 1553) nil "Edit in seclusion. A Dark Room mode." single ((:commit . "9634e76c52bfb7200ff0f9f01404f743429e9ef0") (: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 ((:commit . "dd510d55ad66a82c6ef022cfe7c4a73ad5365f82"))]) (search-web . [(20150312 403) nil "Post web search queries using `browse-url'." single ((:commit . "c4ae86ac1acfc572b81f3d78764bd9a54034c331"))]) (sdlang-mode . [(20161130 2311) ((emacs (24 3))) "Major mode for Simple Declarative Language files." single ((:commit . "d42a6eedefeb44919fbacf58d302b6df18f05bbc") (:url . "https://github.com/CyberShadow/sdlang-mode") (:keywords "languages"))]) (sdcv . [(20171002 210) ((emacs (24 3)) (popup (0 5 3)) (showtip (0 1)) (pos-tip (0 4 6)) (cl-lib (0 3))) "Interface for sdcv (StartDict console version)." single ((:commit . "1aad9defb871dc07e27f603092bb81413be54cf2") (:url . "http://www.emacswiki.org/emacs/download/sdcv.el") (:keywords "startdict" "sdcv"))]) (scss-mode . [(20150107 1400) nil "Major mode for editing SCSS files" single ((:commit . "b010d134f499c4b4ad33fe8a669a81e9a531b0b2") (:url . "https://github.com/antonj/scss-mode") (:keywords "scss" "css" "mode"))]) (scrooge . [(20170728 1106) ((emacs (24)) (thrift (0 9 3))) "Major mode for Twitter Scrooge files" single ((:commit . "fb55c64eb2ae4db57b14bc99d2e411d81b2c5c2a") (:keywords "scrooge" "thrift"))]) (scribble-mode . [(20160124 1528) ((emacs (24))) "Major mode for editing Scribble documents" single ((:commit . "34e9e5edb921813b6483e0fefa848efb6ee4b314") (: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 ((:commit . "9441afe6396ca38f08029123fab5d87429cbf315") (:keywords "scratch"))]) (scratch-pop . [(20170510 758) ((popwin (0 7 0 -3))) "Generate, popup (& optionally backup) scratch buffer(s)." single ((:commit . "7f4172c792b10bd38898dd8963cf0ade91921869") (:url . "http://hins11.yu-yake.com/"))]) (scratch-palette . [(20150225 42) ((popwin (0 7 0 -3))) "make scratch buffer for each files" single ((:commit . "f6803b448079f4a81cc699cec7442ef543cd5818") (:url . "http://hins11.yu-yake.com/"))]) (scratch-message . [(20170107 536) nil "Changing message in your scratch buffer" single ((:commit . "3ecc7f5e3b8a597ebd1492fd426d3720a7f34302") (:url . "https://github.com/thisirs/scratch-message.git") (:keywords "util" "scratch"))]) (scratch-log . [(20141114 2343) nil "Utility for *scratch* buffer." single ((:commit . "1168f7f16d36ca0f4ddf2bb98881f8db62cc5dc0"))]) (scratch-ext . [(20140103 2116) nil "Extensions for *scratch*" single ((:commit . "388c53cddd0466b451264894667ed64a6947ad67") (:url . "https://github.com/kyanagi/scratch-ext-el"))]) (scratch . [(20170614 1401) nil "Mode-specific scratch buffers" single ((:commit . "2cdf2b841ce7a0987093f65b0cc431947549f897") (:keywords "convenience" "tools" "files"))]) (scpaste . [(20171101 922) ((htmlize (1 39))) "Paste to the web via scp." single ((:commit . "10559d6b0feb34dc60f039a237052adcca77b5d9") (:url . "https://github.com/technomancy/scpaste") (:keywords "convenience" "hypermedia"))]) (scp . [(20171203 1851) ((emacs (25 1)) (cl-lib (0 5))) "Use the SCP command to transfer files with the remote server" single ((:commit . "3f437ee9f52df7d9f4c57275a8cfb7f06c3c26ff") (:url . "https://github.com/tszg/emacs-scp") (:keywords "convenience" "scp"))]) (sclang-snippets . [(20130513 51) ((yasnippet (0 8 0))) "Snippets for the SuperCollider Emacs mode" tar ((:commit . "c840a416b96f83bdd70491e3d1fbe2f1ae8b3f58") (: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 ((:commit . "e9cc79732f16fdb582129303110c163dcc0d6da0") (:keywords "sclang" "supercollider" "languages" "tools"))]) (scion . [(20130315 555) nil "Haskell Minor Mode for Interacting with the Scion Library" single ((:commit . "99b4589175665687181a932cd836850205625f71") (:url . "https://code.google.com/p/scion-lib/"))]) (schrute . [(20170521 1140) ((emacs (24 3))) "Help you remember there is a better way to do something." single ((:commit . "59faa6c4232ae183cea93237301acad8c0763997") (:url . "https://bitbucket.org/shackra/dwight-k.-schrute") (:keywords "convenience"))]) (scheme-here . [(20141028 18) nil "cmuscheme extension for multiple inferior processes" single ((:commit . "430ba017cc530865218de23a8f7985095a58343f") (:url . "https://github.com/kaihaosw/scheme-here") (:keywords "scheme"))]) (scheme-complete . [(20170824 713) nil "Smart auto completion for Scheme in Emacs" single ((:commit . "4c77038048cbcf34b5907f0439c93058a71a2d2b"))]) (scf-mode . [(20151121 1848) nil "shorten file-names in compilation type buffers" single ((:commit . "dbfcdcd89034f208d65e181af58e0d73ad09f8b2") (:url . "https://github.com/lewang/scf-mode") (:keywords "compilation"))]) (scala-mode . [(20170802 432) nil "Major mode for editing Scala" tar ((:commit . "56cba2903cf6e12c715dbb5c99b34c97b2679379") (: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 ((:commit . "fee011589671cc8f1296cb6aa81553e5bb699819") (:url . "http://hins11.yu-yake.com/"))]) (scad-mode . [(20180108 1809) nil "A major mode for editing OpenSCAD code" single ((:commit . "2de6815c7c2ade42e53e86751b9584ac4a5e1ef9") (:url . "https://raw.github.com/openscad/openscad/master/contrib/scad-mode.el") (:keywords "languages"))]) (sbt-mode . [(20171111 1558) ((emacs (24 4))) "Interactive support for sbt projects" tar ((:commit . "84c3d178a1f2c580f620fd8f03a05ac6413086a3") (:url . "https://github.com/ensime/emacs-sbt-mode") (:keywords "languages"))]) (sayid . [(20170509 1215) ((cider (0 14 0))) "sayid nREPL middleware client" single ((:commit . "20a92323c3edc060c521aa93edab9dad47646b4f") (:url . "https://github.com/bpiel/sayid"))]) (say-what-im-doing . [(20160706 1231) nil "dictate what you're doing with text to speech" single ((:commit . "5b2ce6783b02805bcac1107a149bfba3852cd9d5") (: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 ((:commit . "67fc94e3d8fe8ce3ca16f90518f6a46479b63e34") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/savekill.el") (:keywords "tools"))]) (save-visited-files . [(20170228 2250) nil "save opened files across sessions" single ((:commit . "33e8d223f622001f5792c52d8b36661e46b5834c") (:url . "http://github.com/nflath/save-visited-files"))]) (save-load-path . [(20140206 414) nil "save load-path and reuse it to test" single ((:commit . "6cb763a37e2b8af505bff2bcd11fd49c9ea04d66") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/save-load-path.el") (:keywords "lisp"))]) (sauron . [(20171105 247) nil "Track (erc/org/dbus/...) events and react to them." tar ((:commit . "50f09bfc6f5bf79e72a1223e345ee720b507e56a"))]) (sass-mode . [(20161006 2326) ((haml-mode (3 0 15)) (cl-lib (0 5))) "Major mode for editing Sass files" single ((:commit . "37105f46f6ea3592039f2ea7d0463ae7f042616e") (: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 ((:commit . "ef6fd08078f49f2bb3be60855d2d002bb6a5e0d2") (:url . "http://github.com/adamrt/sane-term"))]) (salt-mode . [(20170702 246) ((emacs (24 4)) (yaml-mode (0 0 12)) (mmm-mode (0 5 4)) (mmm-jinja2 (0 1))) "Major mode for Salt States" single ((:commit . "a41c07660199cfad3f9dd928d5674d2727508035") (:url . "https://github.com/glynnforrest/salt-mode") (:keywords "languages"))]) (salesforce-utils . [(20160813 1854) ((cl-lib (0 5))) "simple utilities for Salesforce" single ((:commit . "73328baf0fb94ac0d0de645a8f6d42e5ae27f773") (:url . "https://github.com/grimnebulin/emacs-salesforce"))]) (sailfish-scratchbox . [(20171202 532) nil "Sailfish OS scratchbox inside the emacs." single ((:commit . "bb5ed0f0b0cd72f2eb1af065b7587ec81866b089") (:url . "https://github.com/vityafx/sailfish-scratchbox.el") (:keywords "sb2" "mb2" "building" "scratchbox" "sailfish"))]) (sage-shell-mode . [(20171119 234) ((cl-lib (0 6 1)) (emacs (24 4)) (let-alist (1 0 5)) (deferred (0 5 1))) "A front-end for Sage Math" tar ((:commit . "e4e7523178f09270a28b8b712191b1e980e6e8c9") (:url . "https://github.com/sagemath/sage-shell-mode") (:keywords "sage" "math"))]) (sackspace . [(20130719 256) nil "A better backspace" single ((:commit . "fd0480eaaf6d3d11fd30ac5feb2da2f4f7572708") (:url . "http://github.com/cofi/sackspace.el") (:keywords "delete" "convenience"))]) (s12cpuv2-mode . [(20171013 1351) ((emacs (24 3))) "Major-mode for S12CPUV2 assembly" single ((:commit . "b17d4cf848dec1e20e66458e5c7ff77a2c051a8c") (:url . "https://github.com/AdamNiederer/s12cpuv2-mode") (:keywords "s12cpuv2" "assembly" "languages"))]) (s-buffer . [(20130605 1424) ((s (1 6 0)) (noflet (0 0 3))) "s operations for buffers" single ((:commit . "f95d234282377f00a2c3a9846681080cb95bb1df") (:url . "http://github.com/nicferrier/emacs-s-buffer") (:keywords "lisp"))]) (s . [(20171102 227) nil "The long lost Emacs string manipulation library." single ((:commit . "5e9a6857d42015c67681616aa3519f599f97b8d8") (:keywords "strings"))]) (ryo-modal . [(20180102 547) ((emacs (24 4))) "Roll your own modal mode" single ((:commit . "fee33898b5726b3c15b6ceb2ebb051bebd4f3592") (:url . "http://github.com/Kungsgeten/ryo-modal") (:keywords "convenience" "modal" "keys"))]) (rvm . [(20150402 742) nil "Emacs integration for rvm" single ((:commit . "134497bc460990c71ab8fa75431156e62c17da2d") (:url . "http://www.emacswiki.org/emacs/RvmEl") (:keywords "ruby" "rvm"))]) (rust-playground . [(20170211 5) ((emacs (24 3)) (rust-mode (0 3 0))) "Local Rust playground for short code snippets." single ((:commit . "ff4149489c30a65817750428847217368bd995ba") (:url . "https://github.com/grafov/rust-playground") (:keywords "tools" "rust"))]) (rust-mode . [(20171208 1015) ((emacs (24 0))) "A major emacs mode for editing Rust source code" single ((:commit . "27911c88b0d32b66429d61bb056ecf1b10e66598") (:url . "https://github.com/rust-lang/rust-mode") (:keywords "languages"))]) (russian-holidays . [(20170109 1340) nil "Russian holidays for the calendar" single ((:commit . "b285a30f29d85c48e3ea4eb93972d34a090c167b") (:url . "https://github.com/grafov/russian-holidays"))]) (runtests . [(20150807 131) nil "Run unit tests from Emacs" single ((:commit . "ed90249f24cc48290018df48b9b9b7172440be3e") (:url . "https://github.com/sunesimonsen/emacs-runtests") (:keywords "test"))]) (runner . [(20160524 43) nil "Improved \"open with\" suggestions for dired" single ((:commit . "a211d57ddc600410d07a8b534920ba905b093d87") (:url . "https://github.com/thamer/runner") (:keywords "shell command" "dired" "file extension" "open with"))]) (run-stuff . [(20170813 1957) ((emacs (24 4))) "context based command execution" single ((:commit . "2e23a78c26f62141142c743febd57ec54c78c0e3") (:url . "https://github.com/ideasman42/emacs-run-stuff") (:keywords "files" "lisp" "files" "convenience" "hypermedia"))]) (rufo . [(20170718 716) ((emacs (24 3))) "use rufo to automatically format ruby files" single ((:commit . "85a6d80fb05fef396a8029b8f944c92a53faf8fe") (:url . "https://github.com/danielma/rufo.el"))]) (ruby-tools . [(20151209 815) nil "Collection of handy functions for ruby-mode." tar ((:commit . "6b97066b58a4f82eb2ecea6434a0a7e981aa4c18"))]) (ruby-test-mode . [(20171016 931) ((ruby-mode (1 0)) (pcre2el (1 8))) "Minor mode for Behaviour and Test Driven" single ((:commit . "87f6d770f8d2326c8d36099aeee5d577f3e2af69") (:keywords "ruby" "unit" "test" "rspec"))]) (ruby-refactor . [(20160214 850) ((ruby-mode (1 2))) "A minor mode which presents various Ruby refactoring helpers." single ((:commit . "e6b7125878a08518bffec6942df0c606f748e9ee") (:url . "https://github.com/ajvargo/ruby-refactor") (:keywords "refactor" "ruby"))]) (ruby-interpolation . [(20131112 852) nil "Ruby string interpolation helpers" single ((:commit . "1978e337601222cedf00e117bf4b5cac15d1f203") (:url . "http://github.com/leoc/ruby-interpolation.el"))]) (ruby-hash-syntax . [(20171013 50) nil "Toggle ruby hash syntax between classic and 1.9 styles" single ((:commit . "bc05c3130a5d3237f04c6064297e56de5f73887d") (:url . "https://github.com/purcell/ruby-hash-syntax") (:keywords "languages"))]) (ruby-factory . [(20160101 2321) ((inflections (1 1))) "Minor mode for Ruby test object generation libraries" tar ((:commit . "2bb7ccc2fccb5257376a989aa395bc7b9eb1d55d") (:url . "http://github.com/sshaw/ruby-factory-mode") (:keywords "ruby" "rails" "convenience"))]) (ruby-extra-highlight . [(20171106 1133) nil "Highlight Ruby parameters." single ((:commit . "83942d18eae361998d24c1c523b308eea821f048") (:url . "https://github.com/Lindydancer/ruby-extra-highlight") (:keywords "languages" "faces"))]) (ruby-end . [(20141215 423) nil "Automatic insertion of end blocks for Ruby" single ((:commit . "a136f75abb6d5577ce40d61dfeb778c2e9bb09c0") (:url . "http://github.com/rejeep/ruby-end") (:keywords "speed" "convenience" "ruby"))]) (ruby-electric . [(20170810 430) nil "Minor mode for electrically editing ruby code" single ((:commit . "3553448a780a1ea5c3b0e9becd820d4762876593") (:url . "https://github.com/knu/ruby-electric.el") (:keywords "languages" "ruby"))]) (ruby-compilation . [(20150708 2340) ((inf-ruby (2 2 1))) "run a ruby process in a compilation buffer" single ((:commit . "134438af8fbdfa9c8077267c768d273a9792b484") (:url . "https://github.com/eschulte/rinari") (:keywords "test" "convenience"))]) (ruby-block . [(20131210 1931) nil "highlight matching block" single ((:keywords "languages" "faces" "ruby"))]) (ruby-additional . [(20171001 2106) ((emacs (24 3)) (ruby-mode (1 2))) "ruby-mode extensions yet to be merged into Emacs" tar ((:commit . "14f380893cb7c1d9ddbb4ed1a2fc280999c82fde") (:url . "https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/misc/") (:keywords "ruby" "languages"))]) (rubocop . [(20170311 2211) ((emacs (24))) "An Emacs interface for RuboCop" single ((:commit . "980bedb455e3551d35a212fae515c054888907c1") (: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 ((:commit . "08dc10458b56e72f1512896192b2114ef57e58c5") (:url . "https://github.com/pmiddend/emacs-rtm") (:keywords "remember" "the" "milk" "productivity" "todo"))]) (rtags . [(20180107 2358) nil "A front-end for rtags" single ((:commit . "db5ad3a48c579b3522411bd2411c09dbb27af578") (:url . "http://rtags.net"))]) (rspec-mode . [(20171025 1606) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:commit . "94a04f148922852b591957b0b3b22de5c4237448") (:url . "http://github.com/pezra/rspec-mode") (:keywords "rspec" "ruby"))]) (rsense . [(20100510 2105) nil "RSense client for Emacs" single ((:commit . "8b5ee58318747ca1dde84ee41d48c4f50175cf35") (:keywords "convenience"))]) (rpn-calc . [(20170522 1842) ((popup (0 4))) "quick RPN calculator for hackers" single ((:commit . "66fcb64dbfddfc23823356b6213215bd7ab5efc6") (:url . "https://github.com/zk-phi/rpn-calc"))]) (rpm-spec-mode . [(20160710 436) nil "RPM spec file editing commands for Emacs/XEmacs" single ((:commit . "c1c38050c48ea330c7cea632b8785d66daeefb2b") (:keywords "unix" "languages"))]) (roy-mode . [(20121208 358) nil "Roy major mode" single ((:commit . "0416f561edbc6b4a29fced8be84d2527a9613d65") (:url . "https://github.com/folone/roy-mode") (:keywords "extensions"))]) (rotate . [(20160909 136) nil "Rotate the layout of emacs" single ((:commit . "091b5ac4fc310773253efb317e3dbe8e46959ba6") (:url . "https://github.com/daichirata/emacs-rotate") (:keywords "window" "layout"))]) (rope-read-mode . [(20171003 719) nil "Rearrange lines to read text smoothly" single ((:commit . "77b183a6f5450138388509f54a6a2ce442766e50") (: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 ((:commit . "706dcb0687e8016d7d776f9d9e5ace9fdbbca43c"))]) (robots-txt-mode . [(20170908 642) nil "Major mode for editing robots.txt" single ((:commit . "4a77674ab2963b829d3b751741c4ce1169e87f6b") (:url . "https://github.com/emacs-php/robots-txt-mode") (:keywords "languages" "comm" "web"))]) (robe . [(20171116 1249) ((inf-ruby (2 5 1)) (emacs (24 4))) "Code navigation, documentation lookup and completion for Ruby" tar ((:commit . "7829f4fdda41eee0add8868646ab86e6b17de4b4") (:url . "https://github.com/dgutov/robe") (:keywords "ruby" "convenience" "rails"))]) (rjsx-mode . [(20171029 1156) ((emacs (24 4)) (js2-mode (20170504))) "Real support for JSX" single ((:commit . "4c10dcd764ade8e3d5dc235c26ba9299576a513d") (:url . "https://github.com/felipeochoa/rjsx-mode/") (:keywords "languages"))]) (riscv-mode . [(20170804 821) ((emacs (24 4))) "Major-mode for RISC V assembly" single ((:commit . "99febf97d1fa9441e8dada94fe30c2aa439c9749") (:url . "https://github.com/AdamNiederer/riscv-mode") (:keywords "riscv" "assembly"))]) (ripgrep . [(20170810 1118) nil "Front-end for ripgrep, a command line search tool" single ((:commit . "c47a2da4668ca338e7fadc3d8c095e075caaa17d") (:url . "https://github.com/nlamirault/ripgrep.el") (:keywords "ripgrep" "ack" "pt" "ag" "sift" "grep" "search"))]) (rings . [(20160531 1327) nil "Buffer rings. Like tabs, but better." single ((:commit . "3590b222eb80652cbd27866f066bd3571d86edfc") (: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 ((:commit . "134438af8fbdfa9c8077267c768d273a9792b484") (:url . "https://github.com/eschulte/rinari") (:keywords "ruby" "rails" "project" "convenience" "web"))]) (rimero-theme . [(20171001 821) ((emacs (24))) "Theme with a dark background suitable for UI and terminal usage." single ((:commit . "2c15da5a4d56f1b29db2fc178d387eb86e7abd39") (:url . "https://github.com/yveszoundi/emacs-rimero-theme") (:keywords "faces" "theme" "dark" "light colors"))]) (rigid-tabs . [(20170903 859) ((emacs (24 3))) "Fix TAB alignment in diff buffers" single ((:commit . "eba84ceaba2e57e76ad2dfbb7a7154238a25d956") (:url . "https://github.com/wavexx/rigid-tabs.el") (:keywords "diff" "whitespace" "version control" "magit"))]) (rich-minority . [(20170813 622) ((cl-lib (0 5))) "Clean-up and Beautify the list of minor-modes." single ((:commit . "3201f6e1769beb9f6cbbda392bef99fce337acf4") (:url . "https://github.com/Malabarba/rich-minority") (:keywords "mode-line" "faces"))]) (rib-mode . [(20170726 748) ((emacs (24))) "RenderMan® Interface Bytestream (RIB) Major Mode" single ((:commit . "97470158784c3c212e22e2c20b8471ee65ba59af") (:url . "https://github.com/blezek/rib-mode"))]) (rhtml-mode . [(20130422 611) nil "major mode for editing RHTML files" tar ((:commit . "a6d71b38a3db867ccf82999c99805db1a3a33c33"))]) (rg . [(20171121 1151) ((cl-lib (0 5)) (emacs (24)) (s (1 10 0))) "A search tool based on ripgrep." single ((:commit . "68984092d0e0725057e7b67ba32016903170f189") (:url . "https://github.com/dajva/rg.el") (:keywords "matching" "tools"))]) (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 ((:commit . "d9bb783d6cf3c3b52cf377d9207484fba54657fd"))]) (review-mode . [(20171029 650) nil "major mode for ReVIEW" single ((:commit . "115cd06558c01889f89feaa659e0d7513a2ad21e") (:url . "https://github.com/kmuto/review-el"))]) (reverse-theme . [(20141204 1745) nil "Reverse theme for Emacs" single ((:commit . "8319d0d5342890a3530ffa4daafdb7c35feda1ca") (:url . "https://github.com/syohex/emacs-reverse-theme"))]) (reverse-im . [(20170721 940) ((emacs (24 4))) "Reverse mapping for keyboard layouts other than english." single ((:commit . "63fb1edee017177c44f8b663a707201b3dd78345") (:url . "https://github.com/a13/reverse-im.el") (:keywords "input" "method"))]) (reveal-next . [(20170101 1120) 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 ((:commit . "5710e5936e47139a610ec9a06899f72e77ddc7bc") (:url . "https://github.com/kaz-yos/reveal-in-osx-finder") (:keywords "os x" "finder"))]) (restclient-test . [(20180106 1246) ((emacs (24 4)) (restclient (0))) "Run tests with restclient.el" single ((:commit . "4518561bc9661fedacb6fb352e9677207f45c418") (:url . "https://github.com/simenheg/restclient-test.el"))]) (restclient-helm . [(20170314 854) ((restclient (0)) (helm (1 9 4))) "helm interface for restclient.el" single ((:commit . "0ce4513a6b5ff1e63c73fda30f11efdb7a296c38") (:keywords "http" "helm"))]) (restclient . [(20171203 1248) nil "An interactive HTTP client for Emacs" single ((:commit . "0ce4513a6b5ff1e63c73fda30f11efdb7a296c38") (:keywords "http"))]) (restart-emacs . [(20170609 905) nil "Restart emacs from within emacs" single ((:commit . "98aa4efd2caeaf0f42ca385c24fa14a843b271b7") (:url . "https://github.com/iqbalansari/restart-emacs") (:keywords "convenience"))]) (resize-window . [(20170704 2212) ((emacs (24)) (cl-lib (0 5))) "easily resize windows" single ((:commit . "dcbbd30f4f4435070a66a22c5a169b752ca9f904") (:url . "https://github.com/dpsutton/resize-mode") (:keywords "window" "resize"))]) (requirejs-mode . [(20130215 1304) nil "Improved AMD module management" single ((:commit . "bbb0c09f8eb2d6a33c17319be8137f68bb16bc92") (: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 ((:commit . "4ea2a5fcbc76e4cbb6a7461e6f05f019b75865b1") (: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 ((:commit . "a3d080e57eb8be606fbf39d1baff94e1b16e1fb8"))]) (request . [(20170131 1747) ((emacs (24 4))) "Compatible layer for URL request in Emacs" single ((:commit . "a3d080e57eb8be606fbf39d1baff94e1b16e1fb8"))]) (req-package . [(20170826 2252) ((use-package (1 0)) (dash (2 7 0)) (log4e (0 2 0)) (ht (0))) "A use-package wrapper for package runtime dependencies management" tar ((:commit . "179ab70bb3d4f7a94401dace64f695c50acfe389") (:url . "https://github.com/edvorg/req-package") (:keywords "dotemacs" "startup" "speed" "config" "package"))]) (repo . [(20170213 139) ((emacs (24 3))) "Running repo from Emacs" single ((:commit . "d7b87cd515bad8a67d3a892a46a23f5fe81e08de") (:url . "https://github.com/canatella/repo-el") (:keywords "convenience"))]) (replace-with-inflections . [(20170911 245) ((cl-lib (0 5)) (string-inflection (1 0 5)) (inflections (1 1))) "Inflection aware `query-replace'" single ((:commit . "e286036a5d1dbac06a72a1e831b2a8d9cad27238") (:url . "https://github.com/knu/replace-with-inflections.el") (:keywords "matching"))]) (replace-symbol . [(20160517 1712) nil "Rename symbols in expressions or buffers" single ((:commit . "baf949e528aee1881f455f9c84e67718bedcb3f6") (:url . "https://github.com/bmastenbrook/replace-symbol-el"))]) (replace-pairs . [(20160207 451) ((emacs (24 4))) "Query-replace pairs of things" single ((:commit . "1e49071e2ef46a458a28f77681e313a63db5663c") (:url . "https://github.com/davidshepherd7/replace-pairs"))]) (replace-from-region . [(20170227 1516) nil "Replace commands whose query is from region" single ((:commit . "dc9318b9b2822da7b00ecc34d1dc965c8f96c9bb") (:url . "http://www.emacswiki.org/emacs/download/replace-from-region.el") (:keywords "replace" "search" "region"))]) (replace+ . [(20170801 1947) nil "Extensions to `replace.el'." single ((:url . "https://www.emacswiki.org/emacs/download/replace%2b.el") (:keywords "matching" "help" "internal" "tools" "local"))]) (repl-toggle . [(20161203 414) ((fullframe (0 0 5))) "Switch to/from repl buffer for current major-mode" single ((:commit . "50044030969d68e9f78a6db4e0a9229f5f3eaec3") (:keywords "repl" "buffers" "toggle"))]) (repeatable-motion . [(20170620 1148) ((emacs (24))) "Make repeatable versions of motions" tar ((:commit . "f29effdc4121c2dc7e3fec9b3a62debce29cda9d") (:url . "https://github.com/willghatch/emacs-repeatable-motion") (:keywords "motion" "repeatable"))]) (remember-last-theme . [(20170619 1433) ((emacs (24 4))) "Remember the last used theme between sessions." single ((:commit . "0973f1aa6b96355fa376fffe8b45733b6e963c51") (:url . "https://github.com/anler/remember-last-theme") (:keywords "convenience" "faces"))]) (remark-mode . [(20171217 2356) ((emacs (25 1)) (markdown-mode (2 0))) "Major mode for the remark slideshow tool" tar ((:commit . "e8a95f25d865d6165a7fdb1cadf5e6f0bb5ee73b") (:keywords "remark" "slideshow" "markdown" "hot reload"))]) (relax . [(20131029 1434) ((json (1 2))) "For browsing and interacting with CouchDB" single ((:commit . "6e33892623ab87833082262321dc8e1977209626") (:url . "http://github.com/technomancy/relax.el") (:keywords "database" "http"))]) (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 ((:commit . "2547475084244d266b507e563c9b4034705cfeca") (:url . "https://github.com/proofit404/relative-buffers"))]) (related . [(20161002 2310) ((cl-lib (0 5))) "Switch back and forth between similarly named buffers." single ((:commit . "0065a2e16eeaa9bface49f7f0815b9cf9719f441") (: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 ((:commit . "f62f9a62ebd2537d4a8c8f2e358562c67d2aefc1") (:keywords "convenience"))]) (region-state . [(20151128 238) nil "Show the number of chars/lines or rows/columns in the region" single ((:commit . "07ffb7d9ada2fcd204f3447f078c265d25f36f60") (:url . "https://github.com/xuchunyang/region-state.el") (:keywords "convenience"))]) (region-convert . [(20161118 1859) nil "Convert string in region by Lisp function" single ((:commit . "a50d473c3bfb33537d12025115a14c821fa5325a") (:url . "https://github.com/zonuexe/right-click-context") (:keywords "region" "convenience"))]) (region-bindings-mode . [(20140407 1514) nil "Enable custom bindings when mark is active." single ((:commit . "3fa5dbdbd7c000bebff6d9d14a4be326ec24b6fc") (:url . "https://github.com/fgallina/region-bindings-mode") (:keywords "convenience"))]) (regex-tool . [(20170104 1118) nil "A regular expression evaluation tool for programmers" single ((:commit . "0b4a0111143c88ef94bec56624cb2e00c1a054e6") (:url . "http://www.newartisans.com/") (:keywords "regex" "languages" "programming" "development"))]) (regex-dsl . [(20100124 228) nil "lisp syntax for regexps" single ((:commit . "ac89ab8b7691a165ef3007cb84417125cfc0632e"))]) (refine . [(20170322 1527) ((emacs (24 3)) (s (1 11 0)) (dash (2 12 0)) (list-utils (0 4 4)) (loop (1 2))) "interactive value editing" single ((:commit . "55984dbd570c361e7d56d85f2d4ecfbcc567bda1") (:keywords "convenience"))]) (redtick . [(20170129 1428) ((emacs (24 4))) "Smallest pomodoro timer (1 char)" tar ((:commit . "e6d2e9b69ec666f460f9158dd31cdf035eeb1080") (:url . "http://github.com/ferfebles/redtick") (:keywords "calendar"))]) (redshank . [(20171115 1156) ((paredit (21))) "Common Lisp Editing Extensions" tar ((:commit . "9b64da7895973a29a32320a13c08de69befa0006") (:keywords "languages" "lisp"))]) (redprl . [(20180102 1356) ((emacs (24 3))) "Major mode for editing RedPRL proofs and interacting with RedPRL" single ((:commit . "4657a8461e0aabaa5caf9673f40c3406657d9c35") (:keywords "languages"))]) (redpen-paragraph . [(20160625 350) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "RedPen interface." single ((:commit . "770ffb34b04bfa0ea8484fa1506e96c530168e13") (: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 ((:commit . "2c33f3397bc14e7a8192867b55920492d4eead8c") (:url . "https://github.com/emacs-pe/redis.el") (:keywords "convenience"))]) (recursive-narrow . [(20140902 1027) nil "narrow-to-region that operates recursively" single ((:commit . "bc0cab88234ca92640d4b8da0d83e132c1897922") (:url . "http://github.com/nflath/recursive-narrow"))]) (rectangle-utils . [(20160914 2108) ((emacs (24)) (cl-lib (0 5))) "Some useful rectangle functions." single ((:commit . "6fe38fdd48ef5305a908b94a043a966ac3f2053a") (:url . "https://github.com/thierryvolpiatto/rectangle-utils"))]) (rect+ . [(20150620 1744) nil "Extensions to rect.el" single ((:commit . "299b742faa0bc4448e0d5fe9cb98ab1eb93b8dcc") (:url . "https://github.com/mhayashi1120/Emacs-rectplus") (:keywords "extensions" "data" "tools"))]) (recover-buffers . [(20171008 2137) nil "revisit all buffers from an auto-save file" tar ((:commit . "81a5cb53099955ebc2a411a44cba5a394ee3f2d1"))]) (recompile-on-save . [(20151126 646) ((dash (1 1 0)) (cl-lib (0 5))) "Trigger recompilation on file save." single ((:commit . "92e11446869d878803d4f3dec5d2101380c12bb2") (:url . "https://github.com/maio/recompile-on-save.el") (:keywords "convenience" "files" "processes" "tools"))]) (recentf-ext . [(20161210 840) 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 ((:commit . "00634eca420cc48657b81e40e599ff8548083985") (:url . "https://github.com/lewang/rebox2"))]) (rebecca-theme . [(20171114 2208) ((emacs (24))) "Rebecca Purple Theme" single ((:commit . "f34089f176def79ecee5feda7dd79896f555bbe2") (:url . "https://github.com/vic/rebecca-theme") (:keywords "theme" "dark"))]) (reason-mode . [(20171027 2235) ((emacs (24 3))) "A major mode for editing ReasonML" tar ((:commit . "a9de59cced37b44db72ee248107021a660561d11") (:url . "https://github.com/reasonml-editor/reason-mode") (:keywords "languages" "ocaml"))]) (realgud-rdb2 . [(20160303 43) ((realgud (1 3))) "realgud front-end for interacting with Ruby debugger2" tar ((:commit . "b394bee61e75b7c6a5fa565594aa79b74887f5df") (: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 ((:commit . "9b3834048fcbc16827c55af38f8cfef0cf6533da") (:url . "http://github.com/rocky/realgud-pry"))]) (realgud-old-debuggers . [(20170316 31) ((realgud (1 4 3)) (cl-lib (0 5)) (emacs (24))) "realgud front-end to older lesser-used debuggers" tar ((:commit . "1e1d573a6ba731afbe68c1309a316457ca3fbb94") (: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 ((:commit . "cb75d6bd9abbe04afa4c74a7ce9c66852814e0c3") (:url . "http://github.com/rocky/realgud-byebug"))]) (realgud . [(20180102 1645) ((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 ((:commit . "2b3ffb5c375dd32a633668eec969148590b489b4") (:url . "http://github.com/realgud/realgud/") (:keywords "gdb" "python" "perl" "go" "bash" "nodejs" "zsh" "bashdb" "zshdb" "remake" "make" "trepan" "perldb"))]) (real-auto-save . [(20180107 1850) nil "Automatically save your all your buffers/files at regular intervals." single ((:commit . "d813632c1e754539cc92953ac4c3609105f9af58"))]) (readline-complete . [(20150708 737) nil "offers completions in shell mode" single ((:commit . "30c020c37b2741160cc37e656e13c85d826a0ebf"))]) (readability . [(20140715 1727) ((oauth (1 4)) (ov (1 0)) (emacs (24 3))) "Read articles from Readability in Emacs" single ((:commit . "6c220ab8e0ca63946574ed892add5c8fd14002ce") (:url . "https://github.com/ShingoFukuyama/emacs-readability") (:keywords "readability" "oauth"))]) (read-aloud . [(20160922 2200) ((emacs (24 4))) "A simple interface to TTS engines" single ((:commit . "c662366226abfb07204ab442b4f853ed85438d8a") (:url . "https://github.com/gromnitsky/read-aloud.el") (:keywords "multimedia"))]) (react-snippets . [(20170803 1550) ((yasnippet (0 7 0))) "Yasnippets for React" tar ((:commit . "bfc4b68b81374a6a080240592641091a7e8a6d61"))]) (rdxmk . [(20170629 1834) nil "A small set of tools for redox developments" tar ((:commit . "e78749fb29738365ffa4d863ffabeb969ebb0bcf") (:url . "https://github.com/jsalzbergedu/rdxmk") (:keywords "redox" "convenience" "tools"))]) (rdp . [(20120928 1854) nil "Recursive Descent Parser library" single ((:commit . "b620192afada04aec33b38cc130fef0765f41ca9") (:url . "https://github.com/skeeto/rdp"))]) (rdf-prefix . [(20170915 1200) nil "Prefix lookup for RDF" single ((:commit . "25cc3c8902f16191496b549705b00ffc7dff51f1") (: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 ((:commit . "f313bf6a7470bed314b27c7a40558cb787d7bc67"))]) (rcirc-notify . [(20150219 1404) nil "libnotify popups" single ((:commit . "841a7b5a6cdb0c11a812df924d2c6a7d364fd455") (:keywords "lisp" "rcirc" "irc" "notify" "growl"))]) (rcirc-groups . [(20170731 1401) nil "an emacs buffer in rcirc-groups major mode" single ((:commit . "b68ece9d219b909244d4e3c0d8bf6a746d6fead7") (:url . "http://tapoueh.org/emacs/rcirc-groups.html") (:keywords "comm" "convenience"))]) (rcirc-alertify . [(20140406 1819) ((alert (20140406 1353))) "Cross platform notifications for rcirc" single ((:commit . "ea5cafc55893f375eccbe013d12dbaa94bf6e259") (:keywords "comm" "convenience"))]) (rcirc-alert . [(20141127 247) nil "Configurable alert messages on top of RCIRC" tar ((:commit . "0adf8ff9c47023fec578f678424be62b0f49057f") (:keywords "lisp" "rcirc" "irc" "alert" "awesome"))]) (rc-mode . [(20160913 1218) nil "Major mode for the Plan9 rc shell" single ((:commit . "fe2e0570bf9c19a292e16b18fd4b0a256df5d93f") (:url . "https://github.com/mrhmouse/rc-mode.el") (:keywords "rc" "plan9" "shell"))]) (rbt . [(20170202 1502) ((popup (0 5 3)) (magit (20160128 1201))) "Integrate reviewboard with emacs." single ((:commit . "32bfba9062a014e375451cf4203c29535b5efc1e") (:keywords "reviewboard" "rbt"))]) (rbenv . [(20141119 2349) nil "Emacs integration for rbenv" single ((:commit . "2ea1a5bdc1266caef1dd77700f2c8f42429b03f1") (:url . "https://github.com/senny/rbenv.el") (:keywords "ruby" "rbenv"))]) (rats . [(20170818 313) ((s (1 10 0)) (go-mode (1 3 1)) (cl-lib (0 5))) "Rapid testing suite for Go" single ((:commit . "a6d55aebcc54f669c6c6ffedf84364c4097903cc") (:keywords "go"))]) (rase . [(20120928 1345) nil "Run At Sun Event daemon" single ((:commit . "59b5f7e8102570b65040e8d55781c7ea28de7338") (:url . "https://github.com/m00natic/rase/") (:keywords "solar" "sunrise" "sunset" "midday" "midnight"))]) (ranger . [(20170817 857) ((emacs (24 4))) "Make dired more like ranger" single ((:commit . "6bbff5df2e55f56047fca5058d9ca93ba4963aef") (:url . "https://github.com/ralesi/ranger") (:keywords "files" "convenience" "dired"))]) (random-splash-image . [(20151002 1830) nil "Randomly sets splash image to *GNU Emacs* buffer on startup." single ((:commit . "53a39ebfd8ac6be066a652a508a717870f94218a") (: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 ((:commit . "65a00e5c5150f857aa96803b68f50bc8da0215b7") (:url . "https://github.com/gopar/rand-theme"))]) (rally-mode . [(20161113 1954) ((popwin (1 0 0))) "a mode to interact with the Rally Software web site." single ((:commit . "0f5e09a6abe2de7613f174b4f54863df93343134") (:url . "https://pragcraft.wordpress.com/") (:keywords "rally" "ca" "agile"))]) (rake . [(20170921 801) ((f (0 13 0)) (dash (1 5 0)) (cl-lib (0 5))) "Run rake commands" single ((:commit . "a27322262ebcce7765574b577000f6f939400206") (:url . "https://github.com/asok/rake.el") (:keywords "rake" "ruby"))]) (rainbow-identifiers . [(20141102 726) ((emacs (24))) "Highlight identifiers according to their names" single ((:commit . "19fbfded1baa98d12335f26f6d7b20e5ae44ce2e") (:url . "https://github.com/Fanael/rainbow-identifiers"))]) (rainbow-delimiters . [(20170929 432) nil "Highlight brackets according to their depth" single ((:commit . "19b93892afa0494ba749c2ca9c154e04447ad778") (:url . "https://github.com/Fanael/rainbow-delimiters") (:keywords "faces" "convenience" "lisp" "tools"))]) (rainbow-blocks . [(20171025 738) nil "Block syntax highlighting for lisp code" single ((:commit . "dd435d7bb34ff6f162a5f315df308b90b7e9f842") (:url . "https://github.com/istib/rainbow-blocks"))]) (railscasts-theme . [(20150219 725) nil "Railscasts color theme for GNU Emacs." single ((:commit . "1340c3f6c2717761cab95617cf8dcbd962b1095b") (:url . "https://github.com/mikenichols/railscasts-theme") (:keywords "railscasts" "color" "theme"))]) (railscasts-reloaded-theme . [(20170314 146) nil "Railscasts Reloaded color theme" single ((:commit . "bd6e385752c89760fdee7bdf331e24d1d80ee7e9") (:url . "https://github.com/thegeorgeous/railscasts-reloaded-theme"))]) (rails-log-mode . [(20140407 2125) nil "Major mode for viewing Rails log files" single ((:commit . "ff440003ad7d47cb0ac3300f2a632f4cfd36a446") (:keywords "rails" "log"))]) (racket-mode . [(20171116 1435) ((emacs (24 3)) (faceup (0 0 2)) (s (1 9 0))) "Major mode for Racket language." tar ((:commit . "132175062ca4b8436bfc69b60e0de1feac0d2c8c") (:url . "https://github.com/greghendershott/racket-mode"))]) (racer . [(20171211 1548) ((emacs (24 3)) (rust-mode (0 2 0)) (dash (2 13 0)) (s (1 10 0)) (f (0 18 2)) (pos-tip (0 4 6))) "code completion, goto-definition and docs browsing for Rust via racer" single ((:commit . "cb74060bbaff8e505ba36e20e4a3a763ee7dd4c8") (: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 ((:commit . "b4020ee7f5f895e0065b8b26da8a49c51432d530") (:url . "https://github.com/mlf176f2/r-autoyas.el") (:keywords "r" "yasnippet"))]) (quiz . [(20170818 415) ((cl-lib (0 5)) (emacs (25))) "Multiple choice quiz game" single ((:commit . "c43151212ead2330e7ec8e5ac6914c617a12e4f8") (:url . "https://github.com/davep/quiz.el") (:keywords "games" "trivia" "quiz"))]) (quiet . [(20160508 556) nil "disconnect from the online world for a while" single ((:commit . "6f20309f99e26fcae2601d1544b342f044e54baf") (:url . "https://github.com/zzkt/quiet") (:keywords "quiet" "distraction" "network" "detachment" "offline"))]) (quickrun . [(20170222 1715) ((emacs (24 3))) "Run commands quickly" single ((:commit . "55bbe5d54b80206ea5a60bf2f58eb6368b2c8201") (:url . "https://github.com/syohex/emacs-quickrun"))]) (quickref . [(20170817 532) ((dash (1 0 3)) (s (1 0 0))) "Display relevant notes-to-self in the echo area" single ((:commit . "f368c8b8219bb90498c5ab84e26f00eedaa234cf") (:url . "https://github.com/pd/quickref.el"))]) (quick-shell-keybind . [(20171022 2313) ((emacs (24))) "Interactively bind a key to shell commands" single ((:commit . "5f4541a5a5554d108bf16b5fd1713e962161ca1b") (:url . "https://github.com/eyeinsky/quick-shell-keybind") (:keywords "maint" "convenience" "processes"))]) (quick-preview . [(20150828 2139) nil "quick preview using GNOME sushi, gloobus or quick look" single ((:commit . "29c884c6ab385ef67d9aa656ebb7c94cabeb5c35") (:url . "https://github.com/myuhe/quick-preview.el") (:keywords "files" "hypermedia"))]) (quick-peek . [(20170327 27) ((emacs (24 3))) "Inline quick-peek windows" single ((:commit . "6a006fbf1a41b04c0e7522d50c942ec89c3637fc") (:keywords "tools" "help" "doc" "convenience"))]) (quick-buffer-switch . [(20151007 1508) nil "Quick switch to file or dir buffers." single ((:commit . "d5fdd67b4c9f04b7a7122da2215e4ae076a03b1b") (:keywords "emacs" "configuration"))]) (quelpa-use-package . [(20161212 1038) ((emacs (24 3)) (quelpa (0)) (use-package (2))) "quelpa handler for use-package" single ((:commit . "f276555d6bead02a0d869149f03a545d4d4265ad") (:url . "https://github.com/quelpa/quelpa-use-package") (:keywords "package" "management" "elpa" "use-package"))]) (quelpa . [(20171207 1139) ((package-build (0)) (emacs (24 3))) "Emacs Lisp packages built directly from source" tar ((:commit . "b9f5640a2459e627bd69ca3a1be3037080cac776") (:url . "https://github.com/quelpa/quelpa") (:keywords "package" "management" "build" "source" "elpa"))]) (quasi-monochrome-theme . [(20171126 203) nil "Quasi Monochrome theme" tar ((:commit . "aa6a3649ad518b9eebd7bc5c84f184469ea735a9") (:keywords "color" "theme" "monochrome"))]) (quack . [(20160410 207) nil "enhanced support for editing and running Scheme code" single ((:commit . "c1c8e448d295cc1b5752104a63a5759a9c5fdf6d"))]) (qt-pro-mode . [(20170604 1141) ((emacs (24))) "Qt Pro/Pri major mode" single ((:commit . "66601441cc728a609765b149ee0d7dcfb74dc8bf") (:keywords "extensions"))]) (qml-mode . [(20161015 1731) nil "Major mode for editing QT Declarative (QML) code." single ((:commit . "6c5f33ba88ae010bf201a80ee8095e20a724558c") (: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 ((:commit . "93c697b97d540fd1601a13a3d9889fb939b19878") (:url . "https://github.com/gongo/qiita-el") (:keywords "qiita"))]) (pyvenv . [(20171215 1329) nil "Python virtual environment interface" single ((:commit . "651a624fb41898d0c68970889ef7a72bad78b10b") (:url . "http://github.com/jorgenschaefer/pyvenv") (:keywords "python" "virtualenv" "tools"))]) (pythonic . [(20171219 810) ((emacs (24)) (cl-lib (0 5)) (dash (2 11)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:commit . "ce9c45564efa5553f6268c34f5f1ca2dfcb4d4da") (:url . "https://github.com/proofit404/pythonic"))]) (python-x . [(20171006 336) ((python (0 24)) (folding (0)) (cl-lib (0 5))) "python.el extras for interactive evaluation" tar ((:commit . "9bf0d16cfe7b5f24b98d6b33cbc8763edaceb174") (:keywords "python" "eval" "folding") (:url . "https://github.com/wavexx/python-x.el") (:author . "Yuri D'Elia "))]) (python-test . [(20171112 2137) ((emacs (25 1))) "Python testing integration" single ((:commit . "f00b9de14647b15b6f36ceee77d7e9e08dd074a4") (:url . "https://github.com/emacs-pe/python-test.el") (:keywords "convenience" "tools" "processes"))]) (python-switch-quotes . [(20161228 9) ((emacs (24 3))) "cycle between ' and \" quotes in python strings" single ((:commit . "93f1e9b40e061a6cea480139e8b1362b6404abd0") (:url . "https://github.com/werehuman/python-switch-quotes") (:keywords "python" "tools" "convenience"))]) (python-mode . [(20180104 1009) nil "Python major mode" tar ((:commit . "ff5ca6ed9e5eabad355bfb1218bd8020a846b77f"))]) (python-info . [(20151228 1052) nil "Python info manual for Emacs" tar ((:commit . "306f15441b54b25757cdfd3b327b84024ea21ed7"))]) (python-environment . [(20150310 153) ((deferred (0 3 1))) "virtualenv API for Emacs Lisp" tar ((:commit . "401006584e32864a10c69d29f14414828909362e") (:keywords "applications" "tools"))]) (python-docstring . [(20170508 156) nil "Smart Python docstring formatting" tar ((:commit . "d35d2e0fbe468743c19a870fec7b28a7e725790d"))]) (python-django . [(20150821 2104) nil "A Jazzy package for managing Django projects" single ((:commit . "fc54ad74f0309670359b939f64d0f1fff68aeac4") (:url . "https://github.com/fgallina/python-django.el") (:keywords "languages"))]) (python-cell . [(20131029 1616) nil "Support for MATLAB-like cells in python mode" single ((:commit . "ccacd91a19be784860d687eb1e8ce88fddaacaf6") (:keywords "python" "matlab" "cell"))]) (pytest . [(20170614 745) ((s (1 9 0))) "Easy Python test running in Emacs" single ((:commit . "013fccd684fc8f2092d6e1ec4203ec574e12051d") (:url . "https://github.com/ionrock/pytest-el") (:keywords "pytest" "python" "testing"))]) (pylint . [(20170402 555) nil "minor mode for running `pylint'" single ((:commit . "f5a7e4327d2f31744d3ae84e46ac4cde1b76b2d3") (:keywords "languages" "python"))]) (pyimpsort . [(20160129 2053) ((emacs (24 3))) "Sort python imports." tar ((:commit . "d5c61d70896b642646dfd3c809c06174ae086c1a") (:url . "https://github.com/emacs-pe/pyimpsort.el") (:keywords "convenience"))]) (pyimport . [(20170808 346) ((dash (2 8 0)) (s (1 9 0)) (shut-up (0 3 2))) "Manage Python imports!" single ((:commit . "50789ef8c5e19997bd5b0d4c47acb7660d128e76"))]) (pyim-wbdict . [(20170724 1527) ((pyim (1 0))) "Some wubi dicts for pyim" tar ((:commit . "114489ed97e825ae11a8d09da6e873820cf23106") (:url . "https://github.com/tumashu/pyim-wbdict") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete"))]) (pyim-cangjie5dict . [(20170729 1946) ((pyim (1 0))) "Some cangjie5 dicts for pyim" tar ((:commit . "c8618590780b818db1a67a29bc47c5d25903517a") (:url . "https://github.com/erstern/pyim-cangjie5dict") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete"))]) (pyim-basedict . [(20170726 1959) nil "The default pinyin dict of pyim" tar ((:commit . "3196cb210e056702c5a4ea1dac1d8e1e27740fab") (:url . "https://github.com/tumashu/pyim-basedict") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete"))]) (pyim . [(20180108 1452) ((emacs (24 3)) (cl-lib (0 5)) (popup (0 1)) (async (1 6)) (pyim-basedict (0 1))) "A Chinese input method which support quanpin, shuangpin, wubi and cangjie." tar ((:commit . "ff5269cd5e438452cf8855a46b7c548b5268b7b9") (:url . "https://github.com/tumashu/pyim") (:keywords "convenience" "chinese" "pinyin" "input-method"))]) (pygen . [(20161120 2106) ((elpy (1 12 0)) (python-mode (6 2 2)) (dash (2 13 0))) "Python code generation using Elpy and Python-mode." single ((:commit . "9019ff44ba49d7295b1476530feab91fdadb084b") (:url . "https://github.com/JackCrawley/pygen/") (:keywords "python" "code generation"))]) (pyfmt . [(20150521 1356) nil "Emacs interface to pyfmt" single ((:commit . "cb92be2cf0804cc53142dc5edb36f8e0ef5cec32") (: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 ((:commit . "783a93488e255346f9b1b2658424ffe0d670e8cf") (:url . "https://github.com/ssbb/pyenv-mode-auto") (:keywords "python" "pyenv"))]) (pyenv-mode . [(20170801 1648) ((pythonic (0 1 0))) "Integrate pyenv with python-mode" single ((:commit . "215b7f0ed3847e0c844adbff7d9b19057aa7c820") (:url . "https://github.com/proofit404/pyenv-mode"))]) (pydoc-info . [(20110301 34) nil "Better Python support for info-lookup-symbol." tar nil]) (pydoc . [(20170429 1158) nil "functional, syntax highlighted pydoc navigation" single ((:commit . "916153516382e5546b59b46342c58ed76cf27faf") (: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 ((:commit . "4f5451f4d6e1e2ddd5878fc7d18f5fc4fc92a83d") (:url . "https://github.com/mattharrison/pycoverage.el") (:keywords "project" "convenience"))]) (pycarddavel . [(20150831 516) ((helm (1 7 0)) (emacs (24 0))) "Integrate pycarddav" single ((:commit . "a6d81ee4eb8309cd82f6082aeca68c5a015702a3") (:keywords "helm" "pyccarddav" "carddav" "message" "mu4e" "contacts"))]) (py-yapf . [(20160925 422) nil "Use yapf to beautify a Python buffer" single ((:commit . "a878304202ad827a1f3de3dce1badd9ca8731146") (: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 ((:commit . "3b2a0bdaacb54df6f2bee8317423e5c0d159d5cf") (:url . "https://github.com/Bogdanp/py-test.el") (:keywords "python" "testing" "py.test"))]) (py-smart-operator . [(20170531 509) ((s (1 9 0))) "smart-operator for python-mode" single ((:commit . "0c8a66faca4b35158d0b5885472cb75286039167") (:keywords "python" "convenience" "smart-operator"))]) (py-isort . [(20160925 318) nil "Use isort to sort the imports in a Python buffer" single ((:commit . "e67306f459c47c53a65604e4eea88a3914596560") (:url . "http://paetzke.me/project/py-isort.el"))]) (py-import-check . [(20130802 411) nil "Finds the unused python imports using importchecker" single ((:commit . "9787f87745a4234cd9bed711860b707902bc8ae4") (:url . "https://github.com/psibi/emacs-py-import-check") (:keywords "python" "import" "check"))]) (py-gnitset . [(20170821 1032) nil "Run your Python tests any way you'd like" single ((:commit . "1e993cc29cbc31e06fe1e335dec198e21972fa55") (:url . "https://www.github.com/quodlibetor/py-gnitset"))]) (py-autopep8 . [(20160925 352) nil "Use autopep8 to beautify a Python buffer" single ((:commit . "68e12d8788c91c7ec53a68acf1d23adb2ffa4788") (:url . "http://paetzke.me/project/py-autopep8.el"))]) (px . [(20170317 1630) nil "preview inline latex in any mode" single ((:commit . "0c52f7933eab3ca1642ab0df151db9950430c9e2") (:url . "http://github.com/aaptel/preview-latex"))]) (pushover . [(20170818 1403) ((cl-lib (0 5))) "Pushover API Access" single ((:commit . "bbe3ac8df3c532a72da4552615af960b8a577588") (: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 ((:commit . "73c59a0f1dc04875b3e5a2c8afbc26c32128e445") (: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 ((:commit . "8eef77317a3bab07ade212353a50fbd3f20f365a"))]) (purple-haze-theme . [(20141014 1929) ((emacs (24 0))) "an overtly purple color theme for Emacs24." single ((:commit . "3e245cbef7cd09e6b3ee124963e372a04e9a6485") (:url . "https://github.com/jasonm23/emacs-purple-haze-theme"))]) (purescript-mode . [(20171203 2234) nil "A PureScript editing mode" tar ((:commit . "2d1fa590a6de875ea4bd964349df0ba5e24fb1f3"))]) (puppet-mode . [(20171220 2249) ((emacs (24 1)) (pkg-info (0 4))) "Major mode for Puppet manifests" single ((:commit . "b3ed5057166a4f49dfa9be638523a348b55a2fd2") (:url . "https://github.com/voxpupuli/puppet-mode") (:keywords "languages"))]) (punpun-theme . [(20161103 147) nil "A bleak theme" tar ((:commit . "cce8b10b2df6f9187a9eaa0c3f21ff0dda175968"))]) (pungi . [(20150222 446) ((jedi (0 2 0 -3 2)) (pyvenv (1 5))) "Integrates jedi with virtualenv and buildout python environments" single ((:commit . "a2d4d439ea371be0b064a12248288903b8a521a0") (:keywords "convenience"))]) (punctuality-logger . [(20141120 1231) nil "Punctuality logger for Emacs" single ((:commit . "e09e5dd37bc92289fa2f7dc44aed51a7b5e04bb0") (:url . "https://gitlab.com/elzair/punctuality-logger") (:keywords "reminder" "calendar"))]) (pulseaudio-control . [(20171024 2339) nil "Use `pactl' to manage PulseAudio volumes." single ((:commit . "08c59e1dc45ec96edb62f34036e82cf5f14c0e8b") (:url . "https://github.com/flexibeast/pulseaudio-control") (:keywords "multimedia" "hardware" "sound" "pulseaudio"))]) (pug-mode . [(20171208 2029) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for jade/pug template files" single ((:commit . "894a86d0ae4e855ae6044af6d7e106f8996c97c2") (:url . "https://github.com/hlissner/emacs-pug-mode") (:keywords "markup" "language" "jade" "pug"))]) (pt . [(20161226 1159) nil "A front-end for pt, The Platinum Searcher." single ((:commit . "6d99b2aaded3ece3db19a20f4b8f1d4abe382622") (:url . "https://github.com/bling/pt.el") (:keywords "pt" "ack" "ag" "grep" "search"))]) (psysh . [(20171022 2229) ((emacs (24 3)) (s (1 9 0)) (f (0 17))) "PsySH, PHP interactive shell (REPL)" single ((:commit . "926af4ae0c068ed699fc939f4b3e642aaa6f7c9e") (:url . "https://github.com/zonuexe/psysh.el") (:keywords "processes" "php"))]) (psvn . [(20151103 1042) nil "Subversion interface for emacs" single ((:commit . "23048d302858fc3a52c118652bd83491a4956410"))]) (psession . [(20171107 2313) ((emacs (24)) (cl-lib (0 5)) (async (1 9 2))) "Persistent save of elisp objects." single ((:commit . "d087644db226e2c66481d3c248e26afa9e4eb670") (:url . "https://github.com/thierryvolpiatto/psession"))]) (psci . [(20171011 50) ((purescript-mode (13 10)) (dash (2 9 0)) (s (1 9 0)) (f (0 17 1))) "Major mode for purescript repl psci" tar ((:commit . "5360b244c588ed2f2a5bb86180cb5d4deb2216de") (:url . "https://github.com/ardumont/emacs-psci") (:keywords "purescript" "psci" "repl" "major" "mode"))]) (psc-ide . [(20180101 1421) ((dash (2 13 0)) (dash-functional (1 2 0)) (company (0 8 7)) (cl-lib (0 5)) (s (1 10 0)) (emacs (24 4)) (flycheck (0 24)) (let-alist (1 0 4)) (seq (1 11))) "Minor mode for PureScript's psc-ide tool." tar ((:commit . "085e9d5541ccf35e876a6135daaddaa0a58f3bb2") (:url . "https://github.com/epost/psc-ide-emacs") (:keywords "languages"))]) (protocols . [(20170802 432) ((cl-lib (0 5))) "Protocol database access functions." single ((:commit . "d0f7c4acb05465f1a0d4be54363bbd2802647e77") (:url . "https://github.com/davep/protocols.el") (:keywords "convenience" "net" "protocols"))]) (protobuf-mode . [(20170526 950) nil "major mode for editing protocol buffers." single ((:commit . "b77aa8011d450e314690e430ede85d4ab20abaf3") (:keywords "google" "protobuf" "languages"))]) (prosjekt . [(20151127 616) ((dash (2 8 0))) "a software project tool for emacs" tar ((:commit . "a864a8be5842223043702395f311e3350c28e9db") (:url . "https://github.com/abingham/prosjekt"))]) (proportional . [(20171025 1637) ((emacs (25 1))) "use a proportional font everywhere" single ((:commit . "f671ffe8fd803e2fc462e2e1844aeeab1a13918e") (:url . "https://github.com/ksjogo/proportional") (:keywords "faces"))]) (propfont-mixed . [(20150113 1411) ((emacs (24)) (cl-lib (0 5))) "Use proportional fonts with space-based indentation." single ((:commit . "0b461ef4754a469610dba71874a34b6da42176bf") (: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 ((:commit . "50b102c1c0935fd3e0c465feed7f27d66b21cdf3") (:url . "https://github.com/david-christiansen/prop-menu-el") (:keywords "convenience"))]) (prompts . [(20160916 341) ((dash (2 13 0))) "utilities for working with text prompts." single ((:commit . "1cd5e732ff2a86b47836eb7252e5b59cd4b6ab26") (:url . "https://github.com/guiltydolphin/prompts.el") (:keywords "input" "minibuffer"))]) (prompt-text . [(20160106 609) nil "Various information in minibuffer prompt" single ((:commit . "bb9265ebfada42d0e3c67c809665e1e5d980691e") (:url . "https://github.com/10sr/prompt-text-el") (:keywords "utility" "minibuffer"))]) (promise . [(20170215 2204) ((emacs (25)) (async (1 9))) "Promises/A+" tar ((:commit . "d3cad4e1f7825404828cd9f5b887f18d3fd83c56") (:url . "https://github.com/chuntaro/emacs-promise") (:keywords "async" "promise" "convenience"))]) (projmake-mode . [(20161031 1015) ((dash (20150611 922)) (indicators (20130217 1405))) "Project oriented automatic builder and error highlighter, flymake for projects" tar ((:commit . "a897701f7e8f8cc11459ed44eb0e454db2a460c1"))]) (projekt . [(20150324 148) ((emacs (24))) "some kind of staging for CVS" single ((:commit . "a65e554e5d8b0def08c5d06f3fe34fec40bebd83"))]) (projector . [(20171006 1258) ((alert (1 1)) (projectile (0 11 0)) (cl-lib (0 5))) "Lightweight library for managing project-aware shell and command buffers" single ((:commit . "03751fca880c95cf47e560c78cfc2aaa056cd455") (:url . "https://github.com/waymondo/projector"))]) (projectile-variable . [(20170208 918) ((emacs (24)) (cl-lib (0 5))) "Store project local variables." single ((:commit . "8d348ac70bdd6dc320c13a12941b32b38140e264") (:url . "https://github.com/zonuexe/projectile-variable") (:keywords "project" "convenience"))]) (projectile-trailblazer . [(20170928 924) ((emacs (24 4)) (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 using trailblazer" single ((:commit . "a37a4f7b7f727d98e4c74c0256e059e84263553d") (:url . "https://github.com/micdahl/projectile-trailblazer") (:keywords "rails" "projectile" "trailblazer" "languages"))]) (projectile-speedbar . [(20170516 1943) ((projectile (0 11 0)) (sr-speedbar (0))) "projectile integration for speedbar" single ((:commit . "dcab13db72c2084edbebe808e35f1126fe0b3bcd") (:url . "https://github.com/anshulverma/projectile-speedbar") (:keywords "project" "convenience" "speedbar" "projectile"))]) (projectile-sift . [(20160107 215) ((sift (0 2 0)) (projectile (0 13 0))) "Run a sift with Projectile" single ((:commit . "4ce8878a0fc396ded7521ce38852d93e1d863065") (:url . "https://github.com/nlamirault/sift.el") (:keywords "sift" "projectile"))]) (projectile-ripgrep . [(20170211 857) ((ripgrep (0 3 0)) (projectile (0 14 0))) "Run ripgrep with Projectile" single ((:commit . "c47a2da4668ca338e7fadc3d8c095e075caaa17d") (:url . "https://github.com/nlamirault/ripgrep.el") (:keywords "ripgrep" "projectile"))]) (projectile-rails . [(20171117 730) ((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 ((:commit . "348b11b237e87d87e784ab7accaef2bf97664bd6") (: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 ((:commit . "c4b8e7d4dfec789ef8493a7c5d4ce0cf7937e579") (:url . "https://github.com/avdgaag/projectile-hanami") (:keywords "hanami" "ruby" "projectile"))]) (projectile-git-autofetch . [(20171129 1447) ((projectile (0 14 0)) (alert (1 2))) "automatically fetch git repositories" single ((:commit . "da02069d906e6e7f28ea1dd6a9196529315a5cba") (:url . "https://github.com/andrmuel/projectile-git-autofetch") (:keywords "tools" "vc"))]) (projectile-direnv . [(20160305 1738) ((emacs (24)) (s (1 11 0)) (dash (2 12 0)) (projectile (0 13 0))) "Set environment variables from .envrc" single ((:commit . "d5d29e5228f840b7a25358a2fd50353ef2dc9b16") (:url . "https://github.com/christianromney/projectile-direnv") (:keywords "convenience"))]) (projectile-codesearch . [(20171129 600) ((codesearch (20171122 431)) (projectile (20150405 126))) "Integration of codesearch into projectile" single ((:commit . "4e6a2382c26d1218a4a007d31de2bab8ef9d2e7c") (:url . "https://github.com/abingham/emacs-codesearch") (:keywords "tools" "development" "search"))]) (projectile . [(20180107 2233) ((emacs (24 3)) (pkg-info (0 4))) "Manage and navigate projects in Emacs easily" single ((:commit . "293849974df45b60bad572bfdc5166575fbbf0a5") (:url . "https://github.com/bbatsov/projectile") (:keywords "project" "convenience"))]) (project-shells . [(20171107 51) ((emacs (24 3)) (seq (2 19))) "Manage the shell buffers of each project" single ((:commit . "d9401de750e444697c2eb9de1ff79f2a2eba4af8") (:url . "https://github.com/hying-caritas/project-shells") (:keywords "processes" "terminals"))]) (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 ((:commit . "35bbe132a4fab6a0fec15ce6c0fd2fe6a4aa9626"))]) (project-persist . [(20150519 1324) nil "A minor mode to allow loading and saving of project settings." tar ((:commit . "8da45c80b23b1d7499eac11a258fd7382312a304"))]) (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 ((:commit . "589a09008706f5f4ef91393dc4306eede0d15ca9") (:url . "https://github.com/sabof/project-explorer"))]) (programmer-dvorak . [(20150426 1837) nil "Input method for Programmer Dvorak." single ((:commit . "3288a8f058eca4cab390a564babbbcb17cfa0350") (:url . "https://github.com/yangchenyun/programmer-dvorak") (:keywords "dvorak" "programmer-dvorak" "input-method"))]) (prognth . [(20130920 1059) nil "Extend prog1 to arbitrary index" single ((:commit . "2f1ca4d34b1fd581163e1df122c85418137e8e62") (:keywords "lisp"))]) (professional-theme . [(20150315 400) nil "Emacs port of Vim's professional theme" single ((:commit . "0927d1474049a193f9f366bde5eb1887b9ba20ed") (:url . "https://github.com/juanjux/emacs-professional-theme") (:keywords "theme" "light" "professional"))]) (prodigy . [(20171121 512) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (24))) "Manage external services from within Emacs" single ((:commit . "da9ab59dc807968841ef369617edd6a67a9ad1de") (:url . "http://github.com/rejeep/prodigy.el"))]) (processing-snippets . [(20140426 728) ((yasnippet (0 8 0))) "Snippets for processing-mode" tar ((:commit . "448aba82970c98322629eaf2746e73be6c30c98e"))]) (processing-mode . [(20171022 1602) nil "Major mode for Processing 2.0" single ((:commit . "448aba82970c98322629eaf2746e73be6c30c98e") (:url . "https://github.com/ptrv/processing2-emacs") (:keywords "languages" "snippets"))]) (proc-net . [(20130321 1712) nil "network process tools" single ((:commit . "10861112a1f3994c8e6374d6c5bb5d734cfeaf73") (:url . "http://github.com/nicferrier/emacs-procnet") (:keywords "processes"))]) (private-diary . [(20151216 857) ((emacs (24 0))) "maintain a private diary in Emacs" single ((:commit . "0c86fb6150ad8ed14f94def3504f5a68f4147283") (:url . "https://github.com/cacology/private-diary") (:keywords "diary" "encryption"))]) (private . [(20150121 1757) ((aes (0 6))) "take care of your private configuration files." single ((:commit . "9266d01c095895cc3ee9de95bc20511e88353755") (:url . "https://github.com/cheunghy/private") (:keywords "private" "configuration" "backup" "recover"))]) (pretty-symbols . [(20140814 259) nil "Draw tokens as Unicode glyphs." single ((:commit . "582cbe51ecfe1cc0a5b185bc06113c8a661e3956") (:url . "http://github.com/drothlis/pretty-symbols") (:keywords "faces"))]) (pretty-sha-path . [(20141105 1026) nil "Prettify Guix/Nix store paths" single ((:commit . "a2b43dd9de423a38d67cda2e3bd9412f7d363257") (: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 ((:commit . "500085206e25b98d00b9ec996f91c87ba569c4ce") (:url . "https://github.com/akatov/pretty-mode") (:keywords "pretty" "unicode" "symbols"))]) (pretty-lambdada . [(20170307 940) nil "Show the word `lambda' as the Greek letter." single ((:url . "https://www.emacswiki.org/emacs/download/pretty-lambdada.el") (:keywords "convenience" "display"))]) (prettify-greek . [(20160603 208) nil "Greek letters for prettify-symbols" single ((:commit . "698d07a6ffe85f6fb53f3bfec4f49380c25cfd90") (:url . "https://gitlab.com/fommil/emacs-prettify-greek") (:keywords "faces"))]) (prettier-js . [(20170823 159) nil "Minor mode to format JS code on file save" single ((:commit . "6cc79cc933968f9ecae988ed79398d9dc97790e2") (:url . "https://github.com/prettier/prettier-emacs") (:keywords "convenience" "wp" "edit" "js"))]) (preseed-generic-mode . [(20170802 1753) nil "Debian preseed file major mode" single ((:commit . "341d85f8ecdc8834956a0352ece542f45def88db") (:url . "https://github.com/suntong001/preseed-generic-mode"))]) (preproc-font-lock . [(20151107 1218) nil "Highlight C-style preprocessor directives." single ((:commit . "565fda9f5fdeb0598986174a07e9fb09f7604397") (:url . "https://github.com/Lindydancer/preproc-font-lock") (:keywords "c" "languages" "faces"))]) (prassee-theme . [(20180105 1644) ((emacs (24))) "A high contrast color theme for Emacs." single ((:commit . "b68d13f929364b9bb087f8f587798144218f7dc6") (:url . "https://github.com/prassee/prassee-emacs-theme") (:keywords "dark" "high-contrast" "faces"))]) (ppd-sr-speedbar . [(20151108 424) ((sr-speedbar (20140914 2339)) (project-persist-drawer (0 0 4))) "Sr Speedbar adaptor for project-persist-drawer." tar ((:commit . "19d3e924407f40a6bb38c8fe427a159af755adce"))]) (pp-c-l . [(20170307 939) nil "Display Control-l characters in a pretty way" single ((:url . "https://www.emacswiki.org/emacs/download/pp-c-l.el") (:keywords "display" "convenience" "faces"))]) (pp+ . [(20170307 938) nil "Extensions to `pp.el'." single ((:url . "https://www.emacswiki.org/emacs/download/pp%2b.el") (:keywords "lisp"))]) (powershell . [(20161103 2354) ((emacs (24))) "Mode for editing Powershell scripts" single ((:commit . "3c09e1b87064bedc065e45346fd4c3e051eeb0f0") (: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 ((:commit . "98b3a102b6dba6632aa0755a7257300c9b164309") (:url . "http://github.com/raugturi/powerline-evil/") (:keywords "evil" "mode-line" "powerline"))]) (powerline . [(20171023 750) ((cl-lib (0 2))) "Rewrite of Powerline" tar ((:commit . "fda4fb96984607d4a6502b1d8c8898e56d10cf6c") (: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 ((:commit . "ea83986b8ca8e27cb996290d6463b111ec0966ce") (:url . "http://github.com/yukihr/emacs-pow") (:keywords "develop" "web" "pow"))]) (pov-mode . [(20161114 2343) nil "Major mode for editing POV-Ray scene files." tar ((:commit . "9fc1db3aab7c27155674dd1a87ec62606035d074"))]) (postcss-sorting . [(20170531 1858) ((emacs (24))) "postcss-sorting interface" single ((:commit . "1320d74abd8ee7f0a09b5f7920d554650a7047a6") (:url . "https://github.com/P233/postcss-sorting.el"))]) (pos-tip . [(20150318 813) nil "Show tooltip at point" single ((:commit . "051e08fec5cf30b7574bdf439f79fef7d42d689d") (:keywords "tooltip"))]) (portage-navi . [(20141208 555) ((concurrent (0 3 1)) (ctable (0 1 2))) "portage viewer" single ((:commit . "8016c3e99fe6cef101d479a3d69185796b22ca2f") (:url . "https://github.com/kiwanami/emacs-portage-navi") (:keywords "tools" "gentoo"))]) (popwin . [(20150315 600) nil "Popup Window Manager." single ((:commit . "95dea14c60019d6cccf9a3b33e0dec4e1f22c304") (:keywords "convenience"))]) (popup-switcher . [(20171205 51) ((cl-lib (0 3)) (popup (0 5 3))) "switch to other buffers and files via popup." single ((:commit . "f5788a31918e37bb5c04139048c667bcec9f1b62") (: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 ((:commit . "5773dfadc104a906c088a3ec62e8cdd3e01e57fa") (:url . "https://github.com/waymondo/popup-kill-ring") (:keywords "popup" "kill-ring" "pos-tip"))]) (popup-imenu . [(20170326 340) ((dash (2 12 1)) (popup (0 5 3)) (flx-ido (0 6 1))) "imenu index popup" single ((:commit . "c5e2e69adbd3a630e4cb750965a1aee8c10c1f09") (:url . "https://github.com/ancane/popup-imenu") (:keywords "popup" "imenu"))]) (popup-edit-menu . [(20170404 725) ((emacs (24))) "a popup context edit menu package" single ((:commit . "925600a6e29183841199e866cf55e566a6a1b002") (:keywords "lisp" "pop-up" "context" "edit" "menu"))]) (popup-complete . [(20141108 1908) ((popup (0 5 0))) "completion with popup" single ((:commit . "caa655a6d8472e9a4bfa1311126d90d7d1b07fca") (:url . "https://github.com/syohex/emacs-popup-complete"))]) (popup . [(20160709 729) ((cl-lib (0 5))) "Visual Popup User Interface" single ((:commit . "80829dd46381754639fb764da11c67235fe63282") (:keywords "lisp"))]) (poporg . [(20170403 51) nil "Pop a comment or string to an empty buffer for text editing" single ((:commit . "2c58d68c81ecca4140bf179f19ed153ec804b65a") (:url . "https://github.com/QBobWatson/poporg") (:keywords "outlines" "tools"))]) (pophint . [(20170917 1948) ((log4e (0 2 0)) (yaxception (0 3))) "Provide navigation using pop-up tips, like Firefox's Vimperator Hint Mode" tar ((:commit . "909025c5a871ca4b9ec7aed7f1a27c819a94dba1") (:url . "https://github.com/aki2o/emacs-pophint") (:keywords "popup"))]) (ponylang-mode . [(20171028 1356) ((dash (2 10 0))) "Major mode for Pony code" single ((:commit . "5e23459dc395eb77fa4c6cfa3d6c08b1b185a6df") (:url . "https://github.com/seantallen/ponylang-mode") (:keywords "languages" "programming"))]) (pony-snippets . [(20160204 2011) ((yasnippet (0 8 0))) "Yasnippets for Pony" tar ((:commit . "a6615ab0693f17fc47ec45753202010238157810") (:url . "https://github.com/seantallen/pony-snippets") (:keywords "snippets" "pony"))]) (pony-mode . [(20170807 822) nil "Minor mode for working with Django Projects" tar ((:commit . "760684d30b6c234d1b88c9a4673a808f36f7f341"))]) (pomodoro . [(20150716 1046) nil "A timer for the Pomodoro Technique" single ((:commit . "4a299b8f5e6623010224dcb3e524ff288c6a082c"))]) (pomidor . [(20171214 727) ((emacs (24 3)) (alert (1 2))) "Simple and cool pomodoro timer" tar ((:commit . "f97a42cd261b5cf51ce07e1edaacb687472bd71f") (:url . "https://github.com/TatriX/pomidor") (:keywords "tools" "time" "applications" "pomodoro technique"))]) (polymode . [(20170307 322) ((emacs (24))) "Versatile multiple modes with extensive literate programming support" tar ((:commit . "0340f5e7e55235832e59673f027cc79a23cbdcd6") (:url . "https://github.com/vitoshka/polymode"))]) (poly-ruby . [(20170802 648) ((emacs (24 3)) (polymode (1 0))) "Provides poly-ruby-mode" single ((:commit . "e6f50a92d29a5ff567d70cafa6621c4f89056d11") (:url . "https://github.com/knu/poly-ruby.el") (:keywords "languages"))]) (pollen-mode . [(20160808 2000) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing pollen files" single ((:commit . "de762bd7f9760185dae8ef025ca9a9126ae78de0") (:url . "https://github.com/lijunsong/pollen-mode") (:keywords "languages" "pollen" "pollenpub"))]) (pointback . [(20100210 752) nil "Restore window points when returning to buffers" single ((:commit . "e3a02c1784d81b5a1d2477338d049af581ed19f8") (:keywords "convenience"))]) (point-undo . [(20100504 129) nil "undo/redo position" single nil]) (point-stack . [(20170808 958) nil "Back and forward navigation through buffer locations" single ((:commit . "76e17311e3a810314c7d31ac46dc55450ff30fa2"))]) (point-pos . [(20170421 932) nil "Save and restore point positions" single ((:commit . "442bccb40791832cbc2d6f5c8f53be745aea2b73") (:url . "https://github.com/alezost/point-pos.el") (:keywords "tools" "convenience"))]) (podcaster . [(20161020 835) ((cl-lib (0 5))) "Podcast client" single ((:commit . "9854517025deb5d556168a68955fb7b662239f5c") (:url . "https://github.com/lujun9972/podcaster"))]) (pocket-reader . [(20171127 335) ((emacs (25 1)) (dash (2 13 0)) (kv (0 0 19)) (pocket-lib (0 1)) (s (1 10)) (ov (1 0 6)) (rainbow-identifiers (0 2 2)) (org-web-tools (0 1)) (ht (2 2))) "Client for Pocket reading list" single ((:commit . "6a35d531f2425e2e187f5107047f3dc7625f3623") (:url . "https://github.com/alphapapa/pocket-reader.el") (:keywords "pocket"))]) (pocket-mode . [(20171201 515) ((emacs (24 4)) (pocket-api (0 1))) "Manage your pocket" single ((:commit . "229de7d35b7e5605797591c46aa8200d7efc363c") (:keywords "convenience" "pocket"))]) (pocket-lib . [(20171108 421) ((emacs (25 1)) (request (0 2)) (dash (2 13 0)) (kv (0 0 19)) (s (1 12 0))) "Library for accessing getpocket.com API" single ((:commit . "c860dc2f67398d837de2be17e85894a1303e7b49") (:url . "https://github.com/alphapapa/pocket-lib.el") (:keywords "pocket"))]) (pocket-api . [(20170818 533) ((emacs (24 4)) (request (0 2))) "another pocket api" single ((:commit . "26e4583311ebc472f7bba59a1189f04938f2c03e") (:url . "https://github.com/lujun9972/pocket-api.el") (:keywords "convenience" "pocket"))]) (po-mode . [(20170419 303) nil "major mode for GNU gettext PO files" single ((:commit . "d4e434046121b395e8e96ac3dcb4a8f6113f4fd3") (: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 ((:commit . "5bdd3b9a2f0624414bd596e798644713cd1545f0") (: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 ((:commit . "8a2f465264c74e04524cc789cdad0190ace43f6c") (: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 ((:commit . "d50f9dccc98f42bdb42f1d1c8142246e03879218") (:url . "https://github.com/aki2o/emacs-plsense") (:keywords "perl" "completion"))]) (plim-mode . [(20140812 1713) nil "Major mode for editing Plim files" single ((:commit . "92e39190286f172567ceb02c80e1df3b81abfa2d") (:url . "http://github.com/dongweiming/plim-mode") (:keywords "markup" "language"))]) (plenv . [(20130706 2316) nil "A plenv wrapper for Emacs" single ((:commit . "ee937d0f3a1a7ba2d035f45be896d3ed8fefaee2") (:keywords "emacs" "perl"))]) (playerctl . [(20170414 156) nil "Control your music player (e.g. Spotify) with playerctl" single ((:commit . "8354352813cd206efb60002f2af4427957bf8894") (:url . "https://github.com/thomasluquet/playerctl.el") (:keywords "multimedia" "playerctl" "music"))]) (play-routes-mode . [(20170426 33) nil "Play Framework Routes File Support" single ((:commit . "22d7b87e0eaf0330f2b2283872f8dc08a3258771") (:url . "https://github.com/brocode/play-routes-mode/") (:keywords "play" "scala"))]) (platformio-mode . [(20161210 539) ((projectile (0 13 0))) "PlatformIO integration" single ((:commit . "1466aed132a77f48fcb31938d64abb1a1e58ec42") (:url . "https://github.com/zachmassia/platformio-mode"))]) (plantuml-mode . [(20170819 1033) nil "Major mode for PlantUML" single ((:commit . "fce628885b54635b0287b3337626752b2725369d") (:keywords "uml" "plantuml" "ascii"))]) (planet-theme . [(20161030 1917) ((emacs (24))) "A dark theme inspired by Gmail's 'Planets' theme of yore" single ((:commit . "b0a310ff36565fe22224c407cf59569986698a32") (:url . "https://github.com/cmack/emacs-planet-theme") (:keywords "themes"))]) (plan9-theme . [(20180102 1852) nil "A color theme for Emacs based on Plan9" single ((:commit . "2a31fb9251922667692337c867612947d2139696") (:url . "https://github.com/john2x/plan9-theme.el"))]) (plain-theme . [(20171123 2010) ((emacs (24))) "Plain theme without syntax highlighting" single ((:commit . "2609a811335d58cfb73a65d6307c156fe09037d3"))]) (pkgbuild-mode . [(20151010 736) nil "Interface to the ArchLinux package manager" single ((:commit . "7369ab3c6b59cfdf2ecd2b32ad96ce006e766fa0"))]) (pkg-info . [(20150517 443) ((epl (0 8))) "Information about packages" single ((:commit . "76ba7415480687d05a4353b27fea2ae02b8d9d61") (:url . "https://github.com/lunaryorn/pkg-info.el") (:keywords "convenience"))]) (pixiv-novel-mode . [(20160220 621) nil "Major mode for pixiv novel" single ((:commit . "0d1ca524d92b91f20a7105402a773bc21779b434") (:keywords "novel" "pixiv"))]) (pixie-mode . [(20150121 2124) ((clojure-mode (3 0 1)) (inf-clojure (1 0 0))) "Major mode for Pixie-lang" single ((:commit . "f32d5d812c7b5b72d7ff7bad52b41035f9ef6e96") (:url . "https://github.com/johnwalker/pixie-mode"))]) (pivotal-tracker . [(20170720 816) nil "Interact with Pivotal Tracker through its API" single ((:commit . "0311d117037c74512149a4a78b269c2e46d7dfba") (:url . "http://github.com/jxa/pivotal-tracker"))]) (pippel . [(20170730 623) ((emacs (25 1)) (s (1 11 0)) (dash (2 12 0))) "Frontend to python package manager pip" tar ((:commit . "3737d5934665b5059c1e858feeb4270262b37e53") (:url . "https://github.com/brotzeitmacher/pippel"))]) (pip-requirements . [(20171109 1439) ((dash (2 8 0))) "A major mode for editing pip requirements files." single ((:commit . "d6d0437794e5de205a5fb03e0ff0a4a1b9e04eea"))]) (pinyinlib . [(20170827 1442) nil "Convert first letter of Pinyin to Simplified/Traditional Chinese characters" single ((:commit . "45f05d3dbb4fe957f7ab332ca6f94675848b6aa3") (:keywords "extensions"))]) (pinyin-search . [(20160514 2058) ((pinyinlib (0 1 0))) "Search Chinese by Pinyin" single ((:commit . "2e877a76851009d41bde66eb33182a03a7f04262") (:url . "https://github.com/xuchunyang/pinyin-search.el") (:keywords "chinese" "search"))]) (pinot . [(20140211 1226) nil "Emacs interface to pinot-search" tar ((:commit . "67fda555a155b22bb2ce44ba618b4bd6fc5f144a"))]) (pinboard-api . [(20140324 448) nil "Rudimentary http://pinboard.in integration" single ((:commit . "b7b5214d0c35178f8dca08cf22d6ef3c21f0fce4") (:url . "https://github.com/danieroux/pinboard-api-el") (:keywords "pinboard" "www"))]) (pillar . [(20141112 1011) ((makey (0 3))) "Major mode for editing Pillar files" tar ((:commit . "13a7f676544cc66005ccd8e6fc1c25e4ccd6f909") (:url . "http://github.com/DamienCassou/pillar-mode") (:keywords "markup" "major-mode"))]) (pig-snippets . [(20130912 2324) ((yasnippet (0 8 0))) "Snippets for pig-mode" tar ((:commit . "af4200c88a50264b63fa162a02860f3f54c8755b"))]) (pig-mode . [(20140617 1058) nil "Major mode for Pig files" single ((:commit . "af4200c88a50264b63fa162a02860f3f54c8755b"))]) (picpocket . [(20170905 1133) ((emacs (24 4))) "Image viewer" single ((:commit . "e0ca0f1fc03b4166ce2eab9d7532b9b29989e5bd") (:url . "https://github.com/johanclaesson/picpocket") (:keywords "multimedia"))]) (picolisp-mode . [(20150516 155) nil "Major mode for PicoLisp programming." single ((:commit . "1a537b14090813f46cbba54636d40365e1a8067e") (:url . "https://github.com/flexibeast/picolisp-mode") (:keywords "picolisp" "lisp" "programming"))]) (pianobar . [(20171117 1522) nil "thin wrapper for Pianobar, a Pandora Radio client" single ((:commit . "68fe0ed839f6775535081b3ae0a946ccaf11234a") (:url . "http://github.com/agrif/pianobar.el"))]) (phpunit . [(20171127 301) ((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 ((:commit . "a13706733f98be3639c47311fc820b3b50f4bc33") (:url . "https://github.com/nlamirault/phpunit.el") (:keywords "tools" "php" "tests" "phpunit"))]) (phpcbf . [(20150302 528) ((s (1 9 0))) "Format PHP code in Emacs using PHP_CodeSniffer's phpcbf" single ((:commit . "b556b548ceb061b002389d6165d2cc63d8bddb5d") (:url . "https://github.com/nishimaki10/emacs-phpcbf") (:keywords "tools" "php"))]) (php-scratch . [(20161103 1517) ((emacs (24 3)) (s (1 11 0)) (php-mode (1 17 0))) "A scratch buffer to interactively evaluate php code" single ((:commit . "3aa66d1d53b84b779374edff7a7e6b5f2cd7575d"))]) (php-runtime . [(20170901 1106) ((emacs (24)) (cl-lib (0 5))) "Language binding bridge to PHP" single ((:commit . "e1bca88ab5472e9b520b4ce915cd27d1e7803c2d") (:url . "https://github.com/emacs-php/php-runtime.el") (:keywords "processes" "php"))]) (php-refactor-mode . [(20171123 2235) nil "Minor mode to quickly and safely perform common refactorings" single ((:commit . "7a794b0618df2882b1bd586fdd698dba0bc5130d") (:url . "https://github.com/keelerm84/php-refactor-mode.el") (:keywords "php" "refactor"))]) (php-mode . [(20180105 541) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing PHP code" tar ((:commit . "c5ac3f2ccb71697ee8d54099ea870a2a3d107ed8") (:url . "https://github.com/ejmr/php-mode") (:keywords "languages" "php"))]) (php-eldoc . [(20140202 1141) nil "eldoc backend for php" tar ((:commit . "df05064146b884d9081e10657e32dc480f070cfe") (:url . "https://github.com/sabof/php-eldoc"))]) (php-cs-fixer . [(20170506 1133) ((cl-lib (0 5))) "php-cs-fixer wrapper." single ((:commit . "ca2c075a22ad156c336d2aa093fb6394c9f6c112") (:url . "https://github.com/OVYA/php-cs-fixer") (:keywords "languages" "php"))]) (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 ((:commit . "c70e176dd6545f2d42ca3427e87b469635616d8a") (:url . "https://github.com/steckerhalter/php-boris-minor-mode") (:keywords "php" "repl" "eval"))]) (php-boris . [(20130527 121) nil "Run boris php REPL" single ((:commit . "f2faebf610c917f7091f7ec0cd97645629c4f819") (:keywords "php" "commint" "repl" "boris"))]) (php-auto-yasnippets . [(20170330 1814) ((php-mode (1 11)) (yasnippet (0 8 0))) "Creates snippets for PHP functions" tar ((:commit . "03e1f0899c081813901ac15c2f7a675a37cca9f5") (:url . "https://github.com/ejmr/php-auto-yasnippets"))]) (php+-mode . [(20171027 921) nil "A better PHP mode with Zend Framework 1 support." tar ((:commit . "523e7e50f9978ba74b8a324f9f896cd9b5dfd9de"))]) (phoenix-dark-pink-theme . [(20170729 703) nil "Originally a port of the Sublime Text 2 theme" single ((:commit . "4defbb76b00c1a29f060813898578152d6be623d") (:url . "http://github.com/j0ni/phoenix-dark-pink"))]) (phoenix-dark-mono-theme . [(20170729 706) nil "Monochromatic version of the Phoenix theme" single ((:commit . "a54f515d162148bcb38676980bc2316adb3d7b8b") (:url . "http://github.com/j0ni/phoenix-dark-mono"))]) (phi-search-migemo . [(20170618 221) ((phi-search (2 2 0)) (migemo (1 9 1))) "migemo extension for phi-search" single ((:commit . "308909ebfc8003d16673f97ca9eb26a667b72969") (: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 ((:commit . "7aa671910f766437089aec26c3aa7814222d1356") (: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 ((:commit . "162a5e4507c72512affae22744bb606a906d4193") (:url . "http://hins11.yu-yake.com/"))]) (phi-search . [(20170310 237) nil "another incremental search & replace, compatible with \"multiple-cursors\"" tar ((:commit . "a81c4ea203fcb572f6cc37cc658d6b01453bef9d") (:url . "http://hins11.yu-yake.com/"))]) (phi-rectangle . [(20151207 2254) nil "another rectangle-mark command (rewrite of rect-mark)" single ((:commit . "0c12716afc71d803d1f39417469521dc465762d9") (:url . "http://hins11.yu-yake.com/"))]) (phi-grep . [(20170606 107) ((cl-lib (0 1))) "Interactively-editable recursive grep implementation in elisp" single ((:commit . "ab9bd8d25e751a9cbfa108b49839293230b6e8b5") (:url . "http://github.com/zk-phi/phi-grep"))]) (phi-autopair . [(20170216 1953) ((paredit (20))) "another simple-minded autopair implementation" single ((:commit . "3c7556779c3a53b045f5df33ae2a0c67469cbf60") (:url . "http://hins11.yu-yake.com/"))]) (phan . [(20171017 2045) ((emacs (24)) (composer (0 0 8)) (f (0 17))) "Utility functions for Phan (PHP static analizer)" single ((:commit . "17b44a62580272bcf5ee91fb58098292e9de6f83") (:url . "https://github.com/emacs-php/phan.el") (:keywords "tools" "php"))]) (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 ((:commit . "d09d6f059aea92d3b11c68664a5e80c901182ab8") (:url . "https://github.com/ajtulloch/phabricator.el") (:keywords "phabricator" "arcanist" "diffusion"))]) (ph . [(20161029 822) ((emacs (24 3))) "A global minor mode for managing multiple projects." tar ((:commit . "ed80dad9211583ed0db633448b3624c99b7fac23"))]) (pgdevenv . [(20150105 1436) nil "Manage your PostgreSQL development envs" tar ((:commit . "7f1d5bc734750aca98cf67a9491cdbd5615fd132") (:keywords "emacs" "postgresql" "development" "environment" "shell" "debug" "gdb"))]) (pg . [(20130731 1442) nil "Emacs Lisp interface to the PostgreSQL RDBMS" single ((:commit . "4f6516ec3946d95dcef49abb6703cc89ecb5183d") (:keywords "data" "comm" "database" "postgresql"))]) (pfuture . [(20171116 812) ((emacs (24 4))) "a simple wrapper around asynchronous processes" single ((:commit . "d55a764b5beee803e489974be2408dbe236fc482") (:url . "https://github.com/Alexander-Miller/pfuture"))]) (perspeen . [(20171203 221) ((emacs (25 0)) (powerline (2 4))) "An package for multi-workspace" tar ((:commit . "edb70c530bda50ff3d1756e32a703d5fef5e5480") (:url . "https://github.com/seudut/perspeen") (:keywords "lisp"))]) (perspective . [(20160609 1444) ((cl-lib (0 5))) "switch between named \"perspectives\" of the editor" single ((:commit . "89a8ef5e8297b113e4f732bb94336608b76e13fd") (: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 ((:commit . "7686633acf44402fa90429759cca6a155e4df2b9") (:keywords "project" "convenience"))]) (persp-mode-projectile-bridge . [(20170315 420) ((persp-mode (2 9)) (projectile (0 13 0)) (cl-lib (0 5))) "persp-mode + projectile integration." single ((:commit . "f6453cd7b8b4352c06e771706f2c5b7e2cdff1ce") (:url . "https://github.com/Bad-ptr/persp-mode-projectile-bridge.el") (:keywords "persp-mode" "projectile"))]) (persp-mode . [(20180104 843) nil "windows/buffers sets shared among frames + save/load." single ((:commit . "eef754ce06159e220a9f3c99db3809925f41b8f1") (:url . "https://github.com/Bad-ptr/persp-mode.el") (:keywords "perspectives" "session" "workspace" "persistence" "windows" "buffers" "convenience"))]) (persp-fr . [(20180103 642) ((emacs (25 0)) (persp-mode (2 9 6)) (dash (2 13 0))) "In persp-mode, show perspective list in the GUI window title" single ((:commit . "aeb3b5de6135269091bb9aa0396973766c27fc88") (:url . "http://github.com/rocher/persp-fr") (:keywords "perspectives" "workspace" "windows" "convenience"))]) (persistent-soft . [(20150223 1053) ((pcache (0 3 1)) (list-utils (0 4 2))) "Persistent storage, returning nil on failure" single ((:commit . "a1e0ddf2a12a6f18cab565dee250f070384cbe02") (:url . "http://github.com/rolandwalker/persistent-soft") (:keywords "data" "extensions"))]) (persistent-scratch . [(20170110 546) ((emacs (24))) "Preserve the scratch buffer across Emacs sessions" single ((:commit . "551c655fa349e6f48e4e29f427fff7594f76ac1d") (:url . "https://github.com/Fanael/persistent-scratch"))]) (persistent-overlays . [(20161127 2300) nil "Minor mode to store selected overlays to be loaded later" tar ((:commit . "f563c8b966edc78c9d806661c4eb80e4781c4eab") (:url . "https://github.com/mneilly/Emacs-Persistent-Overlays") (:keywords "overlays" "persistent"))]) (perlbrew . [(20161108 2309) nil "A perlbrew wrapper for Emacs" single ((:commit . "3a3406c3307c92aa30f9400d430925c434a3b6f0") (:keywords "emacs" "perl"))]) (perl6-mode . [(20161228 430) ((emacs (24 4)) (pkg-info (0 1))) "Major mode for editing Perl 6 code" tar ((:commit . "4867c6d268545f5356111d72c4ae77917d34cb21") (:url . "https://github.com/hinrik/perl6-mode") (:keywords "languages"))]) (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"))]) (pelican-mode . [(20171001 503) ((emacs (25))) "Minor mode for editing Pelican sites" single ((:commit . "64d41f0ee5970b2d875880994eb287b97cad24a1") (:url . "https://git.korewanetadesu.com/pelican-mode.git") (:keywords "convenience" "editing"))]) (peg . [(20150707 2341) nil "Parsing Expression Grammars in Emacs Lisp" single ((:commit . "081efeca91d790c7fbc90871ac22c40935f4833b"))]) (peep-dired . [(20160321 1537) nil "Peep at files in another window from dired buffers" single ((:commit . "c88a9a3050197840edfe145f11e0bb9488de32f4") (:keywords "files" "convenience"))]) (peek-mode . [(20130620 1246) ((elnode (0 9 8 1))) "Serve buffers live over HTTP with elnode backend" tar ((:commit . "55a7dd011375330c7d57322257a5167516702c71") (:url . "https://github.com/erikriverson/peek-mode"))]) (peacock-theme . [(20170808 620) ((emacs (24 0))) "an Emacs 24 theme based on Peacock (tmTheme)" single ((:commit . "9e46fbfb562b6e26c6e3d6d618b044b3694da4c8") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (pdf-tools . [(20171012 2226) ((emacs (24 3)) (tablist (0 70)) (let-alist (1 0 4))) "Support library for PDF documents." tar ((:commit . "0f99f0c06514acf51445e7e4cb0f638fa0c75ee5") (:keywords "files" "multimedia"))]) (pdb-mode . [(20150128 951) nil "Major mode for editing Protein Data Bank files" single ((:commit . "855fb18ebb73b5df30c8d7677c2bcd0f361b138a") (:url . "http://bondxray.org/software/pdb-mode/") (:keywords "data" "pdb"))]) (pcsv . [(20150220 331) nil "Parser of csv" single ((:commit . "798e0933f8d0818beb17aebf3b1056bbf74e03d0") (:url . "https://github.com/mhayashi1120/Emacs-pcsv/raw/master/pcsv.el") (:keywords "data"))]) (pcre2el . [(20161120 1303) ((emacs (24)) (cl-lib (0 3))) "regexp syntax converter" single ((:commit . "0b5b2a2c173aab3fd14aac6cf5e90ad3bf58fa7d") (:url . "https://github.com/joddie/pcre2el"))]) (pcomplete-extension . [(20140604 947) ((emacs (24)) (cl-lib (0 5))) "additional completion for pcomplete" single ((:commit . "839740c90de857e18db2f578d6660951522faab5") (:url . "https://github.com/thierryvolpiatto/pcomplete-extension"))]) (pcmpl-pip . [(20171201 33) ((s (1 12 0)) (f (0 19 0)) (seq (2 15))) "pcomplete for pip" single ((:commit . "8b001b579fc015f80ee0e4f3211058b830bf7c47") (:keywords "pcomplete" "pip" "python" "tools"))]) (pcmpl-homebrew . [(20170110 1609) nil "pcomplete for homebrew" single ((:commit . "d001520fec4715c9a4c73f02fd948bac371cc50a") (:keywords "pcomplete" "homebrew" "tools" "cask" "services"))]) (pcmpl-git . [(20170120 1659) nil "pcomplete for git" tar ((:commit . "9472ac70baeda025ef7becd1cf141d72aec93f32") (:keywords "tools"))]) (pcmpl-args . [(20120911 2224) nil "Enhanced shell command completion" single ((:commit . "2ba03b3125ada8037585e545b88bd85b79da5c37") (:url . "https://github.com/JonWaltman/pcmpl-args.el") (:keywords "abbrev" "completion" "convenience" "processes" "terminals" "unix"))]) (pcap-mode . [(20161025 748) ((emacs (24 3))) "Major mode for working with PCAP files" single ((:commit . "52780669af0ade136f84d73f21b4dbb7ab655416") (:keywords "pcap" "packets" "tcpdump" "wireshark" "tshark"))]) (pcache . [(20170105 1414) ((eieio (1 3))) "persistent caching for Emacs." single ((:commit . "1f8086077d770e524492e6fa59b07856e85a6fea"))]) (pc-bufsw . [(20180107 1040) nil "PC style quick buffer switcher" single ((:commit . "b99ba484e18ebf2b88654704146746490bb7625f") (:url . "https://github.com/ibukanov/pc-bufsw") (:keywords "buffer"))]) (pbcopy . [(20150224 2059) nil "Emacs Interface to pbcopy" single ((:commit . "338f7245746b5de1bb96c5cc2b32bfd9b5d83272") (: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 ((:commit . "09f3d5aeb108937a801e77ef413e29eaa4ecc4be") (:url . "https://github.com/promethial/paxedit") (:keywords "lisp" "refactoring" "context"))]) (pathify . [(20160423 146) nil "Symlink your scripts into a PATH directory" single ((:commit . "401b184c743694a60b3bc4273fc43de05cd5ac4b") (:url . "https://gitlab.com/alezost-emacs/pathify") (:keywords "convenience"))]) (path-headerline-mode . [(20140423 632) nil "Displaying file path on headerline." single ((:commit . "b5b2725c6a8b1cb592fc242b7dbbd54b4dff2e69") (:url . "https://github.com/7696122/path-headerline-mode") (:keywords "headerline"))]) (pastery . [(20171113 1949) ((emacs (24 4)) (request (0 2 0))) "paste snippets to pastery.net." tar ((:commit . "4493be98b743b4d062cb4e00760125e394a55022") (:url . "https://github.com/diasbruno/pastery.el") (:keywords "tools"))]) (pastelmac-theme . [(20151030 1936) ((emacs (24 1))) "a soothing theme with a pastel color palette" single ((:commit . "bead21741e3f46f6506e8aef4469d4240a819389") (:url . "https://github.com/bmastenbrook/pastelmac-theme-el") (:keywords "themes"))]) (pastehub . [(20140614 2320) nil "A client for the PasteHub cloud service" single ((:commit . "37b045c67659c078f1517d0fbd5282dab58dca23") (:url . "https://github.com/kiyoka/pastehub"))]) (pastebin . [(20101125 1202) nil "A simple interface to the www.pastebin.com webservice" single ((:commit . "8e9a829298ce0f747ab80758aa26caeb2af6cb30"))]) (paste-of-code . [(20170709 1655) ((emacs (24 3)) (request (0 2 0))) "paste code on https://paste.ofcode.org" single ((:commit . "92d258e8ec98598d847ecab82903f9224c7c2050") (:keywords "lisp"))]) (password-vault . [(20160126 1020) ((cl-lib (0 2)) (emacs (24))) "A Password manager for Emacs." single ((:commit . "dc56e6c2f5da66f1ab63736cecf08fb2c6c2b30f") (:url . "http://github.com/PuercoPop/password-vault") (:keywords "password" "productivity"))]) (password-store-otp . [(20170928 18) ((emacs (25)) (s (1 9 0)) (password-store (0 1))) "Password store (pass) OTP extension support" single ((:commit . "a39a64a91de36e87b852339635bd3c5fb0e32441") (:url . "https://github.com/volrath/password-store-otp.el") (:keywords "tools" "pass"))]) (password-store . [(20170829 1633) ((emacs (24)) (f (0 11 0)) (s (1 9 0)) (with-editor (2 5 11))) "Password store (pass) support" single ((:commit . "bd1cadd5620279b5ee781434b4f0731eb9ad730d") (:url . "https://www.passwordstore.org/") (:keywords "tools" "pass" "password" "password-store"))]) (password-mode . [(20170411 2329) nil "Hide password text using overlays" single ((:commit . "ed764a4ec1011526457c71b7c37fa9a659a866ab") (:keywords "docs" "password" "passphrase"))]) (password-generator . [(20150222 1240) nil "Password generator for humans. Good, Bad, Phonetic passwords included." single ((:commit . "c8193d5e963bda0a2f8e51fd4a94dcf37c76f282") (:url . "http://github.com/zargener/emacs-password-genarator"))]) (passthword . [(20141201 123) ((cl-lib (0 5))) "Simple password manager" single ((:commit . "30bace842eaaa6b48cb2251fb84868ebca0467d6"))]) (passmm . [(20170113 837) ((emacs (24 4))) "A minor mode for pass (Password Store)." single ((:commit . "076df7221f9450b96855c36684ae4a7481e0bb71") (:url . "https://github.com/pjones/passmm"))]) (pass . [(20171010 410) ((emacs (24 3)) (password-store (0 1)) (password-store-otp (0 1 5)) (f (0 17))) "Major mode for password-store.el" single ((:commit . "0f4ff034fb31b18f387e67f1de4029826db6cd0b") (:keywords "password-store" "password" "keychain"))]) (pasp-mode . [(20170803 1301) ((emacs (24 3))) "- A major mode for editing Answer Set Programs." single ((:commit . "6511193677d6113fec1171f476c0db3be242ee15") (:url . "https://github.com/santifa/pasp-mode") (:keywords "asp" "pasp" "answer set programs" "potassco answer set programs" "major mode" "languages"))]) (parsec . [(20171202 2031) ((emacs (24)) (cl-lib (0 5))) "Parser combinator library" single ((:commit . "212f848d95c2614a86f135c1bf3de15ef0e09805") (:url . "https://github.com/cute-jumper/parsec.el") (:keywords "extensions"))]) (parsebib . [(20170501 347) ((emacs (24 3))) "A library for parsing bib files" single ((:commit . "bc31b627c666df576aa37e21c27a2223b3cb91a3") (:keywords "text" "bibtex"))]) (parse-csv . [(20160512 1023) nil "Parse strings with CSV fields into s-expressions" single ((:commit . "96bef1ffbc89ea12d13311c9fa239c5c3e864890") (:url . "https://github.com/mrc/el-csv") (:keywords "csv"))]) (parinfer . [(20170710 821) ((dash (2 13 0)) (cl-lib (0 5))) "Simpler Lisp editing" tar ((:commit . "23ac701e2a1a1364ca96d267437c3413986a4497") (:url . "https://github.com/DogLooksGood/parinfer-mode") (:keywords "parinfer"))]) (parent-mode . [(20150824 1600) nil "get major mode's parent modes" single ((:commit . "db692cf08deff2f0e973e6e86e26662b44813d1b") (:url . "https://github.com/Fanael/parent-mode"))]) (paren-face . [(20161028 1127) nil "a face for parentheses in lisp modes" single ((:commit . "0a7cbd65bb578cc52a9dc495a4fcaf23a57507bf") (:url . "https://github.com/tarsius/paren-face"))]) (paren-completer . [(20160501 352) ((emacs (24 3))) "Automatically, language agnostically, fill in delimiters." single ((:commit . "74183a8e13fa1266271bdcbcb4bfb29a4f915f0a") (: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 ((:commit . "cc0ae85bd819f9ebfa4f2a419ab3b2d70e39c9c8") (:keywords "paredit"))]) (paredit-everywhere . [(20150821 2144) ((paredit (22))) "Enable some paredit features in non-lisp buffers" single ((:commit . "94c92095c2096713fb3e2f7662ddd994f4b694c6") (:keywords "languages" "convenience"))]) (paredit . [(20171126 1805) nil "minor mode for editing parentheses" single ((:commit . "acbe10fdd85d2e91831adf70b6a828bc7e900da0") (:keywords "lisp"))]) (paradox . [(20161117 502) ((emacs (24 4)) (seq (1 7)) (let-alist (1 0 3)) (spinner (1 7 3)) (hydra (0 13 2))) "A modern Packages Menu. Colored, with package ratings, and customizable." tar ((:commit . "dfdfbec8b4a3b71966c134f00c3f5edfa87b6245") (:url . "https://github.com/Malabarba/paradox") (:keywords "package" "packages"))]) (paperless . [(20170213 503) ((emacs (24 4)) (f (0 19 0)) (s (1 10 0)) (cl-lib (0 6 1))) "A major mode for sorting and filing PDF documents." single ((:commit . "4e8c5d147db5c8ef0a3914e95b4030b28d29c6bb") (:url . "http://github.com/atgreen/paperless") (:keywords "pdf" "convenience"))]) (paper-theme . [(20180107 1613) ((emacs (24)) (hexrgb (0))) "A minimal Emacs colour theme." single ((:commit . "28d7339f2e70c617f2e8e3979b45d78883a27282") (:url . "http://gkayaalp.com/emacs.html#paper") (:keywords "theme" "paper"))]) (pangu-spacing . [(20170317 157) nil "Minor-mode to add space between Chinese and English characters." single ((:commit . "a4463dbb74abdeddb6c1c132a1f8fcf67ed87498") (:url . "http://github.com/coldnew/pangu-spacing"))]) (pandoc-mode . [(20171216 1545) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:commit . "242bc6fb154ed02d5829644778586234e31c0710") (:keywords "text" "pandoc"))]) (pandoc . [(20161128 357) ((emacs (24 4))) "Pandoc interface" single ((:commit . "198d262d09e30448f1672338b0b5a81cf75e1eaa") (:url . "https://github.com/zonuexe/pandoc.el") (:keywords "hypermedia" "documentation" "markup" "converter"))]) (pamparam . [(20171217 551) ((emacs (24 3)) (lispy (0 26 0)) (worf (0 1 0)) (hydra (0 13 4))) "Simple and fast flashcards." single ((:commit . "eaa53a1f582e0ec244200f4d324edf3aca640de7") (:url . "https://github.com/abo-abo/pamparam") (:keywords "outlines" "hypermedia" "flashcards" "memory"))]) (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 ((:commit . "b8d0df1883224a371ac0a3bc9b9c1c4dc61e6ac0"))]) (palimpsest . [(20170119 1232) nil "Various deletion strategies when editing" single ((:commit . "e6d5944393c260ceb724462c84046cc62c9ae916"))]) (palette . [(20170307 936) ((hexrgb (0))) "Color palette useful with RGB, HSV, and color names" single ((:url . "https://www.emacswiki.org/emacs/download/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 ((:commit . "dbbd49c2ac5906d1dabf9e9c832bfebc1ab405b3") (:url . "http://github.com/nflath/pager-default-keybindings"))]) (pager . [(20151201 1720) nil "windows-scroll commands" single ((:commit . "5c791ed23f1136e04040d6f4bc9b4ca5b6dc919f"))]) (page-break-lines . [(20171210 31) ((emacs (24 4))) "Display ^L page breaks as tidy horizontal lines" single ((:commit . "fd3b7e38ad8747cd009ead7ef1bb150849ccc693") (: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 ((:commit . "44e3ae4c451f3b380956fea8aef8cca75279746b") (: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 ((:commit . "d813e9c62c2540fe619234824fc60e128c786442") (:url . "http://github.com/codingteam/pacmacs.el"))]) (packed . [(20170819 942) ((emacs (24 3))) "package manager agnostic Emacs Lisp package utilities" single ((:commit . "94ea12b9d44bfa42c28d0548199f2fcd19e4aa6a") (:url . "https://github.com/emacscollective/packed") (:keywords "compile" "convenience" "lisp" "package" "library"))]) (package-utils . [(20170222 2352) nil "Extensions for package.el" single ((:commit . "3cbbc2ff50ecb5e6fb20a309cb07d74ca10d4d42") (: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 ((:commit . "138171e4fc03c0ef05a8260cbb5cd2e114c1c194") (:url . "https://github.com/Fanael/package-safe-delete"))]) (package-lint . [(20171201 1903) ((cl-lib (0 5)) (emacs (24))) "A linting library for elisp package authors" single ((:commit . "9abfb14d9ad903ef73895a27b9964b5e6023d752") (:url . "https://github.com/purcell/package-lint") (:keywords "lisp"))]) (package-filter . [(20161121 2319) nil "package archive whitelist and blacklist" single ((:commit . "bc73b41aea1d65ca44ef1593ca13126df9bbb39e") (:url . "https://github.com/milkypostman/package-filter"))]) (package-build . [(20171127 902) ((cl-lib (0 5))) "Tools for assembling a package archive" tar ((:commit . "fc706968dc0bb60e06c5d21025a6ea82d3279e96") (:keywords "tools"))]) (package+ . [(20170815 1956) nil "Extensions for the package library." single ((:commit . "9213f6134eabc2cff5826779ced437714324c066") (:url . "TBA") (:keywords "extensions" "tools"))]) (pabbrev . [(20160320 1401) nil "Predictive abbreviation expansion" single ((:commit . "56400d5d256b42ffe45c229ea9827f026b650cf5"))]) (p4 . [(20150721 1237) nil "Simple Perforce-Emacs Integration" single ((:commit . "eff047caa75dbe4965defca9d1212454cdb755d5") (:url . "https://github.com/gareth-rees/p4.el"))]) (ox-twiki . [(20170803 1339) ((org (8)) (cl-lib (0 5))) "org Twiki and Foswiki export" single ((:commit . "970bb8ed0e4c4426c37a929b1fe08f944c1cf74f") (:url . "https://github.com/dfeich/org8-wikiexporters") (:keywords "org"))]) (ox-twbs . [(20161103 1316) nil "Bootstrap compatible HTML Back-End for Org" single ((:commit . "2414e6b1de7deb6dd2ae79a7be633fdccb9c2f28") (:url . "https://github.com/marsmining/ox-twbs") (:keywords "org" "html" "publish" "twitter" "bootstrap"))]) (ox-tufte . [(20160926 907) ((org (8 2)) (emacs (24))) "Tufte HTML org-mode export backend" single ((:commit . "49d7ea78fde063b407ce6fa57739f90c83500682") (:url . "https://github.com/dakrone/ox-tufte") (:keywords "org" "tufte" "html"))]) (ox-trac . [(20171026 1123) ((org (9 0))) "Org Export Backend to Trac WikiFormat" single ((:commit . "03cc31efb1aa06991918f1071e250a9d58f96cfb") (: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 ((:commit . "970bb8ed0e4c4426c37a929b1fe08f944c1cf74f") (:url . "https://github.com/dfeich/org8-wikiexporters") (:keywords "org"))]) (ox-textile . [(20171120 1758) ((org (8 1))) "Textile Back-End for Org Export Engine" single ((:commit . "e40472b13aee3d7dbf7bd916825431547024303d") (:url . "https://github.com/yashi/org-textile") (:keywords "org" "textile"))]) (ox-rst . [(20171004 1553) ((emacs (24 4)) (org (8 2 4))) "Export reStructuredText using org-mode." single ((:commit . "6d1eab55ff7c8dc4bcf511c9483e69f2a840e928") (:url . "https://github.com/masayuko/ox-rst") (:keywords "org" "rst" "rest" "restructuredtext"))]) (ox-reveal . [(20161027 226) ((org (20150330))) "reveal.js Presentation Back-End for Org Export Engine" single ((:commit . "001567cc12d50ba07612edd1718b86a12e8c2547") (:keywords "outlines" "hypermedia" "slideshow" "presentation"))]) (ox-qmd . [(20170402 957) ((org (8 0))) "Qiita Markdown Back-End for Org Export Engine" single ((:commit . "3a24c7a0b3ec80e494b977e14a3dfb94c9f1d8ec") (: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 ((:commit . "bdbde2c294f5d3de11f08a3fe19f01175d2e011a") (:url . "https://github.com/yashi/org-pukiwiki") (:keywords "org" "pukiwiki"))]) (ox-pandoc . [(20171107 341) ((org (8 2)) (emacs (24)) (dash (2 8)) (ht (2 0)) (cl-lib (0 5))) "org exporter for pandoc." single ((:commit . "cd3c59f6c0ea49e0cac31d8392a5bbac02886d8f") (: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 ((:commit . "5bcbc1a38f6619f62294194f13ca0cd4ca14dd48") (:url . "https://github.com/masayuko/ox-nikola") (:keywords "org" "nikola"))]) (ox-minutes . [(20170323 835) ((emacs (24 4))) "Plain text backend for Org for Meeting Minutes" single ((:commit . "ad9632f35524ac546c6d55dfa827e8597669e1e1") (:url . "https://github.com/kaushalmodi/ox-minutes") (:keywords "org" "exporter" "notes"))]) (ox-mediawiki . [(20180105 1354) ((cl-lib (0 5)) (s (1 9 0))) "Mediawiki Back-End for Org Export Engine" single ((:commit . "a9327150293e370e500ba55bddfe5fc435c6bf9b") (:url . "https://github.com/tomalexander/orgmode-mediawiki") (:keywords "org" "wp" "mediawiki"))]) (ox-jira . [(20171001 216) ((org (8 3))) "JIRA Backend for Org Export Engine" single ((:commit . "db2ec528f46c9e611624ba28611c440a99bff255") (:url . "https://github.com/stig/ox-jira.el") (:keywords "outlines" "hypermedia" "wp"))]) (ox-ioslide . [(20161015 638) ((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 ((:commit . "6555680be5364c8ddd2bf446865cb1a82adb6b9e") (: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 ((:commit . "91c6d2af6af308ade352a03355c4fb551b238c6b") (:url . "https://github.com/kinjo/org-impress-js.el") (:keywords "outlines" "hypermedia" "calendar" "wp"))]) (ox-hugo . [(20180108 1041) ((emacs (24 4)) (org (9 0))) "Hugo Markdown Back-End for Org Export Engine" tar ((:commit . "9d3da7e04d6eb66c34e849fc65daa50084ed4ae6") (:url . "https://ox-hugo.scripter.co") (:keywords "org" "markdown" "docs"))]) (ox-html5slide . [(20131227 2206) ((org (8 0))) "Export org-mode to HTML5 slide." single ((:commit . "4703dfbd9d79161509def673d2c1e118d722a58f") (:url . "http://github.com/coldnew/org-html5slide") (:keywords "html" "presentation"))]) (ox-gfm . [(20170628 1402) nil "Github Flavored Markdown Back-End for Org Export Engine" single ((:commit . "99f93011b069e02b37c9660b8fcb45dab086a07f") (:keywords "org" "wp" "markdown" "github"))]) (ox-epub . [(20171105 0) ((emacs (24 3)) (org (9))) "Export org mode projects to EPUB" single ((:commit . "93bd7b42ad4a70d7008470820266546d261222d6") (:url . "http://github.com/ofosos/org-epub") (:keywords "hypermedia"))]) (ox-clip . [(20170805 505) ((org (8 2)) (htmlize (0))) "Cross-platform formatted copying for org-mode" single ((:commit . "b596760aec2ab4e10b18807c01839047aa209d6e") (:url . "https://github.com/jkitchin/ox-clip/ox-clip.el") (:keywords "org-mode"))]) (ox-bibtex-chinese . [(20170722 2009) ((emacs (24 4))) "Let ox-bibtex work well for Chinese users" tar ((:commit . "2ad2364399229144110db7ef6365ad0461d6a38c"))]) (ox-asciidoc . [(20171111 354) ((org (8 1))) "AsciiDoc Back-End for Org Export Engine" single ((:commit . "e75d9565dd07dc59d11fa92d392ab47cecb3c902") (:url . "https://github.com/yashi/org-asciidoc") (:keywords "org" "asciidoc"))]) (owdriver . [(20170401 612) ((smartrep (0 0 3)) (log4e (0 2 0)) (yaxception (0 2 0))) "Quickly perform various actions on other windows" single ((:commit . "d934f182bafe29aa16c173440eff3fef08b0ec10") (:url . "https://github.com/aki2o/owdriver") (:keywords "convenience"))]) (overseer . [(20170207 2241) ((emacs (24)) (dash (2 10 0)) (pkg-info (0 4)) (f (0 18 1))) "Ert-runner Integration Into Emacs" single ((:commit . "6be1f2a4df1b7a20298865b85502ee89e327898d") (:url . "http://www.github.com/tonini/overseer.el"))]) (ov . [(20150311 2228) ((emacs (24 3))) "Overlay library for Emacs Lisp" single ((:commit . "fae7215b3dedba2a9ced145284332e4609bfdc38") (:url . "https://github.com/ShingoFukuyama/ov.el") (:keywords "overlay"))]) (outshine . [(20171108 441) ((outorg (2 0)) (cl-lib (0 5))) "outline with outshine outshines outline" tar ((:commit . "5f1a6b70231d2811c522e4e5e8c89ff461b311d6") (:url . "http://github.com/alphapapa/outshine"))]) (outrespace . [(20170904 511) ((emacs (24 4))) "c++ namespace utility functions" single ((:commit . "0a3b53d283fe8adb8de45766d284704ed4557e23") (:url . "https://github.com/articuluxe/outrespace.git") (:keywords "tools" "c++" "namespace"))]) (outorg . [(20170414 1215) ((emacs (24 4))) "Org-style comment editing" single ((:commit . "78b0695121fb974bc4e971eb4ef7f8afd6d89d64") (:url . "https://github.com/alphapapa/outorg"))]) (outlined-elisp-mode . [(20131108 327) nil "outline-minor-mode settings for emacs lisp" single ((:commit . "c16cb02b540448919ad148f2be6a41523ee5489c") (:url . "http://hins11.yu-yake.com/"))]) (outline-toc . [(20170730 430) nil "Sidebar showing a \"table of contents\"." single ((:commit . "31f04bea19cfcfb01a94d1fd2b72391cb02b7463") (:url . "https://github.com/abingham/outline-toc.el") (:keywords "convenience" "outlines"))]) (outline-magic . [(20150209 1426) nil "outline mode extensions for Emacs" single ((:commit . "5689436cd67edc86066e51be77fa4e1fe21de507") (:keywords "outlines"))]) (otama . [(20160404 332) nil "Org-table Manipulator" single ((:commit . "c114fd8006762f891bc120a7c0ea213872e7ab31") (:keywords "database" "org-mode"))]) (osx-trash . [(20160520 600) ((emacs (24 1))) "System trash for OS X" tar ((:commit . "0f1dc052d0a750b8c75f14530a4897f5d4324b4e") (:url . "https://github.com/lunaryorn/osx-trash.el") (:keywords "files" "convenience" "tools" "unix"))]) (osx-pseudo-daemon . [(20170722 837) nil "Daemon mode that plays nice with OSX." tar ((:commit . "4d10e327cd8ee5bb7f006d68744be21c7097c1fc") (:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon") (:keywords "convenience" "osx"))]) (osx-plist . [(20101130 448) nil "Apple plist file parser" single ((:commit . "5e6de2622fdfe552d4902904f05ea03bc5a6ebd0") (:keywords "convenience"))]) (osx-org-clock-menubar . [(20150205 1311) nil "simple menubar integration for org-clock" tar ((:commit . "9964d2a97cc2fb6570dc4116da44f73bd8eb7cb3") (: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 ((:commit . "8bb3a94cc9f04b922d2d730fe08596cc6ee12bf2"))]) (osx-lib . [(20160919 1700) ((emacs (24 4))) "Basic function for Apple/OSX." single ((:commit . "fdbbb41e07ba64d6a09b54bd142a7c7b83bfd09f") (:keywords "apple" "applescript" "osx" "finder" "emacs" "elisp" "vpn" "speech"))]) (osx-dictionary . [(20171026 34) ((cl-lib (0 5))) "Interface for OSX Dictionary.app" tar ((:commit . "b16630ecf69f87ac873486d8b9c8c03e6c9ea7fa") (: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 ((:commit . "e46dd31327a3f92f77b013b4c9b1e5fdd0e5c73d") (: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 ((:commit . "44ded7cc3a7ee426c1c3257fae534c121f7e752e") (:url . "http://github.com/rolandwalker/osx-browse") (:keywords "hypermedia" "external"))]) (origami . [(20180101 753) ((s (1 9 0)) (dash (2 5 0)) (emacs (24)) (cl-lib (0 5))) "Flexible text folding" tar ((:commit . "1f38085c8f9af7842765ed63f7d6dfe4dab59366") (: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 ((:commit . "112d54a44682f065318ed0c9c89a8f5b8907342a"))]) (orgtbl-join . [(20150121 1446) ((cl-lib (0 5))) "join columns from another table" tar ((:commit . "ccf5e0d96e053dc289da39a048715fcf36835ff2") (:keywords "org" "table" "join" "filtering"))]) (orgtbl-ascii-plot . [(20151215 1351) nil "ascii-art bar plots in org-mode tables" single ((:commit . "cd91f6ae26a7402e192a1f4fd6248f5797edf19e") (:keywords "org" "table" "ascii" "plot"))]) (orgtbl-aggregate . [(20160421 726) nil "Create an aggregated Org table from another one" tar ((:commit . "a33a02ba70639cadaef5f6ea028c2fe73f76cf14") (:keywords "org" "table" "aggregation" "filtering"))]) (orgnav . [(20170608 1013) ((helm (2 7 0)) (s (1 11 0)) (dash (1 11 0)) (emacs (24))) "Org tree navigation using helm" tar ((:commit . "9e2cac9c1a67af5f0080e60022e821bf7b70312d") (:url . "http://github.com/facetframer/orgnav") (:keywords "convenience" "outlines"))]) (orglue . [(20171220 426) ((org (8 1)) (epic (0 2))) "more functionality to org-mode." tar ((:commit . "ae2a45c19b52e45db7891093a3ff17ba2e51c507") (:keywords "org"))]) (orglink . [(20161104 1800) ((emacs (24 3)) (dash (2 12 1)) (org (8 3))) "use Org Mode links in other modes" single ((:commit . "50debcf3508d2252bdce35c8822af1b3a81fd2dd") (:url . "https://github.com/tarsius/orglink") (:keywords "hypertext"))]) (orgit . [(20170731 1003) ((emacs (24 4)) (dash (2 13 0)) (magit (2 10 0)) (org (8 3 3))) "support for Org links to Magit buffers" single ((:commit . "022687eb02f0bf0d0151d0ad917b165bfef2d663") (:url . "https://github.com/magit/orgit"))]) (orgbox . [(20140528 1826) ((org (8 0)) (cl-lib (0 5))) "Mailbox-like task scheduling Org." single ((:commit . "72373b09768cc2200d143af38e25a0c082e8375d") (:url . "https://github.com/yasuhito/orgbox") (:keywords "org"))]) (organic-green-theme . [(20170720 1111) nil "Low-contrast green color theme." single ((:commit . "eea6b77b7ee26310fd6741b9affc3f2c43be2820"))]) (org2web . [(20171005 1617) ((cl-lib (1 0)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (el2org (0 10)) (simple-httpd (0 1))) "A static site generator based on org mode." tar ((:commit . "5243b399927a4c474bb3b8d1c8a00799df1f27d7"))]) (org2jekyll . [(20170225 115) ((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 ((:commit . "52a19a5d372116262b9d613f4ec8490a3b49e329") (: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 ((:commit . "0f7f13463e389f2d8d7d830a928042d0cf1c71eb") (:url . "https://github.com/lujun9972/org2issue") (:keywords "convenience" "github" "org"))]) (org2elcomment . [(20170324 245) ((org (8 3 4))) "Convert Org file to Elisp comments" single ((:commit . "c88a75d9587c484ead18f7adf08592b09c1cceb0") (:keywords "extensions"))]) (org2ctex . [(20171016 2343) ((emacs (24 4))) "Export org to ctex (a latex macro for Chinese)" single ((:commit . "1b74aa9cf45de224ffd6aa9b93f0debddc2b48bc") (:url . "https://github.com/tumashu/org2ctex"))]) (org2blog . [(20171218 1911) ((org (8 3)) (xml-rpc (1 6 12)) (metaweblog (1 0 1)) (htmlize (1 51))) "Blog from Org mode to wordpress" tar ((:commit . "aa7a5730f4a58a53c41370dcde7bec43d5c1a2cd"))]) (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 ((:commit . "f7f1ca73661356b9fa072efd73431592ff1182e1") (:url . "https://github.com/myuhe/org-wunderlist.el") (:keywords "convenience"))]) (org-web-tools . [(20171014 804) ((emacs (25 1)) (org (9 0)) (dash (2 12)) (s (1 10 0))) "Display and capture web content with Org-mode" single ((:commit . "e9583248e838806271643770102e786671fabaf5") (:url . "http://github.com/alphapapa/org-web-tools") (:keywords "hypermedia" "outlines" "org" "web"))]) (org-wc . [(20170727 1911) nil "Count words in org mode trees." single ((:commit . "d294ad7117c150445e6166fc0d88c14a8386f34e"))]) (org-vcard . [(20170929 410) nil "org-mode support for vCard export and import." tar ((:commit . "dbe266b79df4fb31f1766010322bf4e383ce1c03") (:url . "https://github.com/flexibeast/org-vcard") (:keywords "outlines" "org" "vcard"))]) (org-trello . [(20170225 1247) ((request-deferred (0 2 0)) (deferred (0 4 0)) (s (1 11 0)) (dash-functional (2 12 1)) (dash (2 12 1))) "Minor mode to synchronize org-mode buffer and trello board" tar ((:commit . "d7885038d7e160a64f561f8abc942206d582faa6"))]) (org-tree-slide . [(20171129 2238) nil "A presentation tool for org-mode" single ((:commit . "dff8f1a4a64c8dd0a1fde0b0131e2fe186747134") (: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 ((:commit . "0a9bf07f01bc5fc3b349aff64e83999a8de83b52") (:url . "https://github.com/jplindstrom/emacs-org-transform-tree-table") (:keywords "org-mode" "table" "org-table" "tree" "csv" "convert"))]) (org-tracktable . [(20161118 529) ((emacs (24)) (cl-lib (0 5))) "Track your writing progress in an org-table" single ((:commit . "8e0e60a582a034bd66d5efb72d513140b7d4d90a") (: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 ((:commit . "2c91a92bd07ae4a546771b018a6faa0e06399968") (:keywords "outlines" "data"))]) (org-time-budgets . [(20151111 2) ((alert (0 5 10)) (cl-lib (0 5))) "Define time budgets and display clocked time." single ((:commit . "f2a8fe3d9d6104f3dd61fabbb385a596363b360b"))]) (org-themis . [(20160121 2004) ((cl-lib (0 4))) "Experimental project management mode for org-mode" single ((:commit . "78aadbbe22b1993be5c4accd0d3f91a4e85c9a3c") (:url . "http://github.com/zellio/org-themis") (:keywords "org-mode" "elisp" "project"))]) (org-tfl . [(20170923 518) ((org (0 16 2)) (cl-lib (0 5)) (emacs (24 1))) "Transport for London meets Orgmode" tar ((:commit . "f0d7d39106a1de5457f5160cddd98ab892b61066") (:url . "https://github.com/storax/org-tfl") (:keywords "org" "tfl"))]) (org-table-sticky-header . [(20170408 1814) ((org (8 2 10)) (emacs (24 4))) "Sticky header for org-mode tables" single ((:commit . "93dc69efc00ac9fd3cc2ece5100f51df33ec7d8b") (:keywords "extensions"))]) (org-table-comment . [(20120209 1051) nil "Org table comment modes." single ((:commit . "33b9966c33ecbc3e27cca67c2f2cdea04364d74e") (:url . "http://github.com/mlf176f2/org-table-comment.el") (:keywords "org-mode" "orgtbl"))]) (org-sync-snippets . [(20170824 1128) ((org (8 3 5)) (emacs (24 3)) (f (0 17 3))) "Export snippets to org-mode and vice versa" single ((:commit . "0f264a032d371d7dbb4a7cbaf0ea2f91b5a629ca") (:url . "https://github.com/abrochard/org-sync-snippets") (:keywords "snippet" "org-mode" "yasnippet" "tools"))]) (org-sync . [(20150817 754) ((cl-lib (0 5)) (org (8 2)) (emacs (24))) "Synchronize Org documents with External Issue Trackers" tar ((:commit . "7f02167ef805cd76def274be4d3bd0c6e41d9af8") (:url . "https://github.com/arbox/org-sync") (:keywords "org" "synchronization" "issue tracking" "github" "redmine"))]) (org-super-agenda . [(20170904 1516) ((emacs (25 1)) (s (1 10 0)) (dash (2 13)) (org (9 0)) (ht (2 2))) "Supercharge your agenda" single ((:commit . "d06bfb021bee575ce750b36ee9bfc2d8fc8fd635") (:url . "http://github.com/alphapapa/org-super-agenda") (:keywords "hypermedia" "outlines" "org" "agenda"))]) (org-sticky-header . [(20170422 2135) ((emacs (24 4)) (org (8 3 5))) "Show off-screen Org heading at top of window" single ((:commit . "aae8dbc7f3b33c4dd35dc38d83791d7c23757060") (:url . "http://github.com/alphapapa/org-sticky-header") (:keywords "hypermedia" "outlines" "org"))]) (org-static-blog . [(20170706 646) ((emacs (24 3))) "a simple org-mode based static blog generator" single ((:commit . "9dea733006ae53902e6ec91fb11ff058229afe84") (:url . "https://github.com/bastibe/org-static-blog"))]) (org-send-ebook . [(20171231 2313) ((emacs (24 4)) (cl-lib (0 5)) (seq (2 20))) "Send org link file to ebook reader." single ((:commit . "a22d565413b82c415c4f12daab5bfcc489053ec5") (:url . "https://github.com/stardiviner/org-send-ebook") (:keywords "org" "link" "ebook" "kindle" "epub" "mobi"))]) (org-seek . [(20161216 2102) ((emacs (24 3)) (ag (0 48))) "Searching Org-mode files with search tools." single ((:commit . "1f51e6634e3b9a6a29d335d0d14370a6ffef2265") (:url . "https://github.com/stardiviner/org-seek.el") (:keywords "org" "search" "ag" "pt"))]) (org-rtm . [(20160214 436) ((rtm (0 1))) "Simple import/export from rememberthemilk to org-mode" single ((:commit . "adc42ad1fbe92ab447ccc9553780f4456f2508d2") (:url . "https://github.com/pmiddend/org-rtm") (:keywords "outlines" "data"))]) (org-review . [(20160906 2237) nil "schedule reviews for Org entries" single ((:commit . "058e75b7f28d2ad2390290fe17a63d98ef5ab763") (:url . "https://github.com/brabalan/org-review") (:keywords "org" "review"))]) (org-repo-todo . [(20171227 1719) nil "Simple repository todo management with org-mode" single ((:commit . "f73ebd91399c5760ad52c6ad9033de1066042003") (:url . "https://github.com/waymondo/org-repo-todo") (:keywords "convenience"))]) (org-ref . [(20171222 818) ((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)) (pdf-tools (0 7))) "citations, cross-references and bibliographies in org-mode" tar ((:commit . "66e23994c0964762b7a4bfe8662e81aa609e7a22") (:url . "https://github.com/jkitchin/org-ref") (:keywords "org-mode" "cite" "ref" "label"))]) (org-redmine . [(20160711 414) nil "Redmine tools using Emacs OrgMode" single ((:commit . "e77d013bc3784947c46a5c53f03cd7d3c68552fc") (:url . "https://github.com/gongo/org-redmine") (:keywords "redmine" "org"))]) (org-recent-headings . [(20170907 2129) ((emacs (25 1)) (org (9 0 5)) (dash (2 13 0)) (frecency (0 1))) "Jump to recently used Org headings" single ((:commit . "a09c2670c400c7a4fbbf0ac05d2d9226aa10e8f4") (:url . "http://github.com/alphapapa/org-recent-headings") (:keywords "hypermedia" "outlines" "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 ((:commit . "4cb9f768d282a2835b4510b6504ff9ede487007d") (:url . "https://github.com/mlf176f2/org-readme") (:keywords "header2" "readme.org" "emacswiki" "git"))]) (org-randomnote . [(20171210 557) ((f (0 19 0)) (dash (2 12 0))) "Find a random note in your Org-Mode files" single ((:commit . "c544202d6cba1c1618ed39b2a45fa0ffc5f83e60") (:url . "http://github.com/mwfogleman/org-randomnote"))]) (org-random-todo . [(20171219 58) ((emacs (24 3)) (alert (1 2))) "show a random TODO (with alert) every so often" single ((:commit . "24500edf303a854f09a88b07e1a16a21e164eb87") (:keywords "org" "todo" "notification" "calendar"))]) (org-protocol-jekyll . [(20170328 939) ((cl-lib (0 5))) "Jekyll's handler for org-protocol" single ((:commit . "dec064a42d6dfe81dfde7ba59ece5ca103ac6334"))]) (org-projectile-helm . [(20170819 826) ((org-projectile (1 0 0)) (helm (2 3 1)) (emacs (25))) "helm functions for org-projectile" single ((:commit . "8cec702f602b18da90b3d6207888a887b8e07750") (:url . "https://github.com/IvanMalison/org-projectile") (:keywords "org" "projectile" "todo" "helm" "outlines"))]) (org-projectile . [(20171022 950) ((projectile (0 11 0)) (dash (2 10 0)) (emacs (24)) (s (1 9 0)) (org-category-capture (0 0 0))) "Repository todo management for org-mode" single ((:commit . "8cec702f602b18da90b3d6207888a887b8e07750") (:url . "https://github.com/IvanMalison/org-projectile") (:keywords "org-mode" "projectile" "todo" "tools" "outlines"))]) (org-preview-html . [(20160913 526) ((org (8 0)) (emacs (24 4))) "automatically use eww to preview the current org file on save" single ((:commit . "2b6afbaf1fcf781bcd53074ee62895f15f5282e5") (: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 ((:commit . "1b519cfd5abf44bed307cac576dc9fd61eb2c35f") (:url . "https://github.com/rlister/org-present"))]) (org-pomodoro . [(20171108 1314) ((alert (0 5 10)) (cl-lib (0 5))) "Pomodoro implementation for org-mode." tar ((:commit . "3deed1c26dcbda4d5231b9085ddf68e302b0f9dc") (:url . "https://github.com/lolownia/org-pomodoro"))]) (org-pdfview . [(20180102 2349) ((org (6 1)) (pdf-tools (0 80))) "Support for links to documents in pdfview mode" single ((:commit . "645f451df82fb5ebdf42b2c208711d307781062d") (:keywords "org" "pdf-view" "pdf-tools"))]) (org-password-manager . [(20170701 919) ((org (8 2 10)) (s (1 9 0)) (dash (2 13 0))) "Password manager for Org Mode." single ((:commit . "3e7058586b2ab96b12e9b1195b1db1e66e704f20") (:url . "https://git.leafac.com/org-password-manager") (:keywords "password"))]) (org-parser . [(20171002 2136) ((emacs (25 1)) (dash (2 12 0)) (ht (2 1))) "parse org files into structured datatypes." single ((:url . "https://bitbucket.org/zck/org-parser.el") (:keywords "files" "outlines" "tools"))]) (org-page . [(20170806 1924) ((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 ((:commit . "50430ababf73a2d090881a952e9770badaf7478b"))]) (org-outlook . [(20160705 638) nil "Outlook org" tar ((:commit . "ec32d8d9d8ffd17e6de4de0b52fc3f5ad9b4cc0d") (:url . "https://github.com/mlf176f2/org-outlook.el") (:keywords "org-outlook"))]) (org-onenote . [(20171007 2200) ((oauth2 (0 11)) (request (0 2 0)) (org (8 2 10))) "export org-mode document to onenote." single ((:commit . "5ce5cf4edb143180e0b185ac26826d39ae5bc929") (:url . "https://github.com/ifree/org-onenote") (:keywords "tools" "docs" "org-mode" "onenote"))]) (org-octopress . [(20170820 2115) ((org (9 0)) (orglue (0 1)) (ctable (0 1 1))) "Compose octopress articles using org-mode." tar ((:commit . "38598ef98d04076a8eb78d549907ddfde8d3a652") (:keywords "org" "jekyll" "octopress" "blog"))]) (org-noter . [(20171229 1823) ((emacs (24 4)) (cl-lib (0 6)) (org (9 0))) "A synchronized, Org-mode, document annotator" single ((:commit . "cbb7f65dcada62b44e4235a9431641eb9db9fd04") (:url . "https://github.com/weirdNox/org-noter") (:keywords "lisp" "pdf" "interleave" "annotate" "external" "sync" "notes" "documents" "org-mode"))]) (org-notebook . [(20170321 2152) ((emacs (24)) (org (8)) (cl-lib (0 5))) "Ease the use of org-mode as a notebook" single ((:commit . "86042d866bf441e2c9bb51f995e5994141b78517") (:keywords "convenience" "tools"))]) (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 ((:commit . "8ebc532df7f0dd6e6c3aa7c380a51d4166c668e8") (:url . "https://github.com/myuhe/org-multiple-keymap.el") (:keywords "convenience" "org-mode"))]) (org-mru-clock . [(20171219 314) ((emacs (24 3))) "load most recently used clocks into history" single ((:commit . "ccf477735d76c078b44bba7bff12e7e30e66bdb3") (:keywords "convenience" "calendar"))]) (org-mobile-sync . [(20160629 1307) ((emacs (24 3 50)) (org (8 0))) "automatically sync org-mobile on changes" single ((:commit . "442bcfe93f4f2cab02e2dd2c3634fbffcda9a17d") (:url . "https://github.com/steckerhalter/org-mobile-sync") (:keywords "org-mode" "org" "mobile" "sync" "todo"))]) (org-mind-map . [(20171206 645) ((emacs (24)) (dash (1 8 0)) (org (8 2 10))) "Creates a directed graph from org-mode files" single ((:commit . "d7854dbd30d565d3087d2810d6a77cc882988eae") (:url . "https://github.com/theodorewiles/org-mind-map/org-mind-map.el") (:keywords "orgmode" "extensions" "graphviz" "dot"))]) (org-mime . [(20171105 1440) ((emacs (24 3)) (cl-lib (0 5))) "org html export for text/html MIME emails" single ((:commit . "64a3f56651369b2a8b0a601abea1cf1216db2ded") (:url . "http://github.com/org-mime/org-mime") (:keywords "mime" "mail" "email" "html"))]) (org-linkany . [(20160206 2011) ((log4e (0 2 0)) (yaxception (0 1))) "Insert link using anything.el/helm.el on org-mode" single ((:commit . "8cfe2f1a46e6654a79f56505349d1396263cecb3") (: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 ((:commit . "596615ad8373d9090bd4138da683524f0ad0bda5") (:url . "https://github.com/aki2o/org-link-travis") (:keywords "org"))]) (org-link-minor-mode . [(20170805 1152) ((org (8))) "Enable org-mode links in non-org modes" single ((:commit . "7b92df60f3fee7f609d649d80ef243b45771ebea") (:url . "https://github.com/seanohalpin/org-link-minor-mode"))]) (org-journal . [(20171113 53) nil "a simple org-mode based journaling mode" single ((:commit . "44a52a20a154d5c1a78684ef720972c4fe36b64a") (:url . "http://github.com/bastibe/org-journal"))]) (org-jira . [(20180103 1813) ((emacs (24 5)) (cl-lib (0 5)) (request (0 2 0)) (s (0 0 0))) "Syncing between Jira and Org-mode." tar ((:commit . "51a1b2248ec421aecdd38aaf5c2876a036b08bb7") (:url . "https://github.com/ahungry/org-jira") (:keywords "ahungry" "jira" "org" "bug" "tracker"))]) (org-iv . [(20171001 322) ((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 ((:commit . "7f2bb1b32647655fd9d6684f6f09dcc66b61b0cd"))]) (org-if . [(20150920 813) nil "Interactive Fiction Authoring System for Org-Mode." tar ((:commit . "fab602cc1bbee7a4e99c0083e129219d3f9ed2e8"))]) (org-grep . [(20151202 429) ((cl-lib (0 5))) "Kind of M-x rgrep adapted for Org mode." single ((:commit . "5bdd04c0f53b8a3d656f36ea17bba3df7f0cb684") (: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 ((:commit . "122e14cf6f8104150a65246a9a7c10e1d7939862") (:keywords "org" "gnome"))]) (org-gcal . [(20170420 1401) ((request-deferred (0 2 0)) (alert (1 1)) (emacs (24)) (cl-lib (0 5)) (org (8 2 4))) "Org sync with Google Calendar" single ((:commit . "bdc704842da000a1cffb8f155ef3887c5e1d0446") (:url . "https://github.com/myuhe/org-gcal.el") (:keywords "convenience"))]) (org-fstree . [(20090723 819) nil "include a filesystem subtree into an org file" single ((:commit . "24e305c6443be9f45198185772eecfddc390a9ce") (:url . "http://www.burtzlaff.de/org-fstree/org-fstree.el") (:keywords "org-mode" "filesystem" "tree"))]) (org-evil . [(20171102 556) ((dash (2 13 0)) (evil (0)) (monitor (0)) (org (0))) "Evil extensions for Org." tar ((:commit . "90a82ec72fb688ef98d1343c02dc3c6da9e4bbee") (:url . "https://github.com/guiltydolphin/org-evil") (:keywords "convenience" "evil" "org"))]) (org-elisp-help . [(20161121 1655) ((cl-lib (0 5)) (org (9 0))) "org links to emacs-lisp documentation" single ((:commit . "3e33ab1a2933dd7f2782ef91d667a37f12d633ab") (: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 ((:commit . "9df85de1a0fe1e7b2d6c000777c1a0c0217f92d0"))]) (org-edit-latex . [(20170908 822) ((emacs (24 4)) (auctex (11 90))) "Edit embedded LaTeX in a dedicated buffer" single ((:commit . "1f228310ef2f3f2959a527f6d99e42ce977384c8") (:url . "https://github.com/et2010/org-edit-latex") (:keywords "org" "latex"))]) (org-easy-img-insert . [(20160915 1308) ((emacs (24 4))) "An easier way to add images from the web in org mode" single ((:commit . "9f8aaa7f68ff1f0d8d7b1e9b618abb15002f971e") (:url . "https://github.com/tashrifsanil/org-easy-img-insert") (:keywords "convenience" "hypermedia" "files"))]) (org-dropbox . [(20150113 2109) ((dash (2 2)) (names (20150000)) (emacs (24))) "move Dropbox notes from phone into org-mode datetree" single ((:commit . "75dab6d6f0438a7a8a18ccf3a5d55f50bf531f6e") (:url . "https://github.com/heikkil/org-dropbox") (:keywords "dropbox" "android" "notes" "org-mode"))]) (org-drill-table . [(20170408 1205) ((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 ((:commit . "5662511e98697e086149a223a64f9f01fabf7330"))]) (org-dp . [(20160326 603) ((cl-lib (0 5))) "Declarative Local Programming with Org Elements" tar ((:commit . "d9a18e8fb04c94d5d35236b37ee7db0afcb7d580") (:url . "https://github.com/tj64/org-dp"))]) (org-download . [(20171116 1045) ((async (1 2))) "Image drag-and-drop for Emacs org-mode" single ((:commit . "d0e6793497d57a90543d711310ad26fae7c9bcba") (: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 ((:commit . "99a066508fedf8c80a3bfef08e015e612499d417") (:url . "https://github.com/vapniks/org-dotemacs") (:keywords "local"))]) (org-doing . [(20161017 920) nil "Keep track of what you're doing" tar ((:commit . "07ddbfc238cba31e4990c9b52e9a2757b39111da") (:url . "https://github.com/omouse/org-doing") (:keywords "tools" "org"))]) (org-dashboard . [(20171223 1124) ((cl-lib (0 5))) "Visually summarize progress in org files" single ((:commit . "02c0699771d199075a286e4502340ca6e7c9e831") (:url . "http://github.com/bard/org-dashboard") (:keywords "outlines" "calendar"))]) (org-cua-dwim . [(20120202 2134) nil "Org-mode and Cua mode compatibility layer" single ((:commit . "a55d6c7009fc0b22f1110c07de629acc955c85e4") (:keywords "org-mode" "cua-mode"))]) (org-context . [(20170107 537) nil "Contextual capture and agenda commands for Org-mode" single ((:commit . "a3b4a4ce6d15e3c2d45eb5dcb78bea81913f3e21") (: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 ((:commit . "821ccb994811359c42f4e3d459e0e88849d42b75") (:url . "https://github.com/smaximov/org-commentary") (:keywords "convenience" "docs" "tools"))]) (org-clock-today . [(20161014 220) ((emacs (25))) "Show the total clocked time of the current day in the mode line" single ((:commit . "02b8fd541a01040405a9a1400c46dcb68b7c2a3a"))]) (org-clock-csv . [(20170904 1745) ((org (8 3)) (s (1 0))) "Export `org-mode' clock entries to CSV format." single ((:commit . "20ab6ee4395bedc0a7b8dfaf7b51f2c63dc8d2c6") (:url . "https://github.com/atheriel/org-clock-csv") (:keywords "calendar" "data" "org"))]) (org-clock-convenience . [(20160830 1156) ((cl-lib (0 5)) (org (8)) (emacs (24 3))) "convenience functions for org time tracking" single ((:commit . "2d3fab0991ef7fa8d94c46a63a66abd289c79d9e") (:url . "https://github.com/dfeich/org-clock-convenience") (:keywords "org"))]) (org-cliplink . [(20170724 413) ((emacs (24 4))) "insert org-mode links from the clipboard" tar ((:commit . "16c2cad9c3bafb71fea70f70c1e584307a6dee01") (:url . "http://github.com/rexim/org-cliplink"))]) (org-category-capture . [(20170819 1047) ((org (9 0 0)) (emacs (24))) "Contextualy capture of org-mode TODOs." single ((:commit . "8cec702f602b18da90b3d6207888a887b8e07750") (:url . "https://github.com/IvanMalison/org-projectile") (:keywords "org-mode" "todo" "tools" "outlines"))]) (org-capture-pop-frame . [(20160518 308) ((emacs (24 4))) "Run org-capture in a new pop frame" single ((:commit . "b16fd712de62cf0d1f9befd03be6ab5983cb3301") (:url . "https://github.com/tumashu/org-capture-pop-frame.git"))]) (org-caldav . [(20170615 724) ((org (7))) "Sync org files with external calendar through CalDAV" single ((:commit . "07e6ccda6756754a115d567f2ad3a760514b731d") (:keywords "calendar" "caldav"))]) (org-bullets . [(20171127 526) nil "Show bullets in org-mode as UTF-8 characters" single ((:commit . "5b096148bc37306f73b27da838dca751d5b1936f") (:url . "https://github.com/emacsorphanage/org-bullets"))]) (org-brain . [(20180107 1655) ((emacs (25)) (org (9))) "Org-mode concept mapping" single ((:commit . "42596a3c29e9b6b64c05b04db04d23ea282560e4") (:url . "http://github.com/Kungsgeten/org-brain") (:keywords "outlines" "hypermedia"))]) (org-bookmark-heading . [(20170510 1008) ((emacs (24 4))) "Emacs bookmark support for org-mode" single ((:commit . "c535fd9b430d2cc50b54a1ab550d64e20ebd5bd6") (:url . "http://github.com/alphapapa/org-bookmark-heading") (:keywords "hypermedia" "outlines"))]) (org-board . [(20170507 858) nil "bookmarking and web archival system for Org mode." single ((:commit . "2978aee8981a2ff5c09104b2d8b055957b277078") (:url . "https://github.com/scallywag/org-board") (:keywords "org" "bookmarks" "archives"))]) (org-beautify-theme . [(20170908 1518) nil "A sub-theme to make org-mode more beautiful." single ((:commit . "df6a1114fda313e1689363e196c8284fbe2a2738") (:keywords "org" "theme"))]) (org-babel-eval-in-repl . [(20170511 514) ((eval-in-repl (0 9 2)) (matlab-mode (3 3 6)) (ess (16 10)) (emacs (24))) "Eval org-mode babel code blocks in various REPLs." tar ((:commit . "bfa72c582ac1531ad42aba23e2b1267ab68e31f6") (:url . "https://github.com/diadochos/org-babel-eval-in-repl") (:keywords "literate programming" "reproducible research" "async execution"))]) (org-autolist . [(20170924 1201) nil "Improved list management in org-mode" single ((:commit . "c82d1e83e982b5f0c106b8800e5b0cfd5f73fdc1") (:url . "https://github.com/calvinwyoung/org-autolist") (:keywords "lists" "checklists" "org-mode"))]) (org-attach-screenshot . [(20160928 258) nil "screenshots integrated with org attachment dirs" single ((:commit . "1aabac1a2885d31a3d862cbeb31a635c3d68b9ab") (:url . "https://github.com/dfeich/org-screenshot") (:keywords "org"))]) (org-alert . [(20170724 2116) ((s (1 10 0)) (dash (2 12 0)) (alert (1 2))) "Notify org deadlines via notify-send" single ((:commit . "3b7417ac12f2710e88f8dff538670621064ef8bc") (: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 ((:commit . "3b469f3e93de0036547f3631cd0366d53f7584c8") (:url . "http://github.com/Bruce-Connor/org-agenda-property") (:keywords "calendar"))]) (org-ac . [(20170401 607) ((auto-complete-pcmp (0 0 1)) (log4e (0 2 0)) (yaxception (0 1))) "Some auto-complete sources for org-mode" single ((:commit . "41e3ef8e4039619d0370c23c66730b3b2e9e32ed") (:url . "https://github.com/aki2o/org-ac") (:keywords "org" "completion"))]) (orca . [(20171030 1216) ((emacs (24 3))) "Org Capture" single ((:commit . "5e1744afb793dda744ddc6fe342144b5e90bea08") (:url . "https://github.com/abo-abo/orca") (:keywords "org" "convenience"))]) (operate-on-number . [(20150706 2323) nil "Operate on number at point with arithmetic functions" single ((:commit . "ceb3be565a29326c1098244fac0c50606723a56e") (: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 ((:commit . "244219288b9aef41155044697bb114b7af83ab8f") (:url . "https://github.com/chmouel/openstack-cgit-browse-file") (:keywords "convenience" "vc" "git" "cgit" "gerrit" "openstack"))]) (opensource . [(20160926 916) ((s (1 11 0)) (dash (2 12 1)) (pkg-info (0 6 0)) (request (0 2 0))) "Client for Opensource API" tar ((:commit . "13499b7ae602c735e40c1c494bda6252a2f1c98f") (:url . "https://github.com/OpenSourceOrg/el-opensourceorg") (:keywords "opensource"))]) (opener . [(20161207 1010) ((request (0 2 0)) (emacs (24)) (cl-lib (0 5))) "opening urls as buffers" tar ((:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:url . "https://github.com/0robustus1/opener.el") (:keywords "url" "http" "files"))]) (opencl-mode . [(20170816 549) nil "Syntax coloring for opencl kernels" single ((:commit . "6e69434d0fa6e11a542acad370611bba18d3bc5c") (:url . "https://github.com/salmanebah/opencl-mode") (:keywords "c" "opencl"))]) (opencc . [(20170722 116) ((emacs (24 4))) "中文简繁转换 <-> 中文簡繁轉換 (Convert Chinese with OpenCC)" single ((:commit . "8c539f72669ba9a99d8b5198db5ea930897ad1b9") (:url . "https://github.com/xuchunyang/emacs-opencc") (:keywords "chinese"))]) (open-junk-file . [(20161210 314) nil "Open a junk (memo) file to try-and-error" single ((:commit . "558bec7372b0fed4c4cb6074ab906535fae615bd") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/open-junk-file.el") (:keywords "convenience" "tools"))]) (open-in-msvs . [(20170123 1428) nil "Open current file:line:column in Microsoft Visual Studio" tar ((:commit . "e0d071c83188ad5db8f3297d6ce784b4ed554a04") (:url . "https://github.com/evgeny-panasyuk/open-in-msvs") (:keywords "convenience" "usability" "integration" "visual studio" "msvs" "ide"))]) (opam . [(20150719 520) ((emacs (24 1))) "OPAM tools" single ((:commit . "4d589de5765728f56af7078fae328b6792de8600") (:url . "https://github.com/lunaryorn/opam.el") (:keywords "convenience"))]) (oneonone . [(20170416 858) ((hexrgb (0))) "Frame configuration that uses one frame per window." single ((:url . "https://www.emacswiki.org/emacs/download/oneonone.el") (:keywords "local" "frames"))]) (one-time-pad-encrypt . [(20160329 813) nil "One time pad encryption within file" single ((:commit . "87cc1f124024ce3d277299ca0ac703f182937d9f") (:url . "https://github.com/garvinguan/emacs-one-time-pad/") (:keywords "convenience"))]) (on-screen . [(20160302 150) ((cl-lib (0))) "guide your eyes while scrolling" single ((:commit . "206468aa4de299ad26c2db12b757f5ad7290912f") (: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 ((:commit . "16a145bf73550d5000ffbc2725c541a8458d0d3c") (:keywords "evil" "smartparens"))]) (omtose-phellack-theme . [(20161111 1320) nil "A dark theme, with cold bluish touch." tar ((:commit . "66f99633e199e65bd28641626435e8e59246529a"))]) (omnisharp . [(20171226 1147) ((emacs (24 4)) (flycheck (30)) (dash (2 12 0)) (auto-complete (1 4)) (popup (0 5 1)) (csharp-mode (0 8 7)) (cl-lib (0 5)) (s (1 10 0)) (shut-up (0 3 2)) (f (0 19 0))) "Omnicompletion (intellisense) and more for C#" tar ((:commit . "95f56022edf9fcaba8402db05a6927af050b12a8") (:url . "https://github.com/Omnisharp/omnisharp-emacs") (:keywords "languages" "csharp" "c#" "ide" "auto-complete" "intellisense"))]) (omni-tags . [(20170426 1409) ((pcre2el (1 7)) (cl-lib (0 5))) "Highlight and Actions for 'Tags'" tar ((:commit . "8f0f6c302fab900b7681e5c039f90850cbbabd33") (:url . "http://github.com/AdrieanKhisbe/omni-tags.el") (:keywords "convenience"))]) (omni-scratch . [(20171009 1451) nil "Easy and mode-specific draft buffers" single ((:commit . "9eee3161e5cb6df58618548a2173f4da7d194814") (:url . "https://github.com/AdrieanKhisbe/omni-scratch.el") (:keywords "convenience" "languages" "tools"))]) (omni-quotes . [(20170425 1132) ((dash (2 8)) (omni-log (0 3 3)) (f (0 19 0)) (s (1 11 0)) (ht (2 1))) "Random quotes displayer" tar ((:commit . "454116c1dd6581baaeefd6b9310b1b6b7a5c36d0") (:url . "https://github.com/AdrieanKhisbe/omni-quotes.el") (:keywords "convenience"))]) (omni-log . [(20170930 535) ((emacs (24)) (ht (2 0)) (s (1 6 1)) (dash (2 13 0))) "Logging utilities" tar ((:commit . "11e959473c1bd9415d0cda785940c36ba6ad44ab") (:url . "https://github.com/AdrieanKhisbe/omni-log.el") (:keywords "convenience" "languages" "tools"))]) (omni-kill . [(20171016 1440) nil "Kill all the things" single ((:commit . "904549c8fd6ac3cf22b5d7111ca8944e179cffea") (:keywords "convenience" "editing" "tools"))]) (om-mode . [(20140915 1410) nil "Insert Om component template with life cycle." single ((:commit . "cdc0c2912321f8438b0f3449ba8aca50ec150bba") (:keywords "clojurescript"))]) (olivetti . [(20171209 644) ((emacs (24 4))) "Minor mode for a nice writing environment" single ((:commit . "e824a21f5e284bc7e111b6f325258bba8396d9ec") (:url . "https://github.com/rnkn/olivetti") (:keywords "wp"))]) (oldlace-theme . [(20150705 600) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background." single ((:commit . "5c6f437203b0783b36a7aff4a578de4a0c8c4ee6"))]) (old-norse-input . [(20170816 1142) ((emacs (24))) "An input method for Old Norse" single ((:commit . "c2e21ee72c3768e9152aff6baf12a19cde1d0c53") (:url . "https://github.com/david-christiansen/emacs-old-norse-input") (:keywords "languages"))]) (offlineimap . [(20150916 458) nil "Run OfflineIMAP from Emacs" single ((:commit . "cc3e067e6237a1eb7b21c575a41683b1febb47f1") (:url . "http://julien.danjou.info/offlineimap-el.html"))]) (octopress . [(20170813 615) nil "A lightweight wrapper for Jekyll and Octopress." tar ((:commit . "b4c25df9e3ccf49ac27c0a152daa4e27d1247d56") (:url . "https://github.com/aaronbieber/octopress.el") (:keywords "octopress" "blog"))]) (octo-mode . [(20161008 529) ((emacs (24))) "Major mode for Octo assembly language" single ((:commit . "bd4db7e5e3275b24c74e6a23c11d04f54e9feca5") (:url . "https://github.com/cryon/octo-mode") (:keywords "languages"))]) (octicons . [(20151031 2040) ((cl-lib (0 5))) "octicons utility" tar ((:commit . "a61e561966ffd8faa3b48ce5b3a4eec10c59708b") (:url . "https://github.com/syohex/emacs-octicons"))]) (ocp-indent . [(20170803 222) nil "automatic indentation with ocp-indent" single ((:commit . "20517e96299e147ef349b9e8913f036a6c35399d") (: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 ((:commit . "c7b0789a177219f117c4de5659ecfa8622958c40"))]) (oceanic-theme . [(20161015 119) nil "Oceanic theme." single ((:commit . "a92ee9b470843c923e6cdcafdd65106ff994d04d") (:url . "https://github.com/terry3/oceanic-theme") (:keywords "oceanic" "color" "theme"))]) (occur-x . [(20130610 643) nil "Extra functionality for occur" single ((:commit . "352f5fab207d8a1d3dd048073ff127a83e97c82b") (:keywords "occur" "search" "convenience"))]) (occur-context-resize . [(20170904 1609) nil "dynamically resize context around matches in occur-mode" single ((:commit . "cdee5a631ceed9337579d4090e0acf8140747f80") (:url . "https://github.com/dgtized/occur-context-resize.el") (:keywords "matching"))]) (occidental-theme . [(20130312 1258) nil "Custom theme for faces based on Adwaita" single ((:commit . "fd2db7256d4f78c43d99c3cddb1c39106d479816") (:url . "http://github.com/olcai/occidental-theme"))]) (obsidian-theme . [(20170719 248) nil "port of the eclipse obsidian theme" single ((:commit . "f45efb2ebe9942466c1db6abbe2d0e6847b785ea") (:url . "http://github.com/mswift42/obsidian-theme"))]) (objc-font-lock . [(20141021 1122) nil "Highlight Objective-C method calls." single ((:commit . "34b457d577f97ca94b8792d025f9a909c7610612") (:url . "https://github.com/Lindydancer/objc-font-lock") (:keywords "languages" "faces"))]) (obfusurl . [(20170809 824) ((cl-lib (0 5))) "Obfuscate URLs so they aren't spoilers" single ((:commit . "7a5a41905000ce2ec1fd72509a5567e5fd9f47e5") (:url . "https://github.com/davep/obfusurl.el") (:keywords "convenience" "web" "text"))]) (oberon . [(20120715 209) nil "Major mode for editing Oberon/Oberon-2 program texts" single ((:commit . "fb57d18ce13835a8a69b6bafecdd9193ca9a59a3") (:keywords "oberon" "oberon-2" "languages" "oop"))]) (ob-uart . [(20170521 158) nil "org-babel support for UART communication" single ((:commit . "90daeac90a9e75c20cdcf71234c67b812110c50e") (:url . "https://www.0x7.ch") (:keywords "tools" "comm" "org-mode" "uart" "literate programming" "reproducible development"))]) (ob-typescript . [(20150804 530) ((emacs (24)) (org (8 0))) "org-babel functions for typescript evaluation" single ((:commit . "9dcbd226cbfb75e790dd9de91d9401dde85a889a") (:url . "https://github.com/lurdan/ob-typescript") (:keywords "literate programming" "reproducible research" "typescript"))]) (ob-translate . [(20170720 1219) ((google-translate (0 11)) (org (8))) "Translation of text blocks in org-mode." single ((:commit . "9d9054a51bafd5a29a8135964069b4fa3a80b169") (:url . "https://github.com/krisajenkins/ob-translate") (:keywords "org" "babel" "translate" "translation"))]) (ob-swift . [(20170921 625) ((org (8))) "org-babel functions for swift evaluation" single ((:commit . "ed478ddbbe41ce5373efde06b4dd0c3663c9055f") (:url . "http://github.com/zweifisch/ob-swift") (:keywords "org" "babel" "swift"))]) (ob-sql-mode . [(20170213 1056) ((emacs (24 3))) "SQL code blocks evaluated by sql-mode" single ((:commit . "778232af7c87b6a32ecb3668a9e5a2763d6a4830") (:url . "http://github.com/nikclayton/ob-sql-mode") (:keywords "languages" "org" "org-babel" "sql"))]) (ob-spice . [(20170801 2222) ((spice-mode (0 0 1)) (org (8))) "org-babel functions for spice evaluation" single ((:commit . "b296232e28f61366265084fafb2f47876d987069") (:url . "http://tiagoweber.github.io"))]) (ob-sml . [(20130829 1143) ((sml-mode (6 4))) "org-babel functions for template evaluation" single ((:commit . "958165c92b6cff6cada5c85c8ae5887806b8451b") (: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 ((:commit . "c23c318bf8bbe2e266967388221893fbecdd2fd5") (:keywords "org" "babel" "smiles"))]) (ob-sagemath . [(20170130 1833) ((sage-shell-mode (0 0 8)) (s (1 8 0)) (emacs (24))) "org-babel functions for SageMath evaluation" tar ((:commit . "68d3e516c712bc7aa5042f305f3eb5bbb6d656c2") (:url . "https://github.com/stakemori/ob-sagemath") (:keywords "sagemath" "org-babel"))]) (ob-rust . [(20170730 759) nil "Org-babel functions for Rust" tar ((:commit . "f23d93725c21ab95a44cb4d2c0c4ab0489bd55d9") (:url . "https://github.com/micanzhang/ob-rust") (:keywords "rust" "languages" "org" "babel"))]) (ob-restclient . [(20160323 2305) ((restclient (0))) "org-babel functions for restclient-mode" single ((:commit . "08b82b9ea668631968ae4fb531fd74494630f840") (:url . "http://orgmode.org") (:keywords "literate programming" "reproducible research"))]) (ob-redis . [(20160411 2013) ((org (8))) "Execute Redis queries within org-mode blocks." single ((:commit . "244a21569499a3d8cb39f651fbf00ce26accf983") (:url . "https://github.com/stardiviner/ob-redis") (:keywords "org" "babel" "redis"))]) (ob-prolog . [(20170126 921) nil "org-babel functions for prolog evaluation." single ((:commit . "e70a9f9b96fd0fedcc30de7768c870f4b0ee1ae9") (:url . "https://github.com/ljos/ob-prolog") (:keywords "literate programming" "reproducible research"))]) (ob-php . [(20180103 441) ((org (8))) "Execute PHP within org-mode blocks." single ((:commit . "08b41282fba31abca030a387062c3f1eb25a723f") (:url . "https://github.com/stardiviner/ob-php") (:keywords "org" "babel" "php"))]) (ob-nim . [(20170809 1130) ((cl-lib (0 5))) "Babel Functions for nim" single ((:commit . "bf1642cb93f0a898804dc13fd9408d2964403bd2") (:keywords "literate programming" "reproducible research"))]) (ob-mongo . [(20170720 1219) ((org (8))) "Execute mongodb queries within org-mode blocks." single ((:commit . "371bf19c7c10eab2f86424f8db8ab685997eb5aa") (:url . "https://github.com/krisajenkins/ob-mongo") (:keywords "org" "babel" "mongo" "mongodb"))]) (ob-ml-marklogic . [(20170622 1133) nil "org-babel functions for MarkLogic evaluation" tar ((:commit . "f678af0f440b3030e311ed6fbc444200be04da91") (:url . "http://github.com/ndw/ob-ml-marklogic") (:keywords "marklogic" "xquery" "javascript" "sparql"))]) (ob-lfe . [(20170725 720) ((org (8))) "org-babel functions for lfe evaluation" single ((:commit . "f7780f58e650b4d29dfd834c662b1d354b620a8e") (:url . "http://github.com/zweifisch/ob-lfe") (:keywords "org" "babel" "lfe" "lisp" "erlang"))]) (ob-kotlin . [(20170725 718) ((org (8))) "org-babel functions for kotlin evaluation" single ((:commit . "3b2f57e9944cfc36f2714dc550db42159904929a") (:url . "http://github.com/zweifisch/ob-kotlin") (:keywords "org" "babel" "kotlin"))]) (ob-ipython . [(20171209 634) ((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 ((:commit . "a3bf46dd6c9a76f4cd5058f3ab5426d90f0c073a") (:url . "http://www.gregsexton.org") (:keywords "literate programming" "reproducible research"))]) (ob-hy . [(20171101 344) ((emacs (24 4))) "org-babel functions for Hy-lang evaluation" tar ((:commit . "a3512f274709dc4ab6c18d7955d361f8715505f0") (:url . "https://github.com/brantou/ob-hy") (:keywords "hy" "literate programming" "reproducible research"))]) (ob-http . [(20170920 2251) ((s (1 9 0)) (cl-lib (0 5))) "http request in org-mode babel" tar ((:commit . "c4da6d47b3f96c31c00f9eaaf712b59afe00daef") (:url . "http://github.com/zweifisch/ob-http"))]) (ob-go . [(20170731 1057) nil "org-babel functions for go evaluation" tar ((:commit . "28a0250cd969974936e44dfdccb0265632d25f84") (:url . "http://orgmode.org") (:keywords "golang" "go" "literate programming" "reproducible research"))]) (ob-fsharp . [(20170618 729) ((fsharp-mode (1 9 8)) (emacs (25))) "Org-Babel F#" tar ((:commit . "65ec2b626ac55313d8a04e746940370f615fed1e"))]) (ob-elixir . [(20170725 719) ((org (8))) "org-babel functions for elixir evaluation" single ((:commit . "8990a8178b2f7bd93504a9ab136622aab6e82e32") (:url . "http://github.com/zweifisch/ob-elixir") (:keywords "org" "babel" "elixir"))]) (ob-diagrams . [(20160407 537) nil "org-babel functions for diagrams evaluation" single ((:commit . "ed6649616325ca5b2d2109f74aded8bcb8aa5186") (:url . "http://orgmode.org") (:keywords "literate programming" "reproducible research"))]) (ob-dart . [(20170106 824) nil "org-babel functions for Dart evaluation" single ((:commit . "04d63b922a5469506560ca0c00678e57131e0269") (:url . "http://github.org/mzimmerm/ob-dart") (:keywords "literate programming" "reproducible research" "emacs" "org" "babel" "dart"))]) (ob-dao . [(20170816 858) ((org (8))) "Org Babel Functions for Dao" single ((:commit . "fa92f62a63c684d689f57e790e5dd614c5bba270") (:url . "https://github.com/xuchunyang/ob-dao") (:keywords "literate programming" "reproducible research" "org" "babel" "dao"))]) (ob-cypher . [(20170725 720) ((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 ((:commit . "114bdf6db20ee0ade060bb5df379ddee48ff4f26") (:url . "http://github.com/zweifisch/ob-cypher") (:keywords "org" "babel" "cypher" "neo4j"))]) (ob-crystal . [(20171101 347) ((emacs (24 3))) "org-babel functions for Crystal evaluation" tar ((:commit . "9d58b880b74e0ad83b37596bb44635e5d7ae5c3f") (:url . "https://github.com/brantou/ob-crystal") (:keywords "crystal" "literate programming" "reproducible research"))]) (ob-coffeescript . [(20170719 121) nil "org-babel functions for coffee-script evaluation, and fully implementation!" single ((:commit . "d68a8335d29c947f388b4fa556de4f3ee75a19c6") (:url . "https://github.com/brantou/ob-coffeescript") (:keywords "coffee-script" "literate programming" "reproducible research"))]) (ob-coffee . [(20170725 724) ((org (8))) "org-babel functions for coffee-script evaluation" tar ((:commit . "7f0b330273e8af7777de87a75fe52a89798e4548") (:url . "http://github.com/zweifisch/ob-coffee") (:keywords "org" "babel" "coffee-script"))]) (ob-clojure-literate . [(20180106 2121) ((emacs (24 4)) (org (9)) (cider (0 16 0)) (dash (2 12 0))) "Clojure's Org-mode Literate Programming." single ((:commit . "e2b264f0f42467436f71aac81ca848fe9ab517d5") (:url . "https://github.com/stardiviner/ob-clojure-literate") (:keywords "tools"))]) (ob-cfengine3 . [(20180102 1012) nil "Org Babel functions for CFEngine 3" single ((:commit . "63e39221322bdb72111bb42dc0853055c0c4a2bc") (:url . "https://github.com/nickanderson/ob-cfengine3") (:keywords "tools" "convenience"))]) (ob-browser . [(20170720 1218) ((org (8))) "Render HTML in org-mode blocks." tar ((:commit . "a347d9df1c87b7eb660be8723982c7ad2563631a") (:url . "https://github.com/krisajenkins/ob-browser") (:keywords "org" "babel" "browser" "phantomjs"))]) (ob-blockdiag . [(20170727 1801) nil "org-babel functions for blockdiag evaluation" single ((:commit . "634fcf64a4ae735afe7001d865b03f5d71e23046") (:url . "https://github.com/corpix/ob-blockdiag.el") (:keywords "tools" "convenience"))]) (ob-axiom . [(20171103 1548) ((emacs (24 2)) (axiom-environment (20171021))) "An org-babel backend for the axiom-environment system" single ((:commit . "b4f0fa9cd013e107d2af8e2ebedff8a7f40be7b5") (:keywords "axiom" "openaxiom" "fricas"))]) (ob-async . [(20171114 1936) ((async (1 9)) (org (9 0 1)) (emacs (24 4))) "Asynchronous org-babel src block execution" single ((:commit . "99a6f24191cacb343d6090ecc8c1c67f768b2e22") (:url . "https://github.com/astahlman/ob-async") (:keywords "tools"))]) (ob-applescript . [(20160914 1327) nil "org-babel functions for template evaluation" single ((:commit . "bc708af6cf45707d4e8d8f00ea59a7e413bfaca7") (:url . "http://github.com/stig/ob-applescript.el") (:keywords "literate programming" "reproducible research" "mac"))]) (oauth . [(20130127 1751) nil "Oauth library." tar ((:commit . "ee4744ad76a1560281b0c4944575a3bd598c6458") (:keywords "comm"))]) (o-blog . [(20151202 1539) nil "Standalone orgmode blog exporter" tar ((:commit . "e466c59478feddc8126c43c1b98550474af484c0") (:keywords "emacs"))]) (nyx-theme . [(20170910 607) ((emacs (24))) "Dark theme" single ((:commit . "afe2b8c3b5421b4c292d182dcf77079b278e93d8") (:url . "https://github.com/GuidoSchmidt/emacs-nyx-theme") (:keywords "themes" "dark-theme"))]) (nyan-mode . [(20170423 40) nil "Nyan Cat shows position in current buffer in mode-line." tar ((:commit . "3447aa114575230cb230862ac0ac9b065f789ecd") (:url . "https://github.com/TeMPOraL/nyan-mode/") (:keywords "nyan" "cat" "lulz" "scrolling" "pop tart cat" "build something amazing"))]) (nvm . [(20171217 836) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (dash-functional (2 4 0))) "Manage Node versions within Emacs" single ((:commit . "bc0a33257ec16e9f575bb6914b5949199897ada9") (:url . "http://github.com/rejeep/nvm.el") (:keywords "node" "nvm"))]) (nv-delete-back . [(20170224 449) ((emacs (24))) "backward delete like modern text editors" single ((:commit . "44d506105989873dc1725e0cfc675925b35c9c98") (:keywords "lisp"))]) (nummm-mode . [(20131117 214) nil "Display the number of minor modes instead of their names" single ((:commit . "81951e12032274543c5f7a585b29bd93961e94e4") (:url . "http://github.com/agpchil/nummm-mode"))]) (numbers . [(20170802 434) ((emacs (24))) "Display information and trivia about numbers" single ((:commit . "dd02508b788a13b7d4dbcc4923fa23134b783ab3") (:url . "https://github.com/davep/numbers.el") (:keywords "games" "trivia" "maths" "numbers"))]) (number-lock . [(20160829 1900) nil "Enter symbols on your number keys without pressing shift" single ((:commit . "74417b1238953bf485961a0dd7d20f5c36ae25ea") (:url . "https://github.com/Liu233w/number-lock.el") (:keywords "convenience"))]) (number . [(20170901 612) nil "Working with numbers at point." single ((:commit . "bbc278d34dbcca83e70e3be855ec98b23debfb99"))]) (nubox . [(20170619 210) nil "Nubox color theme (dark, light and tty versions)" tar ((:commit . "1ccb8035ae42727ba6bdd5c1106fbceddeeed370") (:keywords "faces"))]) (nu-mode . [(20180104 1243) ((undo-tree (0 6 5)) (ace-window (0)) (avy (0)) (which-key (0)) (transpose-frame (0))) "Modern Emacs Prompts Based Keybinding." tar ((:commit . "d5b414eb684eddd636ef4c1806f9c19665db8468"))]) (nsis-mode . [(20150914 546) nil "NSIS-mode" tar ((:commit . "5ea767c326bbe180e42be723605c0b03b16fdb06") (: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 ((:commit . "bab53a2361526d63a24cda176d07a1247bf5b399") (: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 ((:commit . "3a24b7d4bca13e87c987a4ddd212da914ff59191") (:keywords "lisp" "highlight" "convenience"))]) (npm-mode . [(20171103 1135) ((emacs (24 1))) "minor mode for working with npm projects" single ((:commit . "91b8a5ad9301a368e1ce051e625450d7fe3884a4") (:url . "https://github.com/mojochao/npm-mode") (:keywords "convenience" "project" "javascript" "node" "npm"))]) (noxml-fold . [(20170823 657) nil "Fold away XML things." single ((:commit . "46c7f6a008672213238a9f8d7a416ce80916aa62") (:url . "https://github.com/paddymcall/noxml-fold") (:keywords "xml" "folding"))]) (novice+ . [(20170307 925) nil "Extensions to `novice.el'." single ((:url . "https://www.emacswiki.org/emacs/download/novice%2b.el") (:keywords "internal" "help"))]) (nov . [(20171104 1641) ((dash (2 12 0)) (esxml (0 3 3)) (emacs (24 4))) "Featureful EPUB reader mode" single ((:commit . "7d14b6a2aa649e2213348883893a24a6a6083cb9") (:url . "https://github.com/wasamasa/nov.el") (:keywords "hypermedia" "multimedia" "epub"))]) (notmuch-labeler . [(20131230 919) ((notmuch (0))) "Improve notmuch way of displaying labels" tar ((:commit . "d65d1129555d368243df4770ecc1e7ccb88efc58") (:url . "https://github.com/DamienCassou/notmuch-labeler") (:keywords "emacs" "package" "elisp" "notmuch" "emails"))]) (notmuch . [(20180104 1635) nil "run notmuch within emacs" tar ((:commit . "54982e520c3bee74e947e311ee5b1219396fa1a8") (:url . "https://notmuchmail.org/"))]) (nose . [(20140520 948) nil "Easy Python test running in Emacs" single ((:keywords "nose" "python" "testing"))]) (nord-theme . [(20180102 1001) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" single ((:commit . "b5c1dc762fe3acaa88a0ce9640085d45d0109c43") (:url . "https://github.com/arcticicestudio/nord-emacs"))]) (noflet . [(20141102 654) nil "locally override functions" single ((:commit . "7ae84dc3257637af7334101456dafe1759c6b68a") (:url . "https://github.com/nicferrier/emacs-noflet") (:keywords "lisp"))]) (nodejs-repl . [(20170722 443) nil "Run Node.js REPL" single ((:commit . "4a4104dbf2cd314e90f35d200f28bd93c34708d0"))]) (node-resolver . [(20140930 1023) ((cl-lib (0 5))) "hook to install node modules in background" single ((:commit . "ef9d0486907a746a80b02ffc6208a09c168a9f7c") (:url . "https://github.com/meandavejustice/node-resolver.el") (:keywords "convenience" "nodejs" "javascript" "npm"))]) (noctilux-theme . [(20161113 642) ((emacs (24))) "Dark theme inspired by LightTable" single ((:commit . "a3265a1be7f4d73f44acce6d968ca6f7add1f2ca") (:url . "https://github.com/sjrmanning/noctilux-theme"))]) (nocomments-mode . [(20170213 1237) nil "Minor mode that makes comments invisible." single ((:commit . "5a41a20cc44dfe4a9ea584354ed6dbc15dd92f46") (:url . "https://github.com/Lindydancer/nocomments-mode"))]) (noccur . [(20150514 1420) nil "Run multi-occur on project/dired files" single ((:commit . "6cc02ce07178a61ae38a849f80472c01969272bc") (:keywords "convenience"))]) (noaa . [(20170719 1136) ((request (0 2 0)) (cl-lib (0 5)) (emacs (24))) "Get NOAA weather data" single ((:commit . "a4ec583275450d718334238d2813579420229f65") (:url . "https://github.com/thomp/noaa"))]) (no-littering . [(20180108 305) ((cl-lib (0 5))) "help keeping ~/.emacs.d clean" single ((:commit . "e585ca177a55808a17a53e8a9020198a18175543") (:url . "https://github.com/emacscollective/no-littering"))]) (no-emoji . [(20171214 2310) ((emacs (24))) "Show :emoji-name: instead of emoji characters" single ((:commit . "329b4093bf38f3f4b0e4760c70270d3b45ee554e") (:url . "https://github.com/ecraven/no-emoji") (:keywords "extensions"))]) (nnir-est . [(20170818 746) nil "Gnus nnir interface for HyperEstraier" single ((:commit . "dc1fee4757725b8171b755313d7bafbf1364f49a") (: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 ((:commit . "5a3f29174b3a4b2b2e7a700a862f3b16a942687e") (:url . "https://github.com/tjim/nevermore"))]) (nlinum-relative . [(20160526 8) ((emacs (24 4)) (nlinum (1 5))) "Relative line number with nlinum" single ((:commit . "5b9950c97ba79a6f0683e38b13da23f39e01031c") (:keywords "convenience"))]) (nlinum-hl . [(20170613 1748) ((emacs (24 4)) (nlinum (1 7)) (cl-lib (0 5))) "heal nlinum's line numbers" single ((:commit . "d5ca1490e0cde0605e34a6a17de8cc236c9810da") (:url . "https://github.com/hlissner/emacs-nlinum-hl") (:keywords "nlinum" "highlight" "current" "line" "faces"))]) (nixos-options . [(20160209 1041) ((emacs (24))) "Interface for browsing and completing NixOS options." single ((:commit . "7007363e773a419203a69798fb0e0731b2eb0f73") (:url . "http://www.github.com/travisbhartwell/nix-emacs/") (:keywords "unix"))]) (nix-sandbox . [(20171004 1006) ((dash (2 12 1)) (s (1 10 0))) "Utility functions to work with nix-shell sandboxes" single ((:commit . "7007363e773a419203a69798fb0e0731b2eb0f73") (:url . "https://github.com/travisbhartwell/nix-emacs"))]) (nix-mode . [(20170831 1721) ((emacs (24 3))) "Major mode for editing .nix files" tar ((:commit . "3294f8a2f83ace2d71f16c274a262ff76be412dc") (:url . "https://github.com/matthewbauer/nix-mode") (:keywords "nix" "languages" "tools" "unix"))]) (nix-buffer . [(20170809 1128) ((f (0 17 3)) (emacs (24 4))) "Set up buffer environments with nix" single ((:commit . "b922497ea0af39fdf1a7e856d0cd2ce81d98d76f") (:url . "https://github.com/shlevy/nix-buffer/tree/master/"))]) (ninja-mode . [(20141203 2159) ((emacs (24))) "Major mode for editing .ninja files" single ((:commit . "e234a7bdb6c42f4539c0ab09b624f191287c2c10"))]) (nimbus-theme . [(20180106 437) nil "An awesome dark theme" single ((:commit . "3cb301760d3ff8bb26cad325dc29001893672a46") (:url . "https://github.com/m-cat/nimbus-theme") (:keywords "faces"))]) (nim-mode . [(20171119 1027) ((emacs (24 4)) (epc (0 1 1)) (let-alist (1 0 1)) (commenter (0 5 1)) (flycheck-nimsuggest (0 8 1))) "A major mode for the Nim programming language" tar ((:commit . "91450d3117a4dec975d913b58f1ece6808e5c2ba") (:keywords "nim" "languages"))]) (nikola . [(20170703 1321) ((async (1 5)) (emacs (24 3))) "Simple wrapper for nikola" single ((:commit . "964715ac30943c9d6976999cad208dc60d09def0") (:url . ": https://git.daemons.it/drymer/nikola.el") (:keywords ":" "nikola"))]) (niconama . [(20170910 801) ((emacs (24)) (request (20170131 1747)) (cl-lib (0 5))) "Tools for Niconico Live Broadcast" single ((:commit . "96e7553e50e6bf7b58aac50f52c9b0b8edb41c56") (:url . "https://github.com/NOBUTOKA/niconama.el") (:keywords "comm"))]) (niceify-info . [(20160416 544) nil "improve usability of Info pages" single ((:commit . "38df5062bc3b99d1074cab3e788b5ed66732111c"))]) (nginx-mode . [(20170611 2137) nil "major mode for editing nginx config files" single ((:commit . "a2bab83c2eb233d57d76b236e7c141c2ccc97005") (:keywords "languages" "nginx"))]) (ng2-mode . [(20170504 2007) ((typescript-mode (0 1))) "Major modes for editing Angular 2" tar ((:commit . "adbfe16a47cf26edeb1b508cbedae5307b4efbf6") (:url . "http://github.com/AdamNiederer/ng2-mode") (:keywords "typescript" "angular" "angular2" "template"))]) (nexus . [(20140114 505) nil "REST Client for Nexus Maven Repository servers" tar ((:commit . "c46f499951b90839aa8683779fe43d8f01672a60") (:keywords "comm"))]) (newlisp-mode . [(20160226 745) nil "newLISP editing mode for Emacs" single ((:commit . "ac23be40c81a360988ab803d365f1510733f6db4") (:url . "https://github.com/kosh04/newlisp-mode") (:keywords "language" "lisp" "newlisp"))]) (never-comment . [(20140104 1407) nil "Never blocks are comment" single ((:commit . "74ded8f1e7f23240f5f6032d0451fb0a51733bc4") (:url . "http://stackoverflow.com/a/4554658/89376"))]) (network-watch . [(20171123 346) ((emacs (24 3))) "Support for intermittent network connectivity" single ((:commit . "958dd0d419e4f9402648a86b754091ba346e01b8") (:url . "https://github.com/jamiguet/network-watch") (:keywords "unix" "tools" "hardware" "lisp"))]) (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 ((:commit . "c64672992175c8c1073c0f56c2e471839db71a0f") (:url . "http://github.com/Kungsgeten/netrunner") (:keywords "games"))]) (netherlands-holidays . [(20150202 817) nil "Netherlands holidays for Emacs calendar." single ((:commit . "26236178cdd650df9958bf5a086e184096559f00") (:url . "https://github.com/abo-abo/netherlands-holidays") (:keywords "calendar"))]) (neotree . [(20170522 758) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:commit . "bc98dfb44c106375efa4f26848f3790ee264da97") (:url . "https://github.com/jaypei/emacs-neotree"))]) (neon-mode . [(20170711 501) nil "Simple major mode for editing neon files" single ((:commit . "9c23289c0c8ed17d1596cfb95a5ade57df7db5f7") (:keywords "conf"))]) (nemerle . [(20161029 1323) nil "major mode for editing nemerle programs" single ((:commit . "59b28607968a9bee060b42eac55c69c37d1c0e69") (:keywords "nemerle" "mode" "languages"))]) (neato-graph-bar . [(20171230 1753) ((emacs (24 3))) "Neat-o graph bars CPU/memory etc." single ((:commit . "c59f15ed9a40aecc174aa22c4bbfa7978e182705") (:url . "https://gitlab.com/RobertCochran/neato-graph-bar"))]) (nclip . [(20130617 1315) nil "Network (HTTP) Clipboard" tar ((:commit . "af88e38b1f04be02bf2e57affc662dbd0f828e67") (:url . "http://www.github.com/maio/nclip.el") (:keywords "nclip" "clipboard" "network"))]) (ncl-mode . [(20170903 2355) ((emacs (24))) "Major Mode for editing NCL scripts and other goodies" tar ((:commit . "84599a730169b9b19f9dcc532e20dcdc9648bbaa"))]) (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 ((:commit . "698c1c62da70164aebe9a7a5d034778fbc30ea5b") (:keywords "terminal"))]) (navi2ch . [(20150329 1916) nil "Navigator for 2ch for Emacsen" tar ((:commit . "f39d93c32acd5b9c3a7fb1a9fe14c5e1c4b5288e") (:keywords "network" "2ch"))]) (navi-mode . [(20170414 1228) ((outshine (2 0)) (outorg (2 0))) "major-mode for easy buffer-navigation" single ((:commit . "c1d38e8237f4e14af020a0b7d4f118ea198ab674") (:url . "https://github.com/alphapapa/navi"))]) (nav-flash . [(20140508 1341) nil "Briefly highlight the current line" single ((:commit . "53f5bc59e3f32c1192d15637d3979732dacb2c35") (:url . "http://github.com/rolandwalker/nav-flash") (:keywords "extensions" "navigation" "interface"))]) (nav . [(20120507 7) nil "Emacs mode for filesystem navigation" tar ((:commit . "c5eb234c063f435dbdcd1f8bdc46cfc68c973ebe"))]) (nasm-mode . [(20161216 736) ((emacs (24 3))) "NASM x86 assembly major mode" single ((:commit . "d990ed94d902b74a5c834fb567e03307607cee45") (:url . "https://github.com/skeeto/nasm-mode"))]) (nash-mode . [(20160830 512) nil "Nash major mode" single ((:commit . "2cd96535eb7d669a94306183e95ee37333872c1a") (: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 ((:commit . "b215adbac4873f56fbab65772062f0f5be8058a1") (:keywords "outlines"))]) (narrow-reindent . [(20150722 1206) ((emacs (24 4))) "Defines a minor mode to left-align narrowed regions." single ((:commit . "87466aac4dbeb79597124dd077bf5c704872fd3d") (:url . "https://github.com/emallson/narrow-reindent.el"))]) (narrow-indirect . [(20170820 1748) nil "Narrow using an indirect buffer that is a clone" single ((:url . "https://www.emacswiki.org/emacs/download/narrow-indirect.el") (:keywords "narrow" "indirect" "buffer" "clone" "view" "multiple-modes"))]) (naquadah-theme . [(20160819 121) nil "A theme based on Tango color set" single ((:commit . "37e822ccea0ff4a6eb79ea6615a1fd6dc6c72d51"))]) (nanowrimo . [(20151104 1828) nil "Track progress for nanowrimo" single ((:url . "https://bitbucket.org/gvol/nanowrimo-mode"))]) (nand2tetris-assembler . [(20171201 1013) ((nand2tetris (1 1 0))) "Assembler For the Nand2tetris Course" single ((:commit . "33acee34d24b1c6a87db833b7d23449cf858f64f") (:url . "http://www.github.com/CestDiego/nand2tetris-assembler.el/") (:keywords "nand2tetris-assembler" "hdl"))]) (nand2tetris . [(20171201 1013) ((emacs (24))) "Major mode for HDL files in the nand2tetris course" tar ((:commit . "33acee34d24b1c6a87db833b7d23449cf858f64f") (: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 ((:commit . "3d02525d9b9a5ae6e7be3adefd880121436e6270") (:url . "https://github.com/chrisbarrett/elisp-namespaces"))]) (names . [(20171012 1214) ((emacs (24 1)) (cl-lib (0 5))) "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar ((:commit . "1d45ec50568eb2f5b55973f7ed0b48c68f9f13aa") (:url . "https://github.com/Malabarba/names") (:keywords "extensions" "lisp"))]) (nameless . [(20161012 1214) ((emacs (24 4))) "Hide package namespace in your emacs-lisp code" single ((:commit . "108f16e743aecd35401c0e914c896572cf1d5082") (:url . "https://github.com/Malabarba/nameless") (:keywords "convenience" "lisp"))]) (nameframe-projectile . [(20160927 2103) ((nameframe (0 4 1 -2)) (projectile (0 13 0))) "Nameframe integration with Projectile" single ((:commit . "aafb8c5c5fbe0510e2f5d5b6b6b5dd0b73abe5d8") (:url . "https://github.com/john2x/nameframe"))]) (nameframe-perspective . [(20170405 1819) ((nameframe (0 4 1 -2)) (perspective (1 12))) "Nameframe integration with perspective.el" single ((:commit . "aafb8c5c5fbe0510e2f5d5b6b6b5dd0b73abe5d8") (:url . "https://github.com/john2x/nameframe"))]) (nameframe . [(20171106 1656) nil "Manage frames by name." single ((:commit . "aafb8c5c5fbe0510e2f5d5b6b6b5dd0b73abe5d8") (: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 ((:commit . "e37cd1291d5d68d4c8d6386eab9cb9d94fd3bcfa") (:url . "https://github.com/knl/name-this-color.el") (:keywords "lisp" "color" "hex" "rgb" "shade" "name"))]) (naked . [(20170418 1822) nil "Provide for naked key descriptions: no angle brackets." single ((:url . "https://www.emacswiki.org/emacs/download/naked.el") (:keywords "lisp" "key" "print" "format" "help"))]) (n4js . [(20150713 1931) ((emacs (24)) (cypher-mode (0))) "Neo4j Shell" single ((:commit . "3991ed8975151d5e8d568e952362df810f7ffab7") (:url . "https://github.com/tmtxt/n4js.el") (:keywords "neo4j" "shell" "comint"))]) (myterminal-controls . [(20170425 1936) ((emacs (24)) (cl-lib (0 5))) "Quick toggle controls at a key-stroke" single ((:commit . "3edcef051f882342ca769b84527bf92dfb755e14") (:url . "http://ismail.teamfluxion.com") (:keywords "convenience" "shortcuts"))]) (mysql2sqlite . [(20170725 1516) nil "Convert mysql databases into sqlite databases." single ((:commit . "8e6e74451c942e2e92f90dc13222b95a7dbb285e"))]) (mysql-to-org . [(20170205 1306) ((emacs (24 3)) (s (1 11 0))) "Minor mode to output the results of mysql queries to org tables" single ((:commit . "d87e9b6117fc0db4b156e8a12550cf9ee4bd692a"))]) (mynt-mode . [(20150512 1349) ((virtualenvwrapper (20131514))) "Minor mode to work with the mynt static site generator" single ((:commit . "23d4489167bfa899634548cb41ed32fdeb3600c9") (: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 ((:commit . "7676f0e883af1d1054e404e97691f3c13aba196f") (:url . "https://github.com/yuutayamada/mykie-el") (:keywords "emacs" "configuration" "keybind"))]) (myanmar-input-methods . [(20160106 737) nil "Emacs Input Method for Myanmar" single ((:commit . "9d4e0d6358c61bde7a2274e430ef71683faea32e") (:url . "http://github.com/yelinkyaw/emacs-myanmar-input-methods") (:keywords "myanmar" "unicode" "keyboard"))]) (mwim . [(20161004 647) nil "Switch between the beginning/end of line or code" single ((:commit . "e53da113b88a7e0693fd8f91862ce5948ad80a5b") (:url . "https://github.com/alezost/mwim.el") (:keywords "convenience"))]) (mwe-log-commands . [(20100703 541) nil "log keyboard commands to buffer" single ((:commit . "8253f2a311f35b03f72a035744f0cbdd776ea17e") (:keywords "help"))]) (mvn . [(20160211 743) nil "helpers for compiling with maven" single ((:commit . "8a65b4eb88c9801aa3bff1921b600c72dfb8791a") (: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 ((:commit . "de9cdefe48c880128a8f62c6699d7416e9c8ced1") (:url . "http://github.com/p-lambert/mutant.el") (:keywords "mutant" "testing"))]) (mustard-theme . [(20170808 619) ((emacs (24 0))) "an Emacs 24 theme based on Mustard (tmTheme)" single ((:commit . "3b15d992c79590d7ea2503004e2a863b57e274b5") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (mustang-theme . [(20170719 246) nil "port of vim's mustang theme" single ((:commit . "dda6d04803f1c9b196b620ef564e7768fee15de2") (:url . "http://github.com/mswift42/mustang-theme"))]) (mustache-mode . [(20141024 732) nil "A major mode for editing Mustache files." single ((:commit . "bf9897eb287ca47ced65d7d4e07ea61ea0aec39f"))]) (mustache . [(20170923 533) ((ht (0 9)) (s (1 3 0)) (dash (1 2 0))) "a mustache templating library in emacs lisp" tar ((:commit . "5e39654b933a18131146a0f3b3e3dc55c5058124"))]) (multitran . [(20161122 1323) ((emacs (24)) (cl-lib (0 5))) "Interface to multitran" single ((:commit . "c0ce2e1b3706263946f9240a47c3f65ed4fc0afa") (:keywords "dictionary" "hypermedia"))]) (multiple-cursors . [(20170908 1452) ((cl-lib (0 5))) "Multiple cursors for Emacs." tar ((:commit . "10752700084595bb24712c27ba70a2326302e45b"))]) (multifiles . [(20130615 1433) nil "View and edit parts of multiple files in one buffer" single ((:commit . "dddfe64b8e1c1cd1f9ccc1f03405477fc0d53897") (:keywords "multiple" "files"))]) (multicolumn . [(20150202 1451) nil "Creating and managing multiple side-by-side windows." single ((:commit . "c7a3afecd470859b2e60aa7c554d6e4d436df7fa") (:url . "https://github.com/Lindydancer/multicolumn"))]) (multi-web-mode . [(20130823 2054) nil "multiple major mode support for web editing" tar ((:commit . "ad1c8d1c870334052d244c7ae3636cb7b9357b7c") (:url . "https://github.com/fgallina/multi-web-mode") (:keywords "convenience" "languages" "wp"))]) (multi-term . [(20160619 233) nil "Managing multiple terminal buffers in Emacs." single ((:commit . "f954e4e18b0a035151d34852387e724d87a3316f") (:url . "http://www.emacswiki.org/emacs/download/multi-term.el") (:keywords "term" "terminal" "multiple buffer"))]) (multi-project . [(20171217 1211) ((emacs (25))) "Find files, compile, search, and switch between" single ((:url . "https://bitbucket.org/ellisvelo/multi-project/overview") (:keywords "convenience" "project" "management"))]) (multi-line . [(20170821 1926) ((emacs (24 3)) (s (1 9 0)) (cl-lib (0 5)) (dash (2 12 0)) (shut-up (0 3 2))) "multi-line statements" tar ((:commit . "d3ce76b6aec62f96ef2c0409d8262fd39e67dccc") (:url . "https://github.com/IvanMalison/multi-line") (:keywords "multi" "line" "length" "whitespace" "programming" "tools" "convenience" "files"))]) (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 ((:commit . "bd0331854774e7a269ce8a7dd49580cd397c0ec2") (: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 ((:commit . "0987ab71692717ed457cb3984de184db9185806d") (:url . "http://github.com/kurisuwhyte/emacs-multi") (:keywords "multimethod" "generic" "predicate" "dispatch"))]) (mu4e-query-fragments . [(20170923 622) ((emacs (24 4))) "mu4e query fragments extension" single ((:commit . "34ddad4e6785f575333efcc66153d892daa1c884") (:url . "https://github.com/wavexx/mu4e-query-fragments.el") (:keywords "mu4e" "mail" "convenience"))]) (mu4e-maildirs-extension . [(20171119 1125) ((dash (0 0 0))) "Show mu4e maildirs summary in mu4e-main-view" single ((:commit . "c3ebeedd5c12e190949aed53c3040d51d21de58f") (:url . "http://github.com/agpchil/mu4e-maildirs-extension"))]) (mu4e-jump-to-list . [(20171104 1248) ((emacs (24 4)) (cl-lib (0 5))) "mu4e jump-to-list extension" single ((:commit . "2aa995ddedc7634292b459a3ea2718eea39695cf") (:url . "https://github.com/wavexx/mu4e-jump-to-list.el") (:keywords "mu4e" "mail" "convenience"))]) (mu4e-alert . [(20171222 2315) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 1))) "Desktop notification for mu4e" single ((:commit . "3095de457ec88e752f83ce086eff4aeb22399980") (: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 ((:commit . "aea3c2d01eb3284d5e0124059d368e8c6b6ffddc"))]) (mtg-deck-mode . [(20170925 1338) ((emacs (25 1))) "Major mode to edit MTG decks" tar ((:commit . "546a62ada70aa89d325cc3941c8c9379a4c21553") (:url . "https://github.com/mattiasb/mtg-deck-mode") (:keywords "data" "mtg" "magic"))]) (msvc . [(20171225 738) ((emacs (24)) (cl-lib (0 5)) (cedet (1 0)) (ac-clang (2 0 0))) "Microsoft Visual C/C++ mode" tar ((:commit . "dfc529aa6da8b46b0a0c7db9a0e5e9bc33ab1fb3") (: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 ((:commit . "3021c55fa5723a806dde5fb2a630b115e2c53d06") (:url . "https://github.com/kljohann/mpv.el") (:keywords "tools" "multimedia"))]) (mpages . [(20150710 704) nil "An Emacs buffer for quickly writing your Morning Pages" single ((:commit . "39a72a0931ab1cdbfdf0ab9f412dc12d43a3829f") (:url . "https://github.com/slevin/mpages"))]) (mozc-temp . [(20160228 40) ((emacs (24)) (dash (2 10 0)) (mozc (0))) "Use mozc temporarily" single ((:commit . "9d6b645eff901ea79dbc43a55d5a97ead3f4bad7") (:url . "https://github.com/HKey/mozc-temp"))]) (mozc-popup . [(20150223 1634) ((popup (0 5 2)) (mozc (0))) "Mozc with popup" single ((:commit . "f0684b875a7427ec08f8df13939a486e5d5cf420") (:keywords "i18n" "extentions"))]) (mozc-im . [(20160411 1722) ((mozc (0))) "Mozc with input-method-function interface." single ((:commit . "df614a1076c28a11551fb3e822868bae47e855a5") (:keywords "i18n" "extentions"))]) (mozc . [(20180101 0) nil "minor mode to input Japanese with Mozc" single ((:commit . "f5ddd0e06f5d94ecc626b38797c982e8598d18e0") (:keywords "mule" "multilingual" "input method"))]) (moz-controller . [(20151208 1806) ((moz (0))) "Control Firefox from Emacs" single ((:commit . "46f665c03574fa922de767fc29795e0db4a7c5c6") (:url . "https://github.com/RenWenshan/emacs-moz-controller"))]) (moz . [(20150805 1006) nil "Lets current buffer interact with inferior mozilla." single ((:commit . "ab3e79914445039ceb62f7f2dc342358fec3492e") (:url . "http://github.com/bard/mozrepl/raw/master/chrome/content/moz.el"))]) (mowedline . [(20161121 1835) nil "elisp utilities for using mowedline" single ((:commit . "6121b7d4aacd18f7b24da226e61dbae054e50a7c"))]) (move-text . [(20170908 2030) nil "Move current line or region with M-up or M-down." single ((:commit . "7cbc941a9150468609010a93c429117da2523903") (:url . "https://github.com/emacsfodder/move-text") (:keywords "edit"))]) (move-dup . [(20170513 1911) nil "Eclipse-like moving and duplicating lines or rectangles." single ((:commit . "dae61de7aa5e2bf56a7bab1fa36fa3a39520a3c0") (:url . "https://github.com/wyuenho/move-dup") (:keywords "convenience" "wp" "edit"))]) (mouse3 . [(20170324 1050) nil "Customizable behavior for `mouse-3'." single ((:url . "https://www.emacswiki.org/emacs/download/mouse3.el") (:keywords "mouse" "menu" "keymap" "kill" "rectangle" "region"))]) (mouse-slider-mode . [(20161021 1214) ((emacs (24 3)) (cl-lib (0 3))) "scale numbers dragged under the mouse" single ((:commit . "b3c19cd231edecce76787c5a9bbe5e4046d91f88") (:url . "https://github.com/skeeto/mouse-slider-mode"))]) (mouse+ . [(20170307 859) nil "Extensions to `mouse.el'." single ((:url . "https://www.emacswiki.org/emacs/download/mouse%2b.el") (:keywords "mouse"))]) (motion-mode . [(20140919 1856) ((flymake-easy (0 7)) (flymake-cursor (1 0 2))) "major mode for RubyMotion enviroment" tar ((:commit . "4c94180e3ecea611a61240a0c0cd48f1032c4a55") (:url . "https://github.com/ainame/motion-mode"))]) (mote-mode . [(20160122 1629) ((ruby-mode (1 1))) "Mote minor mode" single ((:commit . "666c6641addbd3b337a7aa01fd2742ded2f41b83") (:url . "http://inkel.github.com/mote-mode/"))]) (mosey . [(20161015 319) ((emacs (24 4))) "Mosey around your buffers" single ((:commit . "eb0ae6ec10f1d9828a2665476f6d6811df9b0bfa") (:url . "http://github.com/alphapapa/mosey.el") (:keywords "convenience"))]) (morlock . [(20161008 1358) nil "more font-lock keywords for elisp" single ((:commit . "5845b60c705e8db88ce790b0b12cd8b917e1e5a5") (:url . "https://github.com/tarsius/morlock") (:keywords "convenience"))]) (morganey-mode . [(20170118 134) ((emacs (24 4))) "Major mode for editing Morganey files" single ((:commit . "5cf3870432a2aeb69d373abe63b3be1f325f6d21") (:url . "https://github.com/morganey-lang/morganey-mode"))]) (moonscript . [(20170831 1526) ((cl-lib (0 5)) (emacs (24))) "Major mode for editing MoonScript code" tar ((:commit . "56f90471e2ced2b0a177aed4d8c2f854797e9cc7"))]) (monroe . [(20180108 224) nil "Yet another client for nREPL" single ((:commit . "c1dd7fe6e14a0ec2dae3135e74dffa797c9df28a") (:url . "http://www.github.com/sanel/monroe") (:keywords "languages" "clojure" "nrepl" "lisp"))]) (monokai-theme . [(20180104 429) nil "A fruity color theme for Emacs." single ((:commit . "bb5cbbd5895b8b3fbc6af572b1fd0aacd4988a8a") (:url . "http://github.com/oneKelvinSmith/monokai-emacs"))]) (monokai-alt-theme . [(20170630 1348) ((emacs (24))) "Theme with a dark background. Based on sublime monokai theme." single ((:commit . "f342b6afc31f929be0626eca2d696ee9fab78011") (:url . "https://github.com/dawidof/emacs-monokai-theme"))]) (monochrome-theme . [(20140326 350) nil "A dark Emacs 24 theme for your focused hacking sessions" tar ((:commit . "bfca67fe7365310bc47ae9ca96c417caada54896"))]) (monky . [(20170224 921) nil "Control Hg from Emacs." tar ((:commit . "62fc907cb541aef1c253d6bcd60447156e6f064c"))]) (monitor . [(20161018 444) ((dash (2 13 0))) "Utilities for monitoring expressions." tar ((:commit . "63f4643a0ee81616dbb692b8b03bae21df2283e2") (:url . "https://github.com/guiltydolphin/monitor") (:keywords "lisp" "monitor" "utility"))]) (mongo . [(20150315 519) nil "MongoDB driver for Emacs Lisp" tar ((:commit . "595529ddd70ecb9fab8b11daad2c3929941099d6") (:keywords "convenience"))]) (molokai-theme . [(20151016 845) nil "molokai theme with Emacs theme engine" single ((:commit . "04a44f21184b6a26caae4f2c92db9019d883309c") (:url . "https://github.com/alloy-d/color-theme-molokai"))]) (moe-theme . [(20170914 2111) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:commit . "b8f0206614ab40ffb75e50ce6c38675fb9c7cf2e") (: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 ((:commit . "c0e49523aa26b2263a8693691ac775988015f592") (:url . "http://www.github.com/jordonbiondo/modtime-skip-mode"))]) (modern-cpp-font-lock . [(20170625 1306) nil "Font-locking for \"Modern C++\"" single ((:commit . "b0a45dc1d7c49854988103c2570c783f46f44566") (:url . "https://github.com/ludwigpacifici/modern-cpp-font-lock") (:keywords "languages" "c++" "cpp" "font-lock"))]) (modeline-posn . [(20170307 856) nil "Set up `mode-line-position'." single ((:url . "https://www.emacswiki.org/emacs/download/modeline-posn.el") (:keywords "mode-line" "region" "column"))]) (modeline-char . [(20170307 854) nil "In the mode-line, show the value of the character after point." single ((:url . "https://www.emacswiki.org/emacs/download/modeline-char.el") (:keywords "mode-line" "character"))]) (mode-line-debug . [(20150307 512) nil "show status of `debug-on-error' in the mode-line" single ((:commit . "da44422eeb6a1f055b4ec2f822962c5162fce001") (:url . "https://github.com/tarsius/mode-line-debug") (:keywords "convenience" "lisp"))]) (mode-line-bell . [(20171231 1939) nil "Flash the mode line instead of ringing the bell" single ((:commit . "dcfad0929a606af0e836d93e78be989a8ac16f87") (:keywords "convenience"))]) (mode-icons . [(20170216 620) ((emacs (24)) (cl-lib (0 5))) "Show icons for modes" tar ((:commit . "2d47c03ee33c53d069fd64409f7212a2e1ed3f18") (:url . "http://ryuslash.org/projects/mode-icons.html") (:keywords "multimedia"))]) (modalka . [(20171231 2213) ((emacs (24 4))) "Easily introduce native modal editing of your own design" single ((:commit . "e69ec8fa01e86cb789f7f2b27b6d5a47e1ca3069") (: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 ((:commit . "6a1d7c9189bd721debd1a60707526e43a733f537") (:keywords "lisp" "testing"))]) (mocha-snippets . [(20170103 2127) ((yasnippet (0 8 0))) "Yasnippets for the Mocha JS Testing Framework" tar ((:commit . "e054137bd78f0d236e983874da1f345d30a71816") (:keywords "test" "javascript"))]) (mocha . [(20171217 835) ((js2-mode (20150909)) (f (0 18))) "Run Mocha or Jasmine tests" single ((:commit . "29376477b63e319875ad0969a8103f3864efb2a0") (: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 ((:commit . "e1d483bc4e341c762bc5c0a8c52306a8d01ea0da") (: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 ((:commit . "f45b014261f8fab19254920bd1d92f3a83263411") (:keywords "convenience"))]) (mo-git-blame . [(20160129 959) nil "An interactive, iterative 'git blame' mode for Emacs" single ((:commit . "254a675eb794cdbbdef9fa2b4b7bb510b70089c0") (:keywords "tools"))]) (mmt . [(20171231 2219) ((emacs (24 1)) (cl-lib (0 3))) "Missing macro tools for Emacs Lisp" single ((:commit . "b8cc8d29e185c15a1e43ecc2a78e36a6d2f86b8f") (:url . "https://github.com/mrkkrp/mmt") (:keywords "macro" "emacs-lisp"))]) (mmm-mode . [(20171212 1428) nil "Allow Multiple Major Modes in a buffer" tar ((:commit . "3fb2964c1923fa4ae71741afbd87c76dc16af93a") (: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 . [(20170313 720) ((mmm-mode (0 5 4))) "MMM submode class for Jinja2 Templates" single ((:commit . "c8cb763174fa2fb61b9a0e5e0ff8cb0210f8492f") (:url . "https://github.com/glynnforrest/mmm-jinja2"))]) (mkdown . [(20140517 718) ((markdown-mode (2 0))) "Pretty Markdown previews based on mkdown.com" tar ((:commit . "8e23de82719af6c5b53b52b3308a02b3a1fb872e") (:url . "https://github.com/ajtulloch/mkdown.el") (:keywords "markdown"))]) (mixed-pitch . [(20180103 1839) ((emacs (24 3))) "Use a variable pitch, keeping fixed pitch where it's sensible" single ((:commit . "e6f063bdc968f8ff21418e9f3b1d501cd0e5d4bd") (:url . "https://github.com/jabranham/mixed-pitch"))]) (misc-fns . [(20170307 848) nil "Miscellaneous non-interactive functions." single ((:url . "https://www.emacswiki.org/emacs/download/misc-fns.el") (:keywords "internal" "unix" "lisp" "extensions" "local"))]) (misc-cmds . [(20170823 842) nil "Miscellaneous commands (interactive functions)." single ((:url . "https://www.emacswiki.org/emacs/download/misc-cmds.el") (:keywords "internal" "unix" "extensions" "maint" "local"))]) (mips-mode . [(20170310 2149) nil "Major-mode for MIPS assembly" single ((:commit . "a13d1fc5b583a29f059f7794f2d83e59da439fa1") (:url . "https://github.com/hlissner/emacs-mips-mode") (:keywords "mips" "assembly"))]) (mip-mode . [(20151126 2217) nil "virtual projects for emacs." single ((:commit . "7c88c383b4c7ed0a4c1dc397735f365c1fcb461c") (: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 . [(20171208 958) ((emacs (24 1))) "Major mode for MiniZinc code" single ((:commit . "8bb428b52e974ecea35f3f2b20ad161735085a30") (: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 ((:commit . "1aadb7865c1dc69c201cecee275751ecec33a182") (:url . "https://github.com/arthurnn/minitest-emacs"))]) (minimal-theme . [(20160608 322) nil "A light/dark minimalistic Emacs 24 theme." tar ((:commit . "430e0d3fc2044c16aa9f10961841febbd60df285") (:url . "http://github.com/ikame/minimal-theme") (:keywords "color" "theme" "minimal"))]) (minimal-session-saver . [(20140508 1341) nil "Very lean session saver" single ((:commit . "cf654ac549850746dc21091746e4bcc1aef7668e") (:url . "http://github.com/rolandwalker/minimal-session-saver") (:keywords "tools" "frames" "project"))]) (miniedit . [(20100419 1045) nil "Enhanced editing for minibuffer fields." single ((:commit . "e12bf659c3eb92dd8a4cb77642dc0865c54667a3"))]) (minibuffer-cua . [(20130906 434) nil "Make CUA mode's S-up/S-down work in minibuffer" single ((:commit . "adc4979a64f8b36e05960e9afa0746dfa9e2e4c7") (:url . "https://github.com/knu/minibuffer-cua.el") (:keywords "completion" "editing"))]) (minibuffer-complete-cycle . [(20130813 945) nil "Cycle through the *Completions* buffer" single ((:commit . "3df80135887d0169e02294a948711f6dfeca4a6f") (:url . "https://github.com/knu/minibuffer-complete-cycle") (:keywords "completion"))]) (minibuf-isearch . [(20151226 1143) nil "incremental search on minibuffer history" single ((:commit . "2846c6ac369ee623dad4cd3c8a7a6d9078965516") (:keywords "minibuffer" "history" "incremental search"))]) (mini-header-line . [(20170621 521) ((emacs (24 4))) "a minimal header-line" single ((:commit . "73b6724e0a26c4528d93768191c8aa59e6bce2e5") (:url . "https://github.com/ksjogo/mini-header-line") (:keywords "header-line" "mode-line"))]) (mingus . [(20171124 238) ((libmpdee (2 1))) "MPD Interface" tar ((:commit . "93827f564145a598838d3c3232202a60d681bd49") (: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 ((:commit . "ba97e2aeefa1d9d0b3835bf08edd0de248b0c513") (:keywords "milkode" "search" "grep" "jump" "keyword"))]) (migemo . [(20160924 741) ((cl-lib (0 5))) "Japanese incremental search through dynamic pattern expansion" single ((:commit . "e4744efae1b2fdea2bbd2ceaff0f6ea0bb739f5a") (:url . "https://github.com/emacs-jp/migemo"))]) (midje-mode . [(20170808 2103) ((cider (0 1 4)) (clojure-mode (1 0))) "Minor mode for running Midje tests in emacs" tar ((:commit . "10ad5b6084cd03d5cd268b486a7c3c246d85535f"))]) (micgoline . [(20160414 2026) ((emacs (24 3)) (powerline (2 3))) "powerline mode, color schemes from microsoft and google's logo." single ((:commit . "837504263bb1711203b0f7efecd6b7b5f272fae0") (:url . "https://github.com/yzprofile/micgoline") (:keywords "mode-line" "powerline" "theme"))]) (mic-paren . [(20170731 1207) nil "advanced highlighting of matching parentheses" single ((:commit . "d0410c7d805c9aaf51a1bcefaaef092bed5824c4") (:keywords "languages" "faces" "parenthesis" "matching"))]) (mhc . [(20171016 335) ((calfw (20150703))) "Message Harmonized Calendaring system." tar ((:commit . "03a50a7dd5f90fb981b72e4b9e9385e4d1fe3be3") (:url . "http://www.quickhack.net/mhc") (:keywords "calendar"))]) (mexican-holidays . [(20160109 1342) nil "Mexico holidays for Emacs calendar." single ((:commit . "43ced1f9e40a04be6927d1a1be64060f9be4f5c5") (:url . "https://github.com/shopClerk/mexican-holidays") (:keywords "calendar"))]) (mew . [(20170508 22) nil "Messaging in the Emacs World" tar ((:commit . "36b36a154dab22e112cc19675cfd73478f2a5956"))]) (metaweblog . [(20171216 1840) ((xml-rpc (1 6 8))) "An emacs library to access metaweblog based weblogs" tar ((:commit . "aa14380eb7e7b879a0c16c96866b20a987cd3f2a"))]) (metascript-mode . [(20150708 1757) ((emacs (24 3))) "Major mode for the Metascript programming language" single ((:commit . "edb361c7b0e5de231e5334a17b90652fb1df78f9") (: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 ((:commit . "ec98ea2c11dc1213dae8cbe1fe0cee73ca138bb2"))]) (meta-presenter . [(20170425 1934) nil "A simple multi-file presentation tool for Emacs" single ((:commit . "e882ac7f7658dd9507aca0ff88c88fcf74618252") (:url . "http://ismail.teamfluxion.com") (:keywords "productivity" "presentation"))]) (messages-are-flowing . [(20170218 1720) nil "visible indication when composing \"flowed\" emails" single ((:commit . "ef879726957c850c3a5afd7f1118604991e37e32") (:keywords "mail"))]) (message-x . [(20151029 718) nil "customizable completion in message headers" single ((:keywords "news" "mail" "compose" "completion"))]) (meson-mode . [(20170901 1135) ((emacs (24 3))) "Major mode for the Meson build system files" single ((:commit . "212d9f38a08074f1cb6e914e12b60bc52dcb8bee") (:url . "https://github.com/wentasah/meson-mode") (:keywords "languages" "tools"))]) (merlin . [(20170917 430) nil "Mode for Merlin, an assistant for OCaml." tar ((:commit . "a5dbf8e321ff162476555e62264468dd6f55c279") (:url . "https://github.com/ocaml/merlin") (:keywords "ocaml" "languages"))]) (menu-bar+ . [(20170720 710) nil "Extensions to `menu-bar.el'." single ((:url . "https://www.emacswiki.org/emacs/download/menu-bar%2b.el") (:keywords "internal" "local" "convenience"))]) (mentor . [(20170105 221) ((xml-rpc (1 6 9)) (seq (1 11)) (cl-lib (0 5))) "Frontend for the rTorrent bittorrent client" tar ((:commit . "9a160d718b02a95b1bb24072cca87b4348e1e261") (:keywords "comm" "processes" "bittorrent"))]) (memolist . [(20150804 1021) ((markdown-mode (22 0)) (ag (0 45))) "memolist.el is Emacs port of memolist.vim." single ((:commit . "60c296e202a71e9dcf1c3936d47b5c4b95c5839f") (:url . "http://github.com/mikanfactory/emacs-memolist") (:keywords "markdown" "memo"))]) (memoize . [(20170720 1802) nil "Memoization functions" single ((:commit . "636defefa9168f90bce6fc27431352ac7d01a890") (:url . "https://github.com/skeeto/emacs-memoize"))]) (melpa-upstream-visit . [(20130720 333) ((s (1 6 0))) "A set of kludges to visit a melpa-hosted package's homepage" single ((:commit . "7310c74fdead3c0f86ad6eff76cf989e63f70f66") (:keywords "convenience"))]) (mellow-theme . [(20170808 617) ((emacs (24 0))) "an Emacs 24 theme based on Mellow (tmTheme)" single ((:commit . "2bdf18f05f5212b6f269d9a94afe2cf201766891") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (melancholy-theme . [(20170220 1248) nil "A dark theme for dark minds" single ((:commit . "a9e13ca7051731b3a2c2aece9f3e3033b9a5e41d") (:url . "http://github.com/techquila/melancholy-theme"))]) (meghanada . [(20171230 802) ((emacs (24 3)) (yasnippet (0 6 1)) (company (0 9 0)) (flycheck (0 23))) "A better java development mode" tar ((:commit . "98ad6a5361c725319a355522d2d1ba0e0fbb7cde") (:url . "https://github.com/mopemope/meghanada-emacs") (:keywords "languages" "java"))]) (mediawiki . [(20170812 2255) nil "mediawiki frontend" single ((:commit . "8473e12d1839f5287a4227586bf117dad820f867") (:url . "https://github.com/hexmode/mediawiki-el") (:keywords "mediawiki" "wikipedia" "network" "wiki"))]) (md-readme . [(20160811 946) nil "Markdown-formatted READMEs for your ELisp" tar ((:commit . "bf818dd847c8b06b3b5100c5d3cf24cf96662528") (:url . "http://github.com/thomas11/md-readme/tree/master") (:keywords "lisp" "help" "readme" "markdown" "header" "documentation" "github"))]) (mc-extras . [(20170824 2239) ((multiple-cursors (1 2 1))) "Extra functions for multiple-cursors mode." tar ((:commit . "f0ba639e9b18cc56e80ae45bbb2b694dbad9171a") (:url . "https://github.com/knu/mc-extras.el") (:keywords "editing" "cursors"))]) (mbsync . [(20171130 335) nil "run mbsync to fetch mails" single ((:commit . "911d9ac255e8f7fb4bd21c0e816e44abfeb59128") (:url . "https://github.com/dimitri/mbsync-el"))]) (mbo70s-theme . [(20170808 615) ((emacs (24 0))) "70s style palette, with similarities to mbo theme" single ((:commit . "bed3db8965708ed4e9482b224a9b084765c052f2") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (mbe . [(20151126 334) ((emacs (24)) (cl-lib (0 5))) "Macros by Example" single ((:commit . "bb10aa8f26bb7e9b1d5746934c94edb00402940c") (:url . "https://github.com/ijp/mbe.el") (:keywords "tools" "macros"))]) (mb-url . [(20161224 1806) ((cl-lib (0))) "Multiple Backends for Emacs URL package." tar ((:commit . "129a0bb6a684be76fb9f09010e710065d0e5baaa") (:url . "https://github.com/dochang/mb-url") (:keywords "url"))]) (mb-depth+ . [(20170307 844) nil "Indicate minibuffer-depth in prompt" single ((:url . "https://www.emacswiki.org/emacs/download/mb-depth%2b.el") (:keywords "convenience"))]) (maxframe . [(20170120 905) nil "maximize the emacs frame based on display size" single ((:commit . "13bda6dd9f1d96aa4b9dd9957a26cefd399a7772") (: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 ((:commit . "a19151861df2ad8ae4880a2e7c86ddf848cb569a") (: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 ((:commit . "c9543bb8a172fa77af592388e7f520a4a6d38987") (:keywords "maude"))]) (matlab-mode . [(20160902 459) nil "Major mode for MATLAB(R) dot-m files" tar ((:commit . "3b3c48ac0c27039e0bef89c643f0ee4c0b53d3d0") (:url . "http://sourceforge.net/projects/matlab-emacs/") (:keywords "matlab" "programming" "language" "(X)emacs"))]) (math-symbols . [(20170818 759) ((helm (1 0))) "Math Symbol Input methods and conversion tools" tar ((:commit . "3f8b466f002e1b28ddbe9a6f236c9a1352adb17d") (:url . "https://github.com/kawabata/math-symbols") (:keywords "i18n" "languages" "tex"))]) (math-symbol-lists . [(20170221 553) nil "Lists of Unicode math symbols and latex commands" tar ((:commit . "1af8fdcab7941a62287c2d04b8876e1538f39c60") (:url . "https://github.com/vspinu/math-symbol-lists") (:keywords "unicode" "symbols" "mathematics"))]) (material-theme . [(20171123 1040) ((emacs (24 1))) "A Theme based on the colors of the Google Material Design" tar ((:commit . "b66838d220ad380a16da1d8878936974b26f815d") (:url . "http://github.com/cpaulik/emacs-material-theme") (:keywords "themes"))]) (mastodon . [(20170619 1050) ((emacs (24 4))) "Client for Mastodon" tar ((:commit . "e08bb5794762d22f90e85fd65cef7c143e6b9318") (:url . "https://github.com/jdenen/mastodon.el"))]) (maruo-macro-mode . [(20160616 649) ((emacs (24 3))) "Major mode for editing Hidemaru/Maruo macro script" single ((:commit . "8fc9a38ad051eafa8eb94038711acc52c5d1d8d5") (:keywords "programming" "editor" "macro"))]) (marshal . [(20180102 201) ((eieio (1 4)) (json (1 3)) (ht (2 1))) "eieio extension for automatic (un)marshalling" single ((:commit . "e25b170779ca8d0cdef0bfeb6f35c264a23a44e8") (: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 ((:commit . "f315dea57e4fbebd9ee0668c0bafd4c45c7b754a") (:url . "https://github.com/nicferrier/emacs-marmalade-upload") (:keywords "lisp"))]) (markup-faces . [(20141110 17) nil "collection of faces for markup language modes" single ((:commit . "98a807ed82473eb41c6a201ed7ef816d6bcd67b0") (:url . "https://github.com/sensorflo/markup-faces") (:keywords "wp" "faces"))]) (markup . [(20170420 429) ((cl-lib (0 5))) "Simple markup generation helpers." single ((:commit . "876da2d3f23473475bb0fd0a1480ae11d2671291") (:url . "http://github.com/leoc/markup.el") (:keywords "convenience" "markup" "html"))]) (markdownfmt . [(20160609 541) ((emacs (24))) "Format markdown using markdownfmt" single ((:commit . "187a74eb4fd9e8520ce08da42d1d292b9af7f2b7") (:url . "https://github.com/nlamirault/emacs-markdownfmt") (:keywords "markdown"))]) (markdown-toc . [(20170711 1249) ((s (1 9 0)) (dash (2 11 0)) (markdown-mode (2 1))) "A simple TOC generator for markdown file" tar ((:commit . "7038f4f6d5c2bc7e4aea89699a607ac2b7dd16a8"))]) (markdown-preview-mode . [(20171121 2323) ((emacs (24 3)) (websocket (1 6)) (markdown-mode (2 0)) (cl-lib (0 5)) (web-server (0 1 1)) (uuidgen (0 3))) "markdown realtime preview minor mode." tar ((:commit . "4ec15183fc9fadb9368902c9b77a2d0e1196d1c6") (:url . "https://github.com/ancane/markdown-preview-mode") (:keywords "markdown" "gfm" "convenience"))]) (markdown-preview-eww . [(20160111 702) ((emacs (24 4))) "Realtime preview by eww" single ((:commit . "5853f836425c877c8a956501f0adda137ef1d3b7") (:url . "https://github.com/niku/markdown-preview-eww"))]) (markdown-mode . [(20180101 503) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for Markdown-formatted text" single ((:commit . "fc4e143831f8590dc9b25da76961536eade02411") (:url . "https://jblevins.org/projects/markdown-mode/") (:keywords "markdown" "github flavored markdown" "itex"))]) (markdown-mode+ . [(20170320 1404) ((markdown-mode (20111229))) "extra functions for markdown-mode" tar ((:commit . "411d079f4430a33c34ec0bbcb1535fe1145a2509") (:url . "http://github.com/milkypostman/markdown-mode-plus") (:keywords "markdown" "latex" "osx" "rtf"))]) (mark-tools . [(20130614 325) nil "Some simple tools to access the mark-ring in Emacs" single ((:commit . "a11b61effa90bd0abc876d12573674d36fc17f0c") (:url . "https://github.com/stsquad/emacs-mark-tools"))]) (mark-multiple . [(20121118 754) nil "Sorta lets you mark several regions at once." tar ((:commit . "f6a53c7c5283d640ae718f4548b0fda78877a375"))]) (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 ((:commit . "9193aabdf12223087b5ed58f1507d5d8a24a4381") (:url . "https://github.com/nlamirault/marcopolo") (:keywords "docker"))]) (map-regexp . [(20130522 1403) ((cl-lib (0 2))) "map over matches of a regular expression" single ((:commit . "b8e06284ec1c593d7d2bda5f35597a63de46333f") (:url . "https://github.com/tarsius/map-regexp") (:keywords "convenience"))]) (map-progress . [(20140310 1432) nil "mapping macros that report progress" single ((:commit . "3167eb218510953fb97e7d50948a625eaa3f0005") (:url . "https://github.com/tarsius/map-progress/") (:keywords "convenience"))]) (mandoku-tls . [(20171117 1840) ((emacs (24 4)) (mandoku (20170301)) (github-clone (0 2)) (hydra (0 13 6)) (helm (1 7 0)) (org (9 0)) (helm-charinfo (20170601))) "A tool to access the TLS database" single ((:commit . "ffeebf5bd451ac1806ddfe1744fbbd036a56f902") (:url . "https://github.com/mandoku/mandoku-tls") (:keywords "convenience"))]) (mandoku . [(20171220 419) ((org (8 0)) (magit (20151028)) (github-clone (20150705)) (git (20140128))) "A tool to access repositories of premodern Chinese texts" tar ((:commit . "398956a21e60bc121eb337b8a88b59b586d30cef"))]) (mandm-theme . [(20170925 321) nil "An M&M color theme." single ((:commit . "078d6d6f11bd48193c5de590cfb0e3d0d687ffc9") (:url . "https://github.com/choppsv1/emacs-mandm-theme.git"))]) (manage-minor-mode . [(20140310 900) ((emacs (24 3))) "Manage your minor-modes easily" single ((:commit . "1bed33b0752380b548b822fe72e6858c5fe70c8e") (: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 ((:commit . "f4ba0c3790855d7544dff92d470d212f24de1d9d") (:url . "http://github.com/nflath/man-commands"))]) (malyon . [(20161208 1325) ((cl-lib (0 5))) "mode to execute Z-code files version 3, 5, 8" single ((:commit . "0d9882650720b4a791556f5e2d917388965d6fc0") (:url . "https://github.com/speedenator/malyon") (:keywords "games" "emulations"))]) (mallard-snippets . [(20131023 1151) ((yasnippet (0 8 0)) (mallard-mode (0 1 1))) "Yasnippets for Mallard" tar ((:commit . "70c5293f10722f2ace73bdf74d9a18f95b040edc") (:url . "https://github.com/jhradilek/emacs-mallard-snippets") (:keywords "snippets" "mallard"))]) (mallard-mode . [(20131203 2025) nil "Major mode for editing Mallard files" tar ((:commit . "c48170c1ace4959abcc5fb1df0d4cb149cff44c1") (:url . "https://github.com/jhradilek/emacs-mallard-mode") (:keywords "xml" "mallard"))]) (malinka . [(20171202 221) ((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 ((:commit . "d4aa517c7a9022eae16c758c7efdb3a0403542d7") (:url . "https://github.com/LefterisJP/malinka") (:keywords "c" "c++" "project-management"))]) (makey . [(20131231 630) ((cl-lib (0 2))) "interactive commandline mode" single ((:commit . "a61781e69d3b451551e269446e1c5f624ab81137"))]) (makefile-executor . [(20171017 438) ((emacs (24 3)) (dash (2 11 0)) (f (0 11 0)) (s (1 10 0))) "Commands for conveniently running makefile targets" single ((:commit . "a950438c93dc2fdcb867ac25174c773deda95aff") (:url . "https://github.com/thiderman/makefile-executor.el") (:keywords "processes"))]) (make-it-so . [(20171129 655) ((swiper (0 8 0)) (emacs (24))) "Transform files with Makefile recipes." tar ((:commit . "4f8b61011700036c98993e287d7aa36a52f2e206") (: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 ((:commit . "5ca1383ca9228bca82120b238bdc119f302b75c0") (:url . "https://github.com/alezost/make-color.el") (:keywords "color"))]) (major-mode-icons . [(20170228 2314) ((emacs (24 3)) (powerline (2 4)) (all-the-icons (2 3 0))) "display icon for major-mode on mode-line." tar ((:commit . "e6117a236b2ad52e948576550b183053321dfc91") (:url . "http://github.com/stardiviner/major-mode-icons") (:keywords "frames" "multimedia"))]) (majapahit-theme . [(20160817 1148) nil "Color theme with a dark and light versions" tar ((:commit . "77c96df7619666b2102d90d452eeadf04adc89a6") (: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 ((:commit . "2ef3175854f5b6c85f2e1bed26507cdca2f6ad16") (: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 ((:commit . "605b01505ba30589c77ebb4c96834b5072ccbdd4"))]) (magma-mode . [(20160304 408) ((cl-lib (0 3)) (dash (2 6 0)) (f (0 17 1))) "Magma mode for Emacs" tar ((:commit . "528c96a269980dcc6b65e2e973510ff07e6b9fc4") (:url . "https://github.com/ThibautVerron/magma-mode"))]) (magithub . [(20171224 845) ((emacs (25)) (magit (2 8)) (s (1 12 0)) (ghub+ (0 2)) (git-commit (2 8)) (markdown-mode (2 3))) "Magit interfaces for Github" tar ((:commit . "08a1c1341d0982248ec86e1697fa1b6418cd80f5") (:url . "https://github.com/vermiculus/magithub") (:keywords "git" "tools" "vc"))]) (magit-topgit . [(20160313 1254) ((emacs (24 4)) (magit (2 1 0))) "TopGit extension for Magit" single ((:commit . "11489ea798bc88d0ea5244bbf725285eedfefbef") (:keywords "vc" "tools"))]) (magit-tbdiff . [(20170725 1850) ((emacs (24 4)) (magit (2 10 0))) "Magit extension for git-tbdiff" single ((:commit . "1d1333af9d76b9e832212e9da152397df65f7205") (:url . "https://github.com/magit/magit-tbdiff") (:keywords "vc" "tools"))]) (magit-svn . [(20170213 433) ((emacs (24 4)) (magit (2 1 0))) "Git-Svn extension for Magit" single ((:commit . "c833903732a14478f5c4cfc561bae7c50671b36c") (:keywords "vc" "tools"))]) (magit-stgit . [(20171115 754) ((emacs (24 4)) (magit (2 1 0))) "StGit extension for Magit" single ((:commit . "0e44df69d7c0c793808a5278bed35b2c6ec39f7f") (:keywords "vc" "tools"))]) (magit-rockstar . [(20171213 737) ((dash (2 13 0)) (magit (2 12 0))) "commit like a rockstar" single ((:commit . "44e3bf03b0c5db914ce391c0c645267f0a5759bd") (:url . "https://github.com/tarsius/magit-rockstar") (:keywords "convenience"))]) (magit-popup . [(20171217 1235) ((emacs (24 4)) (async (1 9 2)) (dash (2 13 0))) "Define prefix-infix-suffix command combos" tar ((:commit . "3f23e81eb0267d6578d8f1733c5e42699b0229a1") (:url . "https://github.com/magit/magit-popup") (:keywords "bindings"))]) (magit-p4 . [(20170414 546) ((magit (2 1)) (magit-popup (2 1)) (p4 (12 0)) (cl-lib (0 5))) "git-p4 plug-in for Magit" single ((:commit . "c87de6d3f10fd35415a0c56e63747eb14ed5a113") (:url . "https://github.com/qoocku/magit-p4") (:keywords "vc" "tools"))]) (magit-lfs . [(20170312 1524) ((emacs (24 4)) (magit (2 10 3)) (dash (2 13 0))) "Magit plugin for Git LFS" single ((:commit . "799282fce73b668d2cf6e4fa87f889fec8e25333") (:url . "https://github.com/ailrun/magit-lfs") (:keywords "magit" "git" "lfs" "tools" "vc"))]) (magit-imerge . [(20170805 819) ((emacs (24 4)) (magit (2 10 0))) "Magit extension for git-imerge" single ((:commit . "1cd0fa843095f4ce8aa4eae89476c116414d060c") (:url . "https://github.com/magit/magit-imerge") (:keywords "vc" "tools"))]) (magit-gitflow . [(20170929 124) ((magit (2 1 0)) (magit-popup (2 2 0))) "gitflow extension for magit" single ((:commit . "cc41b561ec6eea947fe9a176349fb4f771ed865b") (:url . "https://github.com/jtatarik/magit-gitflow") (:keywords "vc" "tools"))]) (magit-gh-pulls . [(20171117 226) ((emacs (24 4)) (gh (0 9 1)) (magit (2 1 0)) (pcache (0 2 3)) (s (1 6 1))) "GitHub pull requests extension for Magit" single ((:commit . "d526f4c9ee1709c79f8a4630699ce1f25ae054e7") (: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 ((:commit . "ece6f369694aca17f3ac166ed2801b432acfe20d") (: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 ((:commit . "c3ea91bab37d10a814a829728ec972811f728d60") (: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 ((:commit . "c0865b3c41af20b6cd89de23d3b0beb54c8401a4") (:keywords "tools"))]) (magit-annex . [(20170913 659) ((cl-lib (0 3)) (magit (2 11 0))) "Control git-annex from Magit" single ((:commit . "895c229c2b0d822a4debb302d8638105ecb4ee20") (:url . "https://github.com/magit/magit-annex") (:keywords "vc" "tools"))]) (magit . [(20180108 1120) ((emacs (24 4)) (async (20170823)) (dash (20170810)) (ghub (20171207)) (git-commit (20170823)) (let-alist (1 0 5)) (magit-popup (20171121)) (with-editor (20170817))) "A Git porcelain inside Emacs." tar ((:commit . "20a5ef2bc21d46406c07bae21b3d2b22caf70dc7"))]) (magic-latex-buffer . [(20170530 1705) ((cl-lib (0 5)) (emacs (24 3))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" single ((:commit . "c03277d5619d9adcd871f3e6480a1a27985810cb") (:url . "http://hins11.yu-yake.com/"))]) (magic-filetype . [(20161214 1017) ((emacs (24)) (s (1 9 0))) "Enhance filetype major mode" single ((:commit . "9a20137474697063898902b43a40423daa4eb64d") (:url . "https://github.com/zonuexe/magic-filetype.el") (:keywords "emulations" "vim" "ft" "file" "magic-mode"))]) (mag-menu . [(20150505 1150) ((splitter (0 1 0))) "Intuitive keyboard-centric menu system" single ((:commit . "9b9277021cd09fb1dba64b1d2a00705d20914bd6") (:url . "https://github.com/chumpage/mag-menu") (:keywords "convenience"))]) (madhat2r-theme . [(20170202 1630) ((emacs (24))) "dark color theme that is easy on the eyes" single ((:commit . "6b387f09de055cfcc15d74981cd4f32f8f9a7323") (:url . "https://github.com/madhat2r/madhat2r-theme") (:keywords "color" "theme"))]) (macrostep . [(20161120 1306) ((cl-lib (0 5))) "interactive macro expander" tar ((:commit . "424e3734a1ee526a1bd7b5c3cd1d3ef19d184267") (:url . "https://github.com/joddie/macrostep") (:keywords "lisp" "languages" "macro" "debugging"))]) (macros+ . [(20170307 842) nil "Extensions to `macros.el'." single ((:url . "http://www.emacswiki.org/emacs/download/macros%2b.el") (:keywords "abbrev" "local"))]) (macro-math . [(20130328 904) nil "in-buffer mathematical operations" single ((:commit . "216e59371e9ee39c34117ba79b9acd78bb415750") (:url . "http://nschum.de/src/emacs/macro-math/") (:keywords "convenience"))]) (maces-game . [(20170903 851) ((dash (2 12 0)) (cl-lib (0 5)) (emacs (24))) "another anagram game." tar ((:commit . "c0fb795f5642467ea528d2f04d904547e8a77ecd") (:url . "https://github.com/pawelbx/anagram-game") (:keywords "games" "word games" "anagram"))]) (mac-pseudo-daemon . [(20170728 1240) ((cl-lib (0 1))) "Daemon mode that plays nice with Mac OS." single ((:commit . "d235680a72677f11925b912428ad1a57b664e3e8") (:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon") (:keywords "convenience" "osx" "mac"))]) (m-buffer . [(20170407 1441) ((seq (2 14))) "List-Oriented, Functional Buffer Manipulation" tar ((:commit . "8681342aaffa187e5c54945ab91b812965a96d19"))]) (lyrics . [(20160920 1945) ((emacs (25 1)) (seq (2 15))) "Show lyrics" single ((:commit . "1378d534614793a51ebbed661c59eb8818299182") (:url . "https://github.com/emacs-pe/lyrics.el") (:keywords "convenience"))]) (lxc . [(20140410 1322) nil "lxc integration with Emacs" single ((:commit . "88bed56c954d1edd9ff5ce0ced2c02dcf9f71835") (:url . "https://github.com/nicferrier/emacs-lxc") (:keywords "processes"))]) (lusty-explorer . [(20171126 1221) nil "Dynamic filesystem explorer and buffer switcher" single ((:commit . "303618cafa01da3c8f99da4849d3ddbdc146a5d1") (:keywords "convenience" "files" "matching"))]) (lush-theme . [(20141107 806) ((emacs (24))) "A dark theme with strong colors" single ((:commit . "3b80004f33cdce9f4db69e9ccf2041561e98985d") (:url . "https://github.com/andre-richter/emacs-lush-theme") (:keywords "theme" "dark" "strong colors"))]) (luarocks . [(20170430 1605) ((emacs (24)) (cl-lib (0 5))) "luarocks tools" single ((:commit . "cee27ba0716edf338077387969883226dd2b7484") (:url . "https://github.com/emacs-pe/luarocks.el") (:keywords "convenience"))]) (lua-mode . [(20180104 626) nil "a major-mode for editing Lua scripts" tar ((:commit . "6c691839b7e784884ae5c390bf1927953cd2bde7") (:url . "http://immerrr.github.com/lua-mode") (:keywords "languages" "processes" "tools"))]) (lsp-vue . [(20171202 917) ((emacs (25 1)) (lsp-mode (3 0))) "Vue support for lsp-mode" single ((:commit . "9085d6c7646d80728d14bf5e4ec9037dfb91e3d1") (:url . "https://github.com/emacs-lsp/lsp-vue"))]) (lsp-ui . [(20180107 2330) ((emacs (25 1)) (flycheck (30)) (lsp-mode (3 4)) (markdown-mode (2 0))) "UI modules for lsp-mode" tar ((:commit . "cc4e2035b1a7594bc0de1dd84e5bb6d7b607c39b") (:url . "https://github.com/emacs-lsp/lsp-ui") (:keywords "lsp"))]) (lsp-rust . [(20171128 331) ((lsp-mode (3 0)) (rust-mode (0 3 0))) "Rust support for lsp-mode" single ((:commit . "e560b81f21f770648a1a8621add9a2fe3dbe83af") (:url . "https://github.com/emacs-lsp/lsp-rust") (:keywords "rust"))]) (lsp-python . [(20171021 254) ((lsp-mode (3 0))) "Python support for lsp-mode" single ((:commit . "035fed681ef18a774dcb82e361bd6b5b8778623f") (:url . "https://github.com/emacs-lsp/lsp-python") (:keywords "python"))]) (lsp-ocaml . [(20171111 1352) ((emacs (25 1)) (lsp-mode (3 0))) "OCaml support for lsp-mode" single ((:commit . "1aef50ceb2794a2f2234fb0f13410b7f1e3b5c16") (:url . "https://github.com/anmonteiro/lsp-ocaml") (:keywords "languages" "ocaml" "reason" "lsp"))]) (lsp-mode . [(20180105 103) ((emacs (25 1)) (flycheck (30))) "Minor mode for interacting with Language Servers" tar ((:commit . "768b07d3a76af7ba8dbe4c25aae6379da05fb306") (:url . "https://github.com/emacs-lsp/lsp-mode"))]) (lsp-javascript-typescript . [(20171125 147) ((lsp-mode (3 0))) "Javascript/Typescript support for lsp-mode" single ((:commit . "456854bdee8729c21331f93ee9054f2d980fe2ab") (:url . "https://github.com/emacs-lsp/lsp-javascript") (:keywords "javascript" "typescript" "lsp"))]) (lsp-javacomp . [(20171024 1547) ((emacs (25 1)) (lsp-mode (3 0)) (s (1 2 0))) "Provide Java IDE features powered by JavaComp." single ((:commit . "ed23aaeee27e6253bed5752fb8fbb7a5fa61967c") (:url . "https://github.com/tigersoldier/lsp-javacomp") (:keywords "java"))]) (lsp-java . [(20171023 650) ((emacs (25 1)) (lsp-mode (3 0))) "Java support for lsp-mode" single ((:commit . "5176f63e80e8f971563c0b98658db7dc72404369") (:url . "https://github.com/emacs-lsp/lsp-java") (:keywords "java"))]) (lsp-haskell . [(20171021 330) ((lsp-mode (3 0)) (haskell-mode (1 0))) "Haskell support for lsp-mode" single ((:commit . "16ca9fa975e64e840e062485ed30e4b297d72424") (:url . "https://github.com/emacs-lsp/lsp-haskell") (:keywords "haskell"))]) (lsp-hack . [(20171128 1238) ((lsp-mode (3 1))) "lsp-mode client for hacklang" single ((:commit . "f299555ad5206f13d7cfe75a3c76607b1f0d6da5") (:url . "https://github.com/jra3/lsp-hack"))]) (lsp-go . [(20171021 336) ((lsp-mode (3 0))) "Go support for lsp-mode" single ((:commit . "d270b7c0bd893fdc73a97763e07706830756cad2") (:url . "https://github.com/emacs-lsp/lsp-go") (:keywords "go" "golang"))]) (love-minor-mode . [(20170726 2236) ((lua-mode (20130419))) "Minor mode for working on LÖVE projects" single ((:commit . "3ca8f3405338f2d6f4fbcdd5e89342a46378543a") (:url . "https://github.com/ejmr/love-minor-mode"))]) (lorem-ipsum . [(20140911 1408) nil "Insert dummy pseudo Latin text." single ((:commit . "4b39f6fed455d67f635b3837cf5668bf74d0f6cd") (:keywords "tools" "language" "convenience"))]) (loop . [(20160813 707) nil "friendly imperative loop structures" single ((:commit . "e22807f83a0890dc8a904c51ee0742c34efccc6c") (:keywords "loop" "while" "for each" "break" "continue"))]) (look-mode . [(20151211 1026) nil "quick file viewer for image and text file browsing" single ((:commit . "d65f75e8ea24eff2ac31c53b4835b45127eedd56"))]) (look-dired . [(20160729 1623) ((look-mode (1 0))) "Extensions to look-mode for dired buffers" single ((:commit . "9bfa4e5e6f3810705b6426c88493ea0bf6b15640") (:url . "https://github.com/vapniks/look-dired") (:keywords "convenience"))]) (lolcode-mode . [(20111002 147) nil "Major mode for editing LOLCODE" single ((:commit . "1914f1ba87587ecf5f175eeb2144c28e9f039317") (:url . "http://github.com/bodil/lolcode-mode") (:keywords "lolcode" "major" "mode"))]) (logview . [(20170928 820) ((emacs (24 1)) (datetime (0 3))) "Major mode for viewing log files" single ((:commit . "72b6c5349206172a146b2c730b8ac040a92ebc3f") (:url . "https://github.com/doublep/logview") (:keywords "files" "tools"))]) (logstash-conf . [(20170524 1229) nil "basic mode for editing logstash configuration" single ((:commit . "4e127f9aec190786613445aa88efa307ff7c6748"))]) (logito . [(20120225 1255) ((eieio (1 3))) "logging library for Emacs" single ((:commit . "824acb89d2cc18cb47281a4fbddd81ad244a2052") (: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 ((:commit . "8286e39502250fc6c3c6656a7f46a8eee8e9a713") (:url . "https://github.com/logaling/logalimacs") (:keywords "translation" "logaling-command"))]) (log4j-mode . [(20160108 1118) nil "major mode for viewing log files" single ((:commit . "26171b1e723502055e085393b0ecdcb6db406010") (:url . "http://log4j-mode.sourceforge.net") (:keywords "tools"))]) (log4e . [(20170401 604) nil "provide logging framework for elisp" single ((:commit . "34309972ad02abcebbcff6b1682731978aef030c") (:url . "https://github.com/aki2o/log4e") (:keywords "log"))]) (lodgeit . [(20150312 649) nil "Paste to a lodgeit powered pastebin" single ((:commit . "ec9b8e5cbb17bcf8ac4bdddd1d361cb60e59384c") (:url . "https://github.com/ionrock/lodgeit-el") (:keywords "pastebin" "lodgeit"))]) (lockfile-mode . [(20170624 2207) nil "Major mode for .lock files" single ((:commit . "fcfef88460cb3cd67c4d83a1801d0326d282feac") (:url . "https://github.com/preetpalS/emacs-lockfile-mode"))]) (loccur . [(20161227 251) ((emacs (24 3))) "Perform an occur-like folding in current buffer" single ((:commit . "650d91dda0d313c8f445a0803c07809d857dee0f") (:url . "https://github.com/fourier/loccur") (:keywords "matching"))]) (loc-changes . [(20160801 1008) nil "keep track of positions even after buffer changes" single ((:commit . "4d1dcdf7631c23b1259ad4f72bf9686cf95fb46c") (:url . "http://github.com/rocky/emacs-loc-changes"))]) (load-theme-buffer-local . [(20120702 1336) nil "Install emacs24 color themes by buffer." single ((:commit . "e606dec66f16a06140b9aad625a4fd52bca4f936") (:url . "http://github.com/vic/color-theme-buffer-local") (:keywords "faces"))]) (load-relative . [(20170526 310) nil "relative file load (within a multi-file Emacs package)" tar ((:commit . "738896e3da491b35399178ed2c6bc92cc728d119") (:url . "http://github.com/rocky/emacs-load-relative") (:keywords "internal"))]) (lms . [(20170804 922) ((emacs (25 1))) "Squeezebox / Logitech Media Server frontend" single ((:url . "https://bitbucket.com/inigoserna/lms.el") (:keywords "multimedia"))]) (llvm-mode . [(20160617 2215) nil "Major mode for the LLVM assembler language." tar ((:commit . "8582763b6572004bcd65b569e7e462c56fc32e96"))]) (livid-mode . [(20131116 544) ((skewer-mode (1 5 3)) (s (1 8 0))) "Live browser eval of JavaScript every time a buffer changes" single ((:commit . "dfe5212fa64738bc4138bfebf349fbc8bc237c26") (:url . "https://github.com/pandeiro/livid-mode"))]) (livescript-mode . [(20140612 2121) nil "Major mode for editing LiveScript files" single ((:commit . "90a918d9686e256e6d4d439cc20f24dad8d3b804") (:url . "https://github.com/yhisamatsu/livescript-mode") (:keywords "languages" "livescript"))]) (livereload . [(20170628 2350) ((emacs (25)) (websocket (1 8))) "Livereload server" tar ((:commit . "1e501d7e46dbd476c2c7cc9d20b5ac9d41fb1955") (:keywords "convenience"))]) (lively . [(20171005 54) nil "interactively updating text" single ((:commit . "348675828c6a81bfa1ac311ca465aad813542c1b"))]) (live-py-mode . [(20180107 2134) ((emacs (24 3))) "Live Coding in Python" tar ((:commit . "00b7d06e525ef8d18064261ff125ac965ad06e8f") (: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 ((:commit . "fece58108939a53104f88d348298c9e122f25b75") (:keywords "docs" "multimedia"))]) (literate-starter-kit . [(20150730 1154) ((emacs (24 3))) "A literate starter kit to configure Emacs using Org-mode files." tar ((:commit . "6dce1d01781966c14558aa553cfc85008c06e115"))]) (literate-coffee-mode . [(20170211 715) ((coffee-mode (0 5 0))) "major-mode for Literate CoffeeScript" single ((:commit . "55ce0305495f4a38c8063c4bd63deb1e1252373d") (:url . "https://github.com/syohex/emacs-literate-coffee-mode"))]) (literal-string . [(20170301 730) ((markdown-mode (2 0)) (emacs (25))) "edit string literals in a dedicated buffer" single ((:commit . "2ca4fc08b8e19e6183b1f1db747bb0a4aa4f98eb") (:url . "https://github.com/joodie/literal-string-mode/") (:keywords "lisp" "tools" "docs"))]) (litecoin-ticker . [(20160611 1711) ((json (1 2))) "litecoin price in modeline" single ((:commit . "3d8047c736e4ee0b8638953f8cc63eaefad34106"))]) (litable . [(20160922 859) ((dash (2 6 0))) "dynamic evaluation replacement with emacs" single ((:commit . "90a2dca14a6da9b24fe332a65cff899ab4a90810") (:keywords "lisp"))]) (lit-mode . [(20141123 936) nil "Major mode for lit" single ((:commit . "c61c403afc8333a5649c5421ab1a6341dc1c7d92") (:keywords "languages" "tools"))]) (list-utils . [(20160414 702) nil "List-manipulation utility functions" single ((:commit . "acf18aca1131a90f8d673974673e3c5d8fdc6a86") (: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 ((:commit . "222c21c68ccc930b2843ea919c960de9be3b55c2") (:keywords "convenience"))]) (list-register . [(20091203 1015) nil "List register" single ((:commit . "f8bec5dc3765174de1089549947d9ca9a1cdbe5f"))]) (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 ((:commit . "b4dd644e4369c9aa66f5bb8895ea49ebbfd0a27a") (:keywords "convenience" "tools"))]) (list-environment . [(20151226 1856) nil "A tabulated process environment editor" single ((:commit . "b7ca30b05905047be2e55199a6475f8d98ce318b") (:keywords "processes" "unix"))]) (lispyville . [(20170907 926) ((lispy (0)) (evil (1 2 12)) (cl-lib (0 5)) (emacs (24 4))) "A minor mode for integrating evil with lispy." single ((:commit . "522fd8dcce23b2719c758e64f99b64591406f2f5") (:url . "https://github.com/noctuid/lispyville") (:keywords "vim" "evil" "lispy" "lisp" "parentheses"))]) (lispyscript-mode . [(20170720 1217) nil "Major mode for LispyScript code." single ((:commit . "def632e3335b0c481fbcf5a17f18b0a8c58dd12f") (:url . "https://github.com/krisajenkins/lispyscript-mode") (:keywords "lisp" "languages"))]) (lispy . [(20180105 1040) ((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 ((:commit . "ee96631f416c410dd30077311f593bf1c58eb50e"))]) (lispxmp . [(20170110 1508) 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 . [(20160930 1227) nil "Highlight bound variables and quoted exprs." single ((:commit . "092f5a6e75ddfc8051b252f10e182723a17980e4") (:url . "https://github.com/Lindydancer/lisp-extra-font-lock") (:keywords "languages" "faces"))]) (liso-theme . [(20160410 1329) nil "Eclectic Dark Theme for GNU Emacs" single ((:commit . "844688245eb860d23043455e165ee24503454c81") (: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 ((:commit . "cc4bacbbf204ef9cf0756f78dfebee2c6ae14d7b"))]) (linum-relative . [(20160510 118) nil "display relative line number in emacs." single ((:commit . "b8a99dcfe38a491172a8193053fb7849634b43c0") (:url . "http://github.com/coldnew/linum-relative") (:keywords "converience"))]) (linum-off . [(20160217 1337) nil "Provides an interface for turning line-numbering off" single ((:commit . "116e66ac259b183e0763b85616888316ab196822") (:url . "http://www.emacswiki.org/emacs/auto-indent-mode.el ") (:keywords "line" "numbering"))]) (linphone . [(20130524 409) nil "Emacs interface to Linphone" tar ((:commit . "99af3db941b7f4e5272bb48bff96c1ce4ceac302") (:url . "https://github.com/zabbal/emacs-linphone") (:keywords "comm"))]) (link-hint . [(20170923 855) ((avy (0 3 0)) (emacs (24 1)) (cl-lib (0 5))) "Use avy to open or copy visible urls." single ((:commit . "0294df85aee10b47fcf6c2c9bfe7e1038660fa21") (:url . "https://github.com/noctuid/link-hint.el") (:keywords "url"))]) (link . [(20140717 2029) nil "Hypertext links in text buffers" single ((:commit . "a23b8f4a422d0de69a006ed010eff5795319db98") (:keywords "interface" "hypermedia"))]) (lingr . [(20100807 1031) nil "Lingr Client for GNU Emacs" single ((:commit . "4215a8704492d3c860097cbe2649936c22c196df") (: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 ((:commit . "76a787bd40c6b567ae68ced7f5d9f9f10725e00d"))]) (lice . [(20170220 143) nil "License And Header Template" tar ((:commit . "4339929927c62bd636f89bb39ea999d18d269250") (: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 ((:commit . "a6ca3b7d6687f3ba60996b9b5044ad1d3b228290") (:keywords "music" "mpd"))]) (lib-requires . [(20170307 855) nil "Commands to list Emacs Lisp library dependencies." single ((:url . "https://www.emacswiki.org/emacs/download/lib-requires.el") (:keywords "libraries" "files"))]) (lfe-mode . [(20170121 454) nil "Lisp Flavoured Erlang mode" tar ((:commit . "2880c8a2a7fe998238b6490fe3e3c484b5c5985e"))]) (lexbind-mode . [(20141027 729) nil "Puts the value of lexical-binding in the mode line" single ((:commit . "fa0a6848c1cfd3fbf45db43dc2deef16377d887d") (:url . "https://github.com/spacebat/lexbind-mode") (:keywords "convenience" "lisp"))]) (levenshtein . [(20090830 340) nil "Edit distance between two strings." single ((:commit . "070925197ebf6b704e6e00c4f2d2ec783f3df38c") (:keywords "lisp"))]) (leuven-theme . [(20170919 252) nil "Awesome Emacs color theme on white background" tar ((:commit . "9d31a9d4ed763d6309e9d44985cd8b4a5a2fb500") (:url . "https://github.com/fniessen/emacs-leuven-theme") (:keywords "color" "theme"))]) (letterbox-mode . [(20170701 1825) ((emacs (24 3))) "hide sensitive text on a buffer" single ((:commit . "88c67a51d67216d569a28e8423200883fde096dd") (:url . "http://github.com/pacha64/letterbox-mode") (:keywords "password" "convenience"))]) (letcheck . [(20160202 1148) nil "Check the erroneous assignments in let forms" single ((:commit . "edf188ca2f85349e971b83f164c6484264e79426") (:url . "https://github.com/Fuco1/letcheck") (:keywords "convenience"))]) (less-css-mode . [(20160930 2153) nil "Major mode for editing LESS CSS files (lesscss.org)" single ((:commit . "2c3f69640c3c98457255f601db98f520dee2e7b6") (: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 ((:commit . "8e809fafbb27a98f815b544d9d9ee15843eb6a36"))]) (lentic . [(20161202 1352) ((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 ((:commit . "678db9327209a1e6200c9272f4080595dc68f8a5"))]) (lenlen-theme . [(20170328 1945) ((color-theme-solarized (20150110))) "a solarized-based kawaii light theme" single ((:commit . "b8a6412c81633b10fb98ba0930f55b25071c084a") (:url . "http://hins11.yu-yake.com/"))]) (lemon-mode . [(20130216 504) nil "A major mode for editing lemon grammar files" single ((:commit . "155bfced6c9afc8072a0133d3d1baa54c6d67430") (:keywords "lemon"))]) (legalese . [(20150820 1024) nil "Add legalese to your program files" single ((:commit . "ec23e69d18329456beed9546a1d6c72f96db91cf") (:url . "https://github.com/jorgenschaefer/legalese") (:keywords "convenience"))]) (leerzeichen . [(20170422 613) nil "Minor mode to display whitespace characters." single ((:commit . "5acf9855ecb2b2cd5da4402bb48df149e7525cc5") (:url . "http://github.com/fgeller/leerzeichen.el") (:keywords "whitespace" "characters"))]) (ledger-mode . [(20171227 1709) ((emacs (24 3))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "cf0c9d84a4f24c1af8059b73cf4ff40343f2b8b2"))]) (leanote . [(20161222 1739) ((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 ((:commit . "d499e7b59bb1f1a2fabc0e4c26fb101ed62ebc7b") (:url . "https://github.com/aborn/leanote-emacs") (:keywords "leanote" "note" "markdown"))]) (lean-mode . [(20180105 1619) ((emacs (24 3)) (dash (2 12 0)) (dash-functional (1 2 0)) (s (1 10 0)) (f (0 19 0)) (flycheck (30))) "A major mode for the Lean language" tar ((:commit . "3403179a38693a221bfa86def0c99f6342c5eb73") (:url . "https://github.com/leanprover/lean-mode") (:keywords "languages"))]) (ldap-mode . [(20091203 1015) nil "major modes for editing LDAP schema and LDIF files" single ((:commit . "8761a835e90b990fb5fe70173ecdcd6f4b776cb0") (:url . "http://www.loveshack.ukfsn.org/emacs") (:keywords "data"))]) (lcb-mode . [(20160815 2240) ((emacs (24))) "LiveCode Builder major mode" single ((:commit . "be0768e9aa6f9b8e76f2230f4f7f4d152a766b9a") (:url . "https://github.com/peter-b/lcb-mode") (:keywords "languages"))]) (lavender-theme . [(20170808 613) ((emacs (24 0))) "an Emacs 24 theme based on Lavender (tmTheme)" single ((:commit . "ef5e959b95d7fb8152137bc186c4c24e986c1e3c") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (launchctl . [(20150518 609) ((emacs (24 1))) "Interface to launchctl on Mac OS X." single ((:commit . "73f8f52a5aa9a0be9bdcf68c29ad0fa2b4a115a4") (:url . "http://github.com/pekingduck/launchctl-el") (:keywords "tools" "convenience"))]) (launch-mode . [(20170105 2112) ((emacs (24 4))) "Major mode for launch-formatted text" tar ((:commit . "25ebd4ba77afcbe729901eb74923dbe9ae81c313") (:url . "https://github.com/iory/launch-mode"))]) (launch . [(20130619 1504) nil "launch files with OS-standard associated applications." single ((:commit . "e7c3b573fc05fe4d3d322389079909311542e799") (:url . "https://github.com/sfllaw/emacs-launch") (:keywords "convenience" "processes"))]) (latexdiff . [(20171225 1623) ((emacs (24 4))) "Latexdiff integration in Emacs" single ((:commit . "665aa65707d0e8c5778de70f38a42be4ba1def5d") (:url . "http://github.com/galaunay/latexdiff.el") (:keywords "tex" "vc" "tools" "git" "helm"))]) (latex-unicode-math-mode . [(20170123 1016) nil "Input method for Unicode math symbols" tar ((:commit . "e8931e68214ca94e6a04080ebc629693d5881884") (: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 ((:commit . "1a0539ab70eaf5dd31c2c94773dddd6f437fed41"))]) (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 . [(20170522 1455) nil "preview LaTeX mathematical expressions." single ((:commit . "775887a89447dd19541b121161cc02e9799d0d3a") (:url . "https://gitlab.com/latex-math-preview/latex-math-preview") (:keywords "latex" "tex"))]) (latex-extra . [(20170816 1847) ((auctex (11 86 1)) (cl-lib (0 5))) "Adds several useful functionalities to LaTeX-mode." single ((:commit . "82d99b8b0c2db20e5270749582e03bcc2443ffb5") (:url . "http://github.com/Malabarba/latex-extra") (:keywords "tex"))]) (lastpass . [(20171208 216) ((emacs (24 4)) (seq (1 9)) (cl-lib (0 5))) "LastPass command wrapper" single ((:commit . "a4529ce70b8187ed9ac4972997df152af58ef2eb") (:url . "https://github.com/storvik/emacs-lastpass") (:keywords "extensions" "processes" "lpass" "lastpass"))]) (language-detection . [(20161123 1013) ((emacs (24)) (cl-lib (0 5))) "Automatic language detection from code snippets" single ((:commit . "54a6ecf55304fba7d215ef38a4ec96daff2f35a4") (:url . "https://github.com/andreasjansson/language-detection.el"))]) (langtool . [(20170917 2154) ((cl-lib (0 3))) "Grammar check utility using LanguageTool" single ((:commit . "bae4bdd240583b2253b4ff03af5295146e285103") (: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 ((:commit . "2c7223bacb116992d700ecb19a60df5c09c63424") (:url . "https://github.com/tom-tan/langdoc/") (:keywords "convenience" "eldoc"))]) (lang-refactor-perl . [(20131122 1327) nil "Simple refactorings, primarily for Perl" single ((:commit . "691bd69639de6b7af357e3b7143563ececd9c497") (:url . "https://github.com/jplindstrom/emacs-lang-refactor-perl") (:keywords "languages" "refactoring" "perl"))]) (lacarte . [(20170307 837) nil "Execute menu items as commands, with completion." single ((:url . "https://www.emacswiki.org/emacs/download/lacarte.el") (:keywords "menu-bar" "menu" "command" "help" "abbrev" "minibuffer" "keys" "completion" "matching" "local" "internal" "extensions"))]) (labburn-theme . [(20170502 207) nil "A lab color space zenburn theme." single ((:commit . "e95334acd8a73fbe8e156f70e047014a87e92e66") (:url . "https://github.com/ksjogo/labburn-theme") (:keywords "theme" "zenburn"))]) (kwin . [(20150308 1112) nil "communicatewith the KWin window manager" single ((:commit . "d4f8f3593598b71ee596e0a87b2c1d6a912a9566") (:url . "http://github.com/reactormonk/kwin-minor-mode"))]) (kv . [(20140108 734) nil "key/value data structure functions" single ((:commit . "721148475bce38a70e0b678ba8aa923652e8900e") (:keywords "lisp"))]) (kurecolor . [(20170808 602) ((emacs (24 1)) (s (1 0))) "color editing goodies for Emacs" single ((:commit . "3e8b63e89e294179e42a14a4a357c29a72669a22"))]) (kubernetes-tramp . [(20171026 922) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for kubernetes containers" single ((:commit . "9fa84df71f6e88bc23a756cdf2df393a35aec945") (:url . "https://github.com/gruggiero/kubernetes-tramp") (:keywords "kubernetes" "convenience"))]) (kubernetes-evil . [(20171122 1819) ((kubernetes (0 12 0)) (evil (1 2 12))) "Kubernetes keybindings for evil-mode." single ((:commit . "d4ce5eb5da1ea0879b7d3266d97aecc8aee2807c"))]) (kubernetes . [(20171122 1819) ((emacs (25 1)) (dash (2 12 0)) (magit (2 8 0))) "Magit-like porcelain for Kubernetes." tar ((:commit . "d4ce5eb5da1ea0879b7d3266d97aecc8aee2807c"))]) (ksp-cfg-mode . [(20170724 1127) ((cl-lib (0 5))) "major mode for editing KSP CFG files" single ((:commit . "713a22ee28688e581ec3ad60228c853b516a14b6") (:url . "http://github.com/lashtear/ksp-cfg-mode") (:keywords "data"))]) (kroman . [(20150827 1640) nil "Korean hangul romanization" single ((:commit . "90402b6ae40383e75d8ba97d66eee93eebf40f70") (:keywords "korean" "roman"))]) (kpm-list . [(20170924 652) nil "An emacs buffer list that tries to intelligently group together buffers." single ((:commit . "e0f5112e5ce8ec1b603f4428fa51681c68bb28f5") (:url . "https://github.com/KMahoney/kpm-list/"))]) (kotlin-mode . [(20171009 1301) ((emacs (24 3))) "Major mode for kotlin" single ((:commit . "ebcf6f3730f455894ebb7ed8e42950f66e8e1c1d") (:keywords "languages"))]) (kosmos-theme . [(20170502 1150) ((emacs (24))) "Black and lightgray theme with not so much syntax highlighting." single ((:commit . "616456d2376a75dc31190ad65137d179fbad4336") (:url . "https://github.com/habamax/kosmos-theme"))]) (korean-holidays . [(20170228 2045) nil "Korean holidays for calendar." single ((:commit . "6e94c2e071069aee9ed12ebbfd9b0ad863b8c78e") (:url . "https://github.com/tttuuu888/korean-holidays") (:keywords "calendar"))]) (kooten-theme . [(20161023 205) ((emacs (24 1))) "Dark color theme" single ((:commit . "d10197b4dd7af02cd14aeab2573c273a294798c3") (:url . "http://github.com/kootenpv/emacs-kooten-theme") (:keywords "themes"))]) (kolon-mode . [(20140122 334) nil "Syntax highlighting for Text::Xslate's Kolon syntax" single ((:commit . "5af0955e280ae991862189ebecd3937c5fc8fb9f") (:url . "https://github.com/samvtran/kolon-mode") (:keywords "xslate" "perl"))]) (kodi-remote . [(20171008 2226) ((request (0 2 0)) (let-alist (1 0 4)) (json (1 4)) (elnode (20140203 1506))) "Remote Control for Kodi" single ((:commit . "479075d96857696cf029cd1f482b9f2f31d82452") (:url . "http://github.com/spiderbit/kodi-remote.el") (:keywords "kodi" "tools" "convinience"))]) (know-your-http-well . [(20160208 1504) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar ((:commit . "3cc5ab6d2764ab7aacb1b6e026abaccbeb6c37f2"))]) (kixtart-mode . [(20150611 904) ((emacs (24))) "major mode for Kixtart scripting files" single ((:commit . "1c2356797e7b766bbaaa2b341176a8b10499cd79") (:url . "https://github.com/ryrun/kixtart-mode") (:keywords "languages"))]) (kiwix . [(20170927 120) ((emacs (24 4)) (cl-lib (0 5))) "Kiwix interface and support." single ((:commit . "86dbead6c0017beefd92a0b64a0bb5f5d12c5b16") (:url . "https://github.com/stardiviner/kiwix.el") (:keywords "kiwix" "wikipedia"))]) (kivy-mode . [(20160902 1041) nil "Emacs major mode for editing Kivy files" single ((:commit . "00c161d076fc754357a133e483699146cdd81518"))]) (kite-mini . [(20160508 406) ((dash (2 11 0)) (websocket (1 5))) "Remotely evaluate JavaScript in the WebKit debugger" tar ((:commit . "a68619dbc109c7989f3448426d8c1ee9e797c11f") (: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 ((:commit . "7ed74d1147a6ddd152d3da65dc30df3517d53144") (:keywords "tools"))]) (killer . [(20120808 422) nil "kill and delete text" single ((:commit . "7bbb223f875402a7b2abee4baa5a54f10bd97212") (:url . "http://github.com/tarsius/killer") (:keywords "convenience"))]) (kill-ring-search . [(20140422 855) nil "incremental search for the kill ring" single ((:commit . "23535b4a01a1cb1574604e36c49614e84e85c883") (:url . "http://nschum.de/src/emacs/kill-ring-search/") (:keywords "convenience" "matching"))]) (kill-or-bury-alive . [(20171231 2218) ((emacs (24 4)) (cl-lib (0 5))) "Precise control over buffer killing in Emacs" single ((:commit . "d21aa7a12f1a76d47249db36eb9825242df9d512") (: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 ((:commit . "16bdfff785ee05d8e74a5780f6808506d990cef7") (:url . "http://www.github.com/brunchboy/kibit-helper") (:keywords "languages" "clojure" "kibit"))]) (kfg . [(20140908 2238) ((f (0 17 1))) "an emacs configuration system" single ((:commit . "d2c9dd26618fb2f7bf1e7b6eae193b1cceba3c97") (:url . "https://github.com/abingham/kfg"))]) (keyword-search . [(20170309 2247) nil "browser keyword search from Emacs" tar ((:commit . "33682e93429027805ee7c51c5f6f608872b6f5dc") (:url . "https://github.com/juhp/keyword-search") (:keywords "web" "search" "keyword"))]) (keyswap . [(20160813 257) ((emacs (24 3))) "swap bindings between key pairs" single ((:commit . "cd682a7c4a8d64d6bae6a005db5045232e5e7b95") (: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 ((:commit . "41bbfc4dbed5de6ecf3ec1dba634c7c26241ca84") (:url . "https://github.com/HKey/keyset"))]) (keymap-utils . [(20170614 1134) ((cl-lib (0 3))) "keymap utilities" single ((:commit . "0130f32e5ade649dd2738206a80570e450906ef6") (:url . "https://github.com/tarsius/keymap-utils") (:keywords "convenience" "extensions"))]) (keyfreq . [(20160516 716) ((cl-lib (0 5))) "track command frequencies" single ((:commit . "9c665c8c219d18866403897936427bb408e3d6b9"))]) (keydef . [(20090428 1231) nil "a simpler way to define keys, with kbd syntax" single ((:commit . "dff2be9f58d12d8c6a490ad0c1b2b10b55528dc0") (:keywords "convenience" "lisp" "customization" "keyboard" "keys"))]) (keychain-environment . [(20170118 626) nil "load keychain environment variables" single ((:commit . "7c08e8c4c3ea4d6eaee12d710a56793771f837c5") (: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 ((:commit . "e29b083a6427d061638749194fc249ef69ad2cc0") (: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 ((:commit . "b3f6ef15c8a13870475d5af159fa24b30f97dea0") (:url . "https://github.com/MartinRykfors/key-leap") (:keywords "point" "convenience"))]) (key-intercept . [(20140210 2349) nil "Intercept prefix keys" single ((:commit . "d9a60edb4ce893f2d3d94f242164fdcc62d43cf2") (:url . "http://github.com/tarao/key-intercept-el") (:keywords "keyboard"))]) (key-combo . [(20150324 739) nil "map key sequence to commands" single ((:commit . "2fb5c65bc82d5bd2964e2b163822429ab45d90a1") (: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 ((:commit . "72443e9ff3c4f1c3ccaced3130236801efde3d83") (:keywords "keyboard" "chord" "input"))]) (kerl . [(20150424 1305) nil "Emacs integration for kerl" single ((:commit . "1732ee26213f021bf040919c45ad276aafcaae14") (:url . "http://github.com/correl/kerl.el/") (:keywords "tools"))]) (kdeconnect . [(20161022 700) nil "An interface for KDE Connect" single ((:commit . "a91a045cd4aabd671b689361efa10f2e01ad8e8e") (:keywords "kdeconnect" "android"))]) (karma . [(20160220 445) ((pkg-info (0 4)) (emacs (24))) "Karma Test Runner Emacs Integration" single ((:commit . "31d3e7708246183d7ed0686be92bf23140af348c") (:url . "http://github.com/tonini/karma.el") (:keywords "language" "javascript" "js" "karma" "testing"))]) (kaomoji . [(20171226 2040) ((emacs (24 3)) (helm-core (1 9 1))) "Input kaomoji superb easily" tar ((:commit . "90a1490743b2a30762f5454c9d9309018eff83dd") (:url . "https://github.com/kuanyui/kaomoji.el") (:keywords "tools" "fun"))]) (kaolin-themes . [(20180103 1058) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:commit . "dc7d63e48da13736d2d79402d385d79ebe797509") (:url . "https://github.com/ogdenwebb/emacs-kaolin-themes"))]) (kanji-mode . [(20160826 439) nil "View stroke order for kanji characters at cursor" tar ((:commit . "eda4f8666486689d36317db7dbda54fb73d3e3d2") (:url . "http://github.com/wsgac/kanji-mode "))]) (kanban . [(20170418 110) nil "Parse org-todo headlines to use org-tables as Kanban tables" single ((:keywords "outlines" "convenience"))]) (kaleidoscope-evil-state-flash . [(20170728 320) ((evil (1 2 12)) (kaleidoscope (0 1 0)) (s (1 11 0))) "Flash keyboard LEDs when changing Evil state" single ((:commit . "e932103e043bd1503bf5d98dd117ff6737b852bc") (:url . "https://github.com/algernon/kaleidoscope.el"))]) (kaleidoscope . [(20170808 117) ((s (1 11 0))) "Controlling Kaleidoscope-powered devices." single ((:commit . "e932103e043bd1503bf5d98dd117ff6737b852bc") (:url . "https://github.com/algernon/kaleidoscope.el"))]) (kakapo-mode . [(20171003 2151) ((cl-lib (0 5))) "TABS (hard or soft) for indentation (leading whitespace), and SPACES for alignment." single ((:commit . "67d516138172fd60782df94454b3d0bd247e84f3") (: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 ((:commit . "d087075cb1a46c2c85cd075220e09b2eaef9b86e") (: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 ((:commit . "d087075cb1a46c2c85cd075220e09b2eaef9b86e") (: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 ((:commit . "d087075cb1a46c2c85cd075220e09b2eaef9b86e") (: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 ((:commit . "3355dbaf5b0185aadfbad24160399abb32c5bea0") (: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 ((:commit . "c482d137d95bc5e1bcd790cdbde25b7f729b2502") (:url . "https://github.com/ganmacs/jumplist") (:keywords "jumplist" "vim"))]) (jump-tree . [(20171014 851) nil "Treat position history as a tree" tar ((:commit . "282267dc6305889e31d46b405b7ad4dfe5923b66") (:url . "https://github.com/yangwen0228/jump-tree") (:keywords "convenience" "position" "jump" "tree"))]) (jump-to-line . [(20130122 853) nil "Jump to line number at point." single ((:commit . "01ef8c3529d85e6c59cc20840acbc4a8e8325bc8") (:keywords "jump" "line" "back" "file" "ruby" "csharp" "python" "perl"))]) (jump-char . [(20160505 851) nil "navigation by char" single ((:commit . "9c1c3618662e7b43d5937342816fd63b5a31e861") (:url . "https://github.com/lewang/jump-char"))]) (jump . [(20161126 1728) ((findr (0 7)) (inflections (2 4)) (cl-lib (0 5))) "build functions which contextually jump between files" single ((:commit . "e4f1372cf22e811faca52fc86bdd5d817498a4d8") (:url . "http://github.com/eschulte/jump.el") (:keywords "project" "convenience" "navigation"))]) (jumblr . [(20170727 1343) ((s (1 8 0)) (dash (2 2 0))) "an anagram game for emacs" tar ((:commit . "34533dfb9db8538c005f4eaffafeff7ed193729f") (:url . "https://github.com/mkmcc/jumblr") (:keywords "anagram" "word game" "games"))]) (julia-shell . [(20161125 1110) ((julia-mode (0 3))) "Major mode for an inferior Julia shell" tar ((:commit . "583a0b2ca20461ab4356929fd0f2212c22341b69"))]) (julia-repl . [(20171116 46) ((emacs (25))) "A minor mode for a Julia REPL" single ((:commit . "f808a12e7ebe403f82036899c2dace640be73154") (:keywords "languages"))]) (julia-mode . [(20171116 642) nil "Major mode for editing Julia source code" single ((:commit . "2ef6992125a85674532a1e37dacd5c60bee4feeb") (: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 ((:commit . "b50daa48510f71e74ce0ec2eb85030896a79cf96") (:url . "http://jtags.sourceforge.net") (:keywords "languages" "tools"))]) (jsx-mode . [(20130908 1024) nil "major mode for JSX" single ((:commit . "47213429c09259126cddb5742482cfc444c70d50") (: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 ((:commit . "2a3fd16c992f7790dc67134ef06a814c3d20579c") (: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 ((:commit . "41749257aecf13c7bd6ed489b5ab3304d06e40bc") (:keywords "languages"))]) (jsonnet-mode . [(20171005 24) ((emacs (24))) "Major mode for editing jsonnet files" single ((:commit . "efe768fdcff25d746674fbbf229b9e1a7efea4f1") (:url . "https://github.com/mgyucht/jsonnet-mode") (:keywords "languages"))]) (json-snatcher . [(20150511 2047) ((emacs (24))) "Grabs the path to JSON values in a JSON file" single ((:commit . "c4cecc0a5051bd364373aa499c47a1bb7a5ac51c") (:url . "http://github.com/sterlingg/json-snatcher"))]) (json-rpc . [(20180104 728) ((emacs (24 1)) (cl-lib (0 5))) "JSON-RPC library" single ((:commit . "0992ae71964055230aa5d4d934a1b93b5dfd7eb4") (:url . "https://github.com/skeeto/elisp-json-rpc"))]) (json-reformat . [(20160212 53) nil "Reformatting tool for JSON" single ((:commit . "8eb6668ed447988aea06467ba8f42e1f2178246f") (:url . "https://github.com/gongo/json-reformat") (:keywords "json"))]) (json-navigator . [(20171220 19) ((emacs (24 3)) (hierarchy (0 6 0))) "View and navigate JSON structures" single ((:commit . "7a1fec93500c46ccba4086d10115d8188607d0d0") (:url . "https://github.com/DamienCassou/json-navigator"))]) (json-mode . [(20170719 2205) ((json-reformat (0 0 5)) (json-snatcher (1 0 0))) "Major mode for editing JSON files." single ((:commit . "32d5a9b3319e6797c4d52e7d61a65e5638102ef4") (:url . "https://github.com/joshwnj/json-mode"))]) (jsfmt . [(20150727 1525) nil "Interface to jsfmt command for javascript files" single ((:commit . "68109120f553fbc651fafb6fc35ed83c3e79f8a6") (:url . "https://github.com/brettlangdon/jsfmt.el"))]) (jscs . [(20151015 1049) ((emacs (24 1)) (cl-lib (0 5))) "Consistent JavaScript editing using JSCS" single ((:commit . "9d39d0f2355e69a020bf76242504f3a33e013ccf") (:url . "https://github.com/papaeye/emacs-jscs") (:keywords "languages" "convenience"))]) (js3-mode . [(20160515 850) nil "An improved JavaScript editing mode" tar ((:commit . "229aeb374f1b1f3ee5c59b8ba3eebb6385c232cb") (:keywords "javascript" "languages"))]) (js2-refactor . [(20171207 202) ((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 ((:commit . "a86cb31b1c9f9719b4c4199a721fe2b8b58a015c"))]) (js2-mode . [(20171224 1833) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:commit . "d72ed2060337e9f4400bcec85f8daaf18cb05413") (:url . "https://github.com/mooz/js2-mode/") (:keywords "languages" "javascript"))]) (js2-highlight-vars . [(20170418 1129) ((emacs (24 4)) (js2-mode (20150908))) "highlight occurrences of the variable under cursor" single ((:commit . "e3bb177e50f76b272e8073a94d4f46be6512a163") (:url . "http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode/js2-highlight-vars-mode"))]) (js2-closure . [(20170816 1218) ((js2-mode (20150909))) "Google Closure dependency manager" single ((:commit . "f59db386d7d0693935d0bf52babcd2c203c06d04") (:url . "http://github.com/jart/js2-closure") (:keywords "javascript" "closure"))]) (js-import . [(20170115 853) ((emacs (24 4)) (f (0 19 0)) (projectile (0 14 0)) (dash (2 13 0))) "Import Javascript files from your current project or dependencies" single ((:commit . "7b1b7c963e3df9c76ed6cfb66c908c80775c6cfb") (:url . "https://github.com/jakoblind/js-import") (:keywords "tools"))]) (js-format . [(20170118 1702) ((emacs (24 1)) (js2-mode (20101228))) "Format or transform code style using NodeJS server with different javascript formatter" tar ((:commit . "544bda9be72b74ec2d442543ba60cff727d96669") (:url . "http://github.com/futurist/js-format.el") (:keywords "js" "javascript" "format" "standard" "jsbeautify" "esformatter" "airbnb"))]) (js-doc . [(20160714 2134) nil "Insert JsDoc style comment easily" single ((:commit . "f0606e89d5aa89146f96edb38cf69af0068a9d1e") (:url . "https://github.com/mooz/js-doc") (:keywords "document" "comment"))]) (js-comint . [(20171129 2056) ((emacs (24 3))) "JavaScript interpreter in window." single ((:commit . "83e932e4a83d1a69098ee87e0ab911d299368e60") (:url . "https://github.com/redguardtoo/js-comint") (:keywords "javascript" "node" "inferior-mode" "convenience"))]) (js-codemod . [(20171104 454) ((emacs (24 4))) "Run js-codemod on current line or selected region" tar ((:commit . "014e56c846487d1eeaf8a91dd503b9d96eb1510a") (:keywords "js" "codemod" "region"))]) (js-auto-format-mode . [(20180103 718) ((emacs (24))) "Minor mode for auto-formatting JavaScript code" single ((:commit . "37e83641fd5eab45e813e4bc74a835fe7229c160") (:url . "https://github.com/ybiquitous/js-auto-format-mode") (:keywords "languages"))]) (js-auto-beautify . [(20161030 2209) ((web-beautify (0 3 1)) (web-mode (14 0 27))) "auto format you js/jsx file" single ((:commit . "180d15af7b5dfaab4ee1954cca2fdc797932f9de"))]) (jquery-doc . [(20150812 58) nil "jQuery api documentation interface for emacs" tar ((:commit . "24032284919b942ec27707d929bdd8bf48420062") (:keywords "docs" "jquery"))]) (jq-mode . [(20171116 815) ((emacs (25 1))) "Edit jq scripts." tar ((:commit . "8384a1926cc22000e5e42f86f28d807fd6149f8e") (:url . "https://github.com/ljos/jq-mode"))]) (jpop . [(20170410 550) ((emacs (24)) (dash (2 11 0)) (cl-lib (0 5))) "Lightweight project caching and navigation framework" tar ((:commit . "7628b03260be96576b34459d45959ee77d8b2110") (:url . "https://github.com/domtronn/jpop.el") (: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 ((:commit . "6059bb64891fae45827174e044d6a87ac07172d8") (:keywords "languages"))]) (jknav . [(20121006 1325) nil "Automatically enable j/k keys for line-based navigation" single ((:commit . "861245715c728503dad6573278fdd75c271dbf8b") (:keywords "keyboard" "navigation"))]) (jist . [(20161229 921) ((emacs (24 4)) (dash (2 12 0)) (seq (1 11)) (let-alist (1 0 4)) (magit (2 1 0)) (request (0 2 0))) "Gist integration" single ((:commit . "da0692452e312a99bb27d8708504b521798aca48") (: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 ((:commit . "4fc534c47df26a2f402bf835ebe2ed89474a4062") (: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 ((:commit . "cfaa7bbe7bb290cc500440124ce89686f3e26f86"))]) (jg-quicknav . [(20170808 1830) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file." single ((:commit . "c8d53e774d63e68a944092c08a026b57da741038") (:url . "https://github.com/jeffgran/jg-quicknav") (:keywords "navigation"))]) (jetbrains . [(20171107 847) ((emacs (24 3)) (cl-lib (0 5)) (f (0 17))) "JetBrains IDE bridge" single ((:commit . "8d0851793d0658cc39bca455dc14c89f78ab8335") (:url . "https://github.com/emacs-php/jetbrains.el") (:keywords "tools" "php"))]) (jenkins-watch . [(20121004 1626) nil "Watch continuous integration build status" single ((:commit . "37b84dfbd98240a57ff798e1ff8bc7dba2913577") (:url . "https://github.com/ataylor284/jenkins-watch"))]) (jenkins . [(20170721 236) ((dash (2 12)) (emacs (24 3)) (json (1 4))) "Minimalistic Jenkins client for Emacs" single ((:commit . "1ec967973db685c9d84133ec6a5e06489ce06b62") (:keywords "jenkins" "convenience"))]) (jemdoc-mode . [(20170704 1327) ((emacs (24 3))) "Major mode for editing jemdoc files" single ((:commit . "529b4d4681e1198b9892f340fdd6c3f1592a047a") (:url . "https://github.com/drdv/jemdoc-mode") (:keywords "convenience" "usability"))]) (jekyll-modes . [(20141117 514) ((polymode (0 2))) "Major modes (markdown and HTML) for authoring Jekyll content" single ((:commit . "7cb10b50fd2883e3f7b10fdfd98f19f2f0b2381c") (: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 ((:commit . "7a2e677400717ed12b959cb5988e7b3fb1c12117"))]) (jedi-core . [(20170121 610) ((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 ((:commit . "b0764f425766786dfb1bff910ed1d1670f11eb9c"))]) (jedi . [(20160425 2156) ((emacs (24)) (jedi-core (0 2 2)) (auto-complete (1 4))) "a Python auto-completion for Emacs" single ((:commit . "b0764f425766786dfb1bff910ed1d1670f11eb9c"))]) (jdee . [(20171007 835) ((emacs (24 3)) (flycheck (30)) (memoize (1 0 1)) (dash (2 13 0)) (s (1 12 0))) "Java Development Environment for Emacs" tar ((:commit . "ebe5d2e36a6a367376ed6cde590d5f805830ec9e") (:url . "http://github.com/jdee-emacs/jdee") (:keywords "java" "tools"))]) (jdecomp . [(20170224 1400) ((emacs (24 5))) "Interface to Java decompilers" single ((:commit . "692866abc83deedce62be8d6040cf24dda7fb7a8") (:url . "https://github.com/xiongtx/jdecomp") (:keywords "decompile" "java" "languages" "tools"))]) (jbeans-theme . [(20171212 1053) ((emacs (24))) "Jbeans theme for GNU Emacs 24 (deftheme)" single ((:commit . "08dbcc9d8d33ed17cfe2de279f6979692c6fcaab") (:url . "https://github.com/synic/jbeans-emacs"))]) (jazz-theme . [(20170411 711) nil "A warm color theme for Emacs 24+." single ((:commit . "b1cb78a97cc4050f19d88a89e455c3e52d98240e") (:url . "https://github.com/donderom/jazz-theme"))]) (jaword . [(20170425 2327) ((tinysegmenter (0 1))) "Minor-mode for handling Japanese words better" single ((:commit . "ac062b0e5ab4bd3270497e80aa0f3ac033a0493f") (:url . "http://hins11.yu-yake.com/"))]) (javap-mode . [(20120223 1408) nil "Javap major mode" single ((:commit . "864c1130e204b2072e1d19cd027b6fce8ebe6629") (:url . "http://github.com/hiredman/javap-mode"))]) (javadoc-lookup . [(20160213 1631) ((cl-lib (0 3))) "Javadoc Emacs integration with Maven" tar ((:commit . "507a2dd443d60b537b8f779c1847e2cd0ccd1382") (:url . "https://github.com/skeeto/javadoc-lookup"))]) (java-snippets . [(20160626 1952) ((yasnippet (0 8 0))) "Yasnippets for Java" tar ((:commit . "738523debb1018439bda0ce70e00248154a600ac") (:url . "https://github.com/nekop/yasnippet-java-mode"))]) (java-imports . [(20170913 710) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Java imports" single ((:commit . "e96ff44ed48b362ab6227b8b802b84d84f78bcaa") (:url . "http://www.github.com/dakrone/emacs-java-imports") (:keywords "java"))]) (jastadd-ast-mode . [(20161219 126) ((emacs (24))) "Major mode for editing JastAdd AST files" single ((:commit . "a29fdb470cbf0a398164950a3b0d2217de48e0c0") (:url . "https://github.com/rudi/jastadd-ast-mode") (:keywords "languages"))]) (jasminejs-mode . [(20150526 1705) nil "A minor mode for manipulating jasmine test files" tar ((:commit . "9f8044bf81ab5b4841a30b0bd099916e1b7ff54a") (:url . "https://github.com/stoltene2/jasminejs-mode") (:keywords "javascript" "jasmine"))]) (jar-manifest-mode . [(20160430 1726) nil "Major mode to edit JAR manifest files" single ((:commit . "270dae14c481300f75ed96dad3a5ae42ca928a1d") (: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 ((:commit . "85b9182850707b5d107391f6caee5bd401507a7d") (: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 ((:commit . "c160e195cda0e02a709a2d39c62bc2a1ed39a09a") (:keywords "docs" "help"))]) (japanese-holidays . [(20160927 2318) ((cl-lib (0 3))) "calendar functions for the Japanese calendar" single ((:commit . "0bccfac342d6ebda1c1a35c3babca0c800ff0c9b") (:url . "https://github.com/emacs-jp/japanese-holidays") (:keywords "calendar"))]) (jammer . [(20160310 59) nil "Punish yourself for using Emacs inefficiently" single ((:commit . "48aa795df6df7ae6484518bcd0398293ca49d7c6") (:url . "https://github.com/wasamasa/jammer") (:keywords "games"))]) (jade-mode . [(20160525 741) nil "Major mode for editing .jade files" single ((:commit . "4dbde92542fc7ad61df38776980905a4721d642e") (:url . "https://github.com/brianc/jade-mode"))]) (jack-connect . [(20141207 407) nil "Manage jack connections within Emacs" single ((:commit . "b00658dfe3d5d67431c18ffa693d5a3705067ba0"))]) (jabber-otr . [(20150918 444) ((emacs (24)) (jabber (0 8 92))) "Off-The-Record messaging for jabber.el" tar ((:commit . "2692b1530234e0ba9a0d6c1eaa1cbe8679f193c0") (:url . "https://github.com/legoscia/emacs-jabber-otr/") (:keywords "comm"))]) (jabber . [(20170106 1603) ((fsm (0 2))) "A Jabber client for Emacs." tar ((:commit . "2ef76cff4a5a932cf17dc6107a0c5adee806081e"))]) (j-mode . [(20171224 1056) nil "Major mode for editing J programs" tar ((:commit . "e8725ac8af95498faabb2ca3ab3bd809a8f148e6") (:url . "http://github.com/zellio/j-mode") (:keywords "j" "languages"))]) (iy-go-to-char . [(20141029 846) nil "Go to next CHAR which is similar to \"f\" and \"t\" in vim" single ((:commit . "04ab4f5f3a241cbbc9b8c178a22b412a62f632f9") (: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 ((:commit . "aea4c54a5cc5a6f26637353c16a3a0e70fc76963") (:url . "http://www.github.com/theanalyst/ix.el"))]) (ivy-youtube . [(20171112 732) ((request (0 2 0)) (ivy (0 8 0)) (cl-lib (0 5))) "Query YouTube and play videos in your browser" single ((:commit . "8168dc1f26521830dfd99466d35ab93159afd004") (:url . "https://github.com/squiter/ivy-youtube") (:keywords "youtube" "multimedia" "mpv" "vlc"))]) (ivy-xref . [(20171229 252) ((emacs (25 1)) (ivy (0 10 0))) "Ivy interface for xref results" single ((:commit . "aa97103ea8ce6ab8891e34deff7d43aa83fe36dd") (:url . "https://github.com/alexmurray/ivy-xref"))]) (ivy-xcdoc . [(20160917 355) ((ivy (0 8 0)) (emacs (24 4))) "Search Xcode documents with ivy interface." single ((:commit . "5ea22af36c4c2737fb0bec53432c233482d8b314") (:url . "https://github.com/hex2010/emacs-ivy-xcdoc") (:keywords "ivy" "xcode" "xcdoc"))]) (ivy-todo . [(20171208 809) ((ivy (0 8 0)) (emacs (24 3))) "Manage org-mode TODOs with ivy" single ((:commit . "964e347cea1a6097854d7113f5b07f6c5ef81df0") (:url . "http://github.com/Kungsgeten/ivy-todo") (:keywords "convenience"))]) (ivy-rtags . [(20170522 2154) ((ivy (0 7 0)) (rtags (2 10))) "RTags completion back-end for ivy" single ((:commit . "db5ad3a48c579b3522411bd2411c09dbb27af578") (:url . "http://rtags.net"))]) (ivy-rich . [(20180108 1739) ((emacs (24 4)) (ivy (0 8 0))) "More friendly display transformer for ivy." single ((:commit . "8fc3ca8153bb4fbefe60d641c2e26826f8b9e705") (:keywords "ivy"))]) (ivy-purpose . [(20160724 303) ((emacs (24)) (ivy (0 8)) (window-purpose (1 5))) "Ivy Interface for Purpose" single ((:commit . "0495f2f3aed64d7e0028125e76a9a68f8fc4107e") (:url . "https://github.com/bmag/ivy-purpose"))]) (ivy-pass . [(20170812 1255) ((emacs (24)) (ivy (0 8 0)) (password-store (1 6 5))) "ivy interface for pass" single ((:commit . "5b523de1151f2109fdd6a8114d0af12eef83d3c5") (:url . "https://github.com/ecraven/ivy-pass/") (:keywords "pass" "password" "convenience" "data"))]) (ivy-pages . [(20160728 1220) ((emacs (24 1)) (ivy (0 8 0))) "Complete current buffer's pages with Ivy" single ((:commit . "47b03a1f9384502cf22369ff31a2898c863d3aff") (:url . "https://github.com/igorepst/ivy-pages") (:keywords "convenience" "matching"))]) (ivy-lobsters . [(20171202 1241) ((ivy (0 8 0)) (cl-lib (0 5))) "Browse lobste.rs stories with ivy." single ((:commit . "4364df4b3685fd1b50865ac9360fb948c0288dd1") (:url . "https://github.com/julienXX/ivy-lobsters"))]) (ivy-hydra . [(20171130 1143) ((emacs (24 1)) (ivy (0 9 0)) (hydra (0 13 4))) "Additional key bindings for Ivy" single ((:commit . "b960aa4fa52b19dba4d5994fb29f445164209f46") (:url . "https://github.com/abo-abo/swiper") (:keywords "completion" "matching" "bindings"))]) (ivy-historian . [(20170715 2120) ((emacs (24 4)) (historian (20170111)) (ivy (0 8 0)) (flx (0 6 1))) "Persistently store selected minibuffer candidates" single ((:commit . "ba560443a216befd4460fcf16dc6c7f23cb73d8d") (:url . "https://github.com/PythonNut/historian.el") (:keywords "convenience" "ivy"))]) (ivy-gitlab . [(20160519 312) ((s (1 9 0)) (dash (2 9 0)) (ivy (0 8 0)) (gitlab (0 8))) "Ivy interface to Gitlab" single ((:commit . "67567a354a1888419331b79862f151817d9747c5") (:url . "https://github.com/nlamirault/emacs-gitlab") (:keywords "gitlab" "ivy"))]) (ivy-feedwrangler . [(20171121 1306) ((ivy (9 0))) "An Ivy interface to the Feedwrangler RSS service" single ((:commit . "ad4f94f8cc4557876ea0b0fb9b519f16ce23e96a") (:url . "https://github.com/asimpson/ivy-feedwrangler") (:keywords "rss" "url" "ivy"))]) (ivy-erlang-complete . [(20170709 2151) ((async (1 9)) (counsel (0 8 0)) (ivy (0 8 0)) (erlang (19 2)) (emacs (24 4))) "Erlang context sensitive completion at point using ivy. It also support xref and eldoc." tar ((:commit . "acd6322571cb0820868a6febdc5326782a29b729"))]) (ivy-dired-history . [(20170625 2256) ((ivy (0 9 0)) (counsel (0 9 0)) (cl-lib (0 5))) "use ivy to open recent directories" single ((:commit . "c9c67ea1ee5e68443f0e6006ba162d6c8d868b69") (:url . "https://github.com/jixiuf/ivy-dired-history"))]) (ivy-bibtex . [(20171213 317) ((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 bibliography manager based on Ivy" tar ((:commit . "84863a37695b786c6c6980a589f8ea282c385ab2"))]) (ivy . [(20180104 1212) ((emacs (24 1))) "Incremental Vertical completYon" tar ((:commit . "7042d7096e440ef392fe39aeb8e0c7be957151b5") (:url . "https://github.com/abo-abo/swiper") (:keywords "matching"))]) (ivs-edit . [(20170818 741) ((emacs (24 3)) (dash (2 6 0)) (cl-lib (1 0))) "IVS (Ideographic Variation Sequence) editing tool" tar ((:commit . "5db39c234aa7393b591168a4fd0a9a4cbbca347d") (:url . "http://github.com/kawabata/ivs-edit") (:keywords "text"))]) (ivariants . [(20170822 1924) ((emacs (24 3)) (ivs-edit (1 0))) "Ideographic variants editor and browser" tar ((:commit . "ca0b74d32b5d2d77a45cc6ad6edc00be0ee85284") (:url . "http://github.com/kawabata/ivariants") (:keywords "i18n" "languages"))]) (iterator . [(20170207 38) ((emacs (24)) (cl-lib (0 5))) "A library to create and use elisp iterators objects." single ((:commit . "9da54f9aed945b46866782cdf962c9e530419297") (:url . "https://github.com/thierryvolpiatto/iterator"))]) (iter2 . [(20171128 1211) ((emacs (25 1))) "Reimplementation of Elisp generators" single ((:commit . "b0e8ecebe2d6807403a5eb1c75d68a4706259d4e") (:url . "https://github.com/doublep/iter2") (:keywords "elisp" "extensions"))]) (itasca . [(20170601 922) ((emacs (24 3))) "Major modes for Itasca software data files." tar ((:commit . "3d15dd1b70d6db69b0f4758a3e28b8b506cc84ca") (:url . "http://github.com/jkfurtney/itasca-emacs/") (:keywords "itasca" "flac" "3dec" "udec" "flac3d" "pfc" "pfc2d" "pfc3d" "fish"))]) (itail . [(20171112 4) nil "An interactive tail mode" single ((:commit . "6e43c20da03be3b9c6ece93b7dc3495975ec1888") (:url . "https://github.com/re5et/itail") (:keywords "tail"))]) (iss-mode . [(20141001 1213) nil "Mode for InnoSetup install scripts" single ((:commit . "3b517aff31529bab33f8d7b562bd17aff0107fd1"))]) (isortify . [(20171223 1812) nil "(automatically) format python buffers using isort." single ((:commit . "2db50c1f585db8a8ec5fa28a90a8179516c16cd0") (:url . "https://github.com/proofit404/isortify"))]) (isgd . [(20150414 236) nil "Shorten URLs using the isgd.com shortener service" single ((:commit . "764306dadd5a9213799081a48aba22f7c75cca9a") (:url . "https://github.com/chmouel/isgd.el"))]) (isend-mode . [(20171118 745) nil "Interactively send parts of an Emacs buffer to an interpreter" single ((:commit . "88d4576e70e5874115c305ab2767d181dfda5985") (: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 ((:commit . "51a1029bec1ec414885f9edb7e5947603dffdab2") (:url . "https://github.com/re5et/isearch-symbol-at-point") (:keywords "isearch"))]) (isearch-prop . [(20170303 1504) nil "Search text-property or overlay-property contexts." single ((:url . "https://www.emacswiki.org/emacs/download/isearch-prop.el") (:keywords "search" "matching" "invisible" "thing" "help"))]) (isearch-dabbrev . [(20141223 2222) ((cl-lib (0 5))) "Use dabbrev in isearch" single ((:commit . "1efe7abba4923015cbc2462395deaec5446a9cc8") (:url . "https://github.com/Dewdrops/isearch-dabbrev") (:keywords "dabbrev" "isearch"))]) (isearch+ . [(20170723 1826) nil "Extensions to `isearch.el' (incremental search)." single ((:url . "https://www.emacswiki.org/emacs/download/isearch%2b.el") (:keywords "help" "matching" "internal" "local"))]) (irony-eldoc . [(20170502 1208) ((emacs (24)) (cl-lib (0 5)) (irony (0 1))) "irony-mode support for eldoc-mode" single ((:commit . "0df5831eaae264a25422b061eb2792aadde8b3f2") (:url . "https://github.com/ikirill/irony-eldoc") (:keywords "c" "c++" "objc" "convenience" "tools"))]) (irony . [(20180104 1109) ((cl-lib (0 5)) (json (1 2))) "C/C++ minor mode powered by libclang" tar ((:commit . "82ba45ec15c9011bbdf1d69cf25c8193d33c0028") (: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 ((:commit . "6a48c66187289de5f300492be11c83e98410c018") (:url . "https://github.com/atykhonov/iregister.el") (:keywords "convenience"))]) (ir-black-theme . [(20130302 2355) nil "Port of ir-black theme" single ((:commit . "36e930d107604b5763c80294a6f92aaa02e6c272") (:keywords "faces"))]) (iqa . [(20170722 834) ((emacs (24 3))) "Init file(and directory) Quick Access." single ((:commit . "08e3f70d0a3ed95a0c5675ae88e7966474ecc45a") (:url . "https://github.com/a13/iqa.el"))]) (ipython-shell-send . [(20171212 318) ((emacs (24))) "Send code (including magics) to ipython shell" single ((:commit . "36523a387c15ee1652a5b0e291d4d4838da5e912") (:url . "https://github.com/jackkamm/ipython-shell-send-el") (:keywords "tools" "processes"))]) (ipretty . [(20140406 2220) nil "Interactive Emacs Lisp pretty-printing" single ((:commit . "6f6da8907abea53d6d246d61e1a0f4ebeb0b9f38") (:url . "https://github.com/steckerhalter/ipretty") (:keywords "pretty-print" "elisp" "buffer"))]) (iplayer . [(20161120 1320) nil "Browse and download BBC TV/radio shows" single ((:commit . "b788fffa4b36bbd558047ffa6be51b1f0f462f23") (:url . "https://github.com/csrhodes/iplayer-el") (:keywords "multimedia" "bbc"))]) (ipcalc . [(20170926 105) ((cl-lib (0 5))) "IP subnet calculator" single ((:commit . "2720f7e3e662e04e195f8338b81a499cf321296a") (:url . "http://github.com/dotemacs/ipcalc.el") (:keywords "networking" "tools"))]) (iodine-theme . [(20151031 939) ((emacs (24))) "A light emacs color theme" single ((:commit . "02fb780e1d8d8a6b9c709bfac399abe1665c6999") (:url . "https://github.com/srdja/iodine-theme") (:keywords "themes"))]) (ioccur . [(20130821 2248) nil "Incremental occur" single ((:commit . "4c0ef992a6fcd2aed62e3866d56650463108ab5a") (:url . "https://github.com/thierryvolpiatto/ioccur"))]) (io-mode-inf . [(20140128 1134) nil "Interaction with an Io interpreter." single ((:commit . "6dd2bac3fd87484bb7d97e135b06c29d70b444b6") (:url . "https://github.com/slackorama/io-emacs") (:keywords "io" "languages"))]) (io-mode . [(20161004 56) nil "Major mode to edit Io language files in Emacs" single ((:commit . "fd65ae769093defcf554d6d637eba6e6dfc29f56") (:url . "https://github.com/superbobry/io-mode") (:keywords "languages" "io"))]) (inverse-acme-theme . [(20170822 1954) ((autothemer (0 2)) (cl-lib (0 5))) "A theme that looks like an inverse of Acme's color scheme." single ((:commit . "74d6f3e2f6534371509dd2d77006435156c276d6") (:url . "http://github.com/djohnson/inverse-acme-theme"))]) (interval-tree . [(20130325 707) ((dash (1 1 0))) "Interval tree data structure for 1D range queries" single ((:commit . "301302f480617091cf3ab6989caac385d52543dc") (: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 ((:commit . "38af7ecf0a493ad8f487074938a2a115f3531177") (:url . "https://github.com/Fuco1/interval-list") (:keywords "extensions" "data structure"))]) (intero . [(20180102 1220) ((flycheck (0 25)) (company (0 8)) (emacs (24 4)) (haskell-mode (13 0))) "Complete development mode for Haskell" single ((:commit . "322b3c017153a536ffa3559b64fc1ac16af19a69") (:url . "https://github.com/commercialhaskell/intero") (:keywords "haskell" "tools"))]) (interleave . [(20171003 2324) nil "Interleaving text books since 2015" single ((:commit . "87549df30cbc681baf86b238bd14c7cf7ec11fc4") (:url . "https://github.com/rudolfochrist/interleave"))]) (interaction-log . [(20160305 501) ((cl-lib (0))) "exhaustive log of interactions with Emacs" single ((:commit . "a49a06746d4df6bcfceec3c48dece065d635f9f9") (:url . "https://github.com/michael-heerdegen/interaction-log.el") (:keywords "convenience"))]) (intellij-theme . [(20171017 715) nil "Inspired by IntelliJ's default theme" single ((:commit . "1bbfff8e6742d18e9b77ed796f44da3b7bd10606") (:keywords "faces"))]) (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 ((:commit . "7ef5446cebb08a17d4106d2e6f3c053e49e1e829") (:url . "http://github.com/duelinmarkers/insfactor.el") (:keywords "clojure"))]) (insert-shebang . [(20170825 438) nil "Insert shebang line automatically." single ((:commit . "adfa473f07443b231914d277c20a3419b30399b6") (:url . "http://github.com/psachin/insert-shebang") (:keywords "shebang" "tool" "convenience"))]) (inlineR . [(20120520 732) nil "insert Tag for inline image of R graphics" single ((:commit . "29357186beca825e3d0451b700ec09b9ed65e37b") (:url . "https://github.com/myuhe/inlineR.el") (:keywords "convenience" "iimage.el" "cacoo.el"))]) (inline-docs . [(20170522 2150) ((emacs (24 3))) "Show inline contextual docs." single ((:commit . "b57f1681be6147f999cdc12abff414a0442e8897") (:url . "https://github.com/stardiviner/inline-docs.el") (:keywords "inline" "docs" "overlay"))]) (inline-crypt . [(20170824 200) nil "Simple inline encryption via openssl" tar ((:commit . "281385b383f850fd2e895926b1cef804dd052633"))]) (inkpot-theme . [(20171217 144) nil "port of vim's inkpot theme" single ((:commit . "8d59548ff5171bf6be6acc58d111674579646124") (:url . "https://github.com/ideasman42/emacs-inkpot-theme") (:keywords "color" "theme"))]) (ink-mode . [(20160814 416) ((emacs (24 3))) "Major mode for writing interactive fiction in Ink" single ((:commit . "e35f26abbaf8ea23c5aa0a0c7ef15334cdfb7b48") (:url . "http://github.com/Kungsgeten/ink-mode") (:keywords "languages"))]) (initsplit . [(20160919 1118) nil "code to split customizations into different files" single ((:commit . "c941d436eb2b10b01c76a582c5a2b23fb30751aa") (:url . "http://www.gci-net.com/users/j/johnw/emacs.html") (:keywords "lisp"))]) (init-open-recentf . [(20161206 645) ((emacs (24 4))) "Open recentf immediately after Emacs is started" single ((:commit . "7d8fb124806291f7f6ef2ec3a664ea25899b6d68") (:url . "https://github.com/zonuexe/init-open-recentf.el") (:keywords "files" "recentf" "after-init-hook"))]) (init-loader . [(20160528 615) nil "Loader for configuration files" single ((:commit . "5d3cea1004c11ff96b33020e337b03b925c67c42") (:url . "https://github.com/emacs-jp/init-loader/"))]) (ini-mode . [(20170424 209) nil "Major mode for Windows-style ini files." single ((:commit . "2194cfa2fd13196a37350ec20b3f00dcf6162b7c") (:url . "https://github.com/Lindydancer/ini-mode") (:keywords "languages" "faces"))]) (inherit-local . [(20170409 949) ((emacs (24 3))) "Inherited buffer-local variables" single ((:commit . "b1f4ff9c41f9d64e4adaf5adcc280b82f084cdc7") (:url . "https://github.com/shlevy/inherit-local/tree-master/"))]) (info-buffer . [(20170112 622) nil "Display info topics in separate buffers" single ((:commit . "d35dad6e766c6e2ddb8dc6acb4ce5b6e10fbcaa7") (:url . "http://www.github.com/llvilanova/info-buffer") (:keywords "docs" "info"))]) (info+ . [(20170923 1929) nil "Extensions to `info.el'." single ((:url . "https://www.emacswiki.org/emacs/download/info%2b.el") (:keywords "help" "docs" "internal"))]) (inflections . [(20170913 216) ((cl-lib (0 5)) (emacs (24))) "convert english words between singular and plural" single ((:commit . "e4f1372cf22e811faca52fc86bdd5d817498a4d8") (:url . "https://github.com/eschulte/jump.el") (:keywords "languages" "tools" "wp"))]) (inferior-spim . [(20160826 646) nil "inferior mode for spim." single ((:commit . "fb9aa091f6058bf320793f1a608c1ed7322c1f47") (:keywords "spim" "inferior" "mips"))]) (inf-ruby . [(20171211 225) nil "Run a Ruby process in a buffer" single ((:commit . "5ae6149a15068d3e2f83a5bd08e9cd7605f75fa9") (:url . "http://github.com/nonsequitur/inf-ruby") (:keywords "languages" "ruby"))]) (inf-mongo . [(20160815 216) nil "Run a MongoDB shell process in a buffer" single ((:commit . "649dc6ea8e468f1d8109568548eb222c71486dbf") (:url . "http://github.com/endofunky/inf-mongo") (:keywords "databases" "mongodb"))]) (inf-clojure . [(20180102 1324) ((emacs (24 4)) (clojure-mode (5 6))) "Run an external Clojure process in an Emacs buffer" single ((:commit . "247ca70f8ba5104be292aea20fbde6adb37e359f") (: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 ((:commit . "4604867d8111f0e186a5351e68e054a77cb14abf") (:keywords "convenience" "matching" "tools"))]) (indium . [(20180108 728) ((emacs (25)) (seq (2 16)) (js2-mode (20140114)) (company (0 9 0)) (websocket (1 6))) "JavaScript Awesome Development Environment" tar ((:commit . "2b1ff2742c9b443529524d293c327817733b8d92") (:url . "https://github.com/NicolasPetton/indium") (:keywords "tools" "javascript"))]) (indicators . [(20161211 326) ((dash (2 13 0)) (cl-lib (0 5 0))) "Display the buffer relative location of line in the fringe." single ((:commit . "f62a1201f21453e3aca93f48483e65ae8251432e") (:url . "https://github.com/Fuco1/indicators.el") (:keywords "fringe" "frames"))]) (indent-tools . [(20171215 327) ((s (0)) (hydra (0)) (yafolding (0))) "Indent, navigate (and more) by blocks of indentation: yaml, python etc." tar ((:commit . "7d7ff66e699f28478c0d63f39ff6b1477cf0bee7") (:url . "https://gitlab.com/emacs-stuff/indent-tools/") (:keywords "indentation" "movements" "navigation" "kill" "fold" "yaml" "python"))]) (indent-info . [(20171216 1509) nil "show indentation information in status bar" single ((:commit . "e63a918b16d6d1986dd9123670a762e49102ce2b") (:url . "https://github.com/terlar/indent-info.el") (:keywords "convenience" "tools"))]) (indent-guide . [(20170221 327) nil "show vertical lines to guide indentation" single ((:commit . "d64f43011c72068e008621e620009ec592b35913") (:url . "http://hins11.yu-yake.com/"))]) (importmagic . [(20170702 1844) ((f (0 11 0)) (epc (0 1 0)) (emacs (24 3))) "Fix Python imports using importmagic." tar ((:commit . "c0360a8146ca65565a7fa66c6d72986edd916dd5") (:url . "https://github.com/anachronic/importmagic.el") (:keywords "languages" "convenience"))]) (import-popwin . [(20170218 607) ((emacs (24 3)) (popwin (0 6))) "popwin buffer near by import statements with popwin" single ((:commit . "bb05a9e226f8c63fe7b18a3e92010357049ab5ba") (:url . "https://github.com/syohex/emacs-import-popwin"))]) (import-js . [(20171026 1628) ((grizzl (0 1 0)) (emacs (24))) "Import Javascript dependencies" single ((:commit . "0a1032894445062b87dbe4e2c8cdba35ac25c250") (:url . "http://github.com/Galooshi/emacs-import-js/") (:keywords "javascript"))]) (impatient-mode . [(20170505 1921) ((cl-lib (0 3)) (simple-httpd (1 4 0)) (htmlize (1 40))) "Serve buffers live over HTTP" tar ((:commit . "48e6c4842b1fc2657a3c6c23029f89e35fafc859") (:url . "https://github.com/netguy204/imp.el"))]) (immutant-server . [(20140311 1508) nil "Run your Immutant server in Emacs" single ((:commit . "2a21e65588acb6a976f2998e30b21fdabdba4dbb") (: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 ((:commit . "ed952eb8f556c6fc0d982e2a689083504558cffb") (:keywords "multimedia" "convenience"))]) (imenus . [(20170217 47) ((cl-lib (0 5))) "Imenu for multiple buffers and without subgroups" single ((:commit . "7eea33f0aeca0737b3d7d87aeb67073ef4b5d978") (:url . "https://github.com/alezost/imenus.el") (:keywords "tools" "convenience"))]) (imenu-list . [(20171120 1255) ((cl-lib (0 5))) "Show imenu entries in a separate buffer" single ((:commit . "0d3d445ce60a77a6c7bcbdbf1ae62cc20d2b5575") (:url . "https://github.com/bmag/imenu-list"))]) (imenu-anywhere . [(20170805 1155) ((cl-lib (0 5))) "ido/ivy/helm imenu across same mode/project/etc buffers" single ((:commit . "fc7f0fd2f19e5ebee70156a99bf87393123893e3") (:url . "https://github.com/vitoshka/imenu-anywhere") (:keywords "ido" "imenu" "tags"))]) (imenu+ . [(20170303 1457) nil "Extensions to `imenu.el'." single ((:url . "https://www.emacswiki.org/emacs/download/imenu%2b.el") (:keywords "tools" "menus"))]) (imapfilter . [(20161008 1357) nil "run the imapfilter executable" single ((:commit . "a879ddc36fedc30311693f308f414c520fdfc370") (:url . "https://github.com/tarsius/imapfilter") (:keywords "mail"))]) (imake . [(20171006 450) ((emacs (24 3))) "Simple, opinionated make target runner" single ((:commit . "edd2e59f7996c35450987cf8f137ecb54777e9ca") (:url . "https://github.com/tarsius/imake"))]) (imakado . [(20141024 223) nil "imakado's usefull macros and functions" single ((:commit . "00a1e7eea2cb9e9066343a23927d6c747707902f") (:url . "https://github.com/imakado/emacs-imakado") (:keywords "convenience"))]) (image-dired+ . [(20150429 2244) ((cl-lib (0 3))) "Image-dired extensions" single ((:commit . "b68094625d963056ad64e0e44af0e2266b2eadc7") (: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 ((:commit . "8d29535bd832329ffeeac780aae7aa8919af1175") (:url . "https://github.com/mhayashi1120/Emacs-image-archive") (:keywords "multimedia"))]) (image+ . [(20150707 916) ((cl-lib (0 3))) "Image manipulate extensions for Emacs" single ((:commit . "6834d0c09bb4df9ecc0d7a559bd7827fed48fffc") (:url . "https://github.com/mhayashi1120/Emacs-imagex") (:keywords "multimedia" "extensions"))]) (igv . [(20141210 427) nil "Control Integrative Genomic Viewer within Emacs" single ((:commit . "47ac6ceede252f451348a2c696398c0cb5279555"))]) (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 ((:commit . "b37dc7c07edd9d152436f9019c14df158b599be3") (:url . "http://github.com/rolandwalker/ignoramus") (:keywords "convenience" "tools"))]) (iflipb . [(20171113 1244) nil "interactively flip between recently visited buffers" single ((:commit . "a5ad1fbd1173cff5228dab265515c92c0778f86a") (:url . "https://github.com/jrosdahl/iflipb"))]) (ietf-docs . [(20150928 257) nil "Fetch, Cache and Load IETF documents" single ((:commit . "ede30d6d26044069e1731fd20c0ab2324552c0b4") (:url . "https://github.com/choppsv1/ietf-docs") (:keywords "ietf" "rfc"))]) (iedit . [(20170916 1024) nil "Edit multiple regions in the same way simultaneously." tar ((:commit . "5b14cc9fcaef509c50f25cff872fba5d70b2c799") (:url . "http://www.emacswiki.org/emacs/Iedit") (:keywords "occurrence" "region" "simultaneous" "refactoring"))]) (ids-edit . [(20170818 802) ((emacs (24 3))) "IDS (Ideographic Description Sequence) editing tool" tar ((:commit . "8562a6cbfb3f2d44bc6f62ab15081a80f8fee502") (:url . "http://github.com/kawabata/ids-edit") (:keywords "i18n" "wp"))]) (idris-mode . [(20171212 759) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:commit . "0a5a165a0dd7be7bbc4f5c9533dc21acfc811a4e") (:url . "https://github.com/idris-hackers/idris-mode") (:keywords "languages"))]) (idomenu . [(20141123 1320) nil "imenu tag selection a la ido" single ((:commit . "4b0152d606360c70204fb4c27f68de79ca885386"))]) (ido-yes-or-no . [(20161108 1551) ((ido-completing-read+ (0))) "Use Ido to answer yes-or-no questions" single ((:commit . "c55383b1fce5879e87e7ca6809fc60534508e182") (:url . "https://github.com/DarwinAwardWinner/ido-yes-or-no") (:keywords "convenience" "completion" "ido"))]) (ido-vertical-mode . [(20160429 1037) nil "Makes ido-mode display vertically." single ((:commit . "b42e4227ed5d37b5d840a9d9d1cdaabf50e189b1") (:url . "https://github.com/creichert/ido-vertical-mode.el") (:keywords "convenience"))]) (ido-ubiquitous . [(20170923 842) ((ido-completing-read+ (4 6)) (cl-lib (0 5))) "Use ido (nearly) everywhere." single ((:commit . "e2ea358725f03ae623ae03ed90715efb92a61030") (:url . "https://github.com/DarwinAwardWinner/ido-ubiquitous") (:keywords "convenience" "completion" "ido"))]) (ido-springboard . [(20170105 2355) nil "Temporarily change default-directory for one command" single ((:commit . "263a8cd4582c81bfc29d7db37d5267e2488b148c") (:url . "https://github.com/jwiegley/springboard") (:keywords "ido"))]) (ido-sort-mtime . [(20171121 59) nil "Sort Ido's file list by modification time" single ((:commit . "f638ff0c922af862f5211779f2311a27fde428eb") (:keywords "convenience" "files"))]) (ido-skk . [(20151111 150) ((emacs (24 4)) (ddskk (20150912 1820))) "ido interface for skk henkan" single ((:commit . "89a2e62799bff2841ff634517c86084c4ce69246") (: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 ((:commit . "a64707d8d154664d50d12e26417d586e4c3dd78b") (:url . "https://github.com/pjones/ido-select-window"))]) (ido-occur . [(20160820 740) ((dash (2 13 0))) "Yet another `occur' with `ido'." single ((:commit . "522af5d55b3d4cd6885f3b4100913566c202cec4") (:url . "https://github.com/danil/ido-occur") (:keywords "inner" "buffer" "search"))]) (ido-occasional . [(20150214 448) ((emacs (24 1))) "Use ido where you choose." single ((:commit . "d405f1795e1e0c63be411ee2825184738d29c33a") (:url . "https://github.com/abo-abo/ido-occasional") (:keywords "completion"))]) (ido-migemo . [(20150921 1544) ((migemo (1 9 1))) "Migemo plug-in for Ido" single ((:commit . "e71114a92dd69cb46abf3fb71a09ce27506fcf77") (: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 ((:commit . "e03b55957c93aa1a7dd190e173e16ec59dbb2ba7") (:url . "http://github.com/rolandwalker/ido-load-library") (:keywords "maint" "completion"))]) (ido-hacks . [(20150331 1209) nil "Put more IDO in your IDO" single ((:commit . "b7e7514a0e011e4d767d1f5755c5eae9d85f83dc") (:keywords "convenience"))]) (ido-grid-mode . [(20160122 339) ((emacs (24 4))) "Display ido-prospects in the minibuffer in a grid." single ((:commit . "7cfca3988a6dc3ad18e28abe114218095ff2366f") (: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 ((:commit . "f5fe3f6aa8086f675ba216abace9e3d5f2e3a089") (:url . "https://github.com/vapniks/ido-gnus") (:keywords "comm"))]) (ido-flex-with-migemo . [(20170319 431) ((flx-ido (0 6 1)) (migemo (1 9 1)) (emacs (24 4))) "use ido with flex and migemo" single ((:commit . "c620934f50b9713693eba8e23f88c2aaa8510708") (:url . "https://github.com/ROCKTAKEY/ido-flex-with-migemo") (:keywords "matching"))]) (ido-exit-target . [(20170717 1151) ((emacs (24 4))) "Commands and keys for selecting other window and frame targets within ido" single ((:commit . "e56fc6928649c87ccf39d56d84ab53ebaced1f73") (:url . "https://github.com/waymondo/ido-exit-target") (:keywords "convenience" "tools" "extensions"))]) (ido-describe-bindings . [(20161023 402) ((dash (2 13 0))) "Yet another `describe-bindings' with `ido'." single ((:commit . "a142ff1c33df23ed9665497d0dcae2943b3c706a") (:url . "https://github.com/danil/ido-describe-bindings") (:keywords "help"))]) (ido-completing-read+ . [(20170820 3) ((emacs (24 4)) (cl-lib (0 5)) (s (0 1)) (memoize (1 1))) "A completing-read-function using ido" single ((:commit . "e2ea358725f03ae623ae03ed90715efb92a61030") (:url . "https://github.com/DarwinAwardWinner/ido-completing-read-plus") (:keywords "ido" "completion" "convenience"))]) (ido-complete-space-or-hyphen . [(20130228 208) nil "Complete SPACE or HYPHEN when type SPACE in ido" single ((:commit . "3fe1fe1e1a743f8deb8f4025977647afecd58f14") (: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 ((:commit . "f173473e99c8b0756f12e4cc8f67e68fa59eadd3") (:url . "https://github.com/Bogdanp/ido-clever-match") (:keywords "ido" "flex"))]) (ido-at-point . [(20151021 57) ((emacs (24))) "ido-style completion-at-point" single ((:commit . "e5907bbe8a3d148d07698b76bd994dc3076e16ee") (:url . "https://github.com/katspaugh/ido-at-point") (:keywords "convenience" "abbrev"))]) (idle-require . [(20090715 1503) nil "load elisp libraries while Emacs is idle" single ((:commit . "33592bb098223b4432d7a35a1d65ab83f47c1ec1") (:url . "http://nschum.de/src/emacs/idle-require/") (:keywords "internal"))]) (idle-highlight-mode . [(20120920 948) nil "highlight the word the point is on" single ((:commit . "c466f2a9e291f9da1167dc879577b2e1a7880482") (: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 ((:commit . "cf9183ee11ac922e85c7c908f04e2d00b03111b3") (: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 ((:commit . "52602d9b91883e1f297d000951aeed48bf60176e") (:url . "http://github.com/fourier/idea-darkula-theme") (:keywords "themes"))]) (id-manager . [(20170320 546) nil "id-password management" single ((:commit . "14ebc35db298aac4dedc8aa188bc46bacab81f3b") (:keywords "password" "convenience"))]) (icomplete+ . [(20170303 1456) nil "Extensions to `icomplete.el'." single ((:url . "https://www.emacswiki.org/emacs/download/icomplete%2b.el") (:keywords "help" "abbrev" "internal" "extensions" "local" "completion" "matching"))]) (icicles . [(20170917 942) nil "Minibuffer input completion and cycling." tar ((:url . "https://www.emacswiki.org/emacs/download/icicles.el") (:keywords "extensions" "help" "abbrev" "local" "minibuffer" "projects" "keys" "apropos" "completion" "matching" "regexp" "command"))]) (ibuffer-vc . [(20171106 2341) ((cl-lib (0 2))) "Group ibuffer's list by VC project, or show VC status" single ((:commit . "83d60aefd21e2aa20c7217d224f38a40bb75e63b") (:url . "http://github.com/purcell/ibuffer-vc") (:keywords "themes"))]) (ibuffer-tramp . [(20151118 939) nil "Group ibuffer's list by TRAMP connection" single ((:commit . "41fab2ad174f53a4cf5ef7d2ebef518dede82ab4") (:url . "http://github.com/svend/ibuffer-tramp") (:keywords "convenience"))]) (ibuffer-rcirc . [(20150215 1318) ((cl-lib (0 2))) "Ibuffer integration for rcirc" single ((:commit . "8a4409b1c679d65c819dee4085faf929840e79f8") (:url . "https://github.com/fgallina/ibuffer-rcirc") (:keywords "buffer" "convenience" "comm"))]) (ibuffer-projectile . [(20171222 2000) ((projectile (0 11 0))) "Group ibuffer's list by projectile root" single ((:commit . "bfa02c76dabdc02557b67fa556969bc74e255023") (:url . "http://github.com/purcell/ibuffer-projectile") (:keywords "themes"))]) (ibuffer-git . [(20110508 31) nil "show git status in ibuffer column" single ((:commit . "d326319c05ddb8280885b31f9094040c1b365876") (:keywords "convenience"))]) (iasm-mode . [(20171023 722) nil "interactive assembly major mode." single ((:commit . "abbec7f308f9ce97beeb57e459fff35f559b4c18") (:url . "https://github.com/RAttab/iasm-mode") (:keywords ":" "tools"))]) (ialign . [(20180107 305) ((emacs (24 4))) "visual align-regexp" single ((:commit . "df591e452f9a56c69fb69de961baa75751bae3d8") (:url . "https://github.com/mkcms/interactive-align") (:keywords "tools" "editing" "align" "interactive"))]) (i3wm . [(20170822 738) nil "i3wm integration library" single ((:commit . "71391dc61063fee77ad174f3b2ca25c60b41009e") (:url . "https://git.flintfam.org/swf-projects/emacs-i3") (:keywords "convenience" "extensions"))]) (i2b2-mode . [(20140709 1804) nil "Highlights corresponding PHI data in the text portion of an i2b2 XML Document." single ((:commit . "db10efcfc8bed369a516bbf7526ede41f98cb95a") (:keywords "xml" "phi" "i2b2" "deidi2b2"))]) (hydra . [(20171120 1042) ((cl-lib (0 5))) "Make bindings that stick around." tar ((:commit . "e228432bb64385f67f20aa525bce56ae4e8419eb") (:url . "https://github.com/abo-abo/hydra") (:keywords "bindings"))]) (hyde . [(20160507 2008) nil "Major mode to help create and manage Jekyll blogs" tar ((:commit . "a8cd6ed00ecd8d7de0ded2f4867015b412b15b76"))]) (hydandata-light-theme . [(20160815 2118) nil "A light color theme that is easy on your eyes" single ((:commit . "0fbc91678ef65e1f65d7ec6792ff0b2f104d16a9") (:keywords "color-theme" "theme"))]) (hyai . [(20170301 647) ((cl-lib (0 5)) (emacs (24))) "Haskell Yet Another Indentation" single ((:commit . "e9a7e945fed12d8e664e898cf8b434b0376d5d80") (:url . "https://github.com/iquiw/hyai"))]) (hy-mode . [(20171202 1141) ((dash (2 13 0)) (dash-functional (1 2 0)) (s (1 11 0)) (emacs (24))) "Major mode for Hylang" tar ((:commit . "3220f00a9bdb24667a1c3876b4a2f889dcb77501") (:url . "http://github.com/hylang/hy-mode") (:keywords "languages" "lisp" "python"))]) (hungry-delete . [(20170411 1802) nil "hungry delete minor mode" single ((:commit . "0434458d3f6b2b585f332271feaa054bf4ec96d7") (:url . "http://github.com/nflath/hungry-delete"))]) (hungarian-holidays . [(20161020 438) nil "Adds a list of Hungarian public holidays to Emacs calendar" single ((:commit . "653108769279499d84a79267c90e640d98823872") (:keywords "calendar"))]) (hugsql-ghosts . [(20170612 1223) ((s (1 9 0)) (dash (2 10 0)) (cider (0 14 0))) "Display ghostly hugsql defqueries inline" single ((:commit . "2f3f98b644b4da35f4fb80b7c3b63f986417b415") (:url . "https://github.com/rkaercher/hugsql-ghosts"))]) (httprepl . [(20141101 1034) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "An HTTP REPL" single ((:commit . "cfa3693267a8ed1c96a86a126823f37dbfe077d8") (:url . "https://github.com/gregsexton/httprepl.el") (:keywords "http" "repl"))]) (httpcode . [(20121001 2045) nil "explains the meaning of an HTTP status code" single ((:commit . "a45e735082b09477cd704a99294d336cdbeb12ba") (:url . "http://github.com/rspivak/httpcode.el"))]) (http-twiddle . [(20160801 1211) nil "send & twiddle & resend HTTP requests" single ((:commit . "4d0c73b7dcbde8b483d4f3a75c49c74d2fe3ca45") (:url . "https://github.com/hassy/http-twiddle/blob/master/http-twiddle.el") (:keywords "http" "rest" "soap"))]) (http-post-simple . [(20170715 240) nil "HTTP POST requests using the url library" single ((:commit . "f53697fca278c741051aeb668b00466b5e0fd3fe") (:keywords "comm" "data" "processes" "hypermedia"))]) (http . [(20170906 1111) ((emacs (24 4)) (request (0 2 0)) (edit-indirect (0 1 4))) "Yet another HTTP client" single ((:commit . "193a7bf843dd6b6805c7b18dab31f50c8325d710") (:url . "https://github.com/emacs-pe/http.el") (:keywords "convenience"))]) (htmlize . [(20171017 141) nil "Convert buffer text and decorations to HTML." single ((:commit . "a0b55cba65a225df8d9e17a3ac448ce9e8ec962d") (:keywords "hypermedia" "extensions"))]) (html2org . [(20170417 2201) ((emacs (24 4))) "Convert html to org format text" single ((:commit . "6904aed40259ad8afccff079ebd8a07bff319ebc") (:url . "http://github.com/lujun9972/html2org.el") (:keywords "convenience" "html" "org"))]) (html-to-markdown . [(20151105 40) ((cl-lib (0 5))) "HTML to Markdown converter written in Emacs-lisp." single ((:commit . "60c5498c801be186478cf7c05be05b4430c4a144") (:url . "http://github.com/Bruce-Connor/html-to-markdown") (:keywords "tools" "wp" "languages"))]) (html-to-hiccup . [(20161028 701) ((emacs (25 1)) (dash (2 13 0)) (s (1 10 0))) "Convert HTML to Hiccup syntax" single ((:commit . "99217a5058626d253ed8ada51a7642071fe54ba5") (:url . "https://github.com/plexus/html-to-hiccup") (:keywords "html" "hiccup" "clojure"))]) (html-script-src . [(20120403 1115) nil "Insert " - "Basic JavaScript that is needed by HTML files produced by Org mode.") - -(defconst org-twbs-style-default - "" - "The default style specification for exported HTML files. -You can use `org-twbs-head' and `org-twbs-head-extra' to add to -this style. If you don't want to include this default style, -customize `org-twbs-head-include-default-style'.") - - -;;; User Configuration Variables - -(defgroup org-export-twbs nil - "Options for exporting Org mode files to HTML." - :tag "Org Export HTML" - :group 'org-export) - -;;;; Bold, etc. - -(defcustom org-twbs-text-markup-alist - '((bold . "%s") - (code . "%s") - (italic . "%s") - (strike-through . "%s") - (underline . "%s") - (verbatim . "%s")) - "Alist of HTML expressions to convert text markup. - -The key must be a symbol among `bold', `code', `italic', -`strike-through', `underline' and `verbatim'. The value is -a formatting string to wrap fontified text with. - -If no association can be found for a given markup, text will be -returned as-is." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type '(alist :key-type (symbol :tag "Markup type") - :value-type (string :tag "Format string")) - :options '(bold code italic strike-through underline verbatim)) - -(defcustom org-twbs-indent nil - "Non-nil means to indent the generated HTML. -Warning: non-nil may break indentation of source code blocks." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'boolean) - -(defcustom org-twbs-use-unicode-chars nil - "Non-nil means to use unicode characters instead of HTML entities." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'boolean) - -;;;; Drawers - -(defcustom org-twbs-format-drawer-function - (lambda (name contents) contents) - "Function called to format a drawer in HTML code. - -The function must accept two parameters: - NAME the drawer name, like \"LOGBOOK\" - CONTENTS the contents of the drawer. - -The function should return the string to be exported. - -For example, the variable could be set to the following function -in order to mimic default behaviour: - -The default value simply returns the value of CONTENTS." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'function) - -;;;; Footnotes - -(defcustom org-twbs-footnotes-section "
-

%s:

-
-%s -
-
" - "Format for the footnotes section. -Should contain a two instances of %s. The first will be replaced with the -language-specific word for \"Footnotes\", the second one will be replaced -by the footnotes themselves." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-footnote-format "%s" - "The format for the footnote reference. -%s will be replaced by the footnote reference itself." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-footnote-separator ", " - "Text used to separate footnotes." - :group 'org-export-twbs - :type 'string) - -;;;; Headline - -(defcustom org-twbs-toplevel-hlevel 2 - "The level for level 1 headings in HTML export. -This is also important for the classes that will be wrapped around headlines -and outline structure. If this variable is 1, the top-level headlines will -be

, and the corresponding classes will be outline-1, section-number-1, -and outline-text-1. If this is 2, all of these will get a 2 instead. -The default for this variable is 2, because we use

for formatting the -document title." - :group 'org-export-twbs - :type 'integer) - -(defcustom org-twbs-format-headline-function 'ignore - "Function to format headline text. - -This function will be called with 5 arguments: -TODO the todo keyword (string or nil). -TODO-TYPE the type of todo (symbol: `todo', `done', nil) -PRIORITY the priority of the headline (integer or nil) -TEXT the main headline text (string). -TAGS the tags (string or nil). - -The function result will be used in the section format string." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'function) - -;;;; HTML-specific - -(defcustom org-twbs-allow-name-attribute-in-anchors t - "When nil, do not set \"name\" attribute in anchors. -By default, anchors are formatted with both \"id\" and \"name\" -attributes, when appropriate." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'boolean) - -;;;; Inlinetasks - -(defcustom org-twbs-format-inlinetask-function 'ignore - "Function called to format an inlinetask in HTML code. - -The function must accept six parameters: - TODO the todo keyword, as a string - TODO-TYPE the todo type, a symbol among `todo', `done' and nil. - PRIORITY the inlinetask priority, as a string - NAME the inlinetask name, as a string. - TAGS the inlinetask tags, as a list of strings. - CONTENTS the contents of the inlinetask, as a string. - -The function should return the string to be exported." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'function) - -;;;; LaTeX - -(defcustom org-twbs-with-latex org-export-with-latex - "Non-nil means process LaTeX math snippets. - -When set, the exporter will process LaTeX environments and -fragments. - -This option can also be set with the +OPTIONS line, -e.g. \"tex:mathjax\". Allowed values are: - -nil Ignore math snippets. -`verbatim' Keep everything in verbatim -`dvipng' Process the LaTeX fragments to images. This will also - include processing of non-math environments. -`imagemagick' Convert the LaTeX fragments to pdf files and use - imagemagick to convert pdf files to png files. -`mathjax' Do MathJax preprocessing and arrange for MathJax.js to - be loaded. -t Synonym for `mathjax'." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type '(choice - (const :tag "Do not process math in any way" nil) - (const :tag "Use dvipng to make images" dvipng) - (const :tag "Use imagemagick to make images" imagemagick) - (const :tag "Use MathJax to display math" mathjax) - (const :tag "Leave math verbatim" verbatim))) - -;;;; Links :: Generic - -(defcustom org-twbs-link-org-files-as-html t - "Non-nil means make file links to `file.org' point to `file.html'. -When `org-mode' is exporting an `org-mode' file to HTML, links to -non-html files are directly put into a href tag in HTML. -However, links to other Org-mode files (recognized by the -extension `.org.) should become links to the corresponding html -file, assuming that the linked `org-mode' file will also be -converted to HTML. -When nil, the links still point to the plain `.org' file." - :group 'org-export-twbs - :type 'boolean) - -;;;; Links :: Inline images - -(defcustom org-twbs-inline-images t - "Non-nil means inline images into exported HTML pages. -This is done using an tag. When nil, an anchor with href is used to -link to the image." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.1") - :type 'boolean) - -(defcustom org-twbs-inline-image-rules - '(("file" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'") - ("http" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'") - ("https" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'")) - "Rules characterizing image files that can be inlined into HTML. -A rule consists in an association whose key is the type of link -to consider, and value is a regexp that will be matched against -link's path." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type '(alist :key-type (string :tag "Type") - :value-type (regexp :tag "Path"))) - -;;;; Plain Text - -(defcustom org-twbs-protect-char-alist - '(("&" . "&") - ("<" . "<") - (">" . ">")) - "Alist of characters to be converted by `org-twbs-protect'." - :group 'org-export-twbs - :type '(repeat (cons (string :tag "Character") - (string :tag "HTML equivalent")))) - -;;;; Src Block - -(defcustom org-twbs-htmlize-output-type 'inline-css - "Output type to be used by htmlize when formatting code snippets. -Choices are `css', to export the CSS selectors only, or `inline-css', to -export the CSS attribute values inline in the HTML. We use as default -`inline-css', in order to make the resulting HTML self-containing. - -However, this will fail when using Emacs in batch mode for export, because -then no rich font definitions are in place. It will also not be good if -people with different Emacs setup contribute HTML files to a website, -because the fonts will represent the individual setups. In these cases, -it is much better to let Org/Htmlize assign classes only, and to use -a style file to define the look of these classes. -To get a start for your css file, start Emacs session and make sure that -all the faces you are interested in are defined, for example by loading files -in all modes you want. Then, use the command -\\[org-twbs-htmlize-generate-css] to extract class definitions." - :group 'org-export-twbs - :type '(choice (const css) (const inline-css))) - -(defcustom org-twbs-htmlize-font-prefix "org-" - "The prefix for CSS class names for htmlize font specifications." - :group 'org-export-twbs - :type 'string) - -;;;; Table - -(defcustom org-twbs-table-default-attributes - '(:class "table table-striped table-bordered table-hover table-condensed") - "Default attributes and values which will be used in table tags. -This is a plist where attributes are symbols, starting with -colons, and values are strings." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type '(plist :key-type (symbol :tag "Property") - :value-type (string :tag "Value"))) - -(defcustom org-twbs-table-header-tags '("" . "") - "The opening tag for table header fields. -This is customizable so that alignment options can be specified. -The first %s will be filled with the scope of the field, either row or col. -The second %s will be replaced by a style entry to align the field. -See also the variable `org-twbs-table-use-header-tags-for-first-column'. -See also the variable `org-twbs-table-align-individual-fields'." - :group 'org-export-twbs - :type '(cons (string :tag "Opening tag") (string :tag "Closing tag"))) - -(defcustom org-twbs-table-data-tags '("" . "") - "The opening tag for table data fields. -This is customizable so that alignment options can be specified. -The first %s will be filled with the scope of the field, either row or col. -The second %s will be replaced by a style entry to align the field. -See also the variable `org-twbs-table-align-individual-fields'." - :group 'org-export-twbs - :type '(cons (string :tag "Opening tag") (string :tag "Closing tag"))) - -(defcustom org-twbs-table-row-tags '("" . "") - "The opening and ending tags for table rows. -This is customizable so that alignment options can be specified. -Instead of strings, these can be Lisp forms that will be -evaluated for each row in order to construct the table row tags. - -During evaluation, these variables will be dynamically bound so that -you can reuse them: - - `row-number': row number (0 is the first row) - `rowgroup-number': group number of current row - `start-rowgroup-p': non-nil means the row starts a group - `end-rowgroup-p': non-nil means the row ends a group - `top-row-p': non-nil means this is the top row - `bottom-row-p': non-nil means this is the bottom row - -For example: - -\(setq org-twbs-table-row-tags - (cons '(cond (top-row-p \"\") - (bottom-row-p \"\") - (t (if (= (mod row-number 2) 1) - \"\" - \"\"))) - \"\")) - -will use the \"tr-top\" and \"tr-bottom\" classes for the top row -and the bottom row, and otherwise alternate between \"tr-odd\" and -\"tr-even\" for odd and even rows." - :group 'org-export-twbs - :type '(cons - (choice :tag "Opening tag" - (string :tag "Specify") - (sexp)) - (choice :tag "Closing tag" - (string :tag "Specify") - (sexp)))) - -(defcustom org-twbs-table-align-individual-fields t - "Non-nil means attach style attributes for alignment to each table field. -When nil, alignment will only be specified in the column tags, but this -is ignored by some browsers (like Firefox, Safari). Opera does it right -though." - :group 'org-export-twbs - :type 'boolean) - -(defcustom org-twbs-table-use-header-tags-for-first-column nil - "Non-nil means format column one in tables with header tags. -When nil, also column one will use data tags." - :group 'org-export-twbs - :type 'boolean) - -(defcustom org-twbs-table-caption-above t - "When non-nil, place caption string at the beginning of the table. -Otherwise, place it near the end." - :group 'org-export-twbs - :type 'boolean) - -;;;; Tags - -(defcustom org-twbs-tag-class "badge" - "Class name for tags." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-tag-class-prefix "" - "Prefix to class names for TODO keywords. -Each tag gets a class given by the tag itself, with this prefix. -The default prefix is empty because it is nice to just use the keyword -as a class name. But if you get into conflicts with other, existing -CSS classes, then this prefix can be very useful." - :group 'org-export-twbs - :type 'string) - -;;;; Template :: Generic - -(defcustom org-twbs-extension "html" - "The extension for exported HTML files." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-coding-system 'utf-8 - "Coding system for HTML export. -Use utf-8 as the default value." - :group 'org-export-html - :version "24.4" - :package-version '(Org . "8.0") - :type 'coding-system) - -(defcustom org-twbs-container-element "div" - "HTML element to use for wrapping top level sections. -Can be set with the in-buffer HTML_CONTAINER property or for -publishing, with :html-container." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'string) - -(defcustom org-twbs-divs - '((preamble "div" "preamble") - (content "div" "content" "container") - (postamble "footer" "postamble")) - "Alist of the three section elements for HTML export. -The car of each entry is one of 'preamble, 'content or 'postamble. -The cdrs of each entry are the ELEMENT_TYPE and ID for each -section of the exported document. - -Note that changing the default will prevent you from using -org-info.js for your website." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type '(list :greedy t - (list :tag "Preamble" - (const :format "" preamble) - (string :tag "element") (string :tag " id")) - (list :tag "Content" - (const :format "" content) - (string :tag "element") (string :tag " id")) - (list :tag "Postamble" (const :format "" postamble) - (string :tag " id") (string :tag "element")))) - -(defcustom org-twbs-metadata-timestamp-format "%Y-%m-%d %a %H:%M" - "Format used for timestamps in preamble, postamble and metadata. -See `format-time-string' for more information on its components." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'string) - -;;;; Template :: Mathjax - -(defcustom org-twbs-mathjax-options - '((path "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_SVG") - (scale "100") - (dscale "100") - (align "center") - (indent "2em") - (messages "none")) - "Options for MathJax setup. - -path The path where to find MathJax -scale Scaling for the HTML-CSS backend, omit percentage symbol -dscale Scaling for displayed math, omit percentage symbol -align How to align display math: left, center, or right -indent If align is not center, how far from the left/right side? -messages Should display messages in corner? - -You can also customize this for each buffer, using something like - -#+HTML_MATHJAX: scale:110 dscale:190 align:left messages:none" - :group 'org-export-twbs - :type '(list :greedy t - (list :tag "path (the path from where to load MathJax.js)" - (const :format " " path) (string)) - (list :tag "scale (scaling for math)" - (const :format " " scale) (string)) - (list :tag "dscale (scaling for the displayed math)" - (const :format " " scale) (string)) - (list :tag "align (alignment of displayed equations)" - (const :format " " align) (string)) - (list :tag "indent (indentation with left or right alignment)" - (const :format " " indent) (string)) - (list :tag "messages (show pocessing messages in corner)" - (const :format " " messages) - (choice (const "none") - (const "simple"))))) - -(defcustom org-twbs-mathjax-template - " - -" - "The MathJax setup for HTML files." - :group 'org-export-twbs - :type 'string) - -;;;; Template :: Postamble - -(defcustom org-twbs-postamble 'auto - "Non-nil means insert a postamble in HTML export. - -When set to 'auto, check against the -`org-export-with-author/email/creator/date' variables to set the -content of the postamble. When set to a string, use this string -as the postamble. When t, insert a string as defined by the -formatting string in `org-twbs-postamble-format'. - -When set to a function, apply this function and insert the -returned string. The function takes the property list of export -options as its only argument. - -Setting :html-postamble in publishing projects will take -precedence over this variable." - :group 'org-export-twbs - :type '(choice (const :tag "No postamble" nil) - (const :tag "Auto postamble" auto) - (const :tag "Default formatting string" t) - (string :tag "Custom formatting string") - (function :tag "Function (must return a string)"))) - -(defcustom org-twbs-postamble-format - '(("en" "

Author: %a (%e)

-

Date: %d

-

%c

")) - "Alist of languages and format strings for the HTML postamble. - -The first element of each list is the language code, as used for -the LANGUAGE keyword. See `org-export-default-language'. - -The second element of each list is a format string to format the -postamble itself. This format string can contain these elements: - - %t stands for the title. - %a stands for the author's name. - %e stands for the author's email. - %d stands for the date. - %c will be replaced by `org-twbs-creator-string'. - %v will be replaced by `org-twbs-validation-link'. - %T will be replaced by the export time. - %C will be replaced by the last modification time. - -If you need to use a \"%\" character, you need to escape it -like that: \"%%\"." - :group 'org-export-twbs - :type '(repeat - (list (string :tag "Language") - (string :tag "Format string")))) - -(defcustom org-twbs-validation-link - "Validate" - "Link to HTML validation service." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-creator-string - (format "Emacs %s (Org-mode %s)" - emacs-version - (if (fboundp 'org-version) (org-version) "unknown version")) - "Information about the creator of the HTML document. -This option can also be set on with the CREATOR keyword." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type '(string :tag "Creator string")) - -;;;; Template :: Preamble - -(defcustom org-twbs-preamble t - "Non-nil means insert a preamble in HTML export. - -When t, insert a string as defined by the formatting string in -`org-twbs-preamble-format'. When set to a string, use this -formatting string instead (see `org-twbs-postamble-format' for an -example of such a formatting string). - -When set to a function, apply this function and insert the -returned string. The function takes the property list of export -options as its only argument. - -Setting :html-preamble in publishing projects will take -precedence over this variable." - :group 'org-export-twbs - :type '(choice (const :tag "No preamble" nil) - (const :tag "Default preamble" t) - (string :tag "Custom formatting string") - (function :tag "Function (must return a string)"))) - -(defcustom org-twbs-preamble-format '(("en" "")) - "Alist of languages and format strings for the HTML preamble. - -The first element of each list is the language code, as used for -the LANGUAGE keyword. See `org-export-default-language'. - -The second element of each list is a format string to format the -preamble itself. This format string can contain these elements: - - %t stands for the title. - %a stands for the author's name. - %e stands for the author's email. - %d stands for the date. - %c will be replaced by `org-twbs-creator-string'. - %v will be replaced by `org-twbs-validation-link'. - %T will be replaced by the export time. - %C will be replaced by the last modification time. - -If you need to use a \"%\" character, you need to escape it -like that: \"%%\". - -See the default value of `org-twbs-postamble-format' for an -example." - :group 'org-export-twbs - :type '(repeat - (list (string :tag "Language") - (string :tag "Format string")))) - -(defcustom org-twbs-link-up "" - "Where should the \"UP\" link of exported HTML pages lead?" - :group 'org-export-twbs - :type '(string :tag "File or URL")) - -(defcustom org-twbs-link-home "" - "Where should the \"HOME\" link of exported HTML pages lead?" - :group 'org-export-twbs - :type '(string :tag "File or URL")) - -(defcustom org-twbs-link-use-abs-url nil - "Should we prepend relative links with HTML_LINK_HOME?" - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.1") - :type 'boolean) - -(defcustom org-twbs-home/up-format - "
- UP - | - HOME -
" - "Snippet used to insert the HOME and UP links. -This is a format string, the first %s will receive the UP link, -the second the HOME link. If both `org-twbs-link-up' and -`org-twbs-link-home' are empty, the entire snippet will be -ignored." - :group 'org-export-twbs - :type 'string) - -;;;; Template :: Scripts - -(define-obsolete-variable-alias - 'org-twbs-style-include-scripts 'org-twbs-head-include-scripts "24.4") -(defcustom org-twbs-head-include-scripts t - "Non-nil means include the JavaScript snippets in exported HTML files. -The actual script is defined in `org-twbs-scripts' and should -not be modified." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'boolean) - -;;;; Template :: Styles - -(define-obsolete-variable-alias - 'org-twbs-style-include-default 'org-twbs-head-include-default-style "24.4") -(defcustom org-twbs-head-include-default-style t - "Non-nil means include the default style in exported HTML files. -The actual style is defined in `org-twbs-style-default' and -should not be modified. Use `org-twbs-head' to use your own -style information." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'boolean) -;;;###autoload -(put 'org-twbs-head-include-default-style 'safe-local-variable 'booleanp) - -(define-obsolete-variable-alias 'org-twbs-style 'org-twbs-head "24.4") -(defcustom org-twbs-head " - - -" - "Org-wide head definitions for exported HTML files. - -As the value of this option simply gets inserted into the HTML - header, you can use it to add any arbitrary text to the -header. - -You can set this on a per-file basis using #+HTML_HEAD:, -or for publication projects using the :html-head property." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'string) -;;;###autoload -(put 'org-twbs-head 'safe-local-variable 'stringp) - -(defcustom org-twbs-head-extra "" - "More head information to add in the HTML output. - -You can set this on a per-file basis using #+HTML_HEAD_EXTRA:, -or for publication projects using the :html-head-extra property." - :group 'org-export-twbs - :version "24.4" - :package-version '(Org . "8.0") - :type 'string) -;;;###autoload -(put 'org-twbs-head-extra 'safe-local-variable 'stringp) - -;;;; Todos - -(defcustom org-twbs-todo-kwd-class-prefix "" - "Prefix to class names for TODO keywords. -Each TODO keyword gets a class given by the keyword itself, with this prefix. -The default prefix is empty because it is nice to just use the keyword -as a class name. But if you get into conflicts with other, existing -CSS classes, then this prefix can be very useful." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-todo-kwd-class-undone "label-primary" - "Class name for TODO keywords which are not done. -Traditionally this was not configurable, and was the value 'todo'." - :group 'org-export-twbs - :type 'string) - -(defcustom org-twbs-todo-kwd-class-done "label-default" - "Class name for TODO keywords which are done. -Traditionally this was not configurable, and was the value 'done'." - :group 'org-export-twbs - :type 'string) - -;;;; Google Analytics - -(defcustom org-twbs-google-analytics " -\n" - "Snippet used to insert the Google Analytics tracking code. -This is a format string, the %s will be replaced with the value -set using the :gid keyword." - :group 'org-export-twbs - :type 'string) - - -;;; Internal Functions - -(defun org-twbs-close-tag (tag attr info) - (concat "<" tag " " attr ">")) - -(defun org-twbs--make-attribute-string (attributes) - "Return a list of attributes, as a string. -ATTRIBUTES is a plist where values are either strings or nil. An -attributes with a nil value will be omitted from the result." - (let (output) - (dolist (item attributes (mapconcat 'identity (nreverse output) " ")) - (cond ((null item) (pop output)) - ((symbolp item) (push (substring (symbol-name item) 1) output)) - (t (let ((key (car output)) - (value (replace-regexp-in-string - "\"" """ (org-twbs-encode-plain-text item)))) - (setcar output (format "%s=\"%s\"" key value)))))))) - -(defun org-twbs--wrap-image (contents info &optional caption label) - "Wrap CONTENTS string within an appropriate environment for images. -INFO is a plist used as a communication channel. When optional -arguments CAPTION and LABEL are given, use them for caption and -\"id\" attribute." - (format "\n%s%s\n" - ;; ID. - (if (not (org-string-nw-p label)) "" - (format " id=\"%s\"" label)) - ;; Contents. - (format "\n

%s

" contents) - ;; Caption. - (if (not (org-string-nw-p caption)) "" - (format "\n
%s
" caption)))) - -(defun org-twbs--format-image (source attributes info) - "Return \"img\" tag with given SOURCE and ATTRIBUTES. -SOURCE is a string specifying the location of the image. -ATTRIBUTES is a plist, as returned by -`org-export-read-attribute'. INFO is a plist used as -a communication channel." - (org-twbs-close-tag - "img" - (org-twbs--make-attribute-string - (org-combine-plists - (list :src source - :class "img-responsive" - :alt (if (string-match-p "^ltxpng/" source) - (org-twbs-encode-plain-text - (org-find-text-property-in-string 'org-latex-src source)) - (file-name-nondirectory source))) - attributes)) - info)) - -(defun org-twbs--textarea-block (element) - "Transcode ELEMENT into a textarea block. -ELEMENT is either a src block or an example block." - (let* ((code (car (org-export-unravel-code element))) - (attr (org-export-read-attribute :attr_html element))) - (format "

\n\n

" - (or (plist-get attr :width) 80) - (or (plist-get attr :height) (org-count-lines code)) - code))) - -(defun org-twbs--has-caption-p (element &optional info) - "Non-nil when ELEMENT has a caption affiliated keyword. -INFO is a plist used as a communication channel. This function -is meant to be used as a predicate for `org-export-get-ordinal' or -a value to `org-twbs-standalone-image-predicate'." - (org-element-property :caption element)) - -;;;; Table - -(defun org-twbs-htmlize-region-for-paste (beg end) - "Convert the region between BEG and END to HTML, using htmlize.el. -This is much like `htmlize-region-for-paste', only that it uses -the settings define in the org-... variables." - (let* ((htmlize-output-type org-twbs-htmlize-output-type) - (htmlize-css-name-prefix org-twbs-htmlize-font-prefix) - (htmlbuf (htmlize-region beg end))) - (unwind-protect - (with-current-buffer htmlbuf - (buffer-substring (plist-get htmlize-buffer-places 'content-start) - (plist-get htmlize-buffer-places 'content-end))) - (kill-buffer htmlbuf)))) - -;;;###autoload -(defun org-twbs-htmlize-generate-css () - "Create the CSS for all font definitions in the current Emacs session. -Use this to create face definitions in your CSS style file that can then -be used by code snippets transformed by htmlize. -This command just produces a buffer that contains class definitions for all -faces used in the current Emacs session. You can copy and paste the ones you -need into your CSS file. - -If you then set `org-twbs-htmlize-output-type' to `css', calls -to the function `org-twbs-htmlize-region-for-paste' will -produce code that uses these same face definitions." - (interactive) - (require 'htmlize) - (and (get-buffer "*html*") (kill-buffer "*html*")) - (with-temp-buffer - (let ((fl (face-list)) - (htmlize-css-name-prefix "org-") - (htmlize-output-type 'css) - f i) - (while (setq f (pop fl) - i (and f (face-attribute f :inherit))) - (when (and (symbolp f) (or (not i) (not (listp i)))) - (insert (org-add-props (copy-sequence "1") nil 'face f)))) - (htmlize-region (point-min) (point-max)))) - (org-pop-to-buffer-same-window "*html*") - (goto-char (point-min)) - (if (re-search-forward "" nil t) - (delete-region (1+ (match-end 0)) (point-max))) - (beginning-of-line 1) - (if (looking-at " +") (replace-match "")) - (goto-char (point-min))) - -(defun org-twbs--make-string (n string) - "Build a string by concatenating N times STRING." - (let (out) (dotimes (i n out) (setq out (concat string out))))) - -(defun org-twbs-fix-class-name (kwd) ; audit callers of this function - "Turn todo keyword KWD into a valid class name. -Replaces invalid characters with \"_\"." - (save-match-data - (while (string-match "[^a-zA-Z0-9_]" kwd) - (setq kwd (replace-match "_" t t kwd)))) - kwd) - -(defun org-twbs-format-footnote-reference (n def refcnt) - "Format footnote reference N with definition DEF into HTML." - (let ((extra (if (= refcnt 1) "" (format ".%d" refcnt)))) - (format org-twbs-footnote-format - (let* ((id (format "fnr.%s%s" n extra)) - (href (format " href=\"#fn.%s\"" n)) - (attributes (concat " class=\"footref\"" href))) - (org-twbs--anchor id n attributes))))) - -(defun org-twbs-format-footnotes-section (section-name definitions) - "Format footnotes section SECTION-NAME." - (if (not definitions) "" - (format org-twbs-footnotes-section section-name definitions))) - -(defun org-twbs-format-footnote-definition (fn) - "Format the footnote definition FN." - (let ((n (car fn)) (def (cdr fn))) - (format - "
%s %s
\n" - (format org-twbs-footnote-format - (let* ((id (format "fn.%s" n)) - (href (format " href=\"#fnr.%s\"" n)) - (attributes (concat " class=\"footnum\"" href))) - (org-twbs--anchor id n attributes))) - def))) - -(defun org-twbs-collect-footnote-definitions (info) - "Signature change underneath us, released maybe with 8.3 commit URL at: -http://orgmode.org/w/?p=org-mode.git;a=commit;h=014de0a532cbc60987d09d6040ed46195cffdf12 -Try the old 2-arity and if fails, try the new single-arity." - (with-no-warnings - (condition-case nil - (org-export-collect-footnote-definitions - (plist-get info :parse-tree) info) - (error (org-export-collect-footnote-definitions info))))) - -(defun org-twbs-footnote-section (info) - "Format the footnote section. -INFO is a plist used as a communication channel." - (let* ((fn-alist (org-twbs-collect-footnote-definitions info)) - (fn-alist - (loop for (n type raw) in fn-alist collect - (cons n (if (eq (org-element-type raw) 'org-data) - (org-trim (org-export-data raw info)) - (org-trim (org-export-data raw info))))))) - (when fn-alist - (org-twbs-format-footnotes-section - (org-twbs--translate "Footnotes" info) - (format - "\n%s\n" - (mapconcat 'org-twbs-format-footnote-definition fn-alist "\n")))))) - - -;;; Template - -(defun org-twbs--build-meta-info (info) - "Return meta tags for exported document. -INFO is a plist used as a communication channel." - (let ((protect-string - (lambda (str) - (replace-regexp-in-string - "\"" """ (org-twbs-encode-plain-text str)))) - (title (org-export-data (plist-get info :title) info)) - (author (and (plist-get info :with-author) - (let ((auth (plist-get info :author))) - (and auth - ;; Return raw Org syntax, skipping non - ;; exportable objects. - (org-element-interpret-data - (org-element-map auth - (cons 'plain-text org-element-all-objects) - 'identity info)))))) - (description (plist-get info :description)) - (keywords (plist-get info :keywords)) - (charset (or (and org-twbs-coding-system - (fboundp 'coding-system-get) - (coding-system-get org-twbs-coding-system - 'mime-charset)) - "iso-8859-1"))) - (concat - (format "%s\n" title) - (when (plist-get info :time-stamp-file) - (format-time-string - (concat "\n"))) - (format - (org-twbs-close-tag "meta" "charset=\"%s\"" info) - charset) "\n" - "" - "\n" - (org-twbs-close-tag "meta" "name=\"generator\" content=\"Org-mode\"" info) - "\n" - (and (org-string-nw-p author) - (concat - (org-twbs-close-tag "meta" - (format "name=\"author\" content=\"%s\"" - (funcall protect-string author)) - info) - "\n")) - (and (org-string-nw-p description) - (concat - (org-twbs-close-tag "meta" - (format "name=\"description\" content=\"%s\"\n" - (funcall protect-string description)) - info) - "\n")) - (and (org-string-nw-p keywords) - (concat - (org-twbs-close-tag "meta" - (format "name=\"keywords\" content=\"%s\"" - (funcall protect-string keywords)) - info) - "\n"))))) - -(defun org-twbs--build-head (info) - "Return information for the .. of the HTML output. -INFO is a plist used as a communication channel." - (org-element-normalize-string - (concat - (org-element-normalize-string (plist-get info :html-head)) - (when (and (plist-get info :html-htmlized-css-url) - (eq org-twbs-htmlize-output-type 'css)) - (org-twbs-close-tag "link" - (format " rel=\"stylesheet\" href=\"%s\" type=\"text/css\"" - (plist-get info :html-htmlized-css-url)) - info)) - (when (plist-get info :html-head-include-default-style) - (org-element-normalize-string org-twbs-style-default)) - (when (not (plist-get info :html-postamble)) - "") - (when (plist-get info :html-head-include-scripts) org-twbs-scripts) - (org-element-normalize-string (plist-get info :html-head-extra))))) - -(defun org-twbs--build-mathjax-config (info) - "Insert the user setup into the mathjax template. -INFO is a plist used as a communication channel." - (when (and (memq (plist-get info :with-latex) '(mathjax t)) - (org-element-map (plist-get info :parse-tree) - '(latex-fragment latex-environment) 'identity info t)) - (let ((template (plist-get info :html-mathjax-template)) - (options (plist-get info :html-mathjax-options)) - (in-buffer (or (plist-get info :html-mathjax) ""))) - (dolist (e options (org-element-normalize-string template)) - (let ((name (car e)) - (val (nth 1 e))) - (when (string-match (concat "\\<" (symbol-name name) ":") in-buffer) - (setq val - (car (read-from-string (substring in-buffer (match-end 0)))))) - (unless (stringp val) (setq val (format "%s" val))) - (while (string-match (concat "%" (upcase (symbol-name name))) - template) - (setq template (replace-match val t t template)))))))) - -(defun org-twbs-format-spec (info) - "Return format specification for elements that can be -used in the preamble or postamble." - `((?t . ,(org-export-data (plist-get info :title) info)) - (?d . ,(org-export-data (org-export-get-date info) info)) - (?T . ,(format-time-string org-twbs-metadata-timestamp-format)) - (?a . ,(org-export-data (plist-get info :author) info)) - (?e . ,(mapconcat - (lambda (e) - (format "%s" e e)) - (split-string (plist-get info :email) ",+ *") - ", ")) - (?c . ,(plist-get info :creator)) - (?C . ,(let ((file (plist-get info :input-file))) - (format-time-string org-twbs-metadata-timestamp-format - (if file (nth 5 (file-attributes file)) - (current-time))))) - (?v . ,(or org-twbs-validation-link "")))) - -(defun org-twbs--build-pre/postamble (type info) - "Return document preamble or postamble as a string, or nil. -TYPE is either 'preamble or 'postamble, INFO is a plist used as a -communication channel." - (let ((section (plist-get info (intern (format ":html-%s" type)))) - (spec (org-twbs-format-spec info))) - (when section - (let ((section-contents - (if (functionp section) (funcall section info) - (cond - ((stringp section) (format-spec section spec)) - ((eq section 'auto) - (let ((date (cdr (assq ?d spec))) - (author (cdr (assq ?a spec))) - (email (cdr (assq ?e spec))) - (creator (cdr (assq ?c spec))) - (timestamp (cdr (assq ?T spec))) - (validation-link (cdr (assq ?v spec)))) - (concat - "
" - (when (and (plist-get info :with-date) - (org-string-nw-p date)) - (format "

%s: %s

\n" - (org-twbs--translate "Date" info) - date)) - (when (and (plist-get info :with-author) - (org-string-nw-p author)) - (format "

%s: %s

\n" - (org-twbs--translate "Author" info) - author)) - (when (and (plist-get info :with-email) - (org-string-nw-p email)) - (format "

%s: %s

\n" - (org-twbs--translate "Email" info) - email)) - (when (plist-get info :time-stamp-file) - (format - "

%s: %s

\n" - (org-twbs--translate "Created" info) - (format-time-string org-twbs-metadata-timestamp-format))) - (when (plist-get info :with-creator) - (format "

%s

\n" creator)) - "
"))) - (t (format-spec - (or (cadr (assoc - (plist-get info :language) - (eval (intern - (format "org-twbs-%s-format" type))))) - (cadr - (assoc - "en" - (eval - (intern (format "org-twbs-%s-format" type)))))) - spec)))))) - (when (org-string-nw-p section-contents) - (concat - (format "<%s id=\"%s\" class=\"%s\">\n" - (nth 1 (assq type org-twbs-divs)) - (nth 2 (assq type org-twbs-divs)) - org-twbs--pre/postamble-class) - (org-element-normalize-string section-contents) - (format "\n" (nth 1 (assq type org-twbs-divs))))))))) - -(defun org-twbs-inner-template (contents info) - "Return body of document string after HTML conversion. -CONTENTS is the transcoded contents string. INFO is a plist -holding export options." - (concat - ;; Document contents. - contents - ;; Footnotes section. - (org-twbs-footnote-section info))) - -(defun org-twbs-template (contents info) - "Return complete document string after HTML conversion. -CONTENTS is the transcoded contents string. INFO is a plist -holding export options." - (concat - "\n" - (format "\n" (plist-get info :language)) - "\n" - (org-twbs--build-meta-info info) - (org-twbs--build-head info) - (org-twbs--build-mathjax-config info) - "\n" - "\n" - (let ((link-up (org-trim (plist-get info :html-link-up))) - (link-home (org-trim (plist-get info :html-link-home)))) - (unless (and (string= link-up "") (string= link-home "")) - (format org-twbs-home/up-format - (or link-up link-home) - (or link-home link-up)))) - ;; Preamble. - (org-twbs--build-pre/postamble 'preamble info) - ;; Document contents. - (format "<%s id=\"%s\" class=\"%s\">\n" - (nth 1 (assq 'content org-twbs-divs)) - (nth 2 (assq 'content org-twbs-divs)) - (nth 3 (assq 'content org-twbs-divs))) - ;; Main doc body twbs row - "
" - (if (plist-get info :with-toc) "
" - "
") - ;; Document title. - (let ((title (plist-get info :title))) - (format "

%s

\n" (org-export-data (or title "") info))) - contents - "
" - ;; Table of contents. - (let ((depth (plist-get info :with-toc))) - (when depth - (concat - "
" - (org-twbs-toc depth info) - "
"))) - "
" - (format "\n" - (nth 1 (assq 'content org-twbs-divs))) - ;; Postamble. - (org-twbs--build-pre/postamble 'postamble info) - ;; Google Analytics - (let ((gid (plist-get info :gid))) - (when gid - (format org-twbs-google-analytics gid))) - ;; Closing document. - "\n")) - -(defun org-twbs--translate (s info) - "Translate string S according to specified language. -INFO is a plist used as a communication channel." - (org-export-translate s :html info)) - -;;;; Anchor - -(defun org-twbs--anchor (&optional id desc attributes) - "Format a HTML anchor." - (let* ((name (and org-twbs-allow-name-attribute-in-anchors id)) - (attributes (concat (and id (format " id=\"%s\"" id)) - (and name (format " name=\"%s\"" name)) - attributes))) - (format "%s" attributes (or desc "")))) - -;;;; Todo - -(defun org-twbs--todo (todo) - "Format TODO keywords into HTML." - (when todo - (let* ((is-done (member todo org-done-keywords)) - (class (if is-done org-twbs-todo-kwd-class-done - org-twbs-todo-kwd-class-undone)) - (is-label (string-prefix-p "label-" class))) - (format "%s" - (if is-label "label " "") - class - org-twbs-todo-kwd-class-prefix (org-twbs-fix-class-name todo) - todo)))) - -;;;; Tags - -(defun org-twbs--tags (tags) - "Format TAGS into HTML." - (when tags - (format "%s" - (mapconcat - (lambda (tag) - (format "%s" - org-twbs-tag-class - (concat org-twbs-tag-class-prefix - (org-twbs-fix-class-name tag)) - tag)) - tags " ")))) - -;;;; Headline - -(defun* org-twbs-format-headline - (todo todo-type priority text tags - &key level section-number headline-label &allow-other-keys) - "Format a headline in HTML." - (let ((section-number - (when section-number - (format "%s " - level section-number))) - (todo (org-twbs--todo todo)) - (tags (org-twbs--tags tags))) - (concat section-number todo (and todo " ") text - (and tags "   ") tags))) - -;;;; Src Code - -(defun org-twbs-fontify-code (code lang) - "Color CODE with htmlize library. -CODE is a string representing the source code to colorize. LANG -is the language used for CODE, as a string, or nil." - (when code - (cond - ;; Case 1: No lang. Possibly an example block. - ((not lang) - ;; Simple transcoding. - (org-twbs-encode-plain-text code)) - ;; Case 2: No htmlize or an inferior version of htmlize - ((not (and (require 'htmlize nil t) (fboundp 'htmlize-region-for-paste))) - ;; Emit a warning. - (message "Cannot fontify src block (htmlize.el >= 1.34 required)") - ;; Simple transcoding. - (org-twbs-encode-plain-text code)) - (t - ;; Map language - (setq lang (or (assoc-default lang org-src-lang-modes) lang)) - (let* ((lang-mode (and lang (intern (format "%s-mode" lang))))) - (cond - ;; Case 1: Language is not associated with any Emacs mode - ((not (functionp lang-mode)) - ;; Simple transcoding. - (org-twbs-encode-plain-text code)) - ;; Case 2: Default. Fontify code. - (t - ;; htmlize - (setq code (with-temp-buffer - ;; Switch to language-specific mode. - (funcall lang-mode) - (insert code) - ;; Fontify buffer. - (font-lock-fontify-buffer) - ;; Remove formatting on newline characters. - (save-excursion - (let ((beg (point-min)) - (end (point-max))) - (goto-char beg) - (while (progn (end-of-line) (< (point) end)) - (put-text-property (point) (1+ (point)) 'face nil) - (forward-char 1)))) - (org-src-mode) - (set-buffer-modified-p nil) - ;; Htmlize region. - (org-twbs-htmlize-region-for-paste - (point-min) (point-max)))) - ;; Strip any enclosing
 tags.
-          (let* ((beg (and (string-match "\\`]*>\n*" code) (match-end 0)))
-                 (end (and beg (string-match "\\'" code))))
-            (if (and beg end) (substring code beg end) code)))))))))
-
-(defun org-twbs-do-format-code
-    (code &optional lang refs retain-labels num-start)
-  "Format CODE string as source code.
-Optional arguments LANG, REFS, RETAIN-LABELS and NUM-START are,
-respectively, the language of the source code, as a string, an
-alist between line numbers and references (as returned by
-`org-export-unravel-code'), a boolean specifying if labels should
-appear in the source code, and the number associated to the first
-line of code."
-  (let* ((code-lines (org-split-string code "\n"))
-         (code-length (length code-lines))
-         (num-fmt
-          (and num-start
-               (format "%%%ds: "
-                       (length (number-to-string (+ code-length num-start))))))
-         (code (org-twbs-fontify-code code lang)))
-    (org-export-format-code
-     code
-     (lambda (loc line-num ref)
-       (setq loc
-             (concat
-              ;; Add line number, if needed.
-              (when num-start
-                (format "%s"
-                        (format num-fmt line-num)))
-              ;; Transcoded src line.
-              loc
-              ;; Add label, if needed.
-              (when (and ref retain-labels) (format " (%s)" ref))))
-       ;; Mark transcoded line as an anchor, if needed.
-       (if (not ref) loc
-         (format "%s"
-                 ref loc)))
-     num-start refs)))
-
-(defun org-twbs-format-code (element info)
-  "Format contents of ELEMENT as source code.
-ELEMENT is either an example block or a src block.  INFO is
-a plist used as a communication channel."
-  (let* ((lang (org-element-property :language element))
-         ;; Extract code and references.
-         (code-info (org-export-unravel-code element))
-         (code (car code-info))
-         (refs (cdr code-info))
-         ;; Does the src block contain labels?
-         (retain-labels (org-element-property :retain-labels element))
-         ;; Does it have line numbers?
-         (num-start (case (org-element-property :number-lines element)
-                      (continued (org-export-get-loc element info))
-                      (new 0))))
-    (org-twbs-do-format-code code lang refs retain-labels num-start)))
-
-
-;;; Tables of Contents
-
-(defun org-twbs-display-headline-number-p (headline-number info)
-  "Predicate deciding if headline number should be displayed."
-  (let ((whn (plist-get info :with-headline-numbers)))
-    (or (eq whn t) (and (wholenump whn) (<= (length headline-number) whn)))))
-
-(defun org-twbs-collect-headlines (info depth &optional scope)
-  "Another arity change in org:
-http://orgmode.org/w/?p=org-mode.git;a=commit;h=b07e2f6ff1feddde83506b7fdb370bfe8e0a5337
-Try new 3-arity first, then old 2-arity."
-  (with-no-warnings
-    (condition-case nil
-        (org-export-collect-headlines info depth scope)
-      (error (org-export-collect-headlines info depth)))))
-
-(defun org-twbs-toc (depth info &optional scope)
-  "Build a table of contents.
-DEPTH is an integer specifying the depth of the table.  INFO is a
-plist used as a communication channel.  Return the table of
-contents as a string, or nil if it is empty."
-  (let ((toc-entries
-         (mapcar (lambda (headline)
-                   (cons (org-twbs--format-toc-headline headline info)
-                         (org-export-get-relative-level headline info)))
-                 (org-twbs-collect-headlines info depth scope)))
-        (outer-tag "nav"))
-    (when toc-entries
-      (concat (format "<%s id=\"table-of-contents\">\n" outer-tag)
-              "
" - (org-twbs--toc-text toc-entries) - "
\n" - (format "\n" outer-tag))))) - -(defun org-twbs--toc-text (toc-entries) - "Return innards of a table of contents, as a string. -TOC-ENTRIES is an alist where key is an entry title, as a string, -and value is its relative level, as an integer." - (let* ((prev-level (1- (cdar toc-entries))) - (start-level prev-level)) - (concat - (mapconcat - (lambda (entry) - (let ((headline (car entry)) - (level (cdr entry))) - (concat - (let* ((cnt (- level prev-level)) - (times (if (> cnt 0) (1- cnt) (- cnt))) - rtn) - (setq prev-level level) - (concat - (org-twbs--make-string - times (cond ((> cnt 0) "\n
    \n
  • ") - ((< cnt 0) "
  • \n
\n"))) - (if (> cnt 0) "\n
    \n
  • " "
  • \n
  • "))) - headline))) - toc-entries "") - (org-twbs--make-string (- prev-level start-level) "
  • \n
\n")))) - -(defun org-twbs--format-toc-headline (headline info) - "Return an appropriate table of contents entry for HEADLINE. -INFO is a plist used as a communication channel." - (let* ((headline-number (org-export-get-headline-number headline info)) - (todo (and (plist-get info :with-todo-keywords) - (plist-get info :with-toc-todo-keywords) - (let ((todo (org-element-property :todo-keyword headline))) - (and todo (org-export-data todo info))))) - (todo-type (and todo (org-element-property :todo-type headline))) - (priority (and (plist-get info :with-priority) - (org-element-property :priority headline))) - (text (org-export-data-with-backend - (org-export-get-alt-title headline info) - ;; Create an anonymous back-end that will ignore any - ;; footnote-reference, link, radio-target and target - ;; in table of contents. - (org-export-create-backend - :parent 'twbs - :transcoders '((footnote-reference . ignore) - (link . (lambda (object c i) c)) - (radio-target . (lambda (object c i) c)) - (target . ignore))) - info)) - (tags (and (plist-get info :with-tags) - (plist-get info :with-toc-tags) - (org-export-get-tags headline info)))) - (format "%s" - ;; Label. - (or (org-element-property :CUSTOM_ID headline) - (concat "sec-" - (mapconcat #'number-to-string headline-number "-"))) - ;; Body. - (concat - (and (not (org-export-low-level-p headline info)) - (org-export-numbered-headline-p headline info) - (org-twbs-display-headline-number-p headline-number info) - (concat (mapconcat #'number-to-string headline-number ".") - ". ")) - (apply (if (not (eq org-twbs-format-headline-function 'ignore)) - (lambda (todo todo-type priority text tags &rest ignore) - (funcall org-twbs-format-headline-function - todo todo-type priority text tags)) - #'org-twbs-format-headline) - todo todo-type priority text tags :section-number nil))))) - -(defun org-twbs-list-of-listings (info) - "Build a list of listings. -INFO is a plist used as a communication channel. Return the list -of listings as a string, or nil if it is empty." - (let ((lol-entries (org-export-collect-listings info))) - (when lol-entries - (concat "
\n" - (format "%s\n" - org-twbs-toplevel-hlevel - (org-twbs--translate "List of Listings" info) - org-twbs-toplevel-hlevel) - "
\n
    \n" - (let ((count 0) - (initial-fmt (format "%s" - (org-twbs--translate "Listing %d:" info)))) - (mapconcat - (lambda (entry) - (let ((label (org-element-property :name entry)) - (title (org-trim - (org-export-data - (or (org-export-get-caption entry t) - (org-export-get-caption entry)) - info)))) - (concat - "
  • " - (if (not label) - (concat (format initial-fmt (incf count)) " " title) - (format "%s %s" - label - (format initial-fmt (incf count)) - title)) - "
  • "))) - lol-entries "\n")) - "\n
\n
\n
")))) - -(defun org-twbs-list-of-tables (info) - "Build a list of tables. -INFO is a plist used as a communication channel. Return the list -of tables as a string, or nil if it is empty." - (let ((lol-entries (org-export-collect-tables info))) - (when lol-entries - (concat "
\n" - (format "%s\n" - org-twbs-toplevel-hlevel - (org-twbs--translate "List of Tables" info) - org-twbs-toplevel-hlevel) - "
\n
    \n" - (let ((count 0) - (initial-fmt (format "%s" - (org-twbs--translate "Table %d:" info)))) - (mapconcat - (lambda (entry) - (let ((label (org-element-property :name entry)) - (title (org-trim - (org-export-data - (or (org-export-get-caption entry t) - (org-export-get-caption entry)) - info)))) - (concat - "
  • " - (if (not label) - (concat (format initial-fmt (incf count)) " " title) - (format "%s %s" - label - (format initial-fmt (incf count)) - title)) - "
  • "))) - lol-entries "\n")) - "\n
\n
\n
")))) - - -;;; Transcode Functions - -;;;; Bold - -(defun org-twbs-bold (bold contents info) - "Transcode BOLD from Org to HTML. -CONTENTS is the text with bold markup. INFO is a plist holding -contextual information." - (format (or (cdr (assq 'bold org-twbs-text-markup-alist)) "%s") - contents)) - -;;;; Center Block - -(defun org-twbs-center-block (center-block contents info) - "Transcode a CENTER-BLOCK element from Org to HTML. -CONTENTS holds the contents of the block. INFO is a plist -holding contextual information." - (format "
\n%s
" contents)) - -;;;; Clock - -(defun org-twbs-clock (clock contents info) - "Transcode a CLOCK element from Org to HTML. -CONTENTS is nil. INFO is a plist used as a communication -channel." - (format "

- -%s %s%s - -

" - org-clock-string - (org-timestamp-translate (org-element-property :value clock)) - (let ((time (org-element-property :duration clock))) - (and time (format " (%s)" time))))) - -;;;; Code - -(defun org-twbs-code (code contents info) - "Transcode CODE from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - (format (or (cdr (assq 'code org-twbs-text-markup-alist)) "%s") - (org-twbs-encode-plain-text (org-element-property :value code)))) - -;;;; Drawer - -(defun org-twbs-drawer (drawer contents info) - "Transcode a DRAWER element from Org to HTML. -CONTENTS holds the contents of the block. INFO is a plist -holding contextual information." - (if (functionp org-twbs-format-drawer-function) - (funcall org-twbs-format-drawer-function - (org-element-property :drawer-name drawer) - contents) - ;; If there's no user defined function: simply - ;; display contents of the drawer. - contents)) - -;;;; Dynamic Block - -(defun org-twbs-dynamic-block (dynamic-block contents info) - "Transcode a DYNAMIC-BLOCK element from Org to HTML. -CONTENTS holds the contents of the block. INFO is a plist -holding contextual information. See `org-export-data'." - contents) - -;;;; Entity - -(defun org-twbs-entity (entity contents info) - "Transcode an ENTITY object from Org to HTML. -CONTENTS are the definition itself. INFO is a plist holding -contextual information." - (org-element-property :html entity)) - -;;;; Example Block - -(defun org-twbs-example-block (example-block contents info) - "Transcode a EXAMPLE-BLOCK element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - (if (org-export-read-attribute :attr_html example-block :textarea) - (org-twbs--textarea-block example-block) - (format "
\n%s
" - (org-twbs-format-code example-block info)))) - -;;;; Export Snippet - -(defun org-twbs-export-snippet (export-snippet contents info) - "Transcode a EXPORT-SNIPPET object from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - (when (eq (org-export-snippet-backend export-snippet) 'html) - (org-element-property :value export-snippet))) - -;;;; Export Block - -(defun org-twbs-export-block (export-block contents info) - "Transcode a EXPORT-BLOCK element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (when (string= (org-element-property :type export-block) "HTML") - (org-remove-indentation (org-element-property :value export-block)))) - -;;;; Fixed Width - -(defun org-twbs-fixed-width (fixed-width contents info) - "Transcode a FIXED-WIDTH element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (format "
\n%s
" - (org-twbs-do-format-code - (org-remove-indentation - (org-element-property :value fixed-width))))) - -;;;; Footnote Reference - -(defun org-twbs-footnote-reference (footnote-reference contents info) - "Transcode a FOOTNOTE-REFERENCE element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (concat - ;; Insert separator between two footnotes in a row. - (let ((prev (org-export-get-previous-element footnote-reference info))) - (when (eq (org-element-type prev) 'footnote-reference) - org-twbs-footnote-separator)) - (cond - ((not (org-export-footnote-first-reference-p footnote-reference info)) - (org-twbs-format-footnote-reference - (org-export-get-footnote-number footnote-reference info) - "IGNORED" 100)) - ;; Inline definitions are secondary strings. - ((eq (org-element-property :type footnote-reference) 'inline) - (org-twbs-format-footnote-reference - (org-export-get-footnote-number footnote-reference info) - "IGNORED" 1)) - ;; Non-inline footnotes definitions are full Org data. - (t (org-twbs-format-footnote-reference - (org-export-get-footnote-number footnote-reference info) - "IGNORED" 1))))) - -;;;; Headline - -(defun org-twbs-format-headline--wrap - (headline info &optional format-function &rest extra-keys) - "Transcode a HEADLINE element from Org to HTML. -CONTENTS holds the contents of the headline. INFO is a plist -holding contextual information." - (let* ((level (+ (org-export-get-relative-level headline info) - (1- org-twbs-toplevel-hlevel))) - (headline-number (org-export-get-headline-number headline info)) - (section-number (and (not (org-export-low-level-p headline info)) - (org-export-numbered-headline-p headline info) - (org-twbs-display-headline-number-p headline-number info) - (mapconcat 'number-to-string - headline-number "."))) - (todo (and (plist-get info :with-todo-keywords) - (let ((todo (org-element-property :todo-keyword headline))) - (and todo (org-export-data todo info))))) - (todo-type (and todo (org-element-property :todo-type headline))) - (priority (and (plist-get info :with-priority) - (org-element-property :priority headline))) - (text (org-export-data (org-element-property :title headline) info)) - (tags (and (plist-get info :with-tags) - (org-export-get-tags headline info))) - (headline-label (or (org-element-property :CUSTOM_ID headline) - (concat "sec-" (mapconcat 'number-to-string - headline-number "-")))) - (format-function - (cond ((functionp format-function) format-function) - ((not (eq org-twbs-format-headline-function 'ignore)) - (lambda (todo todo-type priority text tags &rest ignore) - (funcall org-twbs-format-headline-function - todo todo-type priority text tags))) - (t 'org-twbs-format-headline)))) - (apply format-function - todo todo-type priority text tags - :headline-label headline-label :level level - :section-number section-number extra-keys))) - -(defun org-twbs-headline (headline contents info) - "Transcode a HEADLINE element from Org to HTML. -CONTENTS holds the contents of the headline. INFO is a plist -holding contextual information." - (unless (org-element-property :footnote-section-p headline) - (let* ((contents (or contents "")) - (numberedp (org-export-numbered-headline-p headline info)) - (level (org-export-get-relative-level headline info)) - (text (org-export-data (org-element-property :title headline) info)) - (todo (and (plist-get info :with-todo-keywords) - (let ((todo (org-element-property :todo-keyword headline))) - (and todo (org-export-data todo info))))) - (todo-type (and todo (org-element-property :todo-type headline))) - (tags (and (plist-get info :with-tags) - (org-export-get-tags headline info))) - (priority (and (plist-get info :with-priority) - (org-element-property :priority headline))) - (section-number (mapconcat #'number-to-string - (org-export-get-headline-number - headline info) "-")) - (ids (delq 'nil - (list (org-element-property :CUSTOM_ID headline) - (concat "sec-" section-number) - (org-element-property :ID headline)))) - (preferred-id (car ids)) - (extra-ids (mapconcat - (lambda (id) - (org-twbs--anchor - (if (org-uuidgen-p id) (concat "ID-" id) id))) - (cdr ids) "")) - ;; Create the headline text. - (full-text (org-twbs-format-headline--wrap headline info))) - (if (org-export-low-level-p headline info) - ;; This is a deep sub-tree: export it as a list item. - (let* ((type (if numberedp 'ordered 'unordered)) - (itemized-body - (org-twbs-format-list-item - contents type nil info nil - (concat (org-twbs--anchor preferred-id) extra-ids - full-text)))) - (concat - (and (org-export-first-sibling-p headline info) - (org-twbs-begin-plain-list type)) - itemized-body - (and (org-export-last-sibling-p headline info) - (org-twbs-end-plain-list type)))) - ;; Standard headline. Export it as a section. - (let ((extra-class (org-element-property :HTML_CONTAINER_CLASS headline)) - (level1 (+ level (1- org-twbs-toplevel-hlevel))) - (first-content (car (org-element-contents headline)))) - (format "<%s id=\"%s\" class=\"%s\">%s%s\n" - (org-twbs--container headline info) - (format "outline-container-%s" - (or (org-element-property :CUSTOM_ID headline) - (concat "sec-" section-number))) - (concat (format "outline-%d" level1) (and extra-class " ") - extra-class) - (format "\n%s%s\n" - level1 preferred-id extra-ids full-text level1) - ;; When there is no section, pretend there is an - ;; empty one to get the correct
\n" class extra) text "
\n"))) - -(defun org-twbs-inlinetask (inlinetask contents info) - "Transcode an INLINETASK element from Org to HTML. -CONTENTS holds the contents of the block. INFO is a plist -holding contextual information." - (cond - ;; If `org-twbs-format-inlinetask-function' is not 'ignore, call it - ;; with appropriate arguments. - ((not (eq org-twbs-format-inlinetask-function 'ignore)) - (let ((format-function - (function* - (lambda (todo todo-type priority text tags - &key contents &allow-other-keys) - (funcall org-twbs-format-inlinetask-function - todo todo-type priority text tags contents))))) - (org-twbs-format-headline--wrap - inlinetask info format-function :contents contents))) - ;; Otherwise, use a default template. - (t (format "
\n%s%s\n%s
" - (org-twbs-format-headline--wrap inlinetask info) - (org-twbs-close-tag "br" nil info) - contents)))) - -;;;; Italic - -(defun org-twbs-italic (italic contents info) - "Transcode ITALIC from Org to HTML. -CONTENTS is the text with italic markup. INFO is a plist holding -contextual information." - (format (or (cdr (assq 'italic org-twbs-text-markup-alist)) "%s") contents)) - -;;;; Item - -(defun org-twbs-checkbox (checkbox) - "Format CHECKBOX into HTML." - (case checkbox (on "[X]") - (off "[ ]") - (trans "[-]") - (t ""))) - -(defun org-twbs-format-list-item (contents type checkbox info - &optional term-counter-id - headline) - "Format a list item into HTML." - (let ((checkbox (concat (org-twbs-checkbox checkbox) (and checkbox " "))) - (br (org-twbs-close-tag "br" nil info))) - (concat - (case type - (ordered - (let* ((counter term-counter-id) - (extra (if counter (format " value=\"%s\"" counter) ""))) - (concat - (format "" extra) - (when headline (concat headline br))))) - (unordered - (let* ((id term-counter-id) - (extra (if id (format " id=\"%s\"" id) ""))) - (concat - (format "" extra) - (when headline (concat headline br))))) - (descriptive - (let* ((term term-counter-id)) - (setq term (or term "(no term)")) - ;; Check-boxes in descriptive lists are associated to tag. - (concat (format "
%s
" - (concat checkbox term)) - "
")))) - (unless (eq type 'descriptive) checkbox) - contents - (case type - (ordered "") - (unordered "") - (descriptive "
"))))) - -(defun org-twbs-item (item contents info) - "Transcode an ITEM element from Org to HTML. -CONTENTS holds the contents of the item. INFO is a plist holding -contextual information." - (let* ((plain-list (org-export-get-parent item)) - (type (org-element-property :type plain-list)) - (counter (org-element-property :counter item)) - (checkbox (org-element-property :checkbox item)) - (tag (let ((tag (org-element-property :tag item))) - (and tag (org-export-data tag info))))) - (org-twbs-format-list-item - contents type checkbox info (or tag counter)))) - -;;;; Keyword - -(defun org-twbs-keyword (keyword contents info) - "Transcode a KEYWORD element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (let ((key (org-element-property :key keyword)) - (value (org-element-property :value keyword))) - (cond - ((string= key "HTML") value) - ((string= key "TOC") - (let ((value (downcase value))) - (cond - ((string-match "\\" value) - (let ((depth (or (and (string-match "[0-9]+" value) - (string-to-number (match-string 0 value))) - (plist-get info :with-toc)))) - (org-twbs-toc depth info))) - ((string= "listings" value) (org-twbs-list-of-listings info)) - ((string= "tables" value) (org-twbs-list-of-tables info)))))))) - -;;;; Latex Environment - -(defun org-twbs-format-latex-arity (prefix &optional dir overlays msg - at forbuffer processing-type) - "Arity fix for org-format-latex signature change here: -http://orgmode.org/w/?p=org-mode.git;a=commit;h=8daf4a89f1a157c0ee2c91e5b990203679b31cf7 -Call 7-arity first, then 6-arity if first fails." - (with-no-warnings - (condition-case nil - (org-format-latex prefix nil nil dir overlays msg forbuffer processing-type) - (error - (condition-case nil - (org-format-latex prefix dir overlays msg at forbuffer processing-type) - (error - (org-format-latex prefix dir overlays msg forbuffer processing-type))))))) - -(defun org-twbs-format-latex (latex-frag processing-type info) - "Format a LaTeX fragment LATEX-FRAG into HTML. -PROCESSING-TYPE designates the tool used for conversion. It is -a symbol among `mathjax', `dvipng', `imagemagick', `verbatim' nil -and t. See `org-twbs-with-latex' for more information. INFO is -a plist containing export properties." - (let ((cache-relpath "") (cache-dir "")) - (unless (eq processing-type 'mathjax) - (let ((bfn (or (buffer-file-name) - (make-temp-name - (expand-file-name "latex" temporary-file-directory)))) - (latex-header - (let ((header (plist-get info :latex-header))) - (and header - (concat (mapconcat - (lambda (line) (concat "#+LATEX_HEADER: " line)) - (org-split-string header "\n") - "\n") - "\n"))))) - (setq cache-relpath - (concat "ltxpng/" - (file-name-sans-extension - (file-name-nondirectory bfn))) - cache-dir (file-name-directory bfn)) - ;; Re-create LaTeX environment from original buffer in - ;; temporary buffer so that dvipng/imagemagick can properly - ;; turn the fragment into an image. - (setq latex-frag (concat latex-header latex-frag)))) - (with-temp-buffer - (insert latex-frag) - (org-twbs-format-latex-arity cache-relpath cache-dir nil - "Creating LaTeX Image..." - nil nil processing-type) - (buffer-string)))) - -(defun org-twbs-latex-environment (latex-environment contents info) - "Transcode a LATEX-ENVIRONMENT element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (let ((processing-type (plist-get info :with-latex)) - (latex-frag (org-remove-indentation - (org-element-property :value latex-environment))) - (attributes (org-export-read-attribute :attr_html latex-environment))) - (case processing-type - ((t mathjax) - (org-twbs-format-latex latex-frag 'mathjax info)) - ((dvipng imagemagick) - (let ((formula-link - (org-twbs-format-latex latex-frag processing-type info))) - (when (and formula-link (string-match "file:\\([^]]*\\)" formula-link)) - ;; Do not provide a caption or a name to be consistent with - ;; `mathjax' handling. - (org-twbs--wrap-image - (org-twbs--format-image - (match-string 1 formula-link) attributes info) info)))) - (t latex-frag)))) - -;;;; Latex Fragment - -(defun org-twbs-latex-fragment (latex-fragment contents info) - "Transcode a LATEX-FRAGMENT object from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (let ((latex-frag (org-element-property :value latex-fragment)) - (processing-type (plist-get info :with-latex))) - (case processing-type - ((t mathjax) - (org-twbs-format-latex latex-frag 'mathjax info)) - ((dvipng imagemagick) - (let ((formula-link - (org-twbs-format-latex latex-frag processing-type info))) - (when (and formula-link (string-match "file:\\([^]]*\\)" formula-link)) - (org-twbs--format-image (match-string 1 formula-link) nil info)))) - (t latex-frag)))) - -;;;; Line Break - -(defun org-twbs-line-break (line-break contents info) - "Transcode a LINE-BREAK object from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (concat (org-twbs-close-tag "br" nil info) "\n")) - -;;;; Link - -(defun org-twbs-inline-image-p (link info) - "Non-nil when LINK is meant to appear as an image. -INFO is a plist used as a communication channel. LINK is an -inline image when it has no description and targets an image -file (see `org-twbs-inline-image-rules' for more information), or -if its description is a single link targeting an image file." - (if (not (org-element-contents link)) - (org-export-inline-image-p link org-twbs-inline-image-rules) - (not - (let ((link-count 0)) - (org-element-map (org-element-contents link) - (cons 'plain-text org-element-all-objects) - (lambda (obj) - (case (org-element-type obj) - (plain-text (org-string-nw-p obj)) - (link (if (= link-count 1) t - (incf link-count) - (not (org-export-inline-image-p - obj org-twbs-inline-image-rules)))) - (otherwise t))) - info t))))) - -(defvar org-twbs-standalone-image-predicate) -(defun org-twbs-standalone-image-p (element info) - "Non-nil if ELEMENT is a standalone image. - -INFO is a plist holding contextual information. - -An element or object is a standalone image when - - - its type is `paragraph' and its sole content, save for white - spaces, is a link that qualifies as an inline image; - - - its type is `link' and its containing paragraph has no other - content save white spaces. - -Bind `org-twbs-standalone-image-predicate' to constrain paragraph -further. For example, to check for only captioned standalone -images, set it to: - - \(lambda (paragraph) (org-element-property :caption paragraph))" - (let ((paragraph (case (org-element-type element) - (paragraph element) - (link (org-export-get-parent element))))) - (and (eq (org-element-type paragraph) 'paragraph) - (or (not (fboundp 'org-twbs-standalone-image-predicate)) - (funcall org-twbs-standalone-image-predicate paragraph)) - (catch 'exit - (let ((link-count 0)) - (org-element-map (org-element-contents paragraph) - (cons 'plain-text org-element-all-objects) - #'(lambda (obj) - (when (case (org-element-type obj) - (plain-text (org-string-nw-p obj)) - (link (or (> (incf link-count) 1) - (not (org-twbs-inline-image-p obj info)))) - (otherwise t)) - (throw 'exit nil))) - info nil 'link) - (= link-count 1)))))) - -(defun org-twbs-export-file-uri (filename) - "Return file URI associated to FILENAME." - (cond ((org-string-match-p "\\`//" filename) (concat "file:" filename)) - ((not (file-name-absolute-p filename)) filename) - ((org-file-remote-p filename) (concat "file:/" filename)) - (t (concat "file://" (expand-file-name filename))))) - -(defun org-twbs-fuzzy (file search) - (cond ((fboundp 'org-publish-resolve-external-fuzzy-link) - (let ((numbers - (org-publish-resolve-external-fuzzy-link file search))) - (and numbers (concat "#sec-" - (mapconcat 'number-to-string - numbers "-"))))) - ((fboundp 'org-publish-resolve-external-link) - (let ((rez (org-publish-resolve-external-link search file))) - (concat "#" rez))) - (t ""))) - -(defun org-twbs-link (link desc info) - "Transcode a LINK object from Org to HTML. -DESC is the description part of the link, or the empty string. -INFO is a plist holding contextual information. See -`org-export-data'." - (let* ((home (when (plist-get info :html-link-home) - (org-trim (plist-get info :html-link-home)))) - (use-abs-url (plist-get info :html-link-use-abs-url)) - (link-org-files-as-html-maybe - (lambda (raw-path info) - ;; Treat links to `file.org' as links to `file.html', if - ;; needed. See `org-twbs-link-org-files-as-html'. - (cond - ((and (plist-get info :html-link-org-files-as-html) - (string= ".org" - (downcase (file-name-extension raw-path ".")))) - (concat (file-name-sans-extension raw-path) "." - (plist-get info :html-extension))) - (t raw-path)))) - (type (org-element-property :type link)) - (raw-path (org-element-property :path link)) - ;; Ensure DESC really exists, or set it to nil. - (desc (org-string-nw-p desc)) - (path - (cond - ((member type '("http" "https" "ftp" "mailto")) - (org-link-escape - (org-link-unescape - (concat type ":" raw-path)) '(32 91 93 37))) - ((string= type "file") - ;; Treat links to ".org" files as ".html", if needed. - (setq raw-path - (funcall link-org-files-as-html-maybe raw-path info)) - ;; If file path is absolute, prepend it with protocol - ;; component - "file://". - (cond - ((file-name-absolute-p raw-path) - (setq raw-path (org-twbs-export-file-uri raw-path))) - ((and home use-abs-url) - (setq raw-path (concat (file-name-as-directory home) raw-path)))) - ;; Add search option, if any. A search option can be - ;; relative to a custom-id, a headline title a name, - ;; a target or a radio-target. - (let ((option (org-element-property :search-option link))) - (cond ((not option) raw-path) - ;; Since HTML back-end use custom-id value as-is, - ;; resolving is them is trivial. - ((eq (string-to-char option) ?#) (concat raw-path option)) - (t - (concat raw-path - (org-twbs-fuzzy - (org-element-property :path link) - option)))))) - (t raw-path))) - ;; Extract attributes from parent's paragraph. HACK: Only do - ;; this for the first link in parent (inner image link for - ;; inline images). This is needed as long as attributes - ;; cannot be set on a per link basis. - (attributes-plist - (let* ((parent (org-export-get-parent-element link)) - (link (let ((container (org-export-get-parent link))) - (if (and (eq (org-element-type container) 'link) - (org-twbs-inline-image-p link info)) - container - link)))) - (and (eq (org-element-map parent 'link 'identity info t) link) - (org-export-read-attribute :attr_html parent)))) - (attributes - (let ((attr (org-twbs--make-attribute-string attributes-plist))) - (if (org-string-nw-p attr) (concat " " attr) "")))) - (cond - ;; Image file. - ((and (plist-get info :html-inline-images) - (org-export-inline-image-p - link (plist-get info :html-inline-image-rules))) - (org-twbs--format-image path attributes-plist info)) - ;; Radio target: Transcode target's contents and use them as - ;; link's description. - ((string= type "radio") - (let ((destination (org-export-resolve-radio-link link info))) - (if (not destination) desc - (format "%s" - (org-element-property :value destination) - attributes desc)))) - ;; Links pointing to a headline: Find destination and build - ;; appropriate referencing command. - ((member type '("custom-id" "fuzzy" "id")) - (let ((destination (if (string= type "fuzzy") - (org-export-resolve-fuzzy-link link info) - (org-export-resolve-id-link link info)))) - (case (org-element-type destination) - ;; ID link points to an external file. - (plain-text - (let ((fragment (concat "ID-" path)) - ;; Treat links to ".org" files as ".html", if needed. - (path (funcall link-org-files-as-html-maybe - destination info))) - (format "%s" - path fragment attributes (or desc destination)))) - ;; Fuzzy link points nowhere. - ((nil) - (format "%s" - (or desc - (org-export-data - (org-element-property :raw-link link) info)))) - ;; Link points to a headline. - (headline - (let ((href - ;; What href to use? - (cond - ;; Case 1: Headline is linked via it's CUSTOM_ID - ;; property. Use CUSTOM_ID. - ((string= type "custom-id") - (org-element-property :CUSTOM_ID destination)) - ;; Case 2: Headline is linked via it's ID property - ;; or through other means. Use the default href. - ((member type '("id" "fuzzy")) - (format "sec-%s" - (mapconcat 'number-to-string - (org-export-get-headline-number - destination info) "-"))) - (t (error "Shouldn't reach here")))) - ;; What description to use? Previously, we'd look if - ;; section numbering was enabled, and use that - ;; number, however, rendering a link description as - ;; number seems less useful than destination title. - ;; And since Org 8.3 there has been a lot of - ;; dependencies on :section-number, so will do - ;; something simple here for now. - (desc - (or desc (org-export-data (org-element-property - :title destination) info)))) - (format "%s" - href attributes desc))) - ;; Fuzzy link points to a target or an element. - (t - (let* ((path path) - (org-twbs-standalone-image-predicate 'org-twbs--has-caption-p) - (number (cond - (desc nil) - ((org-twbs-standalone-image-p destination info) - (org-export-get-ordinal - (org-element-map destination 'link - 'identity info t) - info 'link 'org-twbs-standalone-image-p)) - (t (org-export-get-ordinal - destination info nil 'org-twbs--has-caption-p)))) - (desc (cond (desc) - ((not number) "No description for this link") - ((numberp number) (number-to-string number)) - (t (mapconcat 'number-to-string number "."))))) - (format "%s" path attributes desc)))))) - ;; Coderef: replace link with the reference name or the - ;; equivalent line number. - ((string= type "coderef") - (let ((fragment (concat "coderef-" (org-twbs-encode-plain-text path)))) - (format "%s" - fragment - (format "class=\"coderef\" onmouseover=\"CodeHighlightOn(this, \ -'%s');\" onmouseout=\"CodeHighlightOff(this, '%s');\"" - fragment fragment) - attributes - (format (org-export-get-coderef-format path desc) - (org-export-resolve-coderef path info))))) - ;; External link with a description part. - ((and path desc) (format "%s" - (org-twbs-encode-plain-text path) - attributes - desc)) - ;; External link without a description part. - (path (let ((path (org-twbs-encode-plain-text path))) - (format "%s" path attributes path))) - ;; No path, only description. Try to do something useful. - (t (format "%s" desc))))) - -;;;; Paragraph - -(defun org-twbs-paragraph (paragraph contents info) - "Transcode a PARAGRAPH element from Org to HTML. -CONTENTS is the contents of the paragraph, as a string. INFO is -the plist used as a communication channel." - (let* ((parent (org-export-get-parent paragraph)) - (parent-type (org-element-type parent)) - (style '((footnote-definition " class=\"footpara\""))) - (extra (or (cadr (assoc parent-type style)) ""))) - (cond - ((and (eq (org-element-type parent) 'item) - (= (org-element-property :begin paragraph) - (org-element-property :contents-begin parent))) - ;; Leading paragraph in a list item have no tags. - contents) - ((org-twbs-standalone-image-p paragraph info) - ;; Standalone image. - (let ((caption - (let ((raw (org-export-data - (org-export-get-caption paragraph) info)) - (org-twbs-standalone-image-predicate - 'org-twbs--has-caption-p)) - (if (not (org-string-nw-p raw)) raw - (concat - "" - (format (org-twbs--translate "Figure %d:" info) - (org-export-get-ordinal - (org-element-map paragraph 'link - 'identity info t) - info nil 'org-twbs-standalone-image-p)) - " " raw)))) - (label (org-element-property :name paragraph))) - (org-twbs--wrap-image contents info caption label))) - ;; Regular paragraph. - (t (format "\n%s

" extra contents))))) - -;;;; Plain List - -;; FIXME Maybe arg1 is not needed because
  • already sets -;; the correct value for the item counter -(defun org-twbs-begin-plain-list (type &optional arg1) - "Insert the beginning of the HTML list depending on TYPE. -When ARG1 is a string, use it as the start parameter for ordered -lists." - (case type - (ordered - (format "
      " - (if arg1 (format " start=\"%d\"" arg1) ""))) - (unordered "
        ") - (descriptive "
        "))) - -(defun org-twbs-end-plain-list (type) - "Insert the end of the HTML list depending on TYPE." - (case type - (ordered "
    ") - (unordered "") - (descriptive ""))) - -(defun org-twbs-plain-list (plain-list contents info) - "Transcode a PLAIN-LIST element from Org to HTML. -CONTENTS is the contents of the list. INFO is a plist holding -contextual information." - (let* (arg1 ;; (assoc :counter (org-element-map plain-list 'item - (type (org-element-property :type plain-list))) - (format "%s\n%s%s" - (org-twbs-begin-plain-list type) - contents (org-twbs-end-plain-list type)))) - -;;;; Plain Text - -(defun org-twbs-convert-special-strings (string) - "Convert special characters in STRING to HTML." - (let ((all org-twbs-special-string-regexps) - e a re rpl start) - (while (setq a (pop all)) - (setq re (car a) rpl (cdr a) start 0) - (while (string-match re string start) - (setq string (replace-match rpl t nil string)))) - string)) - -(defun org-twbs-encode-plain-text (text) - "Convert plain text characters from TEXT to HTML equivalent. -Possible conversions are set in `org-twbs-protect-char-alist'." - (mapc - (lambda (pair) - (setq text (replace-regexp-in-string (car pair) (cdr pair) text t t))) - org-twbs-protect-char-alist) - text) - -(defun org-twbs-plain-text (text info) - "Transcode a TEXT string from Org to HTML. -TEXT is the string to transcode. INFO is a plist holding -contextual information." - (let ((output text)) - ;; Protect following characters: <, >, &. - (setq output (org-twbs-encode-plain-text output)) - ;; Handle smart quotes. Be sure to provide original string since - ;; OUTPUT may have been modified. - (when (plist-get info :with-smart-quotes) - (setq output (org-export-activate-smart-quotes output :html info text))) - ;; Handle special strings. - (when (plist-get info :with-special-strings) - (setq output (org-twbs-convert-special-strings output))) - ;; Handle break preservation if required. - (when (plist-get info :preserve-breaks) - (setq output - (replace-regexp-in-string - "\\(\\\\\\\\\\)?[ \t]*\n" - (concat (org-twbs-close-tag "br" nil info) "\n") output))) - ;; Return value. - output)) - - -;; Planning - -(defun org-twbs-planning (planning contents info) - "Transcode a PLANNING element from Org to HTML. -CONTENTS is nil. INFO is a plist used as a communication -channel." - (let ((span-fmt "%s %s")) - (format - "

    %s

    " - (mapconcat - 'identity - (delq nil - (list - (let ((closed (org-element-property :closed planning))) - (when closed - (format span-fmt org-closed-string - (org-timestamp-translate closed)))) - (let ((deadline (org-element-property :deadline planning))) - (when deadline - (format span-fmt org-deadline-string - (org-timestamp-translate deadline)))) - (let ((scheduled (org-element-property :scheduled planning))) - (when scheduled - (format span-fmt org-scheduled-string - (org-timestamp-translate scheduled)))))) - " ")))) - -;;;; Property Drawer - -(defun org-twbs-property-drawer (property-drawer contents info) - "Transcode a PROPERTY-DRAWER element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - ;; The property drawer isn't exported but we want separating blank - ;; lines nonetheless. - "") - -;;;; Quote Block - -(defun org-twbs-quote-block (quote-block contents info) - "Transcode a QUOTE-BLOCK element from Org to HTML. -CONTENTS holds the contents of the block. INFO is a plist -holding contextual information." - (format "
    \n%s
    " contents)) - -;;;; Quote Section - -(defun org-twbs-quote-section (quote-section contents info) - "Transcode a QUOTE-SECTION element from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (let ((value (org-remove-indentation - (org-element-property :value quote-section)))) - (when value (format "
    \n%s
    " value)))) - -;;;; Section - -(defun org-twbs-section (section contents info) - "Transcode a SECTION element from Org to HTML. -CONTENTS holds the contents of the section. INFO is a plist -holding contextual information." - (let ((parent (org-export-get-parent-headline section))) - ;; Before first headline: no container, just return CONTENTS. - (if (not parent) contents - ;; Get div's class and id references. - (let* ((class-num (+ (org-export-get-relative-level parent info) - (1- org-twbs-toplevel-hlevel))) - (section-number - (mapconcat - 'number-to-string - (org-export-get-headline-number parent info) "-"))) - ;; Build return value. - (format "
    \n%s
    " - class-num - (or (org-element-property :CUSTOM_ID parent) section-number) - (or contents "")))))) - -;;;; Radio Target - -(defun org-twbs-radio-target (radio-target text info) - "Transcode a RADIO-TARGET object from Org to HTML. -TEXT is the text of the target. INFO is a plist holding -contextual information." - (let ((id (org-element-property :value radio-target))) - (org-twbs--anchor id text))) - -;;;; Special Block - -(defun org-twbs-special-block (special-block contents info) - "Transcode a SPECIAL-BLOCK element from Org to HTML. -CONTENTS holds the contents of the block. INFO is a plist -holding contextual information." - (let* ((block-type (downcase - (org-element-property :type special-block))) - (contents (or contents "")) - (is-html5-tag? (member block-type org-html-html5-elements)) - (attributes (org-export-read-attribute :attr_html special-block))) - (unless is-html5-tag? - (let ((class (plist-get attributes :class))) - (setq attributes (plist-put attributes :class - (if class (concat class " " block-type) - block-type))))) - (setq attributes (org-twbs--make-attribute-string attributes)) - (when (not (equal attributes "")) - (setq attributes (concat " " attributes))) - (if is-html5-tag? - (format "<%s%s>\n%s" block-type attributes contents block-type) - (format "\n%s\n
  • " attributes contents)))) - -;;;; Src Block - -(defun org-twbs-src-block (src-block contents info) - "Transcode a SRC-BLOCK element from Org to HTML. -CONTENTS holds the contents of the item. INFO is a plist holding -contextual information." - (if (org-export-read-attribute :attr_html src-block :textarea) - (org-twbs--textarea-block src-block) - (let ((lang (org-element-property :language src-block)) - (caption (org-export-get-caption src-block)) - (code (org-twbs-format-code src-block info)) - (label (let ((lbl (org-element-property :name src-block))) - (if (not lbl) "" - (format " id=\"%s\"" - lbl))))) - (if (not lang) (format "
    \n%s
    " label code) - (format - "
    \n%s%s\n
    " - (if (not caption) "" - (format "" - (org-export-data caption info))) - (format "\n
    %s
    " lang label code)))))) - -;;;; Statistics Cookie - -(defun org-twbs-statistics-cookie (statistics-cookie contents info) - "Transcode a STATISTICS-COOKIE object from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual information." - (let ((cookie-value (org-element-property :value statistics-cookie))) - (format "%s" cookie-value))) - -;;;; Strike-Through - -(defun org-twbs-strike-through (strike-through contents info) - "Transcode STRIKE-THROUGH from Org to HTML. -CONTENTS is the text with strike-through markup. INFO is a plist -holding contextual information." - (format (or (cdr (assq 'strike-through org-twbs-text-markup-alist)) "%s") - contents)) - -;;;; Subscript - -(defun org-twbs-subscript (subscript contents info) - "Transcode a SUBSCRIPT object from Org to HTML. -CONTENTS is the contents of the object. INFO is a plist holding -contextual information." - (format "%s" contents)) - -;;;; Superscript - -(defun org-twbs-superscript (superscript contents info) - "Transcode a SUPERSCRIPT object from Org to HTML. -CONTENTS is the contents of the object. INFO is a plist holding -contextual information." - (format "%s" contents)) - -;;;; Table Cell - -(defun org-twbs-table-cell (table-cell contents info) - "Transcode a TABLE-CELL element from Org to HTML. -CONTENTS is nil. INFO is a plist used as a communication -channel." - (let* ((table-row (org-export-get-parent table-cell)) - (table (org-export-get-parent-table table-cell)) - (cell-attrs - (if (not org-twbs-table-align-individual-fields) "" - (format (if (and (boundp 'org-twbs-format-table-no-css) - org-twbs-format-table-no-css) - " align=\"%s\"" " class=\"text-%s\"") - (org-export-table-cell-alignment table-cell info))))) - (when (or (not contents) (string= "" (org-trim contents))) - (setq contents " ")) - (cond - ((and (org-export-table-has-header-p table info) - (= 1 (org-export-table-row-group table-row info))) - (concat "\n" (format (car org-twbs-table-header-tags) "col" cell-attrs) - contents (cdr org-twbs-table-header-tags))) - ((and org-twbs-table-use-header-tags-for-first-column - (zerop (cdr (org-export-table-cell-address table-cell info)))) - (concat "\n" (format (car org-twbs-table-header-tags) "row" cell-attrs) - contents (cdr org-twbs-table-header-tags))) - (t (concat "\n" (format (car org-twbs-table-data-tags) cell-attrs) - contents (cdr org-twbs-table-data-tags)))))) - -;;;; Table Row - -(defun org-twbs-table-row (table-row contents info) - "Transcode a TABLE-ROW element from Org to HTML. -CONTENTS is the contents of the row. INFO is a plist used as a -communication channel." - ;; Rules are ignored since table separators are deduced from - ;; borders of the current row. - (when (eq (org-element-property :type table-row) 'standard) - (let* ((rowgroup-number (org-export-table-row-group table-row info)) - (row-number (org-export-table-row-number table-row info)) - (start-rowgroup-p - (org-export-table-row-starts-rowgroup-p table-row info)) - (end-rowgroup-p - (org-export-table-row-ends-rowgroup-p table-row info)) - ;; `top-row-p' and `end-rowgroup-p' are not used directly - ;; but should be set so that `org-twbs-table-row-tags' can - ;; use them (see the docstring of this variable.) - (top-row-p (and (equal start-rowgroup-p '(top)) - (equal end-rowgroup-p '(below top)))) - (bottom-row-p (and (equal start-rowgroup-p '(above)) - (equal end-rowgroup-p '(bottom above)))) - (rowgroup-tags - (cond - ;; Case 1: Row belongs to second or subsequent rowgroups. - ((not (= 1 rowgroup-number)) - '("" . "\n")) - ;; Case 2: Row is from first rowgroup. Table has >=1 rowgroups. - ((org-export-table-has-header-p - (org-export-get-parent-table table-row) info) - '("" . "\n")) - ;; Case 2: Row is from first and only row group. - (t '("" . "\n"))))) - (concat - ;; Begin a rowgroup? - (when start-rowgroup-p (car rowgroup-tags)) - ;; Actual table row - (concat "\n" (eval (car org-twbs-table-row-tags)) - contents - "\n" - (eval (cdr org-twbs-table-row-tags))) - ;; End a rowgroup? - (when end-rowgroup-p (cdr rowgroup-tags)))))) - -;;;; Table - -(defun org-twbs-table-first-row-data-cells (table info) - "Transcode the first row of TABLE. -INFO is a plist used as a communication channel." - (let ((table-row - (org-element-map table 'table-row - (lambda (row) - (unless (eq (org-element-property :type row) 'rule) row)) - info 'first-match)) - (special-column-p (org-export-table-has-special-column-p table))) - (if (not special-column-p) (org-element-contents table-row) - (cdr (org-element-contents table-row))))) - -(defun org-twbs-table--table.el-table (table info) - "Format table.el tables into HTML. -INFO is a plist used as a communication channel." - (when (eq (org-element-property :type table) 'table.el) - (require 'table) - (let ((outbuf (with-current-buffer - (get-buffer-create "*org-export-table*") - (erase-buffer) (current-buffer)))) - (with-temp-buffer - (insert (org-element-property :value table)) - (goto-char 1) - (re-search-forward "^[ \t]*|[^|]" nil t) - (table-generate-source 'html outbuf)) - (with-current-buffer outbuf - (prog1 (org-trim (buffer-string)) - (kill-buffer) ))))) - -(defun org-twbs-table (table contents info) - "Transcode a TABLE element from Org to HTML. -CONTENTS is the contents of the table. INFO is a plist holding -contextual information." - (case (org-element-property :type table) - ;; Case 1: table.el table. Convert it using appropriate tools. - (table.el (org-twbs-table--table.el-table table info)) - ;; Case 2: Standard table. - (t - (let* ((label (org-element-property :name table)) - (caption (org-export-get-caption table)) - (number (org-export-get-ordinal - table info nil 'org-twbs--has-caption-p)) - (attributes - (org-twbs--make-attribute-string - (org-combine-plists - (and label (list :id label)) - (plist-get info :html-table-attributes) - (org-export-read-attribute :attr_html table)))) - (alignspec - (if (and (boundp 'org-twbs-format-table-no-css) - org-twbs-format-table-no-css) - "align=\"%s\"" "class=\"%s\"")) - (table-column-specs - (function - (lambda (table info) - (mapconcat - (lambda (table-cell) - (let ((alignment (org-export-table-cell-alignment - table-cell info))) - (concat - ;; Begin a colgroup? - (when (org-export-table-cell-starts-colgroup-p - table-cell info) - "\n") - ;; Add a column. Also specify it's alignment. - (format "\n%s" - (org-twbs-close-tag - "col" (concat " " (format alignspec alignment)) info)) - ;; End a colgroup? - (when (org-export-table-cell-ends-colgroup-p - table-cell info) - "\n")))) - (org-twbs-table-first-row-data-cells table info) "\n"))))) - (format "\n%s\n%s\n%s" - (if (equal attributes "") "" (concat " " attributes)) - (if (not caption) "" - (format (if org-twbs-table-caption-above - "%s" - "%s") - (concat - "" - (format (org-twbs--translate "Table %d:" info) number) - " " (org-export-data caption info)))) - (funcall table-column-specs table info) - contents))))) - -;;;; Target - -(defun org-twbs-target (target contents info) - "Transcode a TARGET object from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - (let ((id (org-element-property :value target))) - (org-twbs--anchor id))) - -;;;; Timestamp - -(defun org-twbs-timestamp (timestamp contents info) - "Transcode a TIMESTAMP object from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - (let ((value (org-twbs-plain-text - (org-timestamp-translate timestamp) info))) - (format "%s" - (replace-regexp-in-string "--" "–" value)))) - -;;;; Underline - -(defun org-twbs-underline (underline contents info) - "Transcode UNDERLINE from Org to HTML. -CONTENTS is the text with underline markup. INFO is a plist -holding contextual information." - (format (or (cdr (assq 'underline org-twbs-text-markup-alist)) "%s") - contents)) - -;;;; Verbatim - -(defun org-twbs-verbatim (verbatim contents info) - "Transcode VERBATIM from Org to HTML. -CONTENTS is nil. INFO is a plist holding contextual -information." - (format (or (cdr (assq 'verbatim org-twbs-text-markup-alist)) "%s") - (org-twbs-encode-plain-text (org-element-property :value verbatim)))) - -;;;; Verse Block - -(defun org-twbs-verse-block (verse-block contents info) - "Transcode a VERSE-BLOCK element from Org to HTML. -CONTENTS is verse block contents. INFO is a plist holding -contextual information." - ;; Replace each newline character with line break. Also replace - ;; each blank line with a line break. - (setq contents (replace-regexp-in-string - "^ *\\\\\\\\$" (format "%s\n" (org-twbs-close-tag "br" nil info)) - (replace-regexp-in-string - "\\(\\\\\\\\\\)?[ \t]*\n" - (format "%s\n" (org-twbs-close-tag "br" nil info)) contents))) - ;; Replace each white space at beginning of a line with a - ;; non-breaking space. - (while (string-match "^[ \t]+" contents) - (let* ((num-ws (length (match-string 0 contents))) - (ws (let (out) (dotimes (i num-ws out) - (setq out (concat out " ")))))) - (setq contents (replace-match ws nil t contents)))) - (format "

    \n%s

    " contents)) - - -;;; Filter Functions - -(defun org-twbs-final-function (contents backend info) - "Filter to indent the HTML and convert HTML entities." - (with-temp-buffer - (insert contents) - (set-auto-mode t) - (if org-twbs-indent - (indent-region (point-min) (point-max))) - (when org-twbs-use-unicode-chars - (require 'mm-url) - (mm-url-decode-entities)) - (buffer-substring-no-properties (point-min) (point-max)))) - - -;;; End-user functions - -;;;###autoload -(defun org-twbs-export-as-html - (&optional async subtreep visible-only body-only ext-plist) - "Export current buffer to an HTML buffer. - -If narrowing is active in the current buffer, only export its -narrowed part. - -If a region is active, export that region. - -A non-nil optional argument ASYNC means the process should happen -asynchronously. The resulting buffer should be accessible -through the `org-export-stack' interface. - -When optional argument SUBTREEP is non-nil, export the sub-tree -at point, extracting information from the headline properties -first. - -When optional argument VISIBLE-ONLY is non-nil, don't export -contents of hidden elements. - -When optional argument BODY-ONLY is non-nil, only write code -between \"\" and \"\" tags. - -EXT-PLIST, when provided, is a property list with external -parameters overriding Org default settings, but still inferior to -file-local settings. - -Export is done in a buffer named \"*Org HTML Export*\", which -will be displayed when `org-export-show-temporary-export-buffer' -is non-nil." - (interactive) - (org-export-to-buffer 'twbs "*Org HTML Export*" - async subtreep visible-only body-only ext-plist - (lambda () (set-auto-mode t)))) - -;;;###autoload -(defun org-twbs-convert-region-to-html () - "Assume the current region has org-mode syntax, and convert it to HTML. -This can be used in any buffer. For example, you can write an -itemized list in org-mode syntax in an HTML buffer and use this -command to convert it." - (interactive) - (org-export-replace-region-by 'twbs)) - -;;;###autoload -(defun org-twbs-export-to-html - (&optional async subtreep visible-only body-only ext-plist) - "Export current buffer to a HTML file. - -If narrowing is active in the current buffer, only export its -narrowed part. - -If a region is active, export that region. - -A non-nil optional argument ASYNC means the process should happen -asynchronously. The resulting file should be accessible through -the `org-export-stack' interface. - -When optional argument SUBTREEP is non-nil, export the sub-tree -at point, extracting information from the headline properties -first. - -When optional argument VISIBLE-ONLY is non-nil, don't export -contents of hidden elements. - -When optional argument BODY-ONLY is non-nil, only write code -between \"\" and \"\" tags. - -EXT-PLIST, when provided, is a property list with external -parameters overriding Org default settings, but still inferior to -file-local settings. - -Return output file's name." - (interactive) - (let* ((extension (concat "." org-twbs-extension)) - (file (org-export-output-file-name extension subtreep)) - (org-export-coding-system org-twbs-coding-system)) - (org-export-to-file 'twbs file - async subtreep visible-only body-only ext-plist))) - -;;;###autoload -(defun org-twbs-publish-to-html (plist filename pub-dir) - "Publish an org file to HTML. - -FILENAME is the filename of the Org file to be published. PLIST -is the property list for the given project. PUB-DIR is the -publishing directory. - -Return output file name." - (org-publish-org-to 'twbs filename - (concat "." (or (plist-get plist :html-extension) - org-twbs-extension "html")) - plist pub-dir)) - - -(provide 'ox-twbs) - -;; Local variables: -;; coding: utf-8 -;; End: - -;;; ox-twbs.el ends here diff --git a/emacs/.emacs.d/elpa/ox-twbs-20161103.1316/ox-twbs.elc b/emacs/.emacs.d/elpa/ox-twbs-20161103.1316/ox-twbs.elc deleted file mode 100644 index b0e13ebe3e4461c76dc62274f687715ee90d9375..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104105 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 diff --git a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-autoloads.el b/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-autoloads.el deleted file mode 100644 index 64afb75..0000000 --- a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-autoloads.el +++ /dev/null @@ -1,15 +0,0 @@ -;;; pcache-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil nil ("pcache.el") (23124 14355 195447 116000)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; pcache-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-pkg.el b/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-pkg.el deleted file mode 100644 index ab4a5fa..0000000 --- a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "pcache" "20170105.1414" "persistent caching for Emacs." '((eieio "1.3")) :commit "1f8086077d770e524492e6fa59b07856e85a6fea") diff --git a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.el b/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.el deleted file mode 100644 index 8b70057..0000000 --- a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.el +++ /dev/null @@ -1,249 +0,0 @@ -;;; pcache.el --- persistent caching for Emacs. - -;; Copyright (C) 2011 Yann Hodique - -;; Author: Yann Hodique -;; Keywords: -;; Package-Version: 20170105.1414 -;; Version: 0.4.2 -;; Package-Requires: ((eieio "1.3")) - -;; 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: - -;; pcache provides a persistent way of caching data, in a hashtable-like -;; structure. It relies on `eieio-persistent' in the backend, so that any -;; object that can be serialized by EIEIO can be stored with pcache. - -;; pcache handles objects called "repositories" (`pcache-repository') and -;; "entries" (`pcache-entry'). Each repository is identified by a unique name, -;; that defines an entry in `pcache-directory'. Subdirectories are allowed, by -;; the use of a directory separator in the repository name. - -;; Example: -;; (let ((repo (pcache-repository "plop"))) -;; (pcache-put repo 'foo 42) ; store value 42 with key 'foo -;; (pcache-get repo 'foo) ; => 42 -;; ) - -;; Keys can be pretty much any Lisp object, and are compared for equality using -;; `eql' - -;; Optionally, cache entries can expire: -;; (let ((repo (pcache-repository "plop"))) -;; (pcache-put repo 'foo 42 1) ; store value 42 with key 'foo for 1 second -;; (sleep-for 1) -;; (pcache-get repo 'foo) ; => nil -;; ) - -;;; Code: - -(require 'cl) -(require 'eieio) -(require 'eieio-base) - -(defvar pcache-directory - (let ((dir (concat user-emacs-directory "var/pcache/"))) - (make-directory dir t) - dir)) - -(defvar *pcache-repositories* (make-hash-table :test 'equal)) - -(defconst pcache-default-save-delay 300) - -(defconst pcache-internal-version-constant "0.4") - -(defconst pcache-version-constant - (format "%s/%s" emacs-version pcache-internal-version-constant)) - -(defclass pcache-repository (eieio-persistent eieio-named) - ((version :initarg :version :initform nil) - (version-constant :allocation :class) - (entries :initarg :entries :initform (make-hash-table)) - (entry-cls :initarg :entry-cls :initform pcache-entry) - (timestamp :initarg :timestamp :initform (float-time (current-time))) - (save-delay :initarg :save-delay))) - -(oset-default 'pcache-repository :save-delay pcache-default-save-delay) -(oset-default 'pcache-repository version-constant pcache-version-constant) - -(defvar *pcache-repository-name* nil) - -(defmethod constructor :static ((cache pcache-repository) &rest args) - (let* ((newname (or (and (stringp (car args)) (car args)) - (plist-get args :object-name) - *pcache-repository-name* - (symbol-name cache))) - (e (gethash newname *pcache-repositories*)) - (path (concat pcache-directory newname))) - (setq args (append args (list :object-name newname))) - (or e - (and (not (boundp 'pcache-avoid-recursion)) - (file-exists-p path) - (condition-case nil - (let* ((pcache-avoid-recursion t) - (*pcache-repository-name* newname) - (obj (eieio-persistent-read path 'pcache-repository t))) - (and (or (pcache-validate-repo obj) - (error "wrong version")) - (puthash newname obj *pcache-repositories*) - obj)) - (error nil))) - (let ((obj (call-next-method)) - (dir (file-name-directory path))) - (unless (file-exists-p dir) - (make-directory dir t)) - (oset obj :file path) - (oset obj :version (oref-default obj version-constant)) - (puthash newname obj *pcache-repositories*) - obj)))) - -(defun pcache-hash-table-values (h) - (let (values) - (maphash (lambda (k v) (push v values)) h) - values)) - -(defun pcache-validate-repo (cache) - (and - (equal (oref cache :version) - (oref-default (object-class cache) version-constant)) - (hash-table-p (oref cache :entries)) - (every - (lambda (entry) - (and (object-of-class-p entry (oref cache :entry-cls)) - (or (null (oref entry :value-cls)) - (object-of-class-p - (oref entry :value) (oref entry :value-cls))))) - (pcache-hash-table-values (oref cache :entries))))) - -(defclass pcache-entry () - ((timestamp :initarg :timestamp - :initform (float-time (current-time))) - (ttl :initarg :ttl :initform nil) - (value :initarg :value :initform nil) - (value-cls :initarg :value-cls :initform nil))) - -(defmethod pcache-entry-valid-p ((entry pcache-entry)) - (let ((ttl (oref entry :ttl))) - (or (null ttl) - (let ((time (float-time (current-time)))) - (< time (+ ttl (oref entry :timestamp))))))) - -(defmethod pcache-get ((cache pcache-repository) key &optional default) - (let* ((table (oref cache :entries)) - (entry (gethash key table))) - (if entry - (if (pcache-entry-valid-p entry) - (oref entry :value) - (remhash key table) - default) - default))) - -(defmethod pcache-has ((cache pcache-repository) key) - (let* ((default (make-symbol ":nil")) - (table (oref cache :entries)) - (entry (gethash key table default))) - (if (eq entry default) nil - (if (pcache-entry-valid-p entry) - t nil)))) - -(defmethod pcache-put ((cache pcache-repository) key value &optional ttl) - (let ((table (oref cache :entries)) - (entry (or (and (eieio-object-p value) - (object-of-class-p value 'pcache-entry) - value) - (make-instance - (oref cache :entry-cls) - :value value - :value-cls (and (object-p value) (object-class value)))))) - (when ttl - (oset entry :ttl ttl)) - (prog1 - (puthash key entry table) - (pcache-save cache)))) - -(defmethod pcache-invalidate ((cache pcache-repository) key) - (let ((table (oref cache :entries))) - (remhash key table) - (pcache-save cache))) - -(defmethod pcache-clear ((cache pcache-repository)) - (let* ((entries (oref cache :entries)) - (test (hash-table-test entries)) - (resize (hash-table-rehash-size entries)) - (threshold (hash-table-rehash-threshold entries)) - (weakness (hash-table-weakness entries))) - (oset cache :entries (make-hash-table :test test :rehash-size resize - :rehash-threshold threshold - :weakness weakness))) - (pcache-save cache)) - -(defmethod pcache-purge-invalid ((cache pcache-repository)) - (let ((table (oref cache :entries))) - (maphash #'(lambda (k e) - (unless (pcache-entry-valid-p e) - (remhash k table))) - table) - (pcache-save cache))) - -(defmethod pcache-save ((cache pcache-repository) &optional force) - (let ((timestamp (oref cache :timestamp)) - (delay (oref cache :save-delay)) - (time (float-time (current-time)))) - (when (or force (> time (+ timestamp delay))) - (oset cache :timestamp time) - ;; make sure version is saved to file - (oset cache :version (oref-default (object-class cache) version-constant)) - (eieio-persistent-save cache)))) - -(defmethod pcache-map ((cache pcache-repository) func) - (let ((table (oref cache :entries))) - (maphash func table))) - -(defun pcache-kill-emacs-hook () - (maphash #'(lambda (k v) - (condition-case nil - (pcache-purge-invalid v) - (error nil)) - (condition-case nil - (pcache-save v t) - (error nil))) - *pcache-repositories*)) - -(defun pcache-destroy-repository (name) - (remhash name *pcache-repositories*) - (let ((fname (concat pcache-directory name))) - (when (file-exists-p fname) - (delete-file fname)))) - -(add-hook 'kill-emacs-hook 'pcache-kill-emacs-hook) - -;; in case we reload in place, clean all repositories with invalid version -(let (to-clean) - (maphash #'(lambda (k v) - (condition-case nil - (unless (eql (oref v :version) - pcache-version-constant) - (signal 'error nil)) - (error - (setq to-clean (cons k to-clean))))) - *pcache-repositories*) - (dolist (k to-clean) - (remhash k *pcache-repositories*))) - -(provide 'pcache) -;;; pcache.el ends here diff --git a/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.elc b/emacs/.emacs.d/elpa/pcache-20170105.1414/pcache.elc deleted file mode 100644 index 98785328c4cfd153bb277b148db30f0bfd9e5d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8469 zcmdT}ZI9c=5x$So3BIODgT}8}>HH$u;aMd0;>aj^wv!J53N%21_JegmdF1NE9*TKoL_nFyUaw+Lj8!-y>0G-5rpP6T7o*lmY{%>#od~k4Z`10jT@g}=k#fgmgAx_2j zS3y{aYnc~umI`lt;-9$O_bx7%B1jUEt;+Z+{xv8upg1|?&YzcYAr@FitP5F)Xp;t4 zaVVlJEXq7iFN$x_n-`@BqDV%f+QU=TanD(AY!^QwSO4Ni1_wE-}#a)xJ=|@A{(y{NBIA z!^8ghrj$;YMN;(U{&0wo+nswZ{h*I$KlpeUPJ7~QE`M3axfEd{WGv%M{ddlTLY@h4 zaM+LJ;yTF1Dh$G<||M9&5W z&}0OVi(s9UP7z#VGnoV%0rjYD8Uy1L=tzUa(Z+{nu}qMbqBlGl_4drz8Q5QB`Bi`k zkBaAyik?s^FrJ|gbmKmB`aLEkRgWLnL zmD>}mHR47Ba4cvZkW$9Q0%+6npWMzLvbS9i9Z>f!DkoiG$eC5grhxYcoM3FnLCJx zdA4VW;{=qcLhe_A<|c_6LrJ`MOJH9#g>0R^gk+=EL7N0L;*!6&PTQx)?Nj_5w@$xn zy?XtcqKc&iwHzNrzF#@cyC6?-y2#08xz1BTcBcsUcjI$}c|j0=^phx&P$_8UYf2et z>4`W3CgO4fJCm-O@lA&!981R`WfwYK+t^0ioZ`?{7}q^J9;AFRD`ZJ7O|y1mkC@d! zG}NUE_^`1u0_DM-G_-L@Y6UOp>FT3dy6 z--S$N9)}J^6oxqU#V zqx3#yV4#68#O+8UY4fr+3ulsc$jN!%7~nG+xl-xO3E< zF9;!cKI%Rj;+J=Ipc0&i{i`#0Q!MLa@$Q3pkJiO0<~?2*qo!EQchNxG8bkTm8O{EY z(4f=}u%AEXuF1ToyXup;!=vugXS60b7U}k8;3z8~%CYP0;EQPvB2R+U;#|m5%v3OB z*ok6ub)F^aH#&(3QQ(rGv*+15MIO~|5nN|6c`d>+^Kzovj(m?rk*1MR@;u82!ep*G zm0?N{nMLYsZ(6Pqm?Fe!3|oOa(ki0&F3-{n<3^lM`CJ6h5b4ZG<@?gn0OfO#YFu0kH5^16r|>Bt?i{13 zVB@qpb20BGxT?dn093>iL>S-07GnWCb8K<72NTe_RZ&2|oI-BhYhu5GWUbwruheao z#x)#OV%|}|rAE*PLsKNiZAhV-VvqP{V~qGY2PIfc7vY)iE*yXw-Q$`C(HiZp1$+Lm8A?LKurpcGH&~?fk@C@;n8Wz0K}S1Y9vOgk7=<( z!&Ahi+=$0i@6Aw36U1(C|5EH_OnDs{oXUpNd8(L{dlxy}e+W_BVTb67f0xDTpuyz? z?>(YU&rBHN?g6%s#>G>e{#D{v2KltXtV9vT<5~jzB z_>0~QX%Ce}D&0CYr}?i!p}1Pp8!A-TawuAA*$uEzvQ<|>$kk@^d`VKcB&f&c@xN3z z#3$5F;f$srpwOLaOvB((?v&?_A7hM%bspWh%U1M#YH;T%`#4?bC|-E}t$Erx#*YyQ zE}EKlR@Tv&<`OW0nC-qtDOyonPJ%~j?rO0^8v;|w1FyE*T(58SZEr=k zV~?xH=$8yLdv)_ruQ{t$(wI`#cD+i~t95=MQNdxOZ>e0}hE#Nw{&e7M!%-XFR^6M#rBGqh_JS%9RuQlUixR2%TnS8H~UZSRJ>#gpy3xYRgMBBUd#n)Qx124#G5v$;$bXsRv*sxY96_=pVqu-RX-YCw;QA2iWr z(82e)ME3_(qC@)rOc(2hzI%sZNyxyRpN35h>~*}juBufUrA;?7r7X+oP}aiHm8kox zED_!bs|`Si88K9;{AH!IP_lLVVrE^Mhm{(OkmoFk&#Q3 zLJ?UVA0QD&tS=}IaHL>CEOexu*G3pR{IyALJLM<@I3t(=iu}dY%@uz#o?OHi#938M Wlko%QXUw(AvunJ|(EIQkg8u-zvOVem diff --git a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-autoloads.el b/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-autoloads.el deleted file mode 100644 index 26bdc59..0000000 --- a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-autoloads.el +++ /dev/null @@ -1,122 +0,0 @@ -;;; pkg-info-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "pkg-info" "pkg-info.el" (23124 14351 828764 -;;;;;; 583000)) -;;; Generated autoloads from pkg-info.el - -(autoload 'pkg-info-library-original-version "pkg-info" "\ -Get the original version in the header of LIBRARY. - -The original version is stored in the X-Original-Version header. -This header is added by the MELPA package archive to preserve -upstream version numbers. - -LIBRARY is either a symbol denoting a named feature, or a library -name as string. - -If SHOW is non-nil, show the version in the minibuffer. - -Return the version from the header of LIBRARY as list. Signal an -error if the LIBRARY was not found or had no X-Original-Version -header. - -See Info node `(elisp)Library Headers' for more information -about library headers. - -\(fn LIBRARY &optional SHOW)" t nil) - -(autoload 'pkg-info-library-version "pkg-info" "\ -Get the version in the header of LIBRARY. - -LIBRARY is either a symbol denoting a named feature, or a library -name as string. - -If SHOW is non-nil, show the version in the minibuffer. - -Return the version from the header of LIBRARY as list. Signal an -error if the LIBRARY was not found or had no proper header. - -See Info node `(elisp)Library Headers' for more information -about library headers. - -\(fn LIBRARY &optional SHOW)" t nil) - -(autoload 'pkg-info-defining-library-original-version "pkg-info" "\ -Get the original version of the library defining FUNCTION. - -The original version is stored in the X-Original-Version header. -This header is added by the MELPA package archive to preserve -upstream version numbers. - -If SHOW is non-nil, show the version in mini-buffer. - -This function is mainly intended to find the version of a major -or minor mode, i.e. - - (pkg-info-defining-library-version 'flycheck-mode) - -Return the version of the library defining FUNCTION. Signal an -error if FUNCTION is not a valid function, if its defining -library was not found, or if the library had no proper version -header. - -\(fn FUNCTION &optional SHOW)" t nil) - -(autoload 'pkg-info-defining-library-version "pkg-info" "\ -Get the version of the library defining FUNCTION. - -If SHOW is non-nil, show the version in mini-buffer. - -This function is mainly intended to find the version of a major -or minor mode, i.e. - - (pkg-info-defining-library-version 'flycheck-mode) - -Return the version of the library defining FUNCTION. Signal an -error if FUNCTION is not a valid function, if its defining -library was not found, or if the library had no proper version -header. - -\(fn FUNCTION &optional SHOW)" t nil) - -(autoload 'pkg-info-package-version "pkg-info" "\ -Get the version of an installed PACKAGE. - -If SHOW is non-nil, show the version in the minibuffer. - -Return the version as list, or nil if PACKAGE is not installed. - -\(fn PACKAGE &optional SHOW)" t nil) - -(autoload 'pkg-info-version-info "pkg-info" "\ -Obtain complete version info for LIBRARY and PACKAGE. - -LIBRARY is a symbol denoting a named feature, or a library name -as string. PACKAGE is a symbol denoting an ELPA package. If -omitted or nil, default to LIBRARY. - -If SHOW is non-nil, show the version in the minibuffer. - -When called interactively, prompt for LIBRARY. When called -interactively with prefix argument, prompt for PACKAGE as well. - -Return a string with complete version information for LIBRARY. -This version information contains the version from the headers of -LIBRARY, and the version of the installed PACKAGE, the LIBRARY is -part of. If PACKAGE is not installed, or if the PACKAGE version -is the same as the LIBRARY version, do not include a package -version. - -\(fn LIBRARY &optional PACKAGE SHOW)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; pkg-info-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-pkg.el b/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-pkg.el deleted file mode 100644 index e1c04bc..0000000 --- a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "pkg-info" "20150517.443" "Information about packages" '((epl "0.8")) :commit "76ba7415480687d05a4353b27fea2ae02b8d9d61" :url "https://github.com/lunaryorn/pkg-info.el" :keywords '("convenience")) diff --git a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.el b/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.el deleted file mode 100644 index 98ecc15..0000000 --- a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.el +++ /dev/null @@ -1,331 +0,0 @@ -;;; pkg-info.el --- Information about packages -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2015 Sebastian Wiesner - -;; Author: Sebastian Wiesner -;; URL: https://github.com/lunaryorn/pkg-info.el -;; Package-Version: 20150517.443 -;; Keywords: convenience -;; Version: 0.7-cvs -;; Package-Requires: ((epl "0.8")) - -;; This file is not part of GNU Emacs. - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: - -;; This library extracts information from installed packages. - -;;;; Functions: - -;; `pkg-info-library-version' extracts the version from the header of a library. -;; -;; `pkg-info-defining-library-version' extracts the version from the header of a -;; library defining a function. -;; -;; `pkg-info-package-version' gets the version of an installed package. -;; -;; `pkg-info-format-version' formats a version list as human readable string. -;; -;; `pkg-info-version-info' returns complete version information for a specific -;; package. -;; -;; `pkg-info-get-melpa-recipe' gets the MELPA recipe for a package. -;; -;; `pkg-info-get-melpa-fetcher' gets the fetcher used to build a package on -;; MELPA. -;; -;; `pkg-info-wiki-package-p' determines whether a package was build from -;; EmacsWiki on MELPA. - -;;; Code: - -(require 'epl) - -(require 'lisp-mnt) -(require 'find-func) -(require 'json) ; `json-read' -(require 'url-http) ; `url-http-parse-response' - -(defvar url-http-end-of-headers) - - -;;; Version information -(defun pkg-info-format-version (version) - "Format VERSION as human-readable string. - -Return a human-readable string representing VERSION." - ;; XXX: Find a better, more flexible way of formatting? - (package-version-join version)) - -(defsubst pkg-info--show-version-and-return (version show) - "Show and return VERSION. - -When SHOW is non-nil, show VERSION in minibuffer. - -Return VERSION." - (when show - (message (if (listp version) (pkg-info-format-version version) version))) - version) - -(defun pkg-info--read-library () - "Read a library from minibuffer." - (completing-read "Load library: " - (apply-partially 'locate-file-completion-table - load-path - (get-load-suffixes)))) - -(defun pkg-info--read-function () - "Read a function name from minibuffer." - (let ((input (completing-read "Function: " obarray #'boundp :require-match))) - (if (string= input "") nil (intern input)))) - -(defun pkg-info--read-package () - "Read a package name from minibuffer." - (let* ((installed (epl-installed-packages)) - (names (sort (mapcar (lambda (pkg) - (symbol-name (epl-package-name pkg))) - installed) - #'string<)) - (default (car names))) - (completing-read "Installed package: " names nil 'require-match - nil nil default))) - -(defun pkg-info-library-source (library) - "Get the source file of LIBRARY. - -LIBRARY is either a symbol denoting a named feature, or a library -name as string. - -Return the source file of LIBRARY as string." - (find-library-name (if (symbolp library) (symbol-name library) library))) - -(defun pkg-info-defining-library (function) - "Get the source file of the library defining FUNCTION. - -FUNCTION is a function symbol. - -Return the file name of the library as string. Signal an error -if the library does not exist, or if the definition of FUNCTION -was not found." - (unless (functionp function) - (signal 'wrong-type-argument (list 'functionp function))) - (let ((library (symbol-file function 'defun))) - (unless library - (error "Can't find definition of %s" function)) - library)) - -(defun pkg-info-x-original-version (file) - "Read the X-Original-Version header from FILE. - -Return the value as version list, or return nil if FILE lacks -this header. Signal an error, if the value of the header is not -a valid version." - (let ((version-str (with-temp-buffer - (insert-file-contents file) - (lm-header "X-Original-Version")))) - (when version-str - (version-to-list version-str)))) - -;;;###autoload -(defun pkg-info-library-original-version (library &optional show) - "Get the original version in the header of LIBRARY. - -The original version is stored in the X-Original-Version header. -This header is added by the MELPA package archive to preserve -upstream version numbers. - -LIBRARY is either a symbol denoting a named feature, or a library -name as string. - -If SHOW is non-nil, show the version in the minibuffer. - -Return the version from the header of LIBRARY as list. Signal an -error if the LIBRARY was not found or had no X-Original-Version -header. - -See Info node `(elisp)Library Headers' for more information -about library headers." - (interactive (list (pkg-info--read-library) t)) - (let ((version (pkg-info-x-original-version - (pkg-info-library-source library)))) - (if version - (pkg-info--show-version-and-return version show) - (error "Library %s has no original version" library)))) - -;;;###autoload -(defun pkg-info-library-version (library &optional show) - "Get the version in the header of LIBRARY. - -LIBRARY is either a symbol denoting a named feature, or a library -name as string. - -If SHOW is non-nil, show the version in the minibuffer. - -Return the version from the header of LIBRARY as list. Signal an -error if the LIBRARY was not found or had no proper header. - -See Info node `(elisp)Library Headers' for more information -about library headers." - (interactive (list (pkg-info--read-library) t)) - (let* ((source (pkg-info-library-source library)) - (version (epl-package-version (epl-package-from-file source)))) - (pkg-info--show-version-and-return version show))) - -;;;###autoload -(defun pkg-info-defining-library-original-version (function &optional show) - "Get the original version of the library defining FUNCTION. - -The original version is stored in the X-Original-Version header. -This header is added by the MELPA package archive to preserve -upstream version numbers. - -If SHOW is non-nil, show the version in mini-buffer. - -This function is mainly intended to find the version of a major -or minor mode, i.e. - - (pkg-info-defining-library-version 'flycheck-mode) - -Return the version of the library defining FUNCTION. Signal an -error if FUNCTION is not a valid function, if its defining -library was not found, or if the library had no proper version -header." - (interactive (list (pkg-info--read-function) t)) - (pkg-info-library-original-version (pkg-info-defining-library function) show)) - -;;;###autoload -(defun pkg-info-defining-library-version (function &optional show) - "Get the version of the library defining FUNCTION. - -If SHOW is non-nil, show the version in mini-buffer. - -This function is mainly intended to find the version of a major -or minor mode, i.e. - - (pkg-info-defining-library-version 'flycheck-mode) - -Return the version of the library defining FUNCTION. Signal an -error if FUNCTION is not a valid function, if its defining -library was not found, or if the library had no proper version -header." - (interactive (list (pkg-info--read-function) t)) - (pkg-info-library-version (pkg-info-defining-library function) show)) - -;;;###autoload -(defun pkg-info-package-version (package &optional show) - "Get the version of an installed PACKAGE. - -If SHOW is non-nil, show the version in the minibuffer. - -Return the version as list, or nil if PACKAGE is not installed." - (interactive (list (pkg-info--read-package) t)) - (let* ((name (if (stringp package) (intern package) package)) - (package (car (epl-find-installed-packages name)))) - (unless package - (error "Can't find installed package %s" name)) - (pkg-info--show-version-and-return (epl-package-version package) show))) - -;;;###autoload -(defun pkg-info-version-info (library &optional package show) - "Obtain complete version info for LIBRARY and PACKAGE. - -LIBRARY is a symbol denoting a named feature, or a library name -as string. PACKAGE is a symbol denoting an ELPA package. If -omitted or nil, default to LIBRARY. - -If SHOW is non-nil, show the version in the minibuffer. - -When called interactively, prompt for LIBRARY. When called -interactively with prefix argument, prompt for PACKAGE as well. - -Return a string with complete version information for LIBRARY. -This version information contains the version from the headers of -LIBRARY, and the version of the installed PACKAGE, the LIBRARY is -part of. If PACKAGE is not installed, or if the PACKAGE version -is the same as the LIBRARY version, do not include a package -version." - (interactive (list (pkg-info--read-library) - (when current-prefix-arg - (pkg-info--read-package)) - t)) - (let* ((package (or package (if (stringp library) (intern library) library))) - (orig-version (condition-case nil - (pkg-info-library-original-version library) - (error nil))) - ;; If we have X-Original-Version, we assume that MELPA replaced the - ;; library version with its generated version, so we use the - ;; X-Original-Version header instead, and ignore the library version - ;; header - (lib-version (or orig-version (pkg-info-library-version library))) - (pkg-version (condition-case nil - (pkg-info-package-version package) - (error nil))) - (version (if (and pkg-version - (not (version-list-= lib-version pkg-version))) - (format "%s (package: %s)" - (pkg-info-format-version lib-version) - (pkg-info-format-version pkg-version)) - (pkg-info-format-version lib-version)))) - (pkg-info--show-version-and-return version show))) - -(defconst pkg-info-melpa-recipe-url "http://melpa.org/recipes.json" - "The URL from which to fetch MELPA recipes.") - -(defvar pkg-info-melpa-recipes nil - "An alist of MELPA recipes.") - -(defun pkg-info-retrieve-melpa-recipes () - "Retrieve MELPA recipes from MELPA archive." - (let ((buffer (url-retrieve-synchronously pkg-info-melpa-recipe-url))) - (with-current-buffer buffer - (unwind-protect - (let ((response-code (url-http-parse-response))) - (unless (equal response-code 200) - (error "Failed to retrieve MELPA recipes from %s (code %s)" - pkg-info-melpa-recipe-url response-code)) - (goto-char url-http-end-of-headers) - (json-read)) - (when (and buffer (buffer-live-p buffer)) - (kill-buffer buffer)))))) - -(defun pkg-info-get-melpa-recipes () - "Get MELPA recipes." - (setq pkg-info-melpa-recipes - (or pkg-info-melpa-recipes - (pkg-info-retrieve-melpa-recipes)))) - -(defun pkg-info-get-melpa-recipe (package) - "Get the MELPA recipe for PACKAGE. - -Return nil if PACKAGE is not on MELPA." - (cdr (assq package (pkg-info-get-melpa-recipes)))) - -(defun pkg-info-get-melpa-fetcher (package) - "Get the MELPA fetcher for PACKAGE." - (cdr (assq 'fetcher (pkg-info-get-melpa-recipe package)))) - -(defun pkg-info-wiki-package-p (package) - "Determine whether PACKAGE is build from the EmacsWiki." - (equal (pkg-info-get-melpa-fetcher package) "wiki")) - -(provide 'pkg-info) - -;; Local Variables: -;; indent-tabs-mode: nil -;; coding: utf-8 -;; End: - -;;; pkg-info.el ends here diff --git a/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.elc b/emacs/.emacs.d/elpa/pkg-info-20150517.443/pkg-info.elc deleted file mode 100644 index ba375aff75b772b4f4425999020dfdd92375fc63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9910 zcmeHN`)}LU6?W__O*s_nupfr4dmPJcV;82whp0!>ZSm4PjCxIxq|Jud+bHVFVnUHB zN!juK`hDj1gfPV&oNkL=b~l)1@0V-qQpeY{ZYQEBz(1{!*)auL6y0`@MX^1dl?@56 zBdJp~6WU*D%EFbkMK5)bk)Kc`WiO`0NGu3>3Rws~jk zg(KDLvXSHCyLWc^Lz( z&VdF|2+v}0f_tf#q3u#y^NA>Jxpx5_$FD_kOdTyd*Xj3_9r=C3C%X>A9s%COmAI|m zoMV^Sl>B}yO#nO}dA{=(Fdaz!cPf+524S9u=NH+3ph;rZ2iYtgPU&;)`!+l|8dIwU zyaiUmMT}jzzVB+@dWJXcR99!syl6Oc2wYX#+<*?DP}ZdD-etAo)7ikk?vXFit;K*)h4UvBDtGnsU1xdMHW+ zFMx11%Oe;d2i$B#hX;Rsvj5~CKq!61kR}kX;lrV3i-rObmBBcaDjw2Ega9G2OBt`y z?r2Hw0mzFuzxr4X64h!Jf+k`G80v#;%|oq9=UN|1^p8do`55sW?}N3<17z$nFH0&L z`Z}hz5m>(~F>mXx*Ip?wX2#$TLJ%+>a(VFW*Y}>+sIvi#?xNucI zfh*|R^*28|@;V-}3z>!lA49)xyK=k}k&2u{Xe!QZl?ws1J}bp!`dJHz{7Tq$?pnuk zhaEV0pKV1Nlm_5aRDM{X{Y?#EwTkSaSLtEuTrmV`*-N`|#L#N&uHM%I^ROPtfhUf>!6)OovS{Q*ihU8h~_kb3ZZ*ddmzEHLgZ3q6(iJ^Eb2ylqfa?g z&NxZnGGc}QnuujA$CLrcVFK4zg$;Z0#wHv@l>zWST&2R>*&o(b;;}cxx>_;ZgRhh5^OR8svP92utQevn$hU8ld^An(=j7b+f1h{Qn(C4g^ z77JZs?!R0lb-qS`AA8Dq+n!%JuffAN_^dIXA21*Ksd&aT&!&idKTdBjs%tm_LXs{U z)|D%47zg;hG~U~ z4(e!=*c+6nKz<>qG+A7g?E#XW{b=LTWnF~>h>rV`A9$W9coBexV?LXww^|F@9 zX!W+7TqoWVPjs294>AZ=ZCxkXoQdgPHo6T}HHK1$iy4#j^4O!c z9`h{%>J@u}vR`PyVsw{}%&w|Ern)(e{vw8mjbawH-NDGpCUIFJc7r@QXF-e!X9>EQ znIZRG3|!7~BH1vOX#x)iQ9mc=yQrVh^XE=kB^MCXSZ_)5FzZQ9IZ<U~HoQWg>)zu(OiAQa*R69Icd>sx!_Q(a&snIY3$%Yt`M)dYTuV}w z+Lkr(yK>9gAS|AiU?-`nrgFK*SiRlMJ&Y7I-4=|B4=#8t0?F{T*f8%SL2L1>s)29~tSx)D}wRMR(zmS-tfCAq!As3nUSiMfUu(so_PzW|0V-Gq#Sn~;Fx5&rr2 zanB`PG|O|e|7_)%Jc+5#nr{_UT&k}d5UP8|?KVAwd4BukQ1yk+#xaIuTvG_1mZ?Tu zE~0oUiaj;JgeT&s3)RjOkxWBu&r58~(5b~k^v`eKmJjx_{N%QIpU3PiT`Tt5?fwqW zO}!rNV{p#W1KFe|*uwTC||ih@Nj*HOY~(HosZ0Q48AHNH>EE`CEpHiQ+ts#u(gXvjT0|=MrjzB z-;>++$~gP3>9_a#RT -;; Fanael Linithien -;; Maintainer: Fanael Linithien -;; Created: 2010-09-02 -;; Version: 2.1.3 -;; Package-Version: 20170929.432 -;; Keywords: faces, convenience, lisp, tools -;; Homepage: https://github.com/Fanael/rainbow-delimiters - -;; Note: despite `lexical-binding', there's no Emacs 24 dependency. -;; This is merely an optimization for Emacs 24+, the code is supposed to work -;; with *both* dynamic and lexical binding. - -;; 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 . - -;;; Installation: - -;; The recommended way is to use MELPA (http://melpa.org/) or MELPA Stable -;; (http://stable.melpa.org/). If either is in your `package-archives', do -;; M-x package-install RET rainbow-delimiters RET -;; Otherwise, open `rainbow-delimiters.el' in Emacs and use -;; M-x package-install-from-buffer -;; Any other methods of installation are unsupported. - -;;; Commentary: -;; -;; Rainbow-delimiters is a "rainbow parentheses"-like mode which highlights -;; parentheses, brackets, and braces according to their depth. Each -;; successive level is highlighted in a different color. This makes it easy -;; to spot matching delimiters, orient yourself in the code, and tell which -;; statements are at a given level. -;; -;; Great care has been taken to make this mode fast. You shouldn't see -;; any discernible change in scrolling or editing speed while using it, -;; even in delimiter-rich languages like Clojure, Lisp, and Scheme. -;; -;; Usage: -;; -;; To toggle the mode in the current buffer: -;; M-x rainbow-delimiters-mode -;; To start the mode automatically in `foo-mode', add the following to your init -;; file: -;; (add-hook 'foo-mode-hook #'rainbow-delimiters-mode) -;; To start the mode automatically in most programming modes (Emacs 24 and -;; above): -;; (add-hook 'prog-mode-hook #'rainbow-delimiters-mode) -;; -;; Customization: -;; -;; To customize various options, including the color theme: -;; M-x customize-group rainbow-delimiters -;; -;; You can specify custom colors by customizing following faces: -;; - Faces take the form `rainbow-delimiters-depth-N-face', with N being the -;; depth. Depth begins at 1, the outermost color. Faces exist for depths 1-9. -;; - The unmatched delimiter face: `rainbow-delimiters-unmatched-face'. -;; - The mismatched delimiter face: `rainbow-delimiters-mismatched-face'. - -;;; Code: - -(defgroup rainbow-delimiters nil - "Highlight nested parentheses, brackets, and braces according to their depth." - :prefix "rainbow-delimiters-" - :link '(url-link :tag "Website for rainbow-delimiters" - "https://github.com/Fanael/rainbow-delimiters") - :group 'applications) - -(defgroup rainbow-delimiters-faces nil - "Faces for successively nested pairs of delimiters. - -When depth exceeds innermost defined face, colors cycle back through." - :group 'rainbow-delimiters - :group 'faces - :link '(custom-group-link "rainbow-delimiters") - :prefix "rainbow-delimiters-") - -(defcustom rainbow-delimiters-pick-face-function - #'rainbow-delimiters-default-pick-face - "The function used to pick a face used to highlight a delimiter. -The function should take three arguments (DEPTH MATCH LOC), where: - - DEPTH is the delimiter depth; when zero or negative, it's an unmatched - delimiter. - - MATCH is nil iff the delimiter is a mismatched closing delimiter. - - LOC is the location of the delimiter. -The function should return a value suitable to use as a value of the `face' text -property, or nil, in which case the delimiter is not highlighted. -The function should not move the point or mark or change the match data." - :tag "Pick face function" - :type 'function - :group 'rainbow-delimiters) - -(defface rainbow-delimiters-base-face - '((default (:inherit unspecified))) - "Face inherited by all other rainbow-delimiter faces." - :group 'rainbow-delimiters-faces) - -(defface rainbow-delimiters-unmatched-face - '((default (:inherit rainbow-delimiters-base-face)) - (((background light)) (:foreground "#88090B")) - (((background dark)) (:inherit rainbow-delimiters-base-face :foreground "#88090B"))) - "Face to highlight unmatched closing delimiters in." - :group 'rainbow-delimiters-faces) - -(defface rainbow-delimiters-mismatched-face - '((t :inherit (rainbow-delimiters-unmatched-face rainbow-delimiters-base-face))) - "Face to highlight mismatched closing delimiters in." - :group 'rainbow-delimiters-faces) - -(eval-when-compile - (defmacro rainbow-delimiters--define-depth-faces () - (let ((faces '()) - (light-colors ["#707183" "#7388d6" "#909183" "#709870" "#907373" - "#6276ba" "#858580" "#80a880" "#887070"]) - (dark-colors ["grey55" "#93a8c6" "#b0b1a3" "#97b098" "#aebed8" - "#b0b0b3" "#90a890" "#a2b6da" "#9cb6ad"])) - (dotimes (i 9) - (push `(defface ,(intern (format "rainbow-delimiters-depth-%d-face" (1+ i))) - '((default (:inherit rainbow-delimiters-base-face)) - (((class color) (background light)) :foreground ,(aref light-colors i)) - (((class color) (background dark)) :foreground ,(aref dark-colors i))) - ,(format "Nested delimiter face, depth %d." (1+ i)) - :group 'rainbow-delimiters-faces) - faces)) - `(progn ,@faces)))) -(rainbow-delimiters--define-depth-faces) - -(defcustom rainbow-delimiters-max-face-count 9 - "Number of faces defined for highlighting delimiter levels. - -Determines depth at which to cycle through faces again. - -It's safe to change this variable provided that for all integers from 1 to the -new value inclusive, a face `rainbow-delimiters-depth-N-face' is defined." - :type 'integer - :group 'rainbow-delimiters) - -(defcustom rainbow-delimiters-outermost-only-face-count 0 - "Number of faces to be used only for N outermost delimiter levels. - -This should be smaller than `rainbow-delimiters-max-face-count'." - :type 'integer - :group 'rainbow-delimiters) - - -(defun rainbow-delimiters-default-pick-face (depth match _loc) - "Return a face name appropriate for nesting depth DEPTH. -DEPTH and MATCH are as in `rainbow-delimiters-pick-face-function'. - -The returned value is either `rainbow-delimiters-unmatched-face', -`rainbow-delimiters-mismatched-face', or one of the -`rainbow-delimiters-depth-N-face' faces, obeying -`rainbow-delimiters-max-face-count' and -`rainbow-delimiters-outermost-only-face-count'." - (cond - ((<= depth 0) - 'rainbow-delimiters-unmatched-face) - ((not match) - 'rainbow-delimiters-mismatched-face) - (t - (intern-soft - (concat "rainbow-delimiters-depth-" - (number-to-string - (if (<= depth rainbow-delimiters-max-face-count) - ;; Our nesting depth has a face defined for it. - depth - ;; Deeper than # of defined faces; cycle back through to - ;; `rainbow-delimiters-outermost-only-face-count' + 1. - ;; Return face # that corresponds to current nesting level. - (+ 1 rainbow-delimiters-outermost-only-face-count - (mod (- depth rainbow-delimiters-max-face-count 1) - (- rainbow-delimiters-max-face-count - rainbow-delimiters-outermost-only-face-count))))) - "-face"))))) - -(defun rainbow-delimiters--apply-color (loc depth match) - "Highlight a single delimiter at LOC according to DEPTH. - -LOC is the location of the character to add text properties to. -DEPTH is the nested depth at LOC, which determines the face to use. -MATCH is nil iff it's a mismatched closing delimiter." - (let ((face (funcall rainbow-delimiters-pick-face-function depth match loc))) - (when face - (font-lock-prepend-text-property loc (1+ loc) 'face face)))) - -(defun rainbow-delimiters--char-ineligible-p (loc ppss delim-syntax-code) - "Return t if char at LOC should not be highlighted. -PPSS is the `parse-partial-sexp' state at LOC. -DELIM-SYNTAX-CODE is the `car' of a raw syntax descriptor at LOC. - -Returns t if char at loc meets one of the following conditions: -- Inside a string. -- Inside a comment. -- Is an escaped char, e.g. ?\)" - (or - (nth 3 ppss) ; inside string? - (nth 4 ppss) ; inside comment? - (nth 5 ppss) ; escaped according to the syntax table? - ;; Note: no need to consider single-char openers, they're already handled - ;; by looking at ppss. - (cond - ;; Two character opener, LOC at the first character? - ((/= 0 (logand #x10000 delim-syntax-code)) - (/= 0 (logand #x20000 (or (car (syntax-after (1+ loc))) 0)))) - ;; Two character opener, LOC at the second character? - ((/= 0 (logand #x20000 delim-syntax-code)) - (/= 0 (logand #x10000 (or (car (syntax-after (1- loc))) 0)))) - (t - nil)))) - -;; Main function called by font-lock. -(defun rainbow-delimiters--propertize (end) - "Highlight delimiters in region between point and END. - -Used by font-lock for dynamic highlighting." - (let* ((last-ppss-pos (point)) - (ppss (syntax-ppss))) - (while (> end (progn (skip-syntax-forward "^()" end) - (point))) - (let* ((delim-pos (point)) - (delim-syntax (syntax-after delim-pos))) - (setq ppss (parse-partial-sexp last-ppss-pos delim-pos nil nil ppss)) - (setq last-ppss-pos delim-pos) - ;; `skip-syntax-forward' leaves the point at the delimiter, move past - ;; it. - (forward-char) - (let ((delim-syntax-code (car delim-syntax))) - (cond - ((rainbow-delimiters--char-ineligible-p delim-pos ppss delim-syntax-code) - nil) - ((= 4 (logand #xFFFF delim-syntax-code)) - ;; The (1+ ...) is needed because `parse-partial-sexp' returns the - ;; depth at the opening delimiter, not in the block being started. - (rainbow-delimiters--apply-color delim-pos (1+ (nth 0 ppss)) t)) - (t - ;; Not an opening delimiter, so it's a closing delimiter. - (let ((matches-p (eq (cdr delim-syntax) (char-after (nth 1 ppss))))) - (rainbow-delimiters--apply-color delim-pos (nth 0 ppss) matches-p)))))))) - ;; We already fontified the delimiters, tell font-lock there's nothing more - ;; to do. - nil) - -;; NB: no face defined here because we apply the faces ourselves instead of -;; leaving that to font-lock. -(defconst rainbow-delimiters--font-lock-keywords - '(rainbow-delimiters--propertize)) - -;;;###autoload -(define-minor-mode rainbow-delimiters-mode - "Highlight nested parentheses, brackets, and braces according to their depth." - nil "" nil ; No modeline lighter - it's already obvious when the mode is on. - (font-lock-remove-keywords nil rainbow-delimiters--font-lock-keywords) - (when rainbow-delimiters-mode - (font-lock-add-keywords nil rainbow-delimiters--font-lock-keywords 'append) - (set (make-local-variable 'jit-lock-contextually) t) - (when (or (bound-and-true-p syntax-begin-function) - (bound-and-true-p font-lock-beginning-of-syntax-function)) - ;; We're going to modify `syntax-begin-function', so flush the cache to - ;; avoid getting cached values that used the old value. - (syntax-ppss-flush-cache 0)) - ;; `syntax-begin-function' may break the assumption we rely on that - ;; `syntax-ppss' is exactly equivalent to `parse-partial-sexp' from - ;; `point-min'. Just don't use it, the performance hit should be negligible. - (when (boundp 'syntax-begin-function) - (set (make-local-variable 'syntax-begin-function) nil)) - ;; Obsolete equivalent of `syntax-begin-function'. - (when (boundp 'font-lock-beginning-of-syntax-function) - (set (make-local-variable 'font-lock-beginning-of-syntax-function) nil))) - (when font-lock-mode - (if (fboundp 'font-lock-flush) - (font-lock-flush) - (with-no-warnings (font-lock-fontify-buffer))))) - -;;;###autoload -(defun rainbow-delimiters-mode-enable () - "Enable `rainbow-delimiters-mode'." - (rainbow-delimiters-mode 1)) - -;;;###autoload -(defun rainbow-delimiters-mode-disable () - "Disable `rainbow-delimiters-mode'." - (rainbow-delimiters-mode 0)) - -(provide 'rainbow-delimiters) -;;; rainbow-delimiters.el ends here diff --git a/emacs/.emacs.d/elpa/rainbow-delimiters-20170929.432/rainbow-delimiters.elc b/emacs/.emacs.d/elpa/rainbow-delimiters-20170929.432/rainbow-delimiters.elc deleted file mode 100644 index 2bc2a7b60a7b6095c4a60c52e9f1036d8c3418c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9310 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 diff --git a/emacs/.emacs.d/elpa/rainbow-mode-0.13.signed b/emacs/.emacs.d/elpa/rainbow-mode-0.13.signed deleted file mode 100644 index 1ba862c..0000000 --- a/emacs/.emacs.d/elpa/rainbow-mode-0.13.signed +++ /dev/null @@ -1 +0,0 @@ -Good signature from 474F05837FBDEF9B GNU ELPA Signing Agent (trust undefined) created at 2017-05-29T23:05:03+0200 using DSA \ No newline at end of file diff --git a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-autoloads.el b/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-autoloads.el deleted file mode 100644 index b586428..0000000 --- a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-autoloads.el +++ /dev/null @@ -1,23 +0,0 @@ -;;; rainbow-mode-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "rainbow-mode" "rainbow-mode.el" (23124 14382 -;;;;;; 115575 75000)) -;;; Generated autoloads from rainbow-mode.el - -(autoload 'rainbow-mode "rainbow-mode" "\ -Colorize strings that represent colors. -This will fontify with colors the string like \"#aabbcc\" or \"blue\". - -\(fn &optional ARG)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; rainbow-mode-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-pkg.el b/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-pkg.el deleted file mode 100644 index 17527c9..0000000 --- a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "rainbow-mode" "0.13" "Colorize color names in buffers" 'nil :url "http://elpa.gnu.org/packages/rainbow-mode.html" :keywords '("faces")) diff --git a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.el b/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.el deleted file mode 100644 index fd2f46b..0000000 --- a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.el +++ /dev/null @@ -1,1258 +0,0 @@ -;;; rainbow-mode.el --- Colorize color names in buffers - -;; Copyright (C) 2010-2017 Free Software Foundation, Inc - -;; Author: Julien Danjou -;; Keywords: faces -;; Version: 0.13 - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see . - -;;; Commentary: -;; -;; This minor mode sets background color to strings that match color -;; names, e.g. #0000ff is displayed in white with a blue background. -;; - -;;; Code: - -(eval-when-compile - (require 'cl)) - -(require 'regexp-opt) -(require 'faces) -(require 'color) - -(unless (require 'xterm-color nil t) - (require 'ansi-color)) - -(defgroup rainbow nil - "Show color strings with a background color." - :tag "Rainbow" - :group 'help) - -;; Hexadecimal colors -(defvar rainbow-hexadecimal-colors-font-lock-keywords - '(("[^&]\\(#\\(?:[0-9a-fA-F]\\{3\\}\\)+\\{1,4\\}\\)" - (1 (rainbow-colorize-itself 1))) - ("^\\(#\\(?:[0-9a-fA-F]\\{3\\}\\)+\\{1,4\\}\\)" - (0 (rainbow-colorize-itself))) - ("[Rr][Gg][Bb]:[0-9a-fA-F]\\{1,4\\}/[0-9a-fA-F]\\{1,4\\}/[0-9a-fA-F]\\{1,4\\}" - (0 (rainbow-colorize-itself))) - ("[Rr][Gg][Bb][Ii]:[0-9.]+/[0-9.]+/[0-9.]+" - (0 (rainbow-colorize-itself))) - ("\\(?:[Cc][Ii][Ee]\\(?:[Xx][Yy][Zz]\\|[Uu][Vv][Yy]\\|[Xx][Yy][Yy]\\|[Ll][Aa][Bb]\\|[Ll][Uu][Vv]\\)\\|[Tt][Ee][Kk][Hh][Vv][Cc]\\):[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?/[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?/[+-]?[0-9.]+\\(?:[Ee][+-]?[0-9]+\\)?" - (0 (rainbow-colorize-itself)))) - "Font-lock keywords to add for hexadecimal colors.") - -;; rgb() colors -(defvar rainbow-html-rgb-colors-font-lock-keywords - '(("rgb(\s*\\([0-9]\\{1,3\\}\\(?:\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*)" - (0 (rainbow-colorize-rgb))) - ("rgba(\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\\.[0-9]\\)?\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)" - (0 (rainbow-colorize-rgb))) - ("hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)" - (0 (rainbow-colorize-hsl))) - ("hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)" - (0 (rainbow-colorize-hsl)))) - "Font-lock keywords to add for RGB colors.") - -;; HTML colors name -(defvar rainbow-html-colors-font-lock-keywords nil - "Font-lock keywords to add for HTML colors.") -(make-variable-buffer-local 'rainbow-html-colors-font-lock-keywords) - -(defcustom rainbow-html-colors-alist - '(("AliceBlue" . "#F0F8FF") - ("AntiqueWhite" . "#FAEBD7") - ("Aqua" . "#00FFFF") - ("Aquamarine" . "#7FFFD4") - ("Azure" . "#F0FFFF") - ("Beige" . "#F5F5DC") - ("Bisque" . "#FFE4C4") - ("Black" . "#000000") - ("BlanchedAlmond" . "#FFEBCD") - ("Blue" . "#0000FF") - ("BlueViolet" . "#8A2BE2") - ("Brown" . "#A52A2A") - ("BurlyWood" . "#DEB887") - ("CadetBlue" . "#5F9EA0") - ("Chartreuse" . "#7FFF00") - ("Chocolate" . "#D2691E") - ("Coral" . "#FF7F50") - ("CornflowerBlue" . "#6495ED") - ("Cornsilk" . "#FFF8DC") - ("Crimson" . "#DC143C") - ("Cyan" . "#00FFFF") - ("DarkBlue" . "#00008B") - ("DarkCyan" . "#008B8B") - ("DarkGoldenRod" . "#B8860B") - ("DarkGray" . "#A9A9A9") - ("DarkGrey" . "#A9A9A9") - ("DarkGreen" . "#006400") - ("DarkKhaki" . "#BDB76B") - ("DarkMagenta" . "#8B008B") - ("DarkOliveGreen" . "#556B2F") - ("Darkorange" . "#FF8C00") - ("DarkOrchid" . "#9932CC") - ("DarkRed" . "#8B0000") - ("DarkSalmon" . "#E9967A") - ("DarkSeaGreen" . "#8FBC8F") - ("DarkSlateBlue" . "#483D8B") - ("DarkSlateGray" . "#2F4F4F") - ("DarkSlateGrey" . "#2F4F4F") - ("DarkTurquoise" . "#00CED1") - ("DarkViolet" . "#9400D3") - ("DeepPink" . "#FF1493") - ("DeepSkyBlue" . "#00BFFF") - ("DimGray" . "#696969") - ("DimGrey" . "#696969") - ("DodgerBlue" . "#1E90FF") - ("FireBrick" . "#B22222") - ("FloralWhite" . "#FFFAF0") - ("ForestGreen" . "#228B22") - ("Fuchsia" . "#FF00FF") - ("Gainsboro" . "#DCDCDC") - ("GhostWhite" . "#F8F8FF") - ("Gold" . "#FFD700") - ("GoldenRod" . "#DAA520") - ("Gray" . "#808080") - ("Grey" . "#808080") - ("Green" . "#008000") - ("GreenYellow" . "#ADFF2F") - ("HoneyDew" . "#F0FFF0") - ("HotPink" . "#FF69B4") - ("IndianRed" . "#CD5C5C") - ("Indigo" . "#4B0082") - ("Ivory" . "#FFFFF0") - ("Khaki" . "#F0E68C") - ("Lavender" . "#E6E6FA") - ("LavenderBlush" . "#FFF0F5") - ("LawnGreen" . "#7CFC00") - ("LemonChiffon" . "#FFFACD") - ("LightBlue" . "#ADD8E6") - ("LightCoral" . "#F08080") - ("LightCyan" . "#E0FFFF") - ("LightGoldenRodYellow" . "#FAFAD2") - ("LightGray" . "#D3D3D3") - ("LightGrey" . "#D3D3D3") - ("LightGreen" . "#90EE90") - ("LightPink" . "#FFB6C1") - ("LightSalmon" . "#FFA07A") - ("LightSeaGreen" . "#20B2AA") - ("LightSkyBlue" . "#87CEFA") - ("LightSlateGray" . "#778899") - ("LightSlateGrey" . "#778899") - ("LightSteelBlue" . "#B0C4DE") - ("LightYellow" . "#FFFFE0") - ("Lime" . "#00FF00") - ("LimeGreen" . "#32CD32") - ("Linen" . "#FAF0E6") - ("Magenta" . "#FF00FF") - ("Maroon" . "#800000") - ("MediumAquaMarine" . "#66CDAA") - ("MediumBlue" . "#0000CD") - ("MediumOrchid" . "#BA55D3") - ("MediumPurple" . "#9370D8") - ("MediumSeaGreen" . "#3CB371") - ("MediumSlateBlue" . "#7B68EE") - ("MediumSpringGreen" . "#00FA9A") - ("MediumTurquoise" . "#48D1CC") - ("MediumVioletRed" . "#C71585") - ("MidnightBlue" . "#191970") - ("MintCream" . "#F5FFFA") - ("MistyRose" . "#FFE4E1") - ("Moccasin" . "#FFE4B5") - ("NavajoWhite" . "#FFDEAD") - ("Navy" . "#000080") - ("OldLace" . "#FDF5E6") - ("Olive" . "#808000") - ("OliveDrab" . "#6B8E23") - ("Orange" . "#FFA500") - ("OrangeRed" . "#FF4500") - ("Orchid" . "#DA70D6") - ("PaleGoldenRod" . "#EEE8AA") - ("PaleGreen" . "#98FB98") - ("PaleTurquoise" . "#AFEEEE") - ("PaleVioletRed" . "#D87093") - ("PapayaWhip" . "#FFEFD5") - ("PeachPuff" . "#FFDAB9") - ("Peru" . "#CD853F") - ("Pink" . "#FFC0CB") - ("Plum" . "#DDA0DD") - ("PowderBlue" . "#B0E0E6") - ("Purple" . "#800080") - ("Red" . "#FF0000") - ("RosyBrown" . "#BC8F8F") - ("RoyalBlue" . "#4169E1") - ("SaddleBrown" . "#8B4513") - ("Salmon" . "#FA8072") - ("SandyBrown" . "#F4A460") - ("SeaGreen" . "#2E8B57") - ("SeaShell" . "#FFF5EE") - ("Sienna" . "#A0522D") - ("Silver" . "#C0C0C0") - ("SkyBlue" . "#87CEEB") - ("SlateBlue" . "#6A5ACD") - ("SlateGray" . "#708090") - ("SlateGrey" . "#708090") - ("Snow" . "#FFFAFA") - ("SpringGreen" . "#00FF7F") - ("SteelBlue" . "#4682B4") - ("Tan" . "#D2B48C") - ("Teal" . "#008080") - ("Thistle" . "#D8BFD8") - ("Tomato" . "#FF6347") - ("Turquoise" . "#40E0D0") - ("Violet" . "#EE82EE") - ("Wheat" . "#F5DEB3") - ("White" . "#FFFFFF") - ("WhiteSmoke" . "#F5F5F5") - ("Yellow" . "#FFFF00") - ("YellowGreen" . "#9ACD32")) - "Alist of HTML colors. -Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." - :group 'rainbow) - -(defcustom rainbow-html-colors-major-mode-list - '(html-mode css-mode php-mode nxml-mode xml-mode) - "List of major mode where HTML colors are enabled when -`rainbow-html-colors' is set to auto." - :group 'rainbow) - -(defcustom rainbow-html-colors 'auto - "When to enable HTML colors. -If set to t, the HTML colors will be enabled. If set to nil, the -HTML colors will not be enabled. If set to auto, the HTML colors -will be enabled if a major mode has been detected from the -`rainbow-html-colors-major-mode-list'." - :group 'rainbow) - -;; X colors -(defvar rainbow-x-colors-font-lock-keywords - `((,(regexp-opt (x-defined-colors) 'words) - (0 (rainbow-colorize-itself)))) - "Font-lock keywords to add for X colors.") - -(defcustom rainbow-x-colors-major-mode-list - '(emacs-lisp-mode lisp-interaction-mode c-mode c++-mode java-mode) - "List of major mode where X colors are enabled when -`rainbow-x-colors' is set to auto." - :group 'rainbow) - -(defcustom rainbow-x-colors 'auto - "When to enable X colors. -If set to t, the X colors will be enabled. If set to nil, the -X colors will not be enabled. If set to auto, the X colors -will be enabled if a major mode has been detected from the -`rainbow-x-colors-major-mode-list'." - :group 'rainbow) - -;; LaTeX colors -(defvar rainbow-latex-rgb-colors-font-lock-keywords - '(("{rgb}{\\([0-9.]+\\),\s*\\([0-9.]+\\),\s*\\([0-9.]+\\)}" - (0 (rainbow-colorize-rgb-float))) - ("{RGB}{\\([0-9]\\{1,3\\}\\),\s*\\([0-9]\\{1,3\\}\\),\s*\\([0-9]\\{1,3\\}\\)}" - (0 (rainbow-colorize-rgb))) - ("{HTML}{\\([0-9A-Fa-f]\\{6\\}\\)}" - (0 (rainbow-colorize-hexadecimal-without-sharp)))) - "Font-lock keywords to add for LaTeX colors.") - -(defcustom rainbow-latex-colors-major-mode-list - '(latex-mode) - "List of major mode where LaTeX colors are enabled when -`rainbow-x-colors' is set to auto." - :group 'rainbow) - -(defcustom rainbow-latex-colors 'auto - "When to enable LaTeX colors. -If set to t, the LaTeX colors will be enabled. If set to nil, the -LaTeX colors will not be enabled. If set to auto, the LaTeX colors -will be enabled if a major mode has been detected from the -`rainbow-latex-colors-major-mode-list'." - :group 'rainbow) - -;; Shell colors -(defvar rainbow-ansi-colors-font-lock-keywords - '(("\\(\\\\[eE]\\|\\\\033\\|\\\\x1[bB]\\|\033\\)\\[\\([0-9;]*m\\)" - (0 (rainbow-colorize-ansi)))) - "Font-lock keywords to add for ANSI colors.") - -(defcustom rainbow-ansi-colors-major-mode-list - '(sh-mode c-mode c++-mode) - "List of major mode where ANSI colors are enabled when -`rainbow-ansi-colors' is set to auto." - :group 'rainbow) - -(defcustom rainbow-ansi-colors 'auto - "When to enable ANSI colors. -If set to t, the ANSI colors will be enabled. If set to nil, the -ANSI colors will not be enabled. If set to auto, the ANSI colors -will be enabled if a major mode has been detected from the -`rainbow-ansi-colors-major-mode-list'." - :group 'rainbow) - -;; R colors - -;; R colors name -(defvar rainbow-r-colors-font-lock-keywords nil - "Font-lock keywords to add for R colors.") -(make-variable-buffer-local 'rainbow-r-colors-font-lock-keywords) - -;; use the following code to generate the list in R -;; output_colors <- function(colors) {for(color in colors) {col <- col2rgb(color); cat(sprintf("(\"%s\" . \"#%02X%02X%02X\")\n",color,col[1],col[2],col[3]));}} -;; output_colors(colors()) -(defcustom rainbow-r-colors-alist - '(("white" . "#FFFFFF") - ("aliceblue" . "#F0F8FF") - ("antiquewhite" . "#FAEBD7") - ("antiquewhite1" . "#FFEFDB") - ("antiquewhite2" . "#EEDFCC") - ("antiquewhite3" . "#CDC0B0") - ("antiquewhite4" . "#8B8378") - ("aquamarine" . "#7FFFD4") - ("aquamarine1" . "#7FFFD4") - ("aquamarine2" . "#76EEC6") - ("aquamarine3" . "#66CDAA") - ("aquamarine4" . "#458B74") - ("azure" . "#F0FFFF") - ("azure1" . "#F0FFFF") - ("azure2" . "#E0EEEE") - ("azure3" . "#C1CDCD") - ("azure4" . "#838B8B") - ("beige" . "#F5F5DC") - ("bisque" . "#FFE4C4") - ("bisque1" . "#FFE4C4") - ("bisque2" . "#EED5B7") - ("bisque3" . "#CDB79E") - ("bisque4" . "#8B7D6B") - ("black" . "#000000") - ("blanchedalmond" . "#FFEBCD") - ("blue" . "#0000FF") - ("blue1" . "#0000FF") - ("blue2" . "#0000EE") - ("blue3" . "#0000CD") - ("blue4" . "#00008B") - ("blueviolet" . "#8A2BE2") - ("brown" . "#A52A2A") - ("brown1" . "#FF4040") - ("brown2" . "#EE3B3B") - ("brown3" . "#CD3333") - ("brown4" . "#8B2323") - ("burlywood" . "#DEB887") - ("burlywood1" . "#FFD39B") - ("burlywood2" . "#EEC591") - ("burlywood3" . "#CDAA7D") - ("burlywood4" . "#8B7355") - ("cadetblue" . "#5F9EA0") - ("cadetblue1" . "#98F5FF") - ("cadetblue2" . "#8EE5EE") - ("cadetblue3" . "#7AC5CD") - ("cadetblue4" . "#53868B") - ("chartreuse" . "#7FFF00") - ("chartreuse1" . "#7FFF00") - ("chartreuse2" . "#76EE00") - ("chartreuse3" . "#66CD00") - ("chartreuse4" . "#458B00") - ("chocolate" . "#D2691E") - ("chocolate1" . "#FF7F24") - ("chocolate2" . "#EE7621") - ("chocolate3" . "#CD661D") - ("chocolate4" . "#8B4513") - ("coral" . "#FF7F50") - ("coral1" . "#FF7256") - ("coral2" . "#EE6A50") - ("coral3" . "#CD5B45") - ("coral4" . "#8B3E2F") - ("cornflowerblue" . "#6495ED") - ("cornsilk" . "#FFF8DC") - ("cornsilk1" . "#FFF8DC") - ("cornsilk2" . "#EEE8CD") - ("cornsilk3" . "#CDC8B1") - ("cornsilk4" . "#8B8878") - ("cyan" . "#00FFFF") - ("cyan1" . "#00FFFF") - ("cyan2" . "#00EEEE") - ("cyan3" . "#00CDCD") - ("cyan4" . "#008B8B") - ("darkblue" . "#00008B") - ("darkcyan" . "#008B8B") - ("darkgoldenrod" . "#B8860B") - ("darkgoldenrod1" . "#FFB90F") - ("darkgoldenrod2" . "#EEAD0E") - ("darkgoldenrod3" . "#CD950C") - ("darkgoldenrod4" . "#8B6508") - ("darkgray" . "#A9A9A9") - ("darkgreen" . "#006400") - ("darkgrey" . "#A9A9A9") - ("darkkhaki" . "#BDB76B") - ("darkmagenta" . "#8B008B") - ("darkolivegreen" . "#556B2F") - ("darkolivegreen1" . "#CAFF70") - ("darkolivegreen2" . "#BCEE68") - ("darkolivegreen3" . "#A2CD5A") - ("darkolivegreen4" . "#6E8B3D") - ("darkorange" . "#FF8C00") - ("darkorange1" . "#FF7F00") - ("darkorange2" . "#EE7600") - ("darkorange3" . "#CD6600") - ("darkorange4" . "#8B4500") - ("darkorchid" . "#9932CC") - ("darkorchid1" . "#BF3EFF") - ("darkorchid2" . "#B23AEE") - ("darkorchid3" . "#9A32CD") - ("darkorchid4" . "#68228B") - ("darkred" . "#8B0000") - ("darksalmon" . "#E9967A") - ("darkseagreen" . "#8FBC8F") - ("darkseagreen1" . "#C1FFC1") - ("darkseagreen2" . "#B4EEB4") - ("darkseagreen3" . "#9BCD9B") - ("darkseagreen4" . "#698B69") - ("darkslateblue" . "#483D8B") - ("darkslategray" . "#2F4F4F") - ("darkslategray1" . "#97FFFF") - ("darkslategray2" . "#8DEEEE") - ("darkslategray3" . "#79CDCD") - ("darkslategray4" . "#528B8B") - ("darkslategrey" . "#2F4F4F") - ("darkturquoise" . "#00CED1") - ("darkviolet" . "#9400D3") - ("deeppink" . "#FF1493") - ("deeppink1" . "#FF1493") - ("deeppink2" . "#EE1289") - ("deeppink3" . "#CD1076") - ("deeppink4" . "#8B0A50") - ("deepskyblue" . "#00BFFF") - ("deepskyblue1" . "#00BFFF") - ("deepskyblue2" . "#00B2EE") - ("deepskyblue3" . "#009ACD") - ("deepskyblue4" . "#00688B") - ("dimgray" . "#696969") - ("dimgrey" . "#696969") - ("dodgerblue" . "#1E90FF") - ("dodgerblue1" . "#1E90FF") - ("dodgerblue2" . "#1C86EE") - ("dodgerblue3" . "#1874CD") - ("dodgerblue4" . "#104E8B") - ("firebrick" . "#B22222") - ("firebrick1" . "#FF3030") - ("firebrick2" . "#EE2C2C") - ("firebrick3" . "#CD2626") - ("firebrick4" . "#8B1A1A") - ("floralwhite" . "#FFFAF0") - ("forestgreen" . "#228B22") - ("gainsboro" . "#DCDCDC") - ("ghostwhite" . "#F8F8FF") - ("gold" . "#FFD700") - ("gold1" . "#FFD700") - ("gold2" . "#EEC900") - ("gold3" . "#CDAD00") - ("gold4" . "#8B7500") - ("goldenrod" . "#DAA520") - ("goldenrod1" . "#FFC125") - ("goldenrod2" . "#EEB422") - ("goldenrod3" . "#CD9B1D") - ("goldenrod4" . "#8B6914") - ("gray" . "#BEBEBE") - ("gray0" . "#000000") - ("gray1" . "#030303") - ("gray2" . "#050505") - ("gray3" . "#080808") - ("gray4" . "#0A0A0A") - ("gray5" . "#0D0D0D") - ("gray6" . "#0F0F0F") - ("gray7" . "#121212") - ("gray8" . "#141414") - ("gray9" . "#171717") - ("gray10" . "#1A1A1A") - ("gray11" . "#1C1C1C") - ("gray12" . "#1F1F1F") - ("gray13" . "#212121") - ("gray14" . "#242424") - ("gray15" . "#262626") - ("gray16" . "#292929") - ("gray17" . "#2B2B2B") - ("gray18" . "#2E2E2E") - ("gray19" . "#303030") - ("gray20" . "#333333") - ("gray21" . "#363636") - ("gray22" . "#383838") - ("gray23" . "#3B3B3B") - ("gray24" . "#3D3D3D") - ("gray25" . "#404040") - ("gray26" . "#424242") - ("gray27" . "#454545") - ("gray28" . "#474747") - ("gray29" . "#4A4A4A") - ("gray30" . "#4D4D4D") - ("gray31" . "#4F4F4F") - ("gray32" . "#525252") - ("gray33" . "#545454") - ("gray34" . "#575757") - ("gray35" . "#595959") - ("gray36" . "#5C5C5C") - ("gray37" . "#5E5E5E") - ("gray38" . "#616161") - ("gray39" . "#636363") - ("gray40" . "#666666") - ("gray41" . "#696969") - ("gray42" . "#6B6B6B") - ("gray43" . "#6E6E6E") - ("gray44" . "#707070") - ("gray45" . "#737373") - ("gray46" . "#757575") - ("gray47" . "#787878") - ("gray48" . "#7A7A7A") - ("gray49" . "#7D7D7D") - ("gray50" . "#7F7F7F") - ("gray51" . "#828282") - ("gray52" . "#858585") - ("gray53" . "#878787") - ("gray54" . "#8A8A8A") - ("gray55" . "#8C8C8C") - ("gray56" . "#8F8F8F") - ("gray57" . "#919191") - ("gray58" . "#949494") - ("gray59" . "#969696") - ("gray60" . "#999999") - ("gray61" . "#9C9C9C") - ("gray62" . "#9E9E9E") - ("gray63" . "#A1A1A1") - ("gray64" . "#A3A3A3") - ("gray65" . "#A6A6A6") - ("gray66" . "#A8A8A8") - ("gray67" . "#ABABAB") - ("gray68" . "#ADADAD") - ("gray69" . "#B0B0B0") - ("gray70" . "#B3B3B3") - ("gray71" . "#B5B5B5") - ("gray72" . "#B8B8B8") - ("gray73" . "#BABABA") - ("gray74" . "#BDBDBD") - ("gray75" . "#BFBFBF") - ("gray76" . "#C2C2C2") - ("gray77" . "#C4C4C4") - ("gray78" . "#C7C7C7") - ("gray79" . "#C9C9C9") - ("gray80" . "#CCCCCC") - ("gray81" . "#CFCFCF") - ("gray82" . "#D1D1D1") - ("gray83" . "#D4D4D4") - ("gray84" . "#D6D6D6") - ("gray85" . "#D9D9D9") - ("gray86" . "#DBDBDB") - ("gray87" . "#DEDEDE") - ("gray88" . "#E0E0E0") - ("gray89" . "#E3E3E3") - ("gray90" . "#E5E5E5") - ("gray91" . "#E8E8E8") - ("gray92" . "#EBEBEB") - ("gray93" . "#EDEDED") - ("gray94" . "#F0F0F0") - ("gray95" . "#F2F2F2") - ("gray96" . "#F5F5F5") - ("gray97" . "#F7F7F7") - ("gray98" . "#FAFAFA") - ("gray99" . "#FCFCFC") - ("gray100" . "#FFFFFF") - ("green" . "#00FF00") - ("green1" . "#00FF00") - ("green2" . "#00EE00") - ("green3" . "#00CD00") - ("green4" . "#008B00") - ("greenyellow" . "#ADFF2F") - ("grey" . "#BEBEBE") - ("grey0" . "#000000") - ("grey1" . "#030303") - ("grey2" . "#050505") - ("grey3" . "#080808") - ("grey4" . "#0A0A0A") - ("grey5" . "#0D0D0D") - ("grey6" . "#0F0F0F") - ("grey7" . "#121212") - ("grey8" . "#141414") - ("grey9" . "#171717") - ("grey10" . "#1A1A1A") - ("grey11" . "#1C1C1C") - ("grey12" . "#1F1F1F") - ("grey13" . "#212121") - ("grey14" . "#242424") - ("grey15" . "#262626") - ("grey16" . "#292929") - ("grey17" . "#2B2B2B") - ("grey18" . "#2E2E2E") - ("grey19" . "#303030") - ("grey20" . "#333333") - ("grey21" . "#363636") - ("grey22" . "#383838") - ("grey23" . "#3B3B3B") - ("grey24" . "#3D3D3D") - ("grey25" . "#404040") - ("grey26" . "#424242") - ("grey27" . "#454545") - ("grey28" . "#474747") - ("grey29" . "#4A4A4A") - ("grey30" . "#4D4D4D") - ("grey31" . "#4F4F4F") - ("grey32" . "#525252") - ("grey33" . "#545454") - ("grey34" . "#575757") - ("grey35" . "#595959") - ("grey36" . "#5C5C5C") - ("grey37" . "#5E5E5E") - ("grey38" . "#616161") - ("grey39" . "#636363") - ("grey40" . "#666666") - ("grey41" . "#696969") - ("grey42" . "#6B6B6B") - ("grey43" . "#6E6E6E") - ("grey44" . "#707070") - ("grey45" . "#737373") - ("grey46" . "#757575") - ("grey47" . "#787878") - ("grey48" . "#7A7A7A") - ("grey49" . "#7D7D7D") - ("grey50" . "#7F7F7F") - ("grey51" . "#828282") - ("grey52" . "#858585") - ("grey53" . "#878787") - ("grey54" . "#8A8A8A") - ("grey55" . "#8C8C8C") - ("grey56" . "#8F8F8F") - ("grey57" . "#919191") - ("grey58" . "#949494") - ("grey59" . "#969696") - ("grey60" . "#999999") - ("grey61" . "#9C9C9C") - ("grey62" . "#9E9E9E") - ("grey63" . "#A1A1A1") - ("grey64" . "#A3A3A3") - ("grey65" . "#A6A6A6") - ("grey66" . "#A8A8A8") - ("grey67" . "#ABABAB") - ("grey68" . "#ADADAD") - ("grey69" . "#B0B0B0") - ("grey70" . "#B3B3B3") - ("grey71" . "#B5B5B5") - ("grey72" . "#B8B8B8") - ("grey73" . "#BABABA") - ("grey74" . "#BDBDBD") - ("grey75" . "#BFBFBF") - ("grey76" . "#C2C2C2") - ("grey77" . "#C4C4C4") - ("grey78" . "#C7C7C7") - ("grey79" . "#C9C9C9") - ("grey80" . "#CCCCCC") - ("grey81" . "#CFCFCF") - ("grey82" . "#D1D1D1") - ("grey83" . "#D4D4D4") - ("grey84" . "#D6D6D6") - ("grey85" . "#D9D9D9") - ("grey86" . "#DBDBDB") - ("grey87" . "#DEDEDE") - ("grey88" . "#E0E0E0") - ("grey89" . "#E3E3E3") - ("grey90" . "#E5E5E5") - ("grey91" . "#E8E8E8") - ("grey92" . "#EBEBEB") - ("grey93" . "#EDEDED") - ("grey94" . "#F0F0F0") - ("grey95" . "#F2F2F2") - ("grey96" . "#F5F5F5") - ("grey97" . "#F7F7F7") - ("grey98" . "#FAFAFA") - ("grey99" . "#FCFCFC") - ("grey100" . "#FFFFFF") - ("honeydew" . "#F0FFF0") - ("honeydew1" . "#F0FFF0") - ("honeydew2" . "#E0EEE0") - ("honeydew3" . "#C1CDC1") - ("honeydew4" . "#838B83") - ("hotpink" . "#FF69B4") - ("hotpink1" . "#FF6EB4") - ("hotpink2" . "#EE6AA7") - ("hotpink3" . "#CD6090") - ("hotpink4" . "#8B3A62") - ("indianred" . "#CD5C5C") - ("indianred1" . "#FF6A6A") - ("indianred2" . "#EE6363") - ("indianred3" . "#CD5555") - ("indianred4" . "#8B3A3A") - ("ivory" . "#FFFFF0") - ("ivory1" . "#FFFFF0") - ("ivory2" . "#EEEEE0") - ("ivory3" . "#CDCDC1") - ("ivory4" . "#8B8B83") - ("khaki" . "#F0E68C") - ("khaki1" . "#FFF68F") - ("khaki2" . "#EEE685") - ("khaki3" . "#CDC673") - ("khaki4" . "#8B864E") - ("lavender" . "#E6E6FA") - ("lavenderblush" . "#FFF0F5") - ("lavenderblush1" . "#FFF0F5") - ("lavenderblush2" . "#EEE0E5") - ("lavenderblush3" . "#CDC1C5") - ("lavenderblush4" . "#8B8386") - ("lawngreen" . "#7CFC00") - ("lemonchiffon" . "#FFFACD") - ("lemonchiffon1" . "#FFFACD") - ("lemonchiffon2" . "#EEE9BF") - ("lemonchiffon3" . "#CDC9A5") - ("lemonchiffon4" . "#8B8970") - ("lightblue" . "#ADD8E6") - ("lightblue1" . "#BFEFFF") - ("lightblue2" . "#B2DFEE") - ("lightblue3" . "#9AC0CD") - ("lightblue4" . "#68838B") - ("lightcoral" . "#F08080") - ("lightcyan" . "#E0FFFF") - ("lightcyan1" . "#E0FFFF") - ("lightcyan2" . "#D1EEEE") - ("lightcyan3" . "#B4CDCD") - ("lightcyan4" . "#7A8B8B") - ("lightgoldenrod" . "#EEDD82") - ("lightgoldenrod1" . "#FFEC8B") - ("lightgoldenrod2" . "#EEDC82") - ("lightgoldenrod3" . "#CDBE70") - ("lightgoldenrod4" . "#8B814C") - ("lightgoldenrodyellow" . "#FAFAD2") - ("lightgray" . "#D3D3D3") - ("lightgreen" . "#90EE90") - ("lightgrey" . "#D3D3D3") - ("lightpink" . "#FFB6C1") - ("lightpink1" . "#FFAEB9") - ("lightpink2" . "#EEA2AD") - ("lightpink3" . "#CD8C95") - ("lightpink4" . "#8B5F65") - ("lightsalmon" . "#FFA07A") - ("lightsalmon1" . "#FFA07A") - ("lightsalmon2" . "#EE9572") - ("lightsalmon3" . "#CD8162") - ("lightsalmon4" . "#8B5742") - ("lightseagreen" . "#20B2AA") - ("lightskyblue" . "#87CEFA") - ("lightskyblue1" . "#B0E2FF") - ("lightskyblue2" . "#A4D3EE") - ("lightskyblue3" . "#8DB6CD") - ("lightskyblue4" . "#607B8B") - ("lightslateblue" . "#8470FF") - ("lightslategray" . "#778899") - ("lightslategrey" . "#778899") - ("lightsteelblue" . "#B0C4DE") - ("lightsteelblue1" . "#CAE1FF") - ("lightsteelblue2" . "#BCD2EE") - ("lightsteelblue3" . "#A2B5CD") - ("lightsteelblue4" . "#6E7B8B") - ("lightyellow" . "#FFFFE0") - ("lightyellow1" . "#FFFFE0") - ("lightyellow2" . "#EEEED1") - ("lightyellow3" . "#CDCDB4") - ("lightyellow4" . "#8B8B7A") - ("limegreen" . "#32CD32") - ("linen" . "#FAF0E6") - ("magenta" . "#FF00FF") - ("magenta1" . "#FF00FF") - ("magenta2" . "#EE00EE") - ("magenta3" . "#CD00CD") - ("magenta4" . "#8B008B") - ("maroon" . "#B03060") - ("maroon1" . "#FF34B3") - ("maroon2" . "#EE30A7") - ("maroon3" . "#CD2990") - ("maroon4" . "#8B1C62") - ("mediumaquamarine" . "#66CDAA") - ("mediumblue" . "#0000CD") - ("mediumorchid" . "#BA55D3") - ("mediumorchid1" . "#E066FF") - ("mediumorchid2" . "#D15FEE") - ("mediumorchid3" . "#B452CD") - ("mediumorchid4" . "#7A378B") - ("mediumpurple" . "#9370DB") - ("mediumpurple1" . "#AB82FF") - ("mediumpurple2" . "#9F79EE") - ("mediumpurple3" . "#8968CD") - ("mediumpurple4" . "#5D478B") - ("mediumseagreen" . "#3CB371") - ("mediumslateblue" . "#7B68EE") - ("mediumspringgreen" . "#00FA9A") - ("mediumturquoise" . "#48D1CC") - ("mediumvioletred" . "#C71585") - ("midnightblue" . "#191970") - ("mintcream" . "#F5FFFA") - ("mistyrose" . "#FFE4E1") - ("mistyrose1" . "#FFE4E1") - ("mistyrose2" . "#EED5D2") - ("mistyrose3" . "#CDB7B5") - ("mistyrose4" . "#8B7D7B") - ("moccasin" . "#FFE4B5") - ("navajowhite" . "#FFDEAD") - ("navajowhite1" . "#FFDEAD") - ("navajowhite2" . "#EECFA1") - ("navajowhite3" . "#CDB38B") - ("navajowhite4" . "#8B795E") - ("navy" . "#000080") - ("navyblue" . "#000080") - ("oldlace" . "#FDF5E6") - ("olivedrab" . "#6B8E23") - ("olivedrab1" . "#C0FF3E") - ("olivedrab2" . "#B3EE3A") - ("olivedrab3" . "#9ACD32") - ("olivedrab4" . "#698B22") - ("orange" . "#FFA500") - ("orange1" . "#FFA500") - ("orange2" . "#EE9A00") - ("orange3" . "#CD8500") - ("orange4" . "#8B5A00") - ("orangered" . "#FF4500") - ("orangered1" . "#FF4500") - ("orangered2" . "#EE4000") - ("orangered3" . "#CD3700") - ("orangered4" . "#8B2500") - ("orchid" . "#DA70D6") - ("orchid1" . "#FF83FA") - ("orchid2" . "#EE7AE9") - ("orchid3" . "#CD69C9") - ("orchid4" . "#8B4789") - ("palegoldenrod" . "#EEE8AA") - ("palegreen" . "#98FB98") - ("palegreen1" . "#9AFF9A") - ("palegreen2" . "#90EE90") - ("palegreen3" . "#7CCD7C") - ("palegreen4" . "#548B54") - ("paleturquoise" . "#AFEEEE") - ("paleturquoise1" . "#BBFFFF") - ("paleturquoise2" . "#AEEEEE") - ("paleturquoise3" . "#96CDCD") - ("paleturquoise4" . "#668B8B") - ("palevioletred" . "#DB7093") - ("palevioletred1" . "#FF82AB") - ("palevioletred2" . "#EE799F") - ("palevioletred3" . "#CD6889") - ("palevioletred4" . "#8B475D") - ("papayawhip" . "#FFEFD5") - ("peachpuff" . "#FFDAB9") - ("peachpuff1" . "#FFDAB9") - ("peachpuff2" . "#EECBAD") - ("peachpuff3" . "#CDAF95") - ("peachpuff4" . "#8B7765") - ("peru" . "#CD853F") - ("pink" . "#FFC0CB") - ("pink1" . "#FFB5C5") - ("pink2" . "#EEA9B8") - ("pink3" . "#CD919E") - ("pink4" . "#8B636C") - ("plum" . "#DDA0DD") - ("plum1" . "#FFBBFF") - ("plum2" . "#EEAEEE") - ("plum3" . "#CD96CD") - ("plum4" . "#8B668B") - ("powderblue" . "#B0E0E6") - ("purple" . "#A020F0") - ("purple1" . "#9B30FF") - ("purple2" . "#912CEE") - ("purple3" . "#7D26CD") - ("purple4" . "#551A8B") - ("red" . "#FF0000") - ("red1" . "#FF0000") - ("red2" . "#EE0000") - ("red3" . "#CD0000") - ("red4" . "#8B0000") - ("rosybrown" . "#BC8F8F") - ("rosybrown1" . "#FFC1C1") - ("rosybrown2" . "#EEB4B4") - ("rosybrown3" . "#CD9B9B") - ("rosybrown4" . "#8B6969") - ("royalblue" . "#4169E1") - ("royalblue1" . "#4876FF") - ("royalblue2" . "#436EEE") - ("royalblue3" . "#3A5FCD") - ("royalblue4" . "#27408B") - ("saddlebrown" . "#8B4513") - ("salmon" . "#FA8072") - ("salmon1" . "#FF8C69") - ("salmon2" . "#EE8262") - ("salmon3" . "#CD7054") - ("salmon4" . "#8B4C39") - ("sandybrown" . "#F4A460") - ("seagreen" . "#2E8B57") - ("seagreen1" . "#54FF9F") - ("seagreen2" . "#4EEE94") - ("seagreen3" . "#43CD80") - ("seagreen4" . "#2E8B57") - ("seashell" . "#FFF5EE") - ("seashell1" . "#FFF5EE") - ("seashell2" . "#EEE5DE") - ("seashell3" . "#CDC5BF") - ("seashell4" . "#8B8682") - ("sienna" . "#A0522D") - ("sienna1" . "#FF8247") - ("sienna2" . "#EE7942") - ("sienna3" . "#CD6839") - ("sienna4" . "#8B4726") - ("skyblue" . "#87CEEB") - ("skyblue1" . "#87CEFF") - ("skyblue2" . "#7EC0EE") - ("skyblue3" . "#6CA6CD") - ("skyblue4" . "#4A708B") - ("slateblue" . "#6A5ACD") - ("slateblue1" . "#836FFF") - ("slateblue2" . "#7A67EE") - ("slateblue3" . "#6959CD") - ("slateblue4" . "#473C8B") - ("slategray" . "#708090") - ("slategray1" . "#C6E2FF") - ("slategray2" . "#B9D3EE") - ("slategray3" . "#9FB6CD") - ("slategray4" . "#6C7B8B") - ("slategrey" . "#708090") - ("snow" . "#FFFAFA") - ("snow1" . "#FFFAFA") - ("snow2" . "#EEE9E9") - ("snow3" . "#CDC9C9") - ("snow4" . "#8B8989") - ("springgreen" . "#00FF7F") - ("springgreen1" . "#00FF7F") - ("springgreen2" . "#00EE76") - ("springgreen3" . "#00CD66") - ("springgreen4" . "#008B45") - ("steelblue" . "#4682B4") - ("steelblue1" . "#63B8FF") - ("steelblue2" . "#5CACEE") - ("steelblue3" . "#4F94CD") - ("steelblue4" . "#36648B") - ("tan" . "#D2B48C") - ("tan1" . "#FFA54F") - ("tan2" . "#EE9A49") - ("tan3" . "#CD853F") - ("tan4" . "#8B5A2B") - ("thistle" . "#D8BFD8") - ("thistle1" . "#FFE1FF") - ("thistle2" . "#EED2EE") - ("thistle3" . "#CDB5CD") - ("thistle4" . "#8B7B8B") - ("tomato" . "#FF6347") - ("tomato1" . "#FF6347") - ("tomato2" . "#EE5C42") - ("tomato3" . "#CD4F39") - ("tomato4" . "#8B3626") - ("turquoise" . "#40E0D0") - ("turquoise1" . "#00F5FF") - ("turquoise2" . "#00E5EE") - ("turquoise3" . "#00C5CD") - ("turquoise4" . "#00868B") - ("violet" . "#EE82EE") - ("violetred" . "#D02090") - ("violetred1" . "#FF3E96") - ("violetred2" . "#EE3A8C") - ("violetred3" . "#CD3278") - ("violetred4" . "#8B2252") - ("wheat" . "#F5DEB3") - ("wheat1" . "#FFE7BA") - ("wheat2" . "#EED8AE") - ("wheat3" . "#CDBA96") - ("wheat4" . "#8B7E66") - ("whitesmoke" . "#F5F5F5") - ("yellow" . "#FFFF00") - ("yellow1" . "#FFFF00") - ("yellow2" . "#EEEE00") - ("yellow3" . "#CDCD00") - ("yellow4" . "#8B8B00") - ("yellowgreen" . "#9ACD32")) - "Alist of R colors. -Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR)." - :group 'rainbow) -(defcustom rainbow-r-colors-major-mode-list - '(ess-mode) - "List of major mode where R colors are enabled when -`rainbow-r-colors' is set to auto." - :group 'rainbow) - -(defcustom rainbow-r-colors 'auto - "When to enable R colors. -If set to t, the R colors will be enabled. If set to nil, the -R colors will not be enabled. If set to auto, the R colors -will be enabled if a major mode has been detected from the -`rainbow-r-colors-major-mode-list'." - :group 'rainbow) - - -;; Functions -(defun rainbow-colorize-match (color &optional match) - "Return a matched string propertized with a face whose -background is COLOR. The foreground is computed using -`rainbow-color-luminance', and is either white or black." - (let ((match (or match 0))) - (put-text-property - (match-beginning match) (match-end match) - 'face `((:foreground ,(if (> 0.5 (rainbow-x-color-luminance color)) - "white" "black")) - (:background ,color))))) - -(defun rainbow-colorize-itself (&optional match) - "Colorize a match with itself." - (rainbow-colorize-match (match-string-no-properties (or match 0)) match)) - -(defun rainbow-colorize-hexadecimal-without-sharp () - "Colorize an hexadecimal colors and prepend # to it." - (rainbow-colorize-match (concat "#" (match-string-no-properties 1)))) - -(defun rainbow-colorize-by-assoc (assoc-list) - "Colorize a match with its association from ASSOC-LIST." - (rainbow-colorize-match (cdr (assoc-string (match-string-no-properties 0) - assoc-list t)))) - -(defun rainbow-rgb-relative-to-absolute (number) - "Convert a relative NUMBER to absolute. If NUMBER is absolute, return NUMBER. -This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\". -If the percentage value is above 100, it's converted to 100." - (let ((string-length (- (length number) 1))) - ;; Is this a number with %? - (if (eq (elt number string-length) ?%) - (/ (* (min (string-to-number (substring number 0 string-length)) 100) 255) 100) - (string-to-number number)))) - -(defun rainbow-colorize-hsl () - "Colorize a match with itself." - (let ((h (/ (string-to-number (match-string-no-properties 1)) 360.0)) - (s (/ (string-to-number (match-string-no-properties 2)) 100.0)) - (l (/ (string-to-number (match-string-no-properties 3)) 100.0))) - (rainbow-colorize-match - (multiple-value-bind (r g b) - (color-hsl-to-rgb h s l) - (format "#%02X%02X%02X" (* r 255) (* g 255) (* b 255)))))) - -(defun rainbow-colorize-rgb () - "Colorize a match with itself." - (let ((r (rainbow-rgb-relative-to-absolute (match-string-no-properties 1))) - (g (rainbow-rgb-relative-to-absolute (match-string-no-properties 2))) - (b (rainbow-rgb-relative-to-absolute (match-string-no-properties 3)))) - (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) - -(defun rainbow-colorize-rgb-float () - "Colorize a match with itself, with relative value." - (let ((r (* (string-to-number (match-string-no-properties 1)) 255.0)) - (g (* (string-to-number (match-string-no-properties 2)) 255.0)) - (b (* (string-to-number (match-string-no-properties 3)) 255.0))) - (rainbow-colorize-match (format "#%02X%02X%02X" r g b)))) - -(defvar ansi-color-context) -(defvar xterm-color-current) - -(defun rainbow-colorize-ansi () - "Return a matched string propertized with ansi color face." - (let ((xterm-color? (featurep 'xterm-color)) - (string (match-string-no-properties 0)) - color) - (save-match-data - (let* ((replaced (concat - (replace-regexp-in-string - "^\\(\\\\[eE]\\|\\\\033\\|\\\\x1[bB]\\)" - "\033" string) "x")) - xterm-color-current - ansi-color-context - (applied (funcall (if xterm-color? - 'xterm-color-filter - 'ansi-color-apply) - replaced)) - (face-property (get-text-property - 0 - (if xterm-color? 'face 'font-lock-face) - applied))) - (unless (listp (car face-property)) - (setq face-property (list face-property))) - (setq color (funcall (if xterm-color? 'cadr 'cdr) - (or (assq (if xterm-color? - :foreground - 'foreground-color) - face-property) - (assq (if xterm-color? - :background - 'background-color) - face-property)))))) - (when color - (rainbow-colorize-match color)))) - -(defun rainbow-color-luminance (red green blue) - "Calculate the luminance of color composed of RED, GREEN and BLUE. -Return a value between 0 and 1." - (/ (+ (* .2126 red) (* .7152 green) (* .0722 blue)) 256)) - -(defun rainbow-x-color-luminance (color) - "Calculate the luminance of a color string (e.g. \"#ffaa00\", \"blue\"). -Return a value between 0 and 1." - (let* ((values (x-color-values color)) - (r (/ (car values) 256.0)) - (g (/ (cadr values) 256.0)) - (b (/ (caddr values) 256.0))) - (rainbow-color-luminance r g b))) - -(defun rainbow-turn-on () - "Turn on raibow-mode." - (font-lock-add-keywords nil - rainbow-hexadecimal-colors-font-lock-keywords - t) - ;; Activate X colors? - (when (or (eq rainbow-x-colors t) - (and (eq rainbow-x-colors 'auto) - (memq major-mode rainbow-x-colors-major-mode-list))) - (font-lock-add-keywords nil - rainbow-x-colors-font-lock-keywords - t)) - ;; Activate LaTeX colors? - (when (or (eq rainbow-latex-colors t) - (and (eq rainbow-latex-colors 'auto) - (memq major-mode rainbow-latex-colors-major-mode-list))) - (font-lock-add-keywords nil - rainbow-latex-rgb-colors-font-lock-keywords - t)) - ;; Activate ANSI colors? - (when (or (eq rainbow-ansi-colors t) - (and (eq rainbow-ansi-colors 'auto) - (memq major-mode rainbow-ansi-colors-major-mode-list))) - (font-lock-add-keywords nil - rainbow-ansi-colors-font-lock-keywords - t)) - ;; Activate HTML colors? - (when (or (eq rainbow-html-colors t) - (and (eq rainbow-html-colors 'auto) - (memq major-mode rainbow-html-colors-major-mode-list))) - (setq rainbow-html-colors-font-lock-keywords - `((,(regexp-opt (mapcar 'car rainbow-html-colors-alist) 'words) - (0 (rainbow-colorize-by-assoc rainbow-html-colors-alist))))) - (font-lock-add-keywords nil - `(,@rainbow-html-colors-font-lock-keywords - ,@rainbow-html-rgb-colors-font-lock-keywords) - t)) - ;; Activate R colors? - (when (or (eq rainbow-r-colors t) - (and (eq rainbow-r-colors 'auto) - (memq major-mode rainbow-r-colors-major-mode-list))) - (setq rainbow-r-colors-font-lock-keywords - `((,(regexp-opt (mapcar 'car rainbow-r-colors-alist) 'words) - (0 (rainbow-colorize-by-assoc rainbow-r-colors-alist))))) - (font-lock-add-keywords nil - rainbow-r-colors-font-lock-keywords - t))) - -(defun rainbow-turn-off () - "Turn off rainbow-mode." - (font-lock-remove-keywords - nil - `(,@rainbow-hexadecimal-colors-font-lock-keywords - ,@rainbow-x-colors-font-lock-keywords - ,@rainbow-latex-rgb-colors-font-lock-keywords - ,@rainbow-r-colors-font-lock-keywords - ,@rainbow-html-colors-font-lock-keywords - ,@rainbow-html-rgb-colors-font-lock-keywords))) - -;;;###autoload -(define-minor-mode rainbow-mode - "Colorize strings that represent colors. -This will fontify with colors the string like \"#aabbcc\" or \"blue\"." - :lighter " Rbow" - (progn - (if rainbow-mode - (rainbow-turn-on) - (rainbow-turn-off)) - ;; Call font-lock-mode to refresh the buffer when used e.g. interactively - (font-lock-mode 1))) - -;;;; ChangeLog: - -;; 2017-05-29 Julien Danjou -;; -;; Fix `rainbow-color-luminance' docstring -;; -;; 2015-10-12 Julien Danjou -;; -;; rainbow: add font-lock at the end -;; -;; See https://github.com/fxbois/web-mode/issues/612 -;; -;; 2015-03-06 Julien Danjou -;; -;; rainbow: fix font-lock-mode refresh -;; -;; 2014-10-15 Stefan Monnier -;; -;; * packages/rainbow-mode/rainbow-mode.el (ansi-color-context) -;; (xterm-color-current): Declare. -;; -;; 2014-09-07 Julien Danjou -;; -;; rainbow-mode: support float in CSS and limit to 100% -;; -;; 2013-08-05 Julien Danjou -;; -;; rainbow-mode: 0.9, allow spaces in LaTeX colors -;; -;; 2013-05-03 Julien Danjou -;; -;; rainbow-mode: add support for R, bump version to 0.8 -;; -;; Signed-off-by: Julien Danjou -;; -;; 2013-02-26 Julien Danjou -;; -;; rainbow-mode: version 0.7 -;; -;; * rainbow-mode.el: don't activate font-lock-mode -;; -;; 2012-12-11 Julien Danjou -;; -;; * rainbow-mode: update to 0.6, add support for ANSI coloring -;; -;; 2012-11-26 Julien Danjou -;; -;; rainbow-mode: fix some LaTex docstrings -;; -;; 2012-11-14 Julien Danjou -;; -;; rainbow-mode: version 0.5 -;; -;; * rainbow-mode.el: fix syntax error on -;; `rainbow-hexadecimal-colors-font-lock-keywords'. -;; -;; 2012-11-09 Julien Danjou -;; -;; rainbow-mode: version 0.4 -;; -;; * rainbow-mode.el: Use functions from color package to colorize HSL -;; rather -;; than our own copy. -;; -;; 2012-11-09 Julien Danjou -;; -;; rainbow-mode 0.3 -;; -;; * rainbow-mode.el: avoid colorizing HTML entities -;; -;; 2011-09-23 Julien Danjou -;; -;; Update rainbow-mode to version 0.2 -;; -;; 2011-07-01 Chong Yidong -;; -;; Give every package its own directory in packages/ including single-file -;; packages. -;; - - -(provide 'rainbow-mode) - -;;; rainbow-mode.el ends here diff --git a/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.elc b/emacs/.emacs.d/elpa/rainbow-mode-0.13/rainbow-mode.elc deleted file mode 100644 index 5f97b70f551e2dce0e92e2b708c91603fc7090a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33889 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 UPn@5cbu@(aa(aN4!X-)n7osRVM*si- diff --git a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-autoloads.el b/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-autoloads.el deleted file mode 100644 index 3079bd5..0000000 --- a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-autoloads.el +++ /dev/null @@ -1,41 +0,0 @@ -;;; rich-minority-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "rich-minority" "rich-minority.el" (23124 14368 -;;;;;; 638843 805000)) -;;; Generated autoloads from rich-minority.el - -(autoload 'rm--mode-list-as-string-list "rich-minority" "\ -Return `minor-mode-list' as a simple list of strings. - -\(fn)" nil nil) - -(defvar rich-minority-mode nil "\ -Non-nil if Rich minority mode is enabled. -See the `rich-minority-mode' command -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 `rich-minority-mode'.") - -(custom-autoload 'rich-minority-mode "rich-minority" nil) - -(autoload 'rich-minority-mode "rich-minority" "\ -Toggle Rich minority mode on or off. -With a prefix argument ARG, enable Rich minority 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'. -\\{rich-minority-mode-map} - -\(fn &optional ARG)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; rich-minority-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-pkg.el b/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-pkg.el deleted file mode 100644 index 612ac3b..0000000 --- a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "rich-minority" "20170813.622" "Clean-up and Beautify the list of minor-modes." '((cl-lib "0.5")) :commit "3201f6e1769beb9f6cbbda392bef99fce337acf4" :url "https://github.com/Malabarba/rich-minority" :keywords '("mode-line" "faces")) diff --git a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.el b/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.el deleted file mode 100644 index 7430978..0000000 --- a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.el +++ /dev/null @@ -1,300 +0,0 @@ -;;; rich-minority.el --- Clean-up and Beautify the list of minor-modes. - -;; Copyright (C) 2014, 2015 Free Software Foundation, Inc. - -;; Author: Artur Malabarba -;; URL: https://github.com/Malabarba/rich-minority -;; Package-Version: 20170813.622 -;; Package-Requires: ((cl-lib "0.5")) -;; Version: 1.0.1 -;; License: GNU General Public License v3 or newer -;; Keywords: mode-line faces - -;;; Commentary: -;; -;; Emacs package for hiding and/or highlighting the list of minor-modes -;; in the mode-line. -;; -;; -;; Usage -;; ───── -;; -;; To activate the enrichment of your minor-modes list, call `M-x -;; rich-minority-mode', or add this to your init file: -;; -;; ┌──── -;; │ (rich-minority-mode 1) -;; └──── -;; -;; By default, this has a couple of small effects (provided as examples) -;; it is up to you to customize it to your liking with the following -;; three variables: -;; -;; `rm-blacklist': List of minor mode names that will be hidden from the -;; minor-modes list. Use this to hide *only* a few modes -;; that are always active and don’t really contribute -;; information. -;; `rm-whitelist': List of minor mode names that are allowed on the -;; minor-modes list. Use this to hide *all but* a few -;; modes. -;; `rm-text-properties': List text properties to apply to each minor-mode -;; lighter. For instance, by default we highlight -;; `Ovwrt' with a red face, so you always know if -;; you’re in `overwrite-mode'. -;; -;; -;; Comparison to Diminish -;; ────────────────────── -;; -;; Diminish is an established player in the mode-line world, who also -;; handles the minor-modes list. What can rich-minority /offer in -;; contrast/? -;; -;; • rich-minority is more versatile: -;; 1. It accepts *regexps*, instead of having to specify each -;; minor-mode individually; -;; 2. It also offers a *whitelist* behaviour, in addition to the -;; blacklist; -;; 3. It supports *highlighting* specific minor-modes with completely -;; arbitrary text properties. -;; • rich-minority takes a cleaner, functional approach. It doesn’t hack -;; into the `minor-mode-alist' variable. -;; -;; What is rich-minority /missing/? -;; -;; 1. It doesn’t have a quick and simple replacement functionality yet. -;; Although you can set the `display' property of a minor-mode to -;; whatever string you want and that will function as a replacement. -;; 2. Its source comments lack [Will Mengarini’s poetry]. :-) -;; -;; -;; [Will Mengarini’s poetry] http://www.eskimo.com/~seldon/diminish.el -;; -;; -;; Installation -;; ──────────── -;; -;; This package is available fom Melpa, you may install it by calling -;; `M-x package-install'. - - -;;; Code: -(require 'cl-lib) - -(declare-function lm-version "lisp-mnt") -(defun rm-bug-report () - "Opens github issues page in a web browser. Please send any bugs you find. -Please include your Emacs and rich-minority versions." - (interactive) - (require 'lisp-mnt) - (message "Your rm-version is: %s, and your emacs version is: %s.\nPlease include this in your report!" - (lm-version "rich-minority.el") emacs-version) - (browse-url "https://github.com/Malabarba/rich-minority/issues/new")) -(defun rm-customize () - "Open the customization menu in the `rich-minority' group." - (interactive) - (customize-group 'rich-minority t)) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Customization variables. -(defcustom rm-blacklist '(" hl-p") - "List of minor modes you want to hide from the mode-line. - -Has three possible values: - -- nil: All minor modes are shown in the mode-line (but see also - `rm-whitelist'). - -- List of strings: Represents a list of minor mode names that - will be hidden from the minor-modes list. - -- A string: If this variable is set to a single string, this - string must be a regexp. This regexp will be compared to each - minor-mode lighter, and those which match are hidden from the - minor-mode list. - -If you'd like to use a list of regexps, simply use something like the following: - (setq rm-blacklist (mapconcat 'identity list-of-regexps \"\\\\|\")) - -Don't forget to start each string with a blank space, as most -minor-mode lighters start with a space." - :type '(choice (repeat string) - (regexp :tag "Regular expression.")) - :group 'rich-minority - :package-version '(rich-minority . "0.1.1")) -(define-obsolete-variable-alias 'rm-excluded-modes 'rm-blacklist "0.1.1") -(define-obsolete-variable-alias 'rm-hidden-modes 'rm-blacklist "0.1.1") - -(defcustom rm-whitelist nil - "List of minor modes you want to include in the mode-line. - -- nil: All minor modes are shown in the mode-line (but see also - `rm-blacklist'). - -- List of strings: Represents a list of minor mode names that are - allowed on the minor-modes list. Any minor-mode whose lighter - is not in this list will NOT be displayed. - -- A string: If this variable is set to a single string, this - string must be a regexp. This regexp will be compared to each - minor-mode lighter, and only those which match are displayed on - the minor-mode list. - -If you'd like to use a list of regexps, simply use something like the following: - (setq rm-whitelist (mapconcat 'identity list-of-regexps \"\\\\|\")) - -Don't forget to start each string with a blank space, as most -minor-mode lighters start with a space." - :type '(choice (repeat string) - (regexp :tag "Regular expression.")) - :group 'rich-minority - :package-version '(rich-minority . "0.1.1")) -(define-obsolete-variable-alias 'rm-included-modes 'rm-whitelist "0.1.1") - -(defcustom rm-text-properties - '(("\\` Ovwrt\\'" 'face 'font-lock-warning-face)) - "Alist of text properties to be applied to minor-mode lighters. -The car of each element must be a regexp, and the cdr must be a -list of text properties. - - (REGEXP PROPERTY-NAME PROPERTY-VALUE ...) - -If the regexp matches a minor mode lighter, the text properties -are applied to it. They are tested in order, and search stops at -the first match. - -These properties take priority over those defined in -`rm-base-text-properties'." - :type '(repeat (cons regexp (repeat sexp))) - :group 'rich-minority - :package-version '(rich-minority . "0.1")) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Functions and Defvars -(defconst rm--help-echo-bottom - "Mouse-1: Mode Menu.\nMouse-2: Mode Help.\nMouse-3: Toggle Minor Modes.") - -(defvar-local rm--help-echo nil - "Used to set the help-echo string dynamically.") - -(defun rm-format-mode-line-entry (entry) - "Format an ENTRY of `minor-mode-alist'. -Return a cons of the mode line string and the mode name, or nil -if the mode line string is empty." - (let ((mode-symbol (car entry)) - (mode-string (format-mode-line entry))) - (unless (string= mode-string "") - (cons mode-string mode-symbol)))) - -;;;###autoload -(defun rm--mode-list-as-string-list () - "Return `minor-mode-list' as a simple list of strings." - (let ((full-list (delq nil (mapcar #'rm-format-mode-line-entry - minor-mode-alist))) - (spacer (propertize " " 'display '(space :align-to 15)))) - (setq rm--help-echo - (format "Full list:\n%s\n\n%s" - (mapconcat (lambda (pair) - (format " %s%s(%S)" - (car pair) spacer (cdr pair))) - full-list "\n") - rm--help-echo-bottom)) - (mapcar #'rm--propertize - (rm--remove-hidden-modes - (mapcar #'car full-list))))) - -(defcustom rm-base-text-properties - '('help-echo 'rm--help-echo - 'mouse-face 'mode-line-highlight - 'local-map mode-line-minor-mode-keymap) - "List of text propeties to apply to every minor mode." - :type '(repeat sexp) - :group 'rich-minority - :package-version '(rich-minority . "0.1")) - -(defun rm--propertize (mode) - "Propertize the string MODE according to `rm-text-properties'." - (if (null (stringp mode)) - `(:propertize ,mode ,@rm-base-text-properties) - (let ((al rm-text-properties) - done prop) - (while (and (null done) al) - (setq done (pop al)) - (if (string-match (car done) mode) - (setq prop (cdr done)) - (setq done nil))) - (eval `(propertize ,mode ,@prop ,@rm-base-text-properties))))) - -(defun rm--remove-hidden-modes (li) - "Remove from LI elements that match `rm-blacklist' or don't match `rm-whitelist'." - (let ((pred (if (listp rm-blacklist) #'member #'rm--string-match)) - (out li)) - (when rm-blacklist - (setq out - (remove nil - (mapcar - (lambda (x) (unless (and (stringp x) - (funcall pred x rm-blacklist)) - x)) - out)))) - (when rm-whitelist - (setq pred (if (listp rm-whitelist) #'member #'rm--string-match)) - (setq out - (remove nil - (mapcar - (lambda (x) (unless (and (stringp x) - (null (funcall pred x rm-whitelist))) - x)) - out)))) - out)) - -(defun rm--string-match (string regexp) - "Like `string-match', but arg STRING comes before REGEXP." - (string-match regexp string)) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; minor-mode -(defvar rm--mode-line-construct - '(:eval (rm--mode-list-as-string-list)) - "Construct used to replace `minor-mode-alist'.") - -(defvar rm--warning-absent-element - "Couldn't find %S inside `mode-line-modes'. If you didn't change it yourself, please file a bug report with M-x rm-bug-report" - "Warning message used when something wasn't found.") - -(defvar rm--backup-construct nil - "Construct containing `minor-mode-alist' which we removed from the mode-line.") - -;;;###autoload -(define-minor-mode rich-minority-mode nil nil " $" - :global t - (if rich-minority-mode - (let ((place (or (member 'minor-mode-alist mode-line-modes) - (cl-member-if - (lambda (x) (and (listp x) - (equal (car x) :propertize) - (equal (cadr x) '("" minor-mode-alist)))) - mode-line-modes)))) - (if place - (progn - (setq rm--backup-construct (car place)) - (setcar place rm--mode-line-construct)) - (setq rich-minority-mode nil) - (if (member 'sml/pos-id-separator mode-line-format) - (message "You don't need to activate rich-minority-mode if you're using smart-mode-line") - (warn rm--warning-absent-element 'minor-mode-alist)))) - (let ((place (member rm--mode-line-construct mode-line-modes))) - (if place - (setcar place rm--backup-construct) - (warn rm--warning-absent-element rm--mode-line-construct))))) - -(provide 'rich-minority) - -;;; rich-minority.el ends here - -;; Local Variables: -;; nameless-current-name: "rm" -;; End: diff --git a/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.elc b/emacs/.emacs.d/elpa/rich-minority-20170813.622/rich-minority.elc deleted file mode 100644 index 4b9536e0697e03a23d20d3d90d437b692af9afbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9400 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 u_^!C!cVFq))`Xgs2`gYyS(P63s*a diff --git a/emacs/.emacs.d/elpa/s-20171102.227/s-autoloads.el b/emacs/.emacs.d/elpa/s-20171102.227/s-autoloads.el deleted file mode 100644 index 0282173..0000000 --- a/emacs/.emacs.d/elpa/s-20171102.227/s-autoloads.el +++ /dev/null @@ -1,15 +0,0 @@ -;;; s-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil nil ("s.el") (23124 14355 652115 935000)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; s-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/s-20171102.227/s-pkg.el b/emacs/.emacs.d/elpa/s-20171102.227/s-pkg.el deleted file mode 100644 index debacde..0000000 --- a/emacs/.emacs.d/elpa/s-20171102.227/s-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "s" "20171102.227" "The long lost Emacs string manipulation library." 'nil :commit "5e9a6857d42015c67681616aa3519f599f97b8d8" :keywords '("strings")) diff --git a/emacs/.emacs.d/elpa/s-20171102.227/s.el b/emacs/.emacs.d/elpa/s-20171102.227/s.el deleted file mode 100644 index 417c04f..0000000 --- a/emacs/.emacs.d/elpa/s-20171102.227/s.el +++ /dev/null @@ -1,709 +0,0 @@ -;;; s.el --- The long lost Emacs string manipulation library. - -;; Copyright (C) 2012-2015 Magnar Sveen - -;; Author: Magnar Sveen -;; Version: 1.12.0 -;; Package-Version: 20171102.227 -;; Keywords: strings - -;; 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 long lost Emacs string manipulation library. -;; -;; See documentation on https://github.com/magnars/s.el#functions - -;;; Code: - -;; Silence byte-compiler -(defvar ucs-normalize-combining-chars) ; Defined in `ucs-normalize' -(autoload 'slot-value "eieio") - -(defun s-trim-left (s) - "Remove whitespace at the beginning of S." - (declare (pure t) (side-effect-free t)) - (save-match-data - (if (string-match "\\`[ \t\n\r]+" s) - (replace-match "" t t s) - s))) - -(defun s-trim-right (s) - "Remove whitespace at the end of S." - (save-match-data - (declare (pure t) (side-effect-free t)) - (if (string-match "[ \t\n\r]+\\'" s) - (replace-match "" t t s) - s))) - -(defun s-trim (s) - "Remove whitespace at the beginning and end of S." - (declare (pure t) (side-effect-free t)) - (s-trim-left (s-trim-right s))) - -(defun s-collapse-whitespace (s) - "Convert all adjacent whitespace characters to a single space." - (declare (pure t) (side-effect-free t)) - (replace-regexp-in-string "[ \t\n\r]+" " " s)) - -(defun s-split (separator s &optional omit-nulls) - "Split S into substrings bounded by matches for regexp SEPARATOR. -If OMIT-NULLS is non-nil, zero-length substrings are omitted. - -This is a simple wrapper around the built-in `split-string'." - (declare (side-effect-free t)) - (save-match-data - (split-string s separator omit-nulls))) - -(defun s-split-up-to (separator s n &optional omit-nulls) - "Split S up to N times into substrings bounded by matches for regexp SEPARATOR. - -If OMIT-NULLS is non-nil, zero-length substrings are omitted. - -See also `s-split'." - (declare (side-effect-free t)) - (save-match-data - (let ((op 0) - (r nil)) - (with-temp-buffer - (insert s) - (setq op (goto-char (point-min))) - (while (and (re-search-forward separator nil t) - (< 0 n)) - (let ((sub (buffer-substring op (match-beginning 0)))) - (unless (and omit-nulls - (equal sub "")) - (push sub r))) - (setq op (goto-char (match-end 0))) - (setq n (1- n))) - (let ((sub (buffer-substring op (point-max)))) - (unless (and omit-nulls - (equal sub "")) - (push sub r)))) - (nreverse r)))) - -(defun s-lines (s) - "Splits S into a list of strings on newline characters." - (declare (pure t) (side-effect-free t)) - (s-split "\\(\r\n\\|[\n\r]\\)" s)) - -(defun s-join (separator strings) - "Join all the strings in STRINGS with SEPARATOR in between." - (declare (pure t) (side-effect-free t)) - (mapconcat 'identity strings separator)) - -(defun s-concat (&rest strings) - "Join all the string arguments into one string." - (declare (pure t) (side-effect-free t)) - (apply 'concat strings)) - -(defun s-prepend (prefix s) - "Concatenate PREFIX and S." - (declare (pure t) (side-effect-free t)) - (concat prefix s)) - -(defun s-append (suffix s) - "Concatenate S and SUFFIX." - (declare (pure t) (side-effect-free t)) - (concat s suffix)) - -(defun s-repeat (num s) - "Make a string of S repeated NUM times." - (declare (pure t) (side-effect-free t)) - (let (ss) - (while (> num 0) - (setq ss (cons s ss)) - (setq num (1- num))) - (apply 'concat ss))) - -(defun s-chop-suffix (suffix s) - "Remove SUFFIX if it is at end of S." - (declare (pure t) (side-effect-free t)) - (let ((pos (- (length suffix)))) - (if (and (>= (length s) (length suffix)) - (string= suffix (substring s pos))) - (substring s 0 pos) - s))) - -(defun s-chop-suffixes (suffixes s) - "Remove SUFFIXES one by one in order, if they are at the end of S." - (declare (pure t) (side-effect-free t)) - (while suffixes - (setq s (s-chop-suffix (car suffixes) s)) - (setq suffixes (cdr suffixes))) - s) - -(defun s-chop-prefix (prefix s) - "Remove PREFIX if it is at the start of S." - (declare (pure t) (side-effect-free t)) - (let ((pos (length prefix))) - (if (and (>= (length s) (length prefix)) - (string= prefix (substring s 0 pos))) - (substring s pos) - s))) - -(defun s-chop-prefixes (prefixes s) - "Remove PREFIXES one by one in order, if they are at the start of S." - (declare (pure t) (side-effect-free t)) - (while prefixes - (setq s (s-chop-prefix (car prefixes) s)) - (setq prefixes (cdr prefixes))) - s) - -(defun s-shared-start (s1 s2) - "Returns the longest prefix S1 and S2 have in common." - (declare (pure t) (side-effect-free t)) - (let ((search-length (min (length s1) (length s2))) - (i 0)) - (while (and (< i search-length) - (= (aref s1 i) (aref s2 i))) - (setq i (1+ i))) - (substring s1 0 i))) - -(defun s-shared-end (s1 s2) - "Returns the longest suffix S1 and S2 have in common." - (declare (pure t) (side-effect-free t)) - (let* ((l1 (length s1)) - (l2 (length s2)) - (search-length (min l1 l2)) - (i 0)) - (while (and (< i search-length) - (= (aref s1 (- l1 i 1)) (aref s2 (- l2 i 1)))) - (setq i (1+ i))) - ;; If I is 0, then it means that there's no common suffix between - ;; S1 and S2. - ;; - ;; However, since (substring s (- 0)) will return the whole - ;; string, `s-shared-end' should simply return the empty string - ;; when I is 0. - (if (zerop i) - "" - (substring s1 (- i))))) - -(defun s-chomp (s) - "Remove one trailing `\\n`, `\\r` or `\\r\\n` from S." - (declare (pure t) (side-effect-free t)) - (s-chop-suffixes '("\n" "\r") s)) - -(defun s-truncate (len s) - "If S is longer than LEN, cut it down to LEN - 3 and add ... at the end." - (declare (pure t) (side-effect-free t)) - (if (> (length s) len) - (format "%s..." (substring s 0 (- len 3))) - s)) - -(defun s-word-wrap (len s) - "If S is longer than LEN, wrap the words with newlines." - (declare (side-effect-free t)) - (save-match-data - (with-temp-buffer - (insert s) - (let ((fill-column len)) - (fill-region (point-min) (point-max))) - (buffer-substring (point-min) (point-max))))) - -(defun s-center (len s) - "If S is shorter than LEN, pad it with spaces so it is centered." - (declare (pure t) (side-effect-free t)) - (let ((extra (max 0 (- len (length s))))) - (concat - (make-string (ceiling extra 2) ? ) - s - (make-string (floor extra 2) ? )))) - -(defun s-pad-left (len padding s) - "If S is shorter than LEN, pad it with PADDING on the left." - (declare (pure t) (side-effect-free t)) - (let ((extra (max 0 (- len (length s))))) - (concat (make-string extra (string-to-char padding)) - s))) - -(defun s-pad-right (len padding s) - "If S is shorter than LEN, pad it with PADDING on the right." - (declare (pure t) (side-effect-free t)) - (let ((extra (max 0 (- len (length s))))) - (concat s - (make-string extra (string-to-char padding))))) - -(defun s-left (len s) - "Returns up to the LEN first chars of S." - (declare (pure t) (side-effect-free t)) - (if (> (length s) len) - (substring s 0 len) - s)) - -(defun s-right (len s) - "Returns up to the LEN last chars of S." - (declare (pure t) (side-effect-free t)) - (let ((l (length s))) - (if (> l len) - (substring s (- l len) l) - s))) - -(defun s-ends-with? (suffix s &optional ignore-case) - "Does S end with SUFFIX? - -If IGNORE-CASE is non-nil, the comparison is done without paying -attention to case differences. - -Alias: `s-suffix?'" - (declare (pure t) (side-effect-free t)) - (let ((start-pos (- (length s) (length suffix)))) - (and (>= start-pos 0) - (eq t (compare-strings suffix nil nil - s start-pos nil ignore-case))))) - -(defun s-starts-with? (prefix s &optional ignore-case) - "Does S start with PREFIX? - -If IGNORE-CASE is non-nil, the comparison is done without paying -attention to case differences. - -Alias: `s-prefix?'. This is a simple wrapper around the built-in -`string-prefix-p'." - (declare (pure t) (side-effect-free t)) - (string-prefix-p prefix s ignore-case)) - -(defun s--truthy? (val) - (declare (pure t) (side-effect-free t)) - (not (null val))) - -(defun s-contains? (needle s &optional ignore-case) - "Does S contain NEEDLE? - -If IGNORE-CASE is non-nil, the comparison is done without paying -attention to case differences." - (declare (pure t) (side-effect-free t)) - (let ((case-fold-search ignore-case)) - (s--truthy? (string-match-p (regexp-quote needle) s)))) - -(defun s-equals? (s1 s2) - "Is S1 equal to S2? - -This is a simple wrapper around the built-in `string-equal'." - (declare (pure t) (side-effect-free t)) - (string-equal s1 s2)) - -(defun s-less? (s1 s2) - "Is S1 less than S2? - -This is a simple wrapper around the built-in `string-lessp'." - (declare (pure t) (side-effect-free t)) - (string-lessp s1 s2)) - -(defun s-matches? (regexp s &optional start) - "Does REGEXP match S? -If START is non-nil the search starts at that index. - -This is a simple wrapper around the built-in `string-match-p'." - (declare (side-effect-free t)) - (s--truthy? (string-match-p regexp s start))) - -(defun s-blank? (s) - "Is S nil or the empty string?" - (declare (pure t) (side-effect-free t)) - (or (null s) (string= "" s))) - -(defun s-blank-str? (s) - "Is S nil or the empty string or string only contains whitespace?" - (declare (pure t) (side-effect-free t)) - (or (s-blank? s) (s-blank? (s-trim s)))) - -(defun s-present? (s) - "Is S anything but nil or the empty string?" - (declare (pure t) (side-effect-free t)) - (not (s-blank? s))) - -(defun s-presence (s) - "Return S if it's `s-present?', otherwise return nil." - (declare (pure t) (side-effect-free t)) - (and (s-present? s) s)) - -(defun s-lowercase? (s) - "Are all the letters in S in lower case?" - (declare (side-effect-free t)) - (let ((case-fold-search nil)) - (not (string-match-p "[[:upper:]]" s)))) - -(defun s-uppercase? (s) - "Are all the letters in S in upper case?" - (declare (side-effect-free t)) - (let ((case-fold-search nil)) - (not (string-match-p "[[:lower:]]" s)))) - -(defun s-mixedcase? (s) - "Are there both lower case and upper case letters in S?" - (let ((case-fold-search nil)) - (s--truthy? - (and (string-match-p "[[:lower:]]" s) - (string-match-p "[[:upper:]]" s))))) - -(defun s-capitalized? (s) - "In S, is the first letter upper case, and all other letters lower case?" - (declare (side-effect-free t)) - (let ((case-fold-search nil)) - (s--truthy? - (string-match-p "^[[:upper:]][^[:upper:]]*$" s)))) - -(defun s-numeric? (s) - "Is S a number?" - (declare (pure t) (side-effect-free t)) - (s--truthy? - (string-match-p "^[0-9]+$" s))) - -(defun s-replace (old new s) - "Replaces OLD with NEW in S." - (declare (pure t) (side-effect-free t)) - (replace-regexp-in-string (regexp-quote old) new s t t)) - -(defalias 's-replace-regexp 'replace-regexp-in-string) - -(defun s--aget (alist key) - (declare (pure t) (side-effect-free t)) - (cdr (assoc-string key alist))) - -(defun s-replace-all (replacements s) - "REPLACEMENTS is a list of cons-cells. Each `car` is replaced with `cdr` in S." - (declare (pure t) (side-effect-free t)) - (replace-regexp-in-string (regexp-opt (mapcar 'car replacements)) - (lambda (it) (s--aget replacements it)) - s t t)) - -(defun s-downcase (s) - "Convert S to lower case. - -This is a simple wrapper around the built-in `downcase'." - (declare (side-effect-free t)) - (downcase s)) - -(defun s-upcase (s) - "Convert S to upper case. - -This is a simple wrapper around the built-in `upcase'." - (declare (side-effect-free t)) - (upcase s)) - -(defun s-capitalize (s) - "Convert the first word's first character to upper case and the rest to lower case in S." - (declare (side-effect-free t)) - (concat (upcase (substring s 0 1)) (downcase (substring s 1)))) - -(defun s-titleize (s) - "Convert each word's first character to upper case and the rest to lower case in S. - -This is a simple wrapper around the built-in `capitalize'." - (declare (side-effect-free t)) - (capitalize s)) - -(defmacro s-with (s form &rest more) - "Threads S through the forms. Inserts S as the last item -in the first form, making a list of it if it is not a list -already. If there are more forms, inserts the first form as the -last item in second form, etc." - (declare (debug (form &rest [&or (function &rest form) fboundp]))) - (if (null more) - (if (listp form) - `(,(car form) ,@(cdr form) ,s) - (list form s)) - `(s-with (s-with ,s ,form) ,@more))) - -(put 's-with 'lisp-indent-function 1) - -(defun s-index-of (needle s &optional ignore-case) - "Returns first index of NEEDLE in S, or nil. - -If IGNORE-CASE is non-nil, the comparison is done without paying -attention to case differences." - (declare (pure t) (side-effect-free t)) - (let ((case-fold-search ignore-case)) - (string-match-p (regexp-quote needle) s))) - -(defun s-reverse (s) - "Return the reverse of S." - (declare (pure t) (side-effect-free t)) - (save-match-data - (if (multibyte-string-p s) - (let ((input (string-to-list s)) - output) - (require 'ucs-normalize) - (while input - ;; Handle entire grapheme cluster as a single unit - (let ((grapheme (list (pop input)))) - (while (memql (car input) ucs-normalize-combining-chars) - (push (pop input) grapheme)) - (setq output (nconc (nreverse grapheme) output)))) - (concat output)) - (concat (nreverse (string-to-list s)))))) - -(defun s-match-strings-all (regex string) - "Return a list of matches for REGEX in STRING. - -Each element itself is a list of matches, as per -`match-string'. Multiple matches at the same position will be -ignored after the first." - (declare (side-effect-free t)) - (save-match-data - (let ((all-strings ()) - (i 0)) - (while (and (< i (length string)) - (string-match regex string i)) - (setq i (1+ (match-beginning 0))) - (let (strings - (num-matches (/ (length (match-data)) 2)) - (match 0)) - (while (/= match num-matches) - (push (match-string match string) strings) - (setq match (1+ match))) - (push (nreverse strings) all-strings))) - (nreverse all-strings)))) - -(defun s-matched-positions-all (regexp string &optional subexp-depth) - "Return a list of matched positions for REGEXP in STRING. -SUBEXP-DEPTH is 0 by default." - (declare (side-effect-free t)) - (if (null subexp-depth) - (setq subexp-depth 0)) - (save-match-data - (let ((pos 0) result) - (while (and (string-match regexp string pos) - (< pos (length string))) - (let ((m (match-end subexp-depth))) - (push (cons (match-beginning subexp-depth) (match-end subexp-depth)) result) - (setq pos (match-end 0)))) - (nreverse result)))) - -(defun s-match (regexp s &optional start) - "When the given expression matches the string, this function returns a list -of the whole matching string and a string for each matched subexpressions. -If it did not match the returned value is an empty list (nil). - -When START is non-nil the search will start at that index." - (declare (side-effect-free t)) - (save-match-data - (if (string-match regexp s start) - (let ((match-data-list (match-data)) - result) - (while match-data-list - (let* ((beg (car match-data-list)) - (end (cadr match-data-list)) - (subs (if (and beg end) (substring s beg end) nil))) - (setq result (cons subs result)) - (setq match-data-list - (cddr match-data-list)))) - (nreverse result))))) - -(defun s-slice-at (regexp s) - "Slices S up at every index matching REGEXP." - (declare (side-effect-free t)) - (if (= 0 (length s)) (list "") - (save-match-data - (let (i) - (setq i (string-match regexp s 1)) - (if i - (cons (substring s 0 i) - (s-slice-at regexp (substring s i))) - (list s)))))) - -(defun s-split-words (s) - "Split S into list of words." - (declare (side-effect-free t)) - (s-split - "[^[:word:]0-9]+" - (let ((case-fold-search nil)) - (replace-regexp-in-string - "\\([[:lower:]]\\)\\([[:upper:]]\\)" "\\1 \\2" - (replace-regexp-in-string "\\([[:upper:]]\\)\\([[:upper:]][0-9[:lower:]]\\)" "\\1 \\2" s))) - t)) - -(defun s--mapcar-head (fn-head fn-rest list) - "Like MAPCAR, but applies a different function to the first element." - (if list - (cons (funcall fn-head (car list)) (mapcar fn-rest (cdr list))))) - -(defun s-lower-camel-case (s) - "Convert S to lowerCamelCase." - (declare (side-effect-free t)) - (s-join "" (s--mapcar-head 'downcase 'capitalize (s-split-words s)))) - -(defun s-upper-camel-case (s) - "Convert S to UpperCamelCase." - (declare (side-effect-free t)) - (s-join "" (mapcar 'capitalize (s-split-words s)))) - -(defun s-snake-case (s) - "Convert S to snake_case." - (declare (side-effect-free t)) - (s-join "_" (mapcar 'downcase (s-split-words s)))) - -(defun s-dashed-words (s) - "Convert S to dashed-words." - (declare (side-effect-free t)) - (s-join "-" (mapcar 'downcase (s-split-words s)))) - -(defun s-capitalized-words (s) - "Convert S to Capitalized words." - (declare (side-effect-free t)) - (let ((words (s-split-words s))) - (s-join " " (cons (capitalize (car words)) (mapcar 'downcase (cdr words)))))) - -(defun s-titleized-words (s) - "Convert S to Titleized Words." - (declare (side-effect-free t)) - (s-join " " (mapcar 's-titleize (s-split-words s)))) - -(defun s-word-initials (s) - "Convert S to its initials." - (declare (side-effect-free t)) - (s-join "" (mapcar (lambda (ss) (substring ss 0 1)) - (s-split-words s)))) - -;; Errors for s-format -(progn - (put 's-format-resolve - 'error-conditions - '(error s-format s-format-resolve)) - (put 's-format-resolve - 'error-message - "Cannot resolve a template to values")) - -(defun s-format (template replacer &optional extra) - "Format TEMPLATE with the function REPLACER. - -REPLACER takes an argument of the format variable and optionally -an extra argument which is the EXTRA value from the call to -`s-format'. - -Several standard `s-format' helper functions are recognized and -adapted for this: - - (s-format \"${name}\" 'gethash hash-table) - (s-format \"${name}\" 'aget alist) - (s-format \"$0\" 'elt sequence) - -The REPLACER function may be used to do any other kind of -transformation." - (let ((saved-match-data (match-data))) - (unwind-protect - (replace-regexp-in-string - "\\$\\({\\([^}]+\\)}\\|[0-9]+\\)" - (lambda (md) - (let ((var - (let ((m (match-string 2 md))) - (if m m - (string-to-number (match-string 1 md))))) - (replacer-match-data (match-data))) - (unwind-protect - (let ((v - (cond - ((eq replacer 'gethash) - (funcall replacer var extra)) - ((eq replacer 'aget) - (funcall 's--aget extra var)) - ((eq replacer 'elt) - (funcall replacer extra var)) - ((eq replacer 'oref) - (funcall #'slot-value extra (intern var))) - (t - (set-match-data saved-match-data) - (if extra - (funcall replacer var extra) - (funcall replacer var)))))) - (if v (format "%s" v) (signal 's-format-resolve md))) - (set-match-data replacer-match-data)))) template - ;; Need literal to make sure it works - t t) - (set-match-data saved-match-data)))) - -(defvar s-lex-value-as-lisp nil - "If `t' interpolate lisp values as lisp. - -`s-lex-format' inserts values with (format \"%S\").") - -(defun s-lex-fmt|expand (fmt) - "Expand FMT into lisp." - (declare (side-effect-free t)) - (list 's-format fmt (quote 'aget) - (append '(list) - (mapcar - (lambda (matches) - (list - 'cons - (cadr matches) - `(format - (if s-lex-value-as-lisp "%S" "%s") - ,(intern (cadr matches))))) - (s-match-strings-all "${\\([^}]+\\)}" fmt))))) - -(defmacro s-lex-format (format-str) - "`s-format` with the current environment. - -FORMAT-STR may use the `s-format' variable reference to refer to -any variable: - - (let ((x 1)) - (s-lex-format \"x is: ${x}\")) - -The values of the variables are interpolated with \"%s\" unless -the variable `s-lex-value-as-lisp' is `t' and then they are -interpolated with \"%S\"." - (declare (debug (form))) - (s-lex-fmt|expand format-str)) - -(defun s-count-matches (regexp s &optional start end) - "Count occurrences of `regexp' in `s'. - -`start', inclusive, and `end', exclusive, delimit the part of `s' -to match. " - (declare (side-effect-free t)) - (save-match-data - (with-temp-buffer - (insert s) - (goto-char (point-min)) - (count-matches regexp (or start 1) (or end (point-max)))))) - -(defun s-wrap (s prefix &optional suffix) - "Wrap string S with PREFIX and optionally SUFFIX. - -Return string S with PREFIX prepended. If SUFFIX is present, it -is appended, otherwise PREFIX is used as both prefix and -suffix." - (declare (pure t) (side-effect-free t)) - (concat prefix s (or suffix prefix))) - - -;;; Aliases - -(defalias 's-blank-p 's-blank?) -(defalias 's-blank-str-p 's-blank-str?) -(defalias 's-capitalized-p 's-capitalized?) -(defalias 's-contains-p 's-contains?) -(defalias 's-ends-with-p 's-ends-with?) -(defalias 's-equals-p 's-equals?) -(defalias 's-less-p 's-less?) -(defalias 's-lowercase-p 's-lowercase?) -(defalias 's-matches-p 's-matches?) -(defalias 's-mixedcase-p 's-mixedcase?) -(defalias 's-numeric-p 's-numeric?) -(defalias 's-prefix-p 's-starts-with?) -(defalias 's-prefix? 's-starts-with?) -(defalias 's-present-p 's-present?) -(defalias 's-starts-with-p 's-starts-with?) -(defalias 's-suffix-p 's-ends-with?) -(defalias 's-suffix? 's-ends-with?) -(defalias 's-uppercase-p 's-uppercase?) - - -(provide 's) -;;; s.el ends here diff --git a/emacs/.emacs.d/elpa/s-20171102.227/s.elc b/emacs/.emacs.d/elpa/s-20171102.227/s.elc deleted file mode 100644 index c4a25c40b10476f162dc44fb1aa1689cbe547495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25961 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 O!)M5PD5SCAwErK}X43=! diff --git a/emacs/.emacs.d/elpa/seq-2.20.signed b/emacs/.emacs.d/elpa/seq-2.20.signed deleted file mode 100644 index bfca90a..0000000 --- a/emacs/.emacs.d/elpa/seq-2.20.signed +++ /dev/null @@ -1 +0,0 @@ -Good signature from 474F05837FBDEF9B GNU ELPA Signing Agent (trust undefined) created at 2017-05-04T23:05:02+0200 using DSA \ No newline at end of file diff --git a/emacs/.emacs.d/elpa/seq-2.20/ChangeLog b/emacs/.emacs.d/elpa/seq-2.20/ChangeLog deleted file mode 100644 index 07f4988..0000000 --- a/emacs/.emacs.d/elpa/seq-2.20/ChangeLog +++ /dev/null @@ -1,195 +0,0 @@ -2017-05-04 Nicolas Petton - - Update seq.el to 2.20 - -2016-12-16 Nicolas Petton - - Backport the latest changes to seq.el from Emacs master - - * packages/seq/seq-24.el: - * packages/seq/seq-25.el (seq-into): Do not convert the sequence if not - needed. - * packages/seq/tests/seq-tests.el: Add a regression test. - -2016-12-15 Nicolas Petton - - Backport seq-mapn fix from Emacs master - - * packages/seq/seq-24.el (seq-mapn): - * packages/seq/seq-25.el (seq-mapn): Fix for circular lists. - * packages/seq/tests/seq-tests.el: Add a regression test. - -2016-11-16 Nicolas Petton - - Do not use map.el in seq-tests.el - - * packages/seq/tests/seq-tests.el: Do not use map.el. map.el was - introduced in Emacs 25.1, but seq.el is also available in GNU ELPA for - Emacs 24.5. - -2016-10-25 Nicolas Petton - - Fix seq-random-elt docstring - - * packages/seq/seq-24.el: - * packages/seq/seq-25.el (seq-random-elt): Fix the docstring. - -2016-10-25 Nicolas Petton - - Backport seq.el changes from Emacs master - - * packages/seq/seq-24.el: - * packages/seq/seq-25.el (seq-random-elt): New function. - * packages/seq/seq.el: Bump version to 2.19. - * packages/seq/tests/seq-tests.el: Add tests for seq-random-elt. - -2016-09-02 Clément Pit--Claudel - - ; Fix documentation of seq-subseq - -2016-08-28 Nicolas Petton - - * packages/seq/seq-24.el: Rename seq-p to seqp - -2016-06-12 Nicolas Petton - - Update seq.el to 2.16 - - * packages/seq/seq-24.el: - * packages/seq/seq-25.el: Better implementation of seq-drop for lists. - * packages/seq/seq.el: Bump version number. - -2016-04-22 Stefan Monnier - - * seq-24.el (seq-concatenate,seq-into,seq--make-bindings): Use _ - - rather than t as catch-all for pcase. - -2016-03-31 Nicolas Petton - - Update seq to version 2.15 - - * packages/seq/seq-25.el: Require cl-lib. - * packages/seq/seq.el: Bump version number. - -2016-03-29 Nicolas Petton - - Update seq.el to version 2.14 - - * packages/seq/seq.el: Bump version number. - * packages/seq/seq-24.el (seq-sort-by): New function. - * packages/seq/seq-25.el (seq-sort-by): New function. - * packages/seq/tests/seq-tests.el: Add a test for seq-sort-by. - -2016-03-25 Nicolas Petton - - * packages/seq/seq-25.el: Better declarations for seq--when-emacs-25-p - -2016-03-25 Nicolas Petton - - Split seq.el into separate files for different versions of Emacs - - All functions in seq-25.el are wrapped in a `seq--when-emacs-25-p' to - make sure that the byte compiler won't emit warnings or errors when the - file is byte compiled in Emacs < 25. - - * packages/seq/seq-24.el: - * packages/seq/seq-25.el: New files. - * packages/seq/seq.el: Load seq-VERSION.el based on the version of - Emacs. - * packages/seq/test/seq.el-test.el: Backport a test from seq.el in Emacs - master. - -2015-11-30 Stefan Monnier - - * packages/seq: Don't define it as a :core package - - Revert the removal of packages/seq/seq.el since it's different from the - one in lisp/emacs-lisp. - * .gitignore: Remove packages/seq. - * externals-list: Remove "seq" entry. - -2015-11-29 Stefan Monnier - - * externals-list: Add seq and python as :core packages - - * .gitignore: Add packages/{seq,python}. - * packages/seq: Remove. - -2015-10-20 Nicolas Petton - - Update seq.el to version 1.11 - - * packages/seq/seq.el: - * packages/seq/tests/seq-tests.el: Update. - -2015-09-18 Nicolas Petton - - Update seq.el to version 1.9 - - * packages/seq/seq.el: Update to version 1.9. - * packages/seq/tests/seq-tests.el: Update to version 1.9. - -2015-07-09 Nicolas Petton - - Update seq.el to version 1.8 - - * packages/seq/seq.el: Update to version 1.8. - * packages/seq/tests/seq-tests.el: Update to version 1.8. - -2015-05-15 Nicolas Petton - - Update seq.el to version 1.7 - - * packages/seq/seq.el: Update to version 1.7. - * packages/seq/tests/seq-tests.el: Update to version 1.7. - -2015-04-27 Nicolas Petton - - * packages/seq/seq.el: Update seq.el to version 1.5. - -2015-04-15 Nicolas Petton - - seq.el update - - * packages/seq/seq.el: Update seq.el to version 1.4 - * packages/seq/tests/seq-tests.el: Update seq.el to version 1.4 - -2015-03-25 Nicolas Petton - - Rephrases a comment in seq.el about the order of the arguments - - * packages/seq/seq.el: Better comment about the order of the arguments - -2015-03-09 Nicolas Petton - - Update seq.el to version 1.3 - - * packages/seq/seq.el: update to version 1.3 - * packages/seq/tests/seq-tests.el: update to version 1.3 - -2015-02-11 Nicolas Petton - - Update seq.el to version 1.2 - - * package/seq/seq.el: Update to version 1.2 - * packages/seq/tests/seq-tests.el: Update to version 1.2 - -2015-02-09 Nicolas Petton - - Update seq.el to version 1.1.1 - - * package/seq/seq.el: Update to version 1.1.1 - * packages/seq/tests/seq-tests.el: Update to version 1.1.1 - -2015-02-06 Nicolas Petton - - Update seq.el to version 1.1 - - * packages/seq/seq.el: Update to version 1.1 - * packages/seq/tests/seq-tests.el: Update to version 1.1 - -2015-01-14 Nicolas Petton - - packages/seq: New package - diff --git a/emacs/.emacs.d/elpa/seq-2.20/seq-24.el b/emacs/.emacs.d/elpa/seq-2.20/seq-24.el deleted file mode 100644 index d7ea729..0000000 --- a/emacs/.emacs.d/elpa/seq-2.20/seq-24.el +++ /dev/null @@ -1,496 +0,0 @@ -;;; seq-24.el --- seq.el implementation for Emacs 24.x -*- lexical-binding: t -*- - -;; Copyright (C) 2014-2016 Free Software Foundation, Inc. - -;; Author: Nicolas Petton -;; Keywords: sequences - -;; Maintainer: emacs-devel@gnu.org - -;; 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: - -;; Sequence-manipulation functions that complement basic functions -;; provided by subr.el. -;; -;; All functions are prefixed with "seq-". -;; -;; All provided functions work on lists, strings and vectors. -;; -;; Functions taking a predicate or iterating over a sequence using a -;; function as argument take the function as their first argument and -;; the sequence as their second argument. All other functions take -;; the sequence as their first argument. - -;;; Code: - -(defmacro seq-doseq (spec &rest body) - "Loop over a sequence. -Similar to `dolist' but can be applied to lists, strings, and vectors. - -Evaluate BODY with VAR bound to each element of SEQ, in turn. - -\(fn (VAR SEQ) BODY...)" - (declare (indent 1) (debug ((symbolp form &optional form) body))) - (let ((length (make-symbol "length")) - (seq (make-symbol "seq")) - (index (make-symbol "index"))) - `(let* ((,seq ,(cadr spec)) - (,length (if (listp ,seq) nil (seq-length ,seq))) - (,index (if ,length 0 ,seq))) - (while (if ,length - (< ,index ,length) - (consp ,index)) - (let ((,(car spec) (if ,length - (prog1 (seq-elt ,seq ,index) - (setq ,index (+ ,index 1))) - (pop ,index)))) - ,@body))))) - -;; Implementation of `seq-let' compatible with Emacs<25.1. -(defmacro seq-let (args sequence &rest body) - "Bind the variables in ARGS to the elements of SEQUENCE then evaluate BODY. - -ARGS can also include the `&rest' marker followed by a variable -name to be bound to the rest of SEQUENCE." - (declare (indent 2) (debug t)) - (let ((seq-var (make-symbol "seq"))) - `(let* ((,seq-var ,sequence) - ,@(seq--make-bindings args seq-var)) - ,@body))) - -(defun seq-drop (sequence n) - "Return a subsequence of SEQUENCE without its first N elements. -The result is a sequence of the same type as SEQUENCE. - -If N is a negative integer or zero, SEQUENCE is returned." - (if (<= n 0) - sequence - (if (listp sequence) - (seq--drop-list sequence n) - (let ((length (seq-length sequence))) - (seq-subseq sequence (min n length) length))))) - -(defun seq-take (sequence n) - "Return a subsequence of SEQUENCE with its first N elements. -The result is a sequence of the same type as SEQUENCE. - -If N is a negative integer or zero, an empty sequence is -returned." - (if (listp sequence) - (seq--take-list sequence n) - (seq-subseq sequence 0 (min (max n 0) (seq-length sequence))))) - -(defun seq-drop-while (predicate sequence) - "Return a sequence from the first element for which (PREDICATE element) is nil in SEQUENCE. -The result is a sequence of the same type as SEQUENCE." - (if (listp sequence) - (seq--drop-while-list predicate sequence) - (seq-drop sequence (seq--count-successive predicate sequence)))) - -(defun seq-take-while (predicate sequence) - "Return the successive elements for which (PREDICATE element) is non-nil in SEQUENCE. -The result is a sequence of the same type as SEQUENCE." - (if (listp sequence) - (seq--take-while-list predicate sequence) - (seq-take sequence (seq--count-successive predicate sequence)))) - -(defun seq-filter (predicate sequence) - "Return a list of all the elements for which (PREDICATE element) is non-nil in SEQUENCE." - (let ((exclude (make-symbol "exclude"))) - (delq exclude (seq-map (lambda (elt) - (if (funcall predicate elt) - elt - exclude)) - sequence)))) - -(defun seq-map-indexed (function sequence) - "Return the result of applying FUNCTION to each element of SEQUENCE. -Unlike `seq-map', FUNCTION takes two arguments: the element of -the sequence, and its index within the sequence." - (let ((index 0)) - (seq-map (lambda (elt) - (prog1 - (funcall function elt index) - (setq index (1+ index)))) - sequence))) - -(defun seq-remove (predicate sequence) - "Return a list of all the elements for which (PREDICATE element) is nil in SEQUENCE." - (seq-filter (lambda (elt) (not (funcall predicate elt))) - sequence)) - -(defun seq-reduce (function sequence initial-value) - "Reduce the function FUNCTION across SEQUENCE, starting with INITIAL-VALUE. - -Return the result of calling FUNCTION with INITIAL-VALUE and the -first element of SEQUENCE, then calling FUNCTION with that result and -the second element of SEQUENCE, then with that result and the third -element of SEQUENCE, etc. - -If SEQUENCE is empty, return INITIAL-VALUE and FUNCTION is not called." - (if (seq-empty-p sequence) - initial-value - (let ((acc initial-value)) - (seq-doseq (elt sequence) - (setq acc (funcall function acc elt))) - acc))) - -(defun seq-some (predicate sequence) - "Return the first value for which if (PREDICATE element) is non-nil for in SEQUENCE." - (catch 'seq--break - (seq-doseq (elt sequence) - (let ((result (funcall predicate elt))) - (when result - (throw 'seq--break result)))) - nil)) - -(defun seq-find (predicate sequence &optional default) - "Return the first element for which (PREDICATE element) is non-nil in SEQUENCE. -If no element is found, return DEFAULT. - -Note that `seq-find' has an ambiguity if the found element is -identical to DEFAULT, as it cannot be known if an element was -found or not." - (catch 'seq--break - (seq-doseq (elt sequence) - (when (funcall predicate elt) - (throw 'seq--break elt))) - default)) - -(defun seq-every-p (predicate sequence) - "Return non-nil if (PREDICATE element) is non-nil for all elements of the sequence SEQUENCE." - (catch 'seq--break - (seq-doseq (elt sequence) - (or (funcall predicate elt) - (throw 'seq--break nil))) - t)) - -(defun seq-count (predicate sequence) - "Return the number of elements for which (PREDICATE element) is non-nil in SEQUENCE." - (let ((count 0)) - (seq-doseq (elt sequence) - (when (funcall predicate elt) - (setq count (+ 1 count)))) - count)) - -(defun seq-empty-p (sequence) - "Return non-nil if the sequence SEQUENCE is empty, nil otherwise." - (if (listp sequence) - (null sequence) - (= 0 (seq-length sequence)))) - -(defun seq-sort (predicate sequence) - "Return a sorted sequence comparing using PREDICATE the elements of SEQUENCE. -The result is a sequence of the same type as SEQUENCE." - (if (listp sequence) - (sort (seq-copy sequence) predicate) - (let ((result (seq-sort predicate (append sequence nil)))) - (seq-into result (type-of sequence))))) - -(defun seq-sort-by (function pred sequence) - "Sort SEQUENCE using PRED as a comparison function. -Elements of SEQUENCE are transformed by FUNCTION before being -sorted. FUNCTION must be a function of one argument." - (seq-sort (lambda (a b) - (funcall pred - (funcall function a) - (funcall function b))) - sequence)) - -(defun seq-contains (sequence elt &optional testfn) - "Return the first element in SEQUENCE that equals to ELT. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-some (lambda (e) - (funcall (or testfn #'equal) elt e)) - sequence)) - -(defun seq-set-equal-p (sequence1 sequence2 &optional testfn) - "Return non-nil if SEQUENCE1 and SEQUENCE2 contain the same elements, regardless of order. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (and (seq-every-p (lambda (item1) (seq-contains sequence2 item1 testfn)) sequence1) - (seq-every-p (lambda (item2) (seq-contains sequence1 item2 testfn)) sequence2))) - -(defun seq-position (sequence elt &optional testfn) - "Return the index of the first element in SEQUENCE that is equal to ELT. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (let ((index 0)) - (catch 'seq--break - (seq-doseq (e sequence) - (when (funcall (or testfn #'equal) e elt) - (throw 'seq--break index)) - (setq index (1+ index))) - nil))) - -(defun seq-uniq (sequence &optional testfn) - "Return a list of the elements of SEQUENCE with duplicates removed. -TESTFN is used to compare elements, or `equal' if TESTFN is nil." - (let ((result '())) - (seq-doseq (elt sequence) - (unless (seq-contains result elt testfn) - (setq result (cons elt result)))) - (nreverse result))) - -(defun seq-subseq (sequence start &optional end) - "Return the subsequence of SEQUENCE from START to END. -If END is omitted, it defaults to the length of the sequence. -If START or END is negative, it counts from the end." - (cond ((or (stringp sequence) (vectorp sequence)) (substring sequence start end)) - ((listp sequence) - (let (len (errtext (format "Bad bounding indices: %s, %s" start end))) - (and end (< end 0) (setq end (+ end (setq len (seq-length sequence))))) - (if (< start 0) (setq start (+ start (or len (setq len (seq-length sequence)))))) - (when (> start 0) - (setq sequence (nthcdr (1- start) sequence)) - (or sequence (error "%s" errtext)) - (setq sequence (cdr sequence))) - (if end - (let ((res nil)) - (while (and (>= (setq end (1- end)) start) sequence) - (push (pop sequence) res)) - (or (= (1+ end) start) (error "%s" errtext)) - (nreverse res)) - (seq-copy sequence)))) - (t (error "Unsupported sequence: %s" sequence)))) - -(defun seq-concatenate (type &rest seqs) - "Concatenate, into a sequence of type TYPE, the sequences SEQS. -TYPE must be one of following symbols: vector, string or list. - -\n(fn TYPE SEQUENCE...)" - (pcase type - (`vector (apply #'vconcat seqs)) - (`string (apply #'concat seqs)) - (`list (apply #'append (append seqs '(nil)))) - (_ (error "Not a sequence type name: %S" type)))) - -(defun seq-mapcat (function sequence &optional type) - "Concatenate the result of applying FUNCTION to each element of SEQUENCE. -The result is a sequence of type TYPE, or a list if TYPE is nil." - (apply #'seq-concatenate (or type 'list) - (seq-map function sequence))) - -(defun seq-mapn (function sequence &rest seqs) - "Like `seq-map' but FUNCTION is mapped over all SEQS. -The arity of FUNCTION must match the number of SEQS, and the -mapping stops on the shortest sequence. -Return a list of the results. - -\(fn FUNCTION SEQS...)" - (let ((result nil) - (seqs (seq-map (lambda (s) - (seq-into s 'list)) - (cons sequence seqs)))) - (while (not (memq nil seqs)) - (push (apply function (seq-map #'car seqs)) result) - (setq seqs (seq-map #'cdr seqs))) - (nreverse result))) - -(defun seq-partition (sequence n) - "Return a list of the elements of SEQUENCE grouped into sub-sequences of length N. -The last sequence may contain less than N elements. If N is a -negative integer or 0, nil is returned." - (unless (< n 1) - (let ((result '())) - (while (not (seq-empty-p sequence)) - (push (seq-take sequence n) result) - (setq sequence (seq-drop sequence n))) - (nreverse result)))) - -(defun seq-intersection (seq1 seq2 &optional testfn) - "Return a list of the elements that appear in both SEQ1 and SEQ2. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-reduce (lambda (acc elt) - (if (seq-contains seq2 elt testfn) - (cons elt acc) - acc)) - (seq-reverse seq1) - '())) - -(defun seq-difference (seq1 seq2 &optional testfn) - "Return a list of the elements that appear in SEQ1 but not in SEQ2. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-reduce (lambda (acc elt) - (if (not (seq-contains seq2 elt testfn)) - (cons elt acc) - acc)) - (seq-reverse seq1) - '())) - -(defun seq-group-by (function sequence) - "Apply FUNCTION to each element of SEQUENCE. -Separate the elements of SEQUENCE into an alist using the results as -keys. Keys are compared using `equal'." - (seq-reduce - (lambda (acc elt) - (let* ((key (funcall function elt)) - (cell (assoc key acc))) - (if cell - (setcdr cell (push elt (cdr cell))) - (push (list key elt) acc)) - acc)) - (seq-reverse sequence) - nil)) - -(defalias 'seq-reverse - (if (ignore-errors (reverse [1 2])) - #'reverse - (lambda (sequence) - "Return the reversed copy of list, vector, or string SEQUENCE. -See also the function `nreverse', which is used more often." - (let ((result '())) - (seq-map (lambda (elt) (push elt result)) - sequence) - (if (listp sequence) - result - (seq-into result (type-of sequence))))))) - -(defun seq-into (sequence type) - "Convert the sequence SEQUENCE into a sequence of type TYPE. -TYPE can be one of the following symbols: vector, string or list." - (pcase type - (`vector (seq--into-vector sequence)) - (`string (seq--into-string sequence)) - (`list (seq--into-list sequence)) - (_ (error "Not a sequence type name: %S" type)))) - -(defun seq-min (sequence) - "Return the smallest element of SEQUENCE. -SEQUENCE must be a sequence of numbers or markers." - (apply #'min (seq-into sequence 'list))) - -(defun seq-max (sequence) - "Return the largest element of SEQUENCE. -SEQUENCE must be a sequence of numbers or markers." - (apply #'max (seq-into sequence 'list))) - -(defun seq-random-elt (sequence) - "Return a random element from SEQUENCE. -Signal an error if SEQUENCE is empty." - (if (seq-empty-p sequence) - (error "Sequence cannot be empty") - (seq-elt sequence (random (seq-length sequence))))) - -(defun seq--drop-list (list n) - "Return a list from LIST without its first N elements. -This is an optimization for lists in `seq-drop'." - (nthcdr n list)) - -(defun seq--take-list (list n) - "Return a list from LIST made of its first N elements. -This is an optimization for lists in `seq-take'." - (let ((result '())) - (while (and list (> n 0)) - (setq n (1- n)) - (push (pop list) result)) - (nreverse result))) - -(defun seq--drop-while-list (predicate list) - "Return a list from the first element for which (PREDICATE element) is nil in LIST. -This is an optimization for lists in `seq-drop-while'." - (while (and list (funcall predicate (car list))) - (setq list (cdr list))) - list) - -(defun seq--take-while-list (predicate list) - "Return the successive elements for which (PREDICATE element) is non-nil in LIST. -This is an optimization for lists in `seq-take-while'." - (let ((result '())) - (while (and list (funcall predicate (car list))) - (push (pop list) result)) - (nreverse result))) - -(defun seq--count-successive (predicate sequence) - "Return the number of successive elements for which (PREDICATE element) is non-nil in SEQUENCE." - (let ((n 0) - (len (seq-length sequence))) - (while (and (< n len) - (funcall predicate (seq-elt sequence n))) - (setq n (+ 1 n))) - n)) - -;; Helper function for the Backward-compatible version of `seq-let' -;; for Emacs<25.1. -(defun seq--make-bindings (args sequence &optional bindings) - "Return a list of bindings of the variables in ARGS to the elements of a sequence. -if BINDINGS is non-nil, append new bindings to it, and return -BINDINGS." - (let ((index 0) - (rest-marker nil)) - (seq-doseq (name args) - (unless rest-marker - (pcase name - ((pred seqp) - (setq bindings (seq--make-bindings (seq--elt-safe args index) - `(seq--elt-safe ,sequence ,index) - bindings))) - (`&rest - (progn (push `(,(seq--elt-safe args (1+ index)) - (seq-drop ,sequence ,index)) - bindings) - (setq rest-marker t))) - (_ - (push `(,name (seq--elt-safe ,sequence ,index)) bindings)))) - (setq index (1+ index))) - bindings)) - -(defun seq--elt-safe (sequence n) - "Return element of SEQUENCE at the index N. -If no element is found, return nil." - (when (or (listp sequence) - (and (sequencep sequence) - (> (seq-length sequence) n))) - (seq-elt sequence n))) - -(defun seq--activate-font-lock-keywords () - "Activate font-lock keywords for some symbols defined in seq." - (font-lock-add-keywords 'emacs-lisp-mode - '("\\" "\\"))) - -(defalias 'seq-copy #'copy-sequence) -(defalias 'seq-elt #'elt) -(defalias 'seq-length #'length) -(defalias 'seq-do #'mapc) -(defalias 'seq-each #'seq-do) -(defalias 'seq-map #'mapcar) -(defalias 'seqp #'sequencep) - -(defun seq--into-list (sequence) - "Concatenate the elements of SEQUENCE into a list." - (if (listp sequence) - sequence - (append sequence nil))) - -(defun seq--into-vector (sequence) - "Concatenate the elements of SEQUENCE into a vector." - (if (vectorp sequence) - sequence - (vconcat sequence))) - -(defun seq--into-string (sequence) - "Concatenate the elements of SEQUENCE into a string." - (if (stringp sequence) - sequence - (concat sequence))) - -(unless (fboundp 'elisp--font-lock-flush-elisp-buffers) - ;; In Emacs≥25, (via elisp--font-lock-flush-elisp-buffers and a few others) - ;; we automatically highlight macros. - (add-hook 'emacs-lisp-mode-hook #'seq--activate-font-lock-keywords)) - -(provide 'seq-24) -;;; seq-24.el ends here diff --git a/emacs/.emacs.d/elpa/seq-2.20/seq-24.elc b/emacs/.emacs.d/elpa/seq-2.20/seq-24.elc deleted file mode 100644 index e81a167aa8cf2934d0b7da91f02315f97142e40d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17415 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 diff --git a/emacs/.emacs.d/elpa/seq-2.20/seq-25.el b/emacs/.emacs.d/elpa/seq-2.20/seq-25.el deleted file mode 100644 index d26bde6..0000000 --- a/emacs/.emacs.d/elpa/seq-2.20/seq-25.el +++ /dev/null @@ -1,530 +0,0 @@ -;;; seq-25.el --- seq.el implementation for Emacs 25.x -*- lexical-binding: t -*- - -;; Copyright (C) 2014-2016 Free Software Foundation, Inc. - -;; Author: Nicolas Petton -;; Keywords: sequences - -;; Maintainer: emacs-devel@gnu.org - -;; 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: - -;; Sequence-manipulation functions that complement basic functions -;; provided by subr.el. -;; -;; All functions are prefixed with "seq-". -;; -;; All provided functions work on lists, strings and vectors. -;; -;; Functions taking a predicate or iterating over a sequence using a -;; function as argument take the function as their first argument and -;; the sequence as their second argument. All other functions take -;; the sequence as their first argument. -;; -;; seq.el can be extended to support new type of sequences. Here are -;; the generic functions that must be implemented by new seq types: -;; - `seq-elt' -;; - `seq-length' -;; - `seq-do' -;; - `seqp' -;; - `seq-subseq' -;; - `seq-into-sequence' -;; - `seq-copy' -;; - `seq-into' - -;;; Code: - -;; When loading seq.el in Emacs 24.x, this file gets byte-compiled, even if -;; never used. This takes care of byte-compilation warnings is emitted, by -;; emitting nil in the macro expansion in Emacs 24.x. -(defmacro seq--when-emacs-25-p (&rest body) - "Execute BODY if in Emacs>=25.x." - (declare (indent (lambda (&rest x) 0)) (debug t)) - (when (version<= "25" emacs-version) - `(progn ,@body))) - -(seq--when-emacs-25-p - -(require 'cl-generic) -(require 'cl-lib) ;; for cl-subseq - -(defmacro seq-doseq (spec &rest body) - "Loop over a sequence. -Evaluate BODY with VAR bound to each element of SEQUENCE, in turn. - -Similar to `dolist' but can be applied to lists, strings, and vectors. - -\(fn (VAR SEQUENCE) BODY...)" - (declare (indent 1) (debug ((symbolp form &optional form) body))) - `(seq-do (lambda (,(car spec)) - ,@body) - ,(cadr spec))) - -(pcase-defmacro seq (&rest patterns) - "Build a `pcase' pattern that matches elements of SEQUENCE. - -The `pcase' pattern will match each element of PATTERNS against the -corresponding element of SEQUENCE. - -Extra elements of the sequence are ignored if fewer PATTERNS are -given, and the match does not fail." - `(and (pred seqp) - ,@(seq--make-pcase-bindings patterns))) - -(defmacro seq-let (args sequence &rest body) - "Bind the variables in ARGS to the elements of SEQUENCE, then evaluate BODY. - -ARGS can also include the `&rest' marker followed by a variable -name to be bound to the rest of SEQUENCE." - (declare (indent 2) (debug (sexp form body))) - `(pcase-let ((,(seq--make-pcase-patterns args) ,sequence)) - ,@body)) - - -;;; Basic seq functions that have to be implemented by new sequence types -(cl-defgeneric seq-elt (sequence n) - "Return Nth element of SEQUENCE." - (elt sequence n)) - -;; Default gv setters for `seq-elt'. -;; It can be a good idea for new sequence implementations to provide a -;; "gv-setter" for `seq-elt'. -(cl-defmethod (setf seq-elt) (store (sequence array) n) - (aset sequence n store)) - -(cl-defmethod (setf seq-elt) (store (sequence cons) n) - (setcar (nthcdr n sequence) store)) - -(cl-defgeneric seq-length (sequence) - "Return the number of elements of SEQUENCE." - (length sequence)) - -(cl-defgeneric seq-do (function sequence) - "Apply FUNCTION to each element of SEQUENCE, presumably for side effects. -Return SEQUENCE." - (mapc function sequence)) - -(defalias 'seq-each #'seq-do) - -(cl-defgeneric seqp (sequence) - "Return non-nil if SEQUENCE is a sequence, nil otherwise." - (sequencep sequence)) - -(cl-defgeneric seq-copy (sequence) - "Return a shallow copy of SEQUENCE." - (copy-sequence sequence)) - -(cl-defgeneric seq-subseq (sequence start &optional end) - "Return the sequence of elements of SEQUENCE from START to END. -END is exclusive. - -If END is omitted, it defaults to the length of the sequence. If -START or END is negative, it counts from the end. Signal an -error if START or END are outside of the sequence (i.e too large -if positive or too small if negative)." - (cl-subseq sequence start end)) - - -(cl-defgeneric seq-map (function sequence) - "Return the result of applying FUNCTION to each element of SEQUENCE." - (let (result) - (seq-do (lambda (elt) - (push (funcall function elt) result)) - sequence) - (nreverse result))) - -(defun seq-map-indexed (function sequence) - "Return the result of applying FUNCTION to each element of SEQUENCE. -Unlike `seq-map', FUNCTION takes two arguments: the element of -the sequence, and its index within the sequence." - (let ((index 0)) - (seq-map (lambda (elt) - (prog1 - (funcall function elt index) - (setq index (1+ index)))) - sequence))) - -;; faster implementation for sequences (sequencep) -(cl-defmethod seq-map (function (sequence sequence)) - (mapcar function sequence)) - -(cl-defgeneric seq-mapn (function sequence &rest sequences) - "Like `seq-map' but FUNCTION is mapped over all SEQUENCES. -The arity of FUNCTION must match the number of SEQUENCES, and the -mapping stops on the shortest sequence. -Return a list of the results. - -\(fn FUNCTION SEQUENCES...)" - (let ((result nil) - (sequences (seq-map (lambda (s) - (seq-into s 'list)) - (cons sequence sequences)))) - (while (not (memq nil sequences)) - (push (apply function (seq-map #'car sequences)) result) - (setq sequences (seq-map #'cdr sequences))) - (nreverse result))) - -(cl-defgeneric seq-drop (sequence n) - "Remove the first N elements of SEQUENCE and return the result. -The result is a sequence of the same type as SEQUENCE. - -If N is a negative integer or zero, SEQUENCE is returned." - (if (<= n 0) - sequence - (let ((length (seq-length sequence))) - (seq-subseq sequence (min n length) length)))) - -(cl-defgeneric seq-take (sequence n) - "Take the first N elements of SEQUENCE and return the result. -The result is a sequence of the same type as SEQUENCE. - -If N is a negative integer or zero, an empty sequence is -returned." - (seq-subseq sequence 0 (min (max n 0) (seq-length sequence)))) - -(cl-defgeneric seq-drop-while (pred sequence) - "Remove the successive elements of SEQUENCE for which PRED returns non-nil. -PRED is a function of one argument. The result is a sequence of -the same type as SEQUENCE." - (seq-drop sequence (seq--count-successive pred sequence))) - -(cl-defgeneric seq-take-while (pred sequence) - "Take the successive elements of SEQUENCE for which PRED returns non-nil. -PRED is a function of one argument. The result is a sequence of -the same type as SEQUENCE." - (seq-take sequence (seq--count-successive pred sequence))) - -(cl-defgeneric seq-empty-p (sequence) - "Return non-nil if the SEQUENCE is empty, nil otherwise." - (= 0 (seq-length sequence))) - -(cl-defgeneric seq-sort (pred sequence) - "Sort SEQUENCE using PRED as comparison function. -The result is a sequence of the same type as SEQUENCE." - (let ((result (seq-sort pred (append sequence nil)))) - (seq-into result (type-of sequence)))) - -(defun seq-sort-by (function pred sequence) - "Sort SEQUENCE using PRED as a comparison function. -Elements of SEQUENCE are transformed by FUNCTION before being -sorted. FUNCTION must be a function of one argument." - (seq-sort (lambda (a b) - (funcall pred - (funcall function a) - (funcall function b))) - sequence)) - -(cl-defmethod seq-sort (pred (list list)) - (sort (seq-copy list) pred)) - -(cl-defgeneric seq-reverse (sequence) - "Return a sequence with elements of SEQUENCE in reverse order." - (let ((result '())) - (seq-map (lambda (elt) - (push elt result)) - sequence) - (seq-into result (type-of sequence)))) - -;; faster implementation for sequences (sequencep) -(cl-defmethod seq-reverse ((sequence sequence)) - (reverse sequence)) - -(cl-defgeneric seq-concatenate (type &rest sequences) - "Concatenate SEQUENCES into a single sequence of type TYPE. -TYPE must be one of following symbols: vector, string or list. - -\n(fn TYPE SEQUENCE...)" - (apply #'cl-concatenate type (seq-map #'seq-into-sequence sequences))) - -(cl-defgeneric seq-into-sequence (sequence) - "Convert SEQUENCE into a sequence. - -The default implementation is to signal an error if SEQUENCE is not a -sequence, specific functions should be implemented for new types -of sequence." - (unless (sequencep sequence) - (error "Cannot convert %S into a sequence" sequence)) - sequence) - -(cl-defgeneric seq-into (sequence type) - "Concatenate the elements of SEQUENCE into a sequence of type TYPE. -TYPE can be one of the following symbols: vector, string or -list." - (pcase type - (`vector (seq--into-vector sequence)) - (`string (seq--into-string sequence)) - (`list (seq--into-list sequence)) - (_ (error "Not a sequence type name: %S" type)))) - -(cl-defgeneric seq-filter (pred sequence) - "Return a list of all the elements for which (PRED element) is non-nil in SEQUENCE." - (let ((exclude (make-symbol "exclude"))) - (delq exclude (seq-map (lambda (elt) - (if (funcall pred elt) - elt - exclude)) - sequence)))) - -(cl-defgeneric seq-remove (pred sequence) - "Return a list of all the elements for which (PRED element) is nil in SEQUENCE." - (seq-filter (lambda (elt) (not (funcall pred elt))) - sequence)) - -(cl-defgeneric seq-reduce (function sequence initial-value) - "Reduce the function FUNCTION across SEQUENCE, starting with INITIAL-VALUE. - -Return the result of calling FUNCTION with INITIAL-VALUE and the -first element of SEQUENCE, then calling FUNCTION with that result and -the second element of SEQUENCE, then with that result and the third -element of SEQUENCE, etc. - -If SEQUENCE is empty, return INITIAL-VALUE and FUNCTION is not called." - (if (seq-empty-p sequence) - initial-value - (let ((acc initial-value)) - (seq-doseq (elt sequence) - (setq acc (funcall function acc elt))) - acc))) - -(cl-defgeneric seq-every-p (pred sequence) - "Return non-nil if (PRED element) is non-nil for all elements of SEQUENCE." - (catch 'seq--break - (seq-doseq (elt sequence) - (or (funcall pred elt) - (throw 'seq--break nil))) - t)) - -(cl-defgeneric seq-some (pred sequence) - "Return the first value for which if (PRED element) is non-nil for in SEQUENCE." - (catch 'seq--break - (seq-doseq (elt sequence) - (let ((result (funcall pred elt))) - (when result - (throw 'seq--break result)))) - nil)) - -(cl-defgeneric seq-find (pred sequence &optional default) - "Return the first element for which (PRED element) is non-nil in SEQUENCE. -If no element is found, return DEFAULT. - -Note that `seq-find' has an ambiguity if the found element is -identical to DEFAULT, as it cannot be known if an element was -found or not." - (catch 'seq--break - (seq-doseq (elt sequence) - (when (funcall pred elt) - (throw 'seq--break elt))) - default)) - -(cl-defgeneric seq-count (pred sequence) - "Return the number of elements for which (PRED element) is non-nil in SEQUENCE." - (let ((count 0)) - (seq-doseq (elt sequence) - (when (funcall pred elt) - (setq count (+ 1 count)))) - count)) - -(cl-defgeneric seq-contains (sequence elt &optional testfn) - "Return the first element in SEQUENCE that is equal to ELT. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-some (lambda (e) - (funcall (or testfn #'equal) elt e)) - sequence)) - -(cl-defgeneric seq-set-equal-p (sequence1 sequence2 &optional testfn) - "Return non-nil if SEQUENCE1 and SEQUENCE2 contain the same elements, regardless of order. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (and (seq-every-p (lambda (item1) (seq-contains sequence2 item1 testfn)) sequence1) - (seq-every-p (lambda (item2) (seq-contains sequence1 item2 testfn)) sequence2))) - -(cl-defgeneric seq-position (sequence elt &optional testfn) - "Return the index of the first element in SEQUENCE that is equal to ELT. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (let ((index 0)) - (catch 'seq--break - (seq-doseq (e sequence) - (when (funcall (or testfn #'equal) e elt) - (throw 'seq--break index)) - (setq index (1+ index))) - nil))) - -(cl-defgeneric seq-uniq (sequence &optional testfn) - "Return a list of the elements of SEQUENCE with duplicates removed. -TESTFN is used to compare elements, or `equal' if TESTFN is nil." - (let ((result '())) - (seq-doseq (elt sequence) - (unless (seq-contains result elt testfn) - (setq result (cons elt result)))) - (nreverse result))) - -(cl-defgeneric seq-mapcat (function sequence &optional type) - "Concatenate the result of applying FUNCTION to each element of SEQUENCE. -The result is a sequence of type TYPE, or a list if TYPE is nil." - (apply #'seq-concatenate (or type 'list) - (seq-map function sequence))) - -(cl-defgeneric seq-partition (sequence n) - "Return a list of the elements of SEQUENCE grouped into sub-sequences of length N. -The last sequence may contain less than N elements. If N is a -negative integer or 0, nil is returned." - (unless (< n 1) - (let ((result '())) - (while (not (seq-empty-p sequence)) - (push (seq-take sequence n) result) - (setq sequence (seq-drop sequence n))) - (nreverse result)))) - -(cl-defgeneric seq-intersection (sequence1 sequence2 &optional testfn) - "Return a list of the elements that appear in both SEQUENCE1 and SEQUENCE2. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-reduce (lambda (acc elt) - (if (seq-contains sequence2 elt testfn) - (cons elt acc) - acc)) - (seq-reverse sequence1) - '())) - -(cl-defgeneric seq-difference (sequence1 sequence2 &optional testfn) - "Return a list of the elements that appear in SEQUENCE1 but not in SEQUENCE2. -Equality is defined by TESTFN if non-nil or by `equal' if nil." - (seq-reduce (lambda (acc elt) - (if (not (seq-contains sequence2 elt testfn)) - (cons elt acc) - acc)) - (seq-reverse sequence1) - '())) - -(cl-defgeneric seq-group-by (function sequence) - "Apply FUNCTION to each element of SEQUENCE. -Separate the elements of SEQUENCE into an alist using the results as -keys. Keys are compared using `equal'." - (seq-reduce - (lambda (acc elt) - (let* ((key (funcall function elt)) - (cell (assoc key acc))) - (if cell - (setcdr cell (push elt (cdr cell))) - (push (list key elt) acc)) - acc)) - (seq-reverse sequence) - nil)) - -(cl-defgeneric seq-min (sequence) - "Return the smallest element of SEQUENCE. -SEQUENCE must be a sequence of numbers or markers." - (apply #'min (seq-into sequence 'list))) - -(cl-defgeneric seq-max (sequence) - "Return the largest element of SEQUENCE. -SEQUENCE must be a sequence of numbers or markers." - (apply #'max (seq-into sequence 'list))) - -(defun seq--count-successive (pred sequence) - "Return the number of successive elements for which (PRED element) is non-nil in SEQUENCE." - (let ((n 0) - (len (seq-length sequence))) - (while (and (< n len) - (funcall pred (seq-elt sequence n))) - (setq n (+ 1 n))) - n)) - -;;; Optimized implementations for lists - -(cl-defmethod seq-drop ((list list) n) - "Optimized implementation of `seq-drop' for lists." - (nthcdr n list)) - -(cl-defmethod seq-take ((list list) n) - "Optimized implementation of `seq-take' for lists." - (let ((result '())) - (while (and list (> n 0)) - (setq n (1- n)) - (push (pop list) result)) - (nreverse result))) - -(cl-defmethod seq-drop-while (pred (list list)) - "Optimized implementation of `seq-drop-while' for lists." - (while (and list (funcall pred (car list))) - (setq list (cdr list))) - list) - -(cl-defmethod seq-empty-p ((list list)) - "Optimized implementation of `seq-empty-p' for lists." - (null list)) - - -(defun seq--into-list (sequence) - "Concatenate the elements of SEQUENCE into a list." - (if (listp sequence) - sequence - (append sequence nil))) - -(defun seq--into-vector (sequence) - "Concatenate the elements of SEQUENCE into a vector." - (if (vectorp sequence) - sequence - (vconcat sequence))) - -(defun seq--into-string (sequence) - "Concatenate the elements of SEQUENCE into a string." - (if (stringp sequence) - sequence - (concat sequence))) - -(defun seq--make-pcase-bindings (args) - "Return a list of bindings of the variables in ARGS to the elements of a sequence." - (let ((bindings '()) - (index 0) - (rest-marker nil)) - (seq-doseq (name args) - (unless rest-marker - (pcase name - (`&rest - (progn (push `(app (pcase--flip seq-drop ,index) - ,(seq--elt-safe args (1+ index))) - bindings) - (setq rest-marker t))) - (_ - (push `(app (pcase--flip seq--elt-safe ,index) ,name) bindings)))) - (setq index (1+ index))) - bindings)) - -(defun seq--make-pcase-patterns (args) - "Return a list of `(seq ...)' pcase patterns from the argument list ARGS." - (cons 'seq - (seq-map (lambda (elt) - (if (seqp elt) - (seq--make-pcase-patterns elt) - elt)) - args))) - -;; TODO: make public? -(defun seq--elt-safe (sequence n) - "Return element of SEQUENCE at the index N. -If no element is found, return nil." - (ignore-errors (seq-elt sequence n)))) - -(cl-defgeneric seq-random-elt (sequence) - "Return a random element from SEQUENCE. -Signal an error if SEQUENCE is empty." - (if (seq-empty-p sequence) - (error "Sequence cannot be empty") - (seq-elt sequence (random (seq-length sequence))))) - -(provide 'seq-25) -;;; seq-25.el ends here diff --git a/emacs/.emacs.d/elpa/seq-2.20/seq-25.elc b/emacs/.emacs.d/elpa/seq-2.20/seq-25.elc deleted file mode 100644 index 375e7f95f3f4a99c2ea2068f17e91f546dd2ec1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22019 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 diff --git a/emacs/.emacs.d/elpa/seq-2.20/seq.el b/emacs/.emacs.d/elpa/seq-2.20/seq.el deleted file mode 100644 index 83d4392..0000000 --- a/emacs/.emacs.d/elpa/seq-2.20/seq.el +++ /dev/null @@ -1,48 +0,0 @@ -;;; seq.el --- Sequence manipulation functions -*- lexical-binding: t -*- - -;; Copyright (C) 2014-2016 Free Software Foundation, Inc. - -;; Author: Nicolas Petton -;; Keywords: sequences -;; Version: 2.20 -;; Package: seq - -;; Maintainer: emacs-devel@gnu.org - -;; 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: - -;; Sequence-manipulation functions that complement basic functions -;; provided by subr.el. -;; -;; All functions are prefixed with "seq-". -;; -;; All provided functions work on lists, strings and vectors. -;; -;; Functions taking a predicate or iterating over a sequence using a -;; function as argument take the function as their first argument and -;; the sequence as their second argument. All other functions take -;; the sequence as their first argument. - -;;; Code: - -(if (version< emacs-version "25") - (require 'seq-24) - (require 'seq-25)) - -(provide 'seq) -;;; seq.el ends here diff --git a/emacs/.emacs.d/elpa/seq-2.20/seq.elc b/emacs/.emacs.d/elpa/seq-2.20/seq.elc deleted file mode 100644 index f7299352433d7f566f5f2e84a1632f0cd66de5fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmbtRu};G<5Y31(FtD&bGJ(`YiPKQ3u%N0#B{tXygKN9QQewBZTU5TDBW;loV^6a0 z?!D8!v#*{%&#t2=itD<@%=T;DDLEwCVBT}#u~W`#Yrv|k%!+~g)S(6MI@op4z5e2X z3Vaq1|n!u@e z8&>H9Atrr#nJpF&Eq7c58gewqb0gs`1UFbJbe8`SIX=ciao1_(5Lzl^ -;; Maintainer: emacs-devel@gnu.org - -;; 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: - -;; Tests for seq.el - -;;; Code: - -(require 'ert) -(require 'seq) - -(defmacro with-test-sequences (spec &rest body) - "Successively bind VAR to a list, vector, and string built from SEQ. -Evaluate BODY for each created sequence. - -\(fn (var seq) body)" - (declare (indent 1) (debug ((symbolp form) body))) - (let ((initial-seq (make-symbol "initial-seq"))) - `(let ((,initial-seq ,(cadr spec))) - ,@(mapcar (lambda (s) - `(let ((,(car spec) (apply (function ,s) ,initial-seq))) - ,@body)) - '(list vector string))))) - -(defun same-contents-p (seq1 seq2) - "Return t if SEQ1 and SEQ2 have the same contents, nil otherwise." - (equal (append seq1 '()) (append seq2 '()))) - -(defun test-sequences-evenp (integer) - "Return t if INTEGER is even." - (eq (logand integer 1) 0)) - -(defun test-sequences-oddp (integer) - "Return t if INTEGER is odd." - (not (test-sequences-evenp integer))) - -(ert-deftest test-seq-drop () - (with-test-sequences (seq '(1 2 3 4)) - (should (equal (seq-drop seq 0) seq)) - (should (equal (seq-drop seq 1) (seq-subseq seq 1))) - (should (equal (seq-drop seq 2) (seq-subseq seq 2))) - (should (seq-empty-p (seq-drop seq 4))) - (should (seq-empty-p (seq-drop seq 10)))) - (with-test-sequences (seq '()) - (should (seq-empty-p (seq-drop seq 0))) - (should (seq-empty-p (seq-drop seq 1))))) - -(ert-deftest test-seq-take () - (with-test-sequences (seq '(2 3 4 5)) - (should (seq-empty-p (seq-take seq 0))) - (should (= (seq-length (seq-take seq 1)) 1)) - (should (= (seq-elt (seq-take seq 1) 0) 2)) - (should (same-contents-p (seq-take seq 3) '(2 3 4))) - (should (equal (seq-take seq 10) seq)))) - -(ert-deftest test-seq-drop-while () - (with-test-sequences (seq '(1 3 2 4)) - (should (equal (seq-drop-while #'test-sequences-oddp seq) - (seq-drop seq 2))) - (should (equal (seq-drop-while #'test-sequences-evenp seq) - seq)) - (should (seq-empty-p (seq-drop-while #'numberp seq)))) - (with-test-sequences (seq '()) - (should (seq-empty-p (seq-drop-while #'test-sequences-oddp seq))))) - -(ert-deftest test-seq-take-while () - (with-test-sequences (seq '(1 3 2 4)) - (should (equal (seq-take-while #'test-sequences-oddp seq) - (seq-take seq 2))) - (should (seq-empty-p (seq-take-while #'test-sequences-evenp seq))) - (should (equal (seq-take-while #'numberp seq) seq))) - (with-test-sequences (seq '()) - (should (seq-empty-p (seq-take-while #'test-sequences-oddp seq))))) - -(ert-deftest test-seq-map-indexed () - (should (equal (seq-map-indexed (lambda (elt i) - (list elt i)) - nil) - nil)) - (should (equal (seq-map-indexed (lambda (elt i) - (list elt i)) - '(a b c d)) - '((a 0) (b 1) (c 2) (d 3))))) - -(ert-deftest test-seq-filter () - (with-test-sequences (seq '(6 7 8 9 10)) - (should (equal (seq-filter #'test-sequences-evenp seq) '(6 8 10))) - (should (equal (seq-filter #'test-sequences-oddp seq) '(7 9))) - (should (equal (seq-filter (lambda (elt) nil) seq) '()))) - (with-test-sequences (seq '()) - (should (equal (seq-filter #'test-sequences-evenp seq) '())))) - -(ert-deftest test-seq-remove () - (with-test-sequences (seq '(6 7 8 9 10)) - (should (equal (seq-remove #'test-sequences-evenp seq) '(7 9))) - (should (equal (seq-remove #'test-sequences-oddp seq) '(6 8 10))) - (should (same-contents-p (seq-remove (lambda (elt) nil) seq) seq))) - (with-test-sequences (seq '()) - (should (equal (seq-remove #'test-sequences-evenp seq) '())))) - -(ert-deftest test-seq-count () - (with-test-sequences (seq '(6 7 8 9 10)) - (should (equal (seq-count #'test-sequences-evenp seq) 3)) - (should (equal (seq-count #'test-sequences-oddp seq) 2)) - (should (equal (seq-count (lambda (elt) nil) seq) 0))) - (with-test-sequences (seq '()) - (should (equal (seq-count #'test-sequences-evenp seq) 0)))) - -(ert-deftest test-seq-reduce () - (with-test-sequences (seq '(1 2 3 4)) - (should (= (seq-reduce #'+ seq 0) 10)) - (should (= (seq-reduce #'+ seq 5) 15))) - (with-test-sequences (seq '()) - (should (eq (seq-reduce #'+ seq 0) 0)) - (should (eq (seq-reduce #'+ seq 7) 7)))) - -(ert-deftest test-seq-some () - (with-test-sequences (seq '(4 3 2 1)) - (should (seq-some #'test-sequences-evenp seq)) - (should (seq-some #'test-sequences-oddp seq)) - (should-not (seq-some (lambda (elt) (> elt 10)) seq))) - (with-test-sequences (seq '()) - (should-not (seq-some #'test-sequences-oddp seq))) - (should (seq-some #'null '(1 nil 2)))) - -(ert-deftest test-seq-find () - (with-test-sequences (seq '(4 3 2 1)) - (should (= 4 (seq-find #'test-sequences-evenp seq))) - (should (= 3 (seq-find #'test-sequences-oddp seq))) - (should-not (seq-find (lambda (elt) (> elt 10)) seq))) - (should-not (seq-find #'null '(1 nil 2))) - (should-not (seq-find #'null '(1 nil 2) t)) - (should-not (seq-find #'null '(1 2 3))) - (should (seq-find #'null '(1 2 3) 'sentinel))) - -(ert-deftest test-seq-contains () - (with-test-sequences (seq '(3 4 5 6)) - (should (seq-contains seq 3)) - (should-not (seq-contains seq 7))) - (with-test-sequences (seq '()) - (should-not (seq-contains seq 3)) - (should-not (seq-contains seq nil)))) - -(ert-deftest test-seq-every-p () - (with-test-sequences (seq '(43 54 22 1)) - (should (seq-every-p (lambda (elt) t) seq)) - (should-not (seq-every-p #'test-sequences-oddp seq)) - (should-not (seq-every-p #'test-sequences-evenp seq))) - (with-test-sequences (seq '(42 54 22 2)) - (should (seq-every-p #'test-sequences-evenp seq)) - (should-not (seq-every-p #'test-sequences-oddp seq))) - (with-test-sequences (seq '()) - (should (seq-every-p #'identity seq)) - (should (seq-every-p #'test-sequences-evenp seq)))) - -(ert-deftest test-seq-empty-p () - (with-test-sequences (seq '(0)) - (should-not (seq-empty-p seq))) - (with-test-sequences (seq '(0 1 2)) - (should-not (seq-empty-p seq))) - (with-test-sequences (seq '()) - (should (seq-empty-p seq)))) - -(ert-deftest test-seq-sort () - (should (equal (seq-sort #'< "cbaf") "abcf")) - (should (equal (seq-sort #'< '(2 1 9 4)) '(1 2 4 9))) - (should (equal (seq-sort #'< [2 1 9 4]) [1 2 4 9])) - (should (equal (seq-sort #'< "") ""))) - -(ert-deftest test-seq-uniq () - (with-test-sequences (seq '(2 4 6 8 6 4 3)) - (should (equal (seq-uniq seq) '(2 4 6 8 3)))) - (with-test-sequences (seq '(3 3 3 3 3)) - (should (equal (seq-uniq seq) '(3)))) - (with-test-sequences (seq '()) - (should (equal (seq-uniq seq) '())))) - -(ert-deftest test-seq-subseq () - (with-test-sequences (seq '(2 3 4 5)) - (should (equal (seq-subseq seq 0 4) seq)) - (should (same-contents-p (seq-subseq seq 2 4) '(4 5))) - (should (same-contents-p (seq-subseq seq 1 3) '(3 4))) - (should (same-contents-p (seq-subseq seq 1 -1) '(3 4)))) - (should (vectorp (seq-subseq [2 3 4 5] 2))) - (should (stringp (seq-subseq "foo" 2 3))) - (should (listp (seq-subseq '(2 3 4 4) 2 3))) - (should-error (seq-subseq '(1 2 3) 4)) - (should-not (seq-subseq '(1 2 3) 3)) - (should (seq-subseq '(1 2 3) -3)) - (should-error (seq-subseq '(1 2 3) 1 4)) - (should (seq-subseq '(1 2 3) 1 3))) - -(ert-deftest test-seq-concatenate () - (with-test-sequences (seq '(2 4 6)) - (should (equal (seq-concatenate 'string seq [8]) (string 2 4 6 8))) - (should (equal (seq-concatenate 'list seq '(8 10)) '(2 4 6 8 10))) - (should (equal (seq-concatenate 'vector seq '(8 10)) [2 4 6 8 10])) - (should (equal (seq-concatenate 'vector nil '(8 10)) [8 10])) - (should (equal (seq-concatenate 'vector seq nil) [2 4 6])))) - -(ert-deftest test-seq-mapcat () - (should (equal (seq-mapcat #'seq-reverse '((3 2 1) (6 5 4))) - '(1 2 3 4 5 6))) - (should (equal (seq-mapcat #'seq-reverse '[(3 2 1) (6 5 4)]) - '(1 2 3 4 5 6))) - (should (equal (seq-mapcat #'seq-reverse '((3 2 1) (6 5 4)) 'vector) - '[1 2 3 4 5 6]))) - -(ert-deftest test-seq-partition () - (should (same-contents-p (seq-partition '(0 1 2 3 4 5 6 7) 3) - '((0 1 2) (3 4 5) (6 7)))) - (should (same-contents-p (seq-partition '[0 1 2 3 4 5 6 7] 3) - '([0 1 2] [3 4 5] [6 7]))) - (should (same-contents-p (seq-partition "Hello world" 2) - '("He" "ll" "o " "wo" "rl" "d"))) - (should (equal (seq-partition '() 2) '())) - (should (equal (seq-partition '(1 2 3) -1) '()))) - -(ert-deftest test-seq-group-by () - (with-test-sequences (seq '(1 2 3 4)) - (should (equal (seq-group-by #'test-sequences-oddp seq) - '((t 1 3) (nil 2 4))))) - (should (equal (seq-group-by #'car '((a 1) (b 3) (c 4) (a 2))) - '((b (b 3)) (c (c 4)) (a (a 1) (a 2)))))) - -(ert-deftest test-seq-reverse () - (with-test-sequences (seq '(1 2 3 4)) - (should (same-contents-p (seq-reverse seq) '(4 3 2 1))) - (should (equal (type-of (seq-reverse seq)) - (type-of seq))))) - -(ert-deftest test-seq-into () - (let* ((vector [1 2 3]) - (list (seq-into vector 'list))) - (should (same-contents-p vector list)) - (should (listp list))) - (let* ((list '(hello world)) - (vector (seq-into list 'vector))) - (should (same-contents-p vector list)) - (should (vectorp vector))) - (let* ((string "hello") - (list (seq-into string 'list))) - (should (same-contents-p string list)) - (should (stringp string))) - (let* ((string "hello") - (vector (seq-into string 'vector))) - (should (same-contents-p string vector)) - (should (stringp string))) - (let* ((list nil) - (vector (seq-into list 'vector))) - (should (same-contents-p list vector)) - (should (vectorp vector)))) - -(ert-deftest test-seq-intersection () - (let ((v1 [2 3 4 5]) - (v2 [1 3 5 6 7])) - (should (same-contents-p (seq-intersection v1 v2) - '(3 5)))) - (let ((l1 '(2 3 4 5)) - (l2 '(1 3 5 6 7))) - (should (same-contents-p (seq-intersection l1 l2) - '(3 5)))) - (let ((v1 [2 4 6]) - (v2 [1 3 5])) - (should (seq-empty-p (seq-intersection v1 v2))))) - -(ert-deftest test-seq-difference () - (let ((v1 [2 3 4 5]) - (v2 [1 3 5 6 7])) - (should (same-contents-p (seq-difference v1 v2) - '(2 4)))) - (let ((l1 '(2 3 4 5)) - (l2 '(1 3 5 6 7))) - (should (same-contents-p (seq-difference l1 l2) - '(2 4)))) - (let ((v1 [2 4 6]) - (v2 [2 4 6])) - (should (seq-empty-p (seq-difference v1 v2))))) - -(ert-deftest test-seq-let () - (with-test-sequences (seq '(1 2 3 4)) - (seq-let (a b c d e) seq - (should (= a 1)) - (should (= b 2)) - (should (= c 3)) - (should (= d 4)) - (should (null e))) - (seq-let (a b &rest others) seq - (should (= a 1)) - (should (= b 2)) - (should (same-contents-p others (seq-drop seq 2))))) - (let ((seq '(1 (2 (3 (4)))))) - (seq-let (_ (_ (_ (a)))) seq - (should (= a 4)))) - (let (seq) - (seq-let (a b c) seq - (should (null a)) - (should (null b)) - (should (null c))))) - -(ert-deftest test-seq-min-max () - (with-test-sequences (seq '(4 5 3 2 0 4)) - (should (= (seq-min seq) 0)) - (should (= (seq-max seq) 5)))) - -(ert-deftest test-seq-position () - (with-test-sequences (seq '(2 4 6)) - (should (null (seq-position seq 1))) - (should (= (seq-position seq 4) 1))) - (let ((seq '(a b c))) - (should (null (seq-position seq 'd #'eq))) - (should (= (seq-position seq 'a #'eq) 0)) - (should (null (seq-position seq (make-symbol "a") #'eq))))) - -(ert-deftest test-seq-mapn () - (should-error (seq-mapn #'identity)) - (with-test-sequences (seq '(1 2 3 4 5 6 7)) - (should (equal (append seq nil) - (seq-mapn #'identity seq))) - (should (equal (seq-mapn #'1+ seq) - (seq-map #'1+ seq))) - - (with-test-sequences (seq-2 '(10 20 30 40 50)) - (should (equal (seq-mapn #'+ seq seq-2) - '(11 22 33 44 55))) - (should (equal (seq-mapn #'+ seq seq-2 nil) nil))))) - -(ert-deftest test-seq-sort-by () - (let ((seq ["x" "xx" "xxx"])) - (should (equal (seq-sort-by #'seq-length #'> seq) - ["xxx" "xx" "x"])))) - -(ert-deftest test-seq-random-elt-take-all () - (let ((seq '(a b c d e)) - (elts '())) - (should (= 0 (length elts))) - (dotimes (_ 1000) - (let ((random-elt (seq-random-elt seq))) - (add-to-list 'elts - random-elt))) - (should (= 5 (length elts))))) - -(ert-deftest test-seq-random-elt-signal-on-empty () - (should-error (seq-random-elt nil)) - (should-error (seq-random-elt [])) - (should-error (seq-random-elt ""))) - -(ert-deftest test-seq-mapn-circular-lists () - (let ((l1 '#1=(1 . #1#))) - (should (equal (seq-mapn #'+ '(3 4 5 7) l1) - '(4 5 6 8))))) - -(ert-deftest test-seq-into-and-identity () - (let ((lst '(1 2 3)) - (vec [1 2 3]) - (str "foo bar")) - (should (eq (seq-into lst 'list) lst)) - (should (eq (seq-into vec 'vector) vec)) - (should (eq (seq-into str 'string) str)))) - -(provide 'seq-tests) -;;; seq-tests.el ends here diff --git a/emacs/.emacs.d/elpa/seq-2.20/tests/seq-tests.elc b/emacs/.emacs.d/elpa/seq-2.20/tests/seq-tests.elc deleted file mode 100644 index 1d8b9c2dacf7a448fd66daf3028bff7e687fb833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147692 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 - -;; Author: Artur Malabarba -;; URL: http://github.com/Bruce-Connor/smart-mode-line -;; Separator: - - -;;; 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. -;; - -;;; Change Log: -;; 0.1a - 2014/05/14 - Created File. -;;; Code: - -(deftheme smart-mode-line-dark "Dark theme for smart-mode-line.") - -(custom-theme-set-faces - 'smart-mode-line-dark - '(mode-line-buffer-id ((t :inherit sml/filename :foreground nil :background nil))) - '(mode-line-inactive ((t :foreground "gray60" :background "#404045" :inverse-video nil))) - '(mode-line ((t :foreground "gray60" :background "black" :inverse-video nil))) - '(sml/global ((t :foreground "gray50" :inverse-video nil))) - '(sml/modes ((t :inherit sml/global :foreground "White"))) - '(sml/filename ((t :inherit sml/global :foreground "#eab700" :weight bold))) - '(sml/prefix ((t :inherit sml/global :foreground "#bf6000"))) - '(sml/read-only ((t :inherit sml/not-modified :foreground "DeepSkyBlue"))) - '(persp-selected-face ((t :foreground "ForestGreen" :inherit sml/filename))) - '(helm-candidate-number ((t :foreground nil :background nil :inherit sml/filename)))) - -;;;###autoload -(when load-file-name - (add-to-list 'custom-theme-load-path - (file-name-as-directory (file-name-directory load-file-name)))) - -(provide-theme 'smart-mode-line-dark) -;;; smart-mode-line-dark-theme.el ends here. diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-dark-theme.elc b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-dark-theme.elc deleted file mode 100644 index 499dd9905bc1616866cd67a18fb0aa170abfcdec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1516 zcmbtUQE%EX5azLBKVYwJkS363MnWlTdD_};sJDbhem8~14Nwy!#u$x*Go;{HB${LnUhT~z{?mend zF`+fHO;EM^BLV<^*ljnzSIV;zJZ$O7Gr2ONRt1x`@WCmw@b9tfd|*OKl586%y%=T} z2OQFZ!`Q$IYk~lH8A|>U7Q;W?UESWYq7qIN0ZG1Z!wVysx2zC`<;1iVdqFmb@r;Di ziX00SfZ2E*7e#p06BBst)9rTq`6>`EtR$Aq$D#TvDNhBOWS((bvKSUL#kol_4&LyFY5&;FIeJSo@aNJ%h(_Y`<3 z3TUAJ6eC}jB{{An>-Ph@RHh=Q0;u$dm~ETvCCF*v>=JS?O0&yc6!%ZxgTY{zQ5i@` zJsX$44guP - -;; Author: Artur Malabarba -;; URL: http://github.com/Bruce-Connor/smart-mode-line -;; Separator: - - -;;; 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. -;; - -;;; Change Log: -;; 0.1a - 2014/05/14 - Created File. -;;; Code: - -(deftheme smart-mode-line-light "Light theme for smart-mode-line.") - -(custom-theme-set-faces - 'smart-mode-line-light - '(mode-line-buffer-id ((t :inherit sml/filename :foreground nil :background nil))) - '(mode-line-inactive ((t :foreground "grey20" :background "#fdf6e3" :inverse-video nil))) - '(mode-line ((t :foreground "black" :background "grey85" :inverse-video nil))) - '(sml/global ((t :foreground "gray20" :inverse-video nil))) - '(sml/modes ((t :inherit sml/global :foreground "Black"))) - '(sml/filename ((t :inherit sml/global :foreground "Blue" :weight bold))) - '(sml/prefix ((t :inherit sml/global :foreground "#5b2507" :weight bold))) - '(sml/read-only ((t :inherit sml/not-modified :foreground "DarkGreen" :weight bold)))) - -;;;###autoload -(when load-file-name - (add-to-list 'custom-theme-load-path - (file-name-as-directory (file-name-directory load-file-name)))) - -(provide-theme 'smart-mode-line-light) -;;; smart-mode-line-light-theme.el ends here. diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-light-theme.elc b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-light-theme.elc deleted file mode 100644 index d45d30ba5d1e313d98053466be6edfaeaec7f183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1371 zcmbtUO>Y`85apQi2YMYAsRAjc>~6>hoZ2+1BIVZJN)KLpmbK!wk!?uHukU!51_)G& zl$8wZ_|2Q=@ndFp54RsXolbW)o58KEmrA2-UX+2mnhOtWbY58l*<_TD(q`{Tg$lUV zV3$GF>X`=u_))jn{8=dvCGo(@qX)S$yjB9F6+Sp+7XF-eoe#jJLAe?vMRcK-q)Y_szK diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-pkg.el b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-pkg.el deleted file mode 100644 index 4e19fc0..0000000 --- a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-pkg.el +++ /dev/null @@ -1,8 +0,0 @@ -(define-package "smart-mode-line" "20171013.849" "A color coded smart mode-line." - '((emacs "24.3") - (rich-minority "0.1.1")) - :url "http://github.com/Malabarba/smart-mode-line" :keywords - '("mode-line" "faces" "themes")) -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.el b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.el deleted file mode 100644 index cd1ae86..0000000 --- a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.el +++ /dev/null @@ -1,49 +0,0 @@ -;;; smart-mode-line-respectful-theme.el --- Respectful theme for smart-mode-line - -;; Copyright (C) 2014 Artur Malabarba - -;; Author: Artur Malabarba -;; URL: http://github.com/Bruce-Connor/smart-mode-line -;; Separator: - - -;;; 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. -;; - -;;; Change Log: -;; 0.1a - 2014/05/14 - Created File. -;;; Code: - -(deftheme smart-mode-line-respectful - "Respectful theme for smart-mode-line. -Tries to respect the colors chosen by your global theme. -Results may vary.") - -(custom-theme-set-faces - 'smart-mode-line-respectful - '(mode-line-inactive ((t :inverse-video nil))) - '(mode-line ((t :inverse-video nil))) - '(sml/global ((t :inherit font-lock-preprocessor-face))) - '(sml/filename ((t :inherit mode-line-buffer-id))) - '(sml/prefix ((t :inherit (font-lock-variable-name-face sml/global)))) - '(sml/read-only ((t :inherit (font-lock-type-face sml/not-modified)))) - '(sml/modes ((t :foreground nil :inherit sml/filename :weight normal)))) - -;;;###autoload -(when load-file-name - (add-to-list 'custom-theme-load-path - (file-name-as-directory (file-name-directory load-file-name)))) - -(provide-theme 'smart-mode-line-respectful) -;;; smart-mode-line-respectful-theme.el ends here. diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.elc b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line-respectful-theme.elc deleted file mode 100644 index 1f388e06bbcaf60e54d2a3811b0a1d250508b00e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1260 zcmbtUJ#X7E5cL@N4|MF=1qvGoT}w`yI-ZIkLx4_gwz>l?oh+ghDUg&?_1E`NQtYHf zvqS(b>-g^7$2)R!`{m}%XfzscHXFLJRjoAV-G?%CTglARft^>@Pl0 z1TbCoanXcVJu!jTKI8Ftwrc~6%;rqf?P{4|rC2Mhi+9^JS>n&-VEl;p)piwa34jTJ z34qDP`?H9|&vNy41OprrfD?ez<=JGio%T#=M?V4XYD(W@zeE&IKsBbU@xfLi=S)k- zB9siHucQm2LV7|g!@{wzISWOjU)UOar(aLto~^L%Z@0zP+&cx`gQbBSIw2dYt@BXa zdWO0!wYG7z*LEj$1XK)91ZZ^dRLPbO(zT1}V-+1jcn+eF8Q5p15|qIRsRPq&7U)`; zI3_F(DrZYZ>G^#A1pN}oSNg+{&_GqPQ-KOhuh2I8DQd^Hvxx7l>k{e6qhD-$*Y#(f zrzCexQLqy#KYD&gF_nQO=82xh{y|dSJKNwSqIt2OeQM8&ynbM{F9S}pt7O+<+y^39%oOg1Veop% jx}mHk?wsRf3h70z9LCPN_KEpqLzAO^{oMVa^?dvXP^y(6 diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.el b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.el deleted file mode 100644 index 682e0e7..0000000 --- a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.el +++ /dev/null @@ -1,1746 +0,0 @@ -;;; smart-mode-line.el --- A color coded smart mode-line. - -;; Copyright (C) 2012 Artur Malabarba - -;; Author: Artur Malabarba -;; URL: http://github.com/Malabarba/smart-mode-line -;; Version: 2.10 -;; Package-Requires: ((emacs "24.3") (rich-minority "0.1.1")) -;; Keywords: mode-line faces themes -;; Prefix: sml -;; Separator: / - -;;; Commentary: -;; -;; Smart Mode Line is a sexy mode-line for Emacs. It aims to be easy to -;; read from small to large monitors by using *colors*, a *prefix feature*, and -;; *smart truncation*. -;; -;; New in v2.5 -;; =========== -;; - Emacs 24.4 compatible. -;; - Integration with [Projectile](https://github.com/bbatsov/projectile)! -;; - Display `current-directory' in Shell and eshell. -;; - New value for `sml/theme': `automatic' (highly recommended). -;; - `sml/apply-theme' is interactive and has completion. -;; - Smart-mode-line themes are now regular themes. -;; -;; Installation -;; === -;; **smart-mode-line** is available on Melpa, and that's the recommended -;; way of installing it. If you do that, you can simply activate it with: -;; -;; (sml/setup) -;; -;; To set the color theme, do one of the following BEFORE `sml/setup`: -;; -;; (setq sml/theme 'dark) -;; (setq sml/theme 'light) -;; (setq sml/theme 'respectful) -;; -;; Features -;; === -;; Its main features include: -;; -;; 1. **Color coded**: -;; Highlights the most important information for you -;; (buffer name, modified state, line number). Don't -;; like the colors? See item *5.*! -;; -;; 2. **Fixed width** (if you want): -;; Lets you set a maxium width for the path name and mode names, and -;; truncates them intelligently (truncates the directory, not the -;; buffer name). Also let's you **right indent** strings in the -;; mode-line (see `sml/mode-width'). -;; -;; 3. **Directory as Prefixes**: -;; Prefix feature saves a LOT of space. e.g. *"~/.emacs.d/"* -;; is translated to *":ED:"* in the path (open a file inside -;; this folder to see it in action). Long path names you -;; are commonly working on are displayed as short -;; abbreviations. Set your own prefixes to make best use -;; of it (by configuring `sml/replacer-regexp-list'). Mousing -;; over the abbreviated path will show you the full -;; path. See below for examples. -;; -;; 4. **Hide or Highlight minor-modes**: -;; The [rich-minority](https://github.com/Malabarba/rich-minority) -;; package saves even more space. Select which minor modes you don't -;; want to see listed by adding them to the variable -;; `rm-excluded-modes', or even highlight the modes that are more -;; important with the variable `rm-text-properties'. This will filter -;; out the modes you don't care about and unclutter the modes list -;; (mousing over the modes list still shows the full list). -;; -;; 4. **Hide minor-modes**: -;; Hidden-modes feature saves even more space. Select -;; which minor modes you don't want to see listed by -;; customizing the `rm-blacklist' variable. This will -;; filter out the modes you don't care about and unclutter -;; the modes list (mousing over the modes list still shows -;; the full list). -;; -;; 5. **Very easy to configure**: -;; All colors and variables are customizable. You can change the -;; whole theme with `sml/apply-theme', or just customize anything -;; manually with `sml/customize' and `sml/customize-faces'. There are -;; *DOZENS* of variables to customize your mode-line, just pop over -;; there and have a look! -;; -;; 6. **Compatible with absolutely anything**: -;; I'm serious. Versions 2.0 and above should be compatible with -;; **any** other packages that display information in the mode-line -;; (evil, nyan-mode, elscreen, display-battery-mode, etc). If you -;; find *ANYTHING* that does not appear as it should, file a bug report -;; and I'll get to it. -;; -;; Important Variables: -;; === -;; All variables can be edited by running `sml/customize', and the -;; documentations are mostly self explanatory, I list here only the -;; most important ones. -;; -;; 1. `sml/theme' -;; Choose what theme you want to use for the mode-line colors. For now -;; there are 3 different themes: `dark', `light', and `respectful'. -;; -;; 1. `sml/shorten-directory' and `sml/shorten-modes' -;; Setting both of these to `t' guarantees a fixed width mode-line -;; (directory name and minor-modes list will be truncated to fit). To -;; actually define the width, see below. -;; -;; 2. `sml/name-width' and `sml/mode-width' -;; Customize these according to the width of your Emacs frame. I set -;; them to `40' and `full' respectively, and the mode-line fits -;; perfectly when the frame is split in two even on my laptop's small -;; 17" monitor. `full' means everything after the minor-modes will be -;; right-indented. -;; -;; 3. `sml/replacer-regexp-list' -;; This variable is a list of (REGEXP REPLACEMENT) that is used -;; to parse the path. The replacements are applied -;; sequentially. This allows you to greatly abbreviate the path -;; that's shown in the mode-line. If this abbreviation is of -;; the form *":SOMETHING:"*, it is considered a prefix and get's -;; a different color (you can change what's considered a prefix -;; by customizing `sml/prefix-regexp'). -;; For example, if you do a lot of work on a folder called -;; *"~/Dropbox/Projects/In-Development/"* almost half the -;; mode-line would be occupied just by the folder name, which -;; is much less important than the buffer name. But, you can't -;; just hide the folder name, since editing a file in -;; *"~/Dropbox/Projects/In-Development/Source"* is VERY different -;; from editting a file in *"~/Dropbox/Projects/Source"*. By -;; setting up a prefix for your commonly used folders, you get -;; all that information without wasting all that space. In this -;; example you could set the replacement to *":ProjDev:"* or just -;; *":InDev:"*, so the path shown in the mode-line will be -;; *":ProjDev:Source/"* (saves a lot of space without hiding -;; information). -;; -;; Here go some more useful examples: -;; -;; (add-to-list 'sml/replacer-regexp-list '("^~/Dropbox/Projects/In-Development/" ":ProjDev:") t) -;; (add-to-list 'sml/replacer-regexp-list '("^~/Documents/Work/" ":Work:") t) -;; -;; ;; Added in the right order, they even work sequentially: -;; (add-to-list 'sml/replacer-regexp-list '("^~/Dropbox/" ":DB:") t) -;; (add-to-list 'sml/replacer-regexp-list '("^:DB:Documents" ":DDocs:") t) -;; (add-to-list 'sml/replacer-regexp-list '("^~/Git-Projects/" ":Git:") t) -;; (add-to-list 'sml/replacer-regexp-list '("^:Git:\\(.*\\)/src/main/java/" ":G/\\1/SMJ:") t) - -;;; 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. -;; - -;;; Change Log: -;; 2.6 - 2014/08/15 - Allow for sml/name-width to have different mininum and maximum values. -;; 2.6 - 2014/08/15 - Delegated minor-mode filtering to rich-minority package. -;; 2.5.3 - 2014/06/18 - Fix custom-theme-load-path for manual installations. -;; 2.5.2 - 2014/06/16 - sml/no-confirm-load-theme variable to skip theme confirmation. -;; 2.5.1 - 2014/06/16 - sml/apply-theme no-confirm in daemon mode. -;; 2.5 - 2014/05/15 - sml/theme: New possible values: 'automatic (highly recommended) or nil. -;; 2.5 - 2014/05/14 - sml/mode-width: New possible value: 'right. -;; 2.5 - 2014/05/14 - Themes engine completely redone. -;; 2.5 - 2014/05/14 - sml/apply-theme is interactive. -;; 2.4.5 - 2014/04/24 - Changed default value of sml/mode-width back to 'full. -;; 2.4.3 - 2014/03/25 - sml/mode-line-buffer-identification fix for ggtags. -;; 2.4.2 - 2014/03/13 - Perspective support simplified to sml/apply-theme. -;; 2.4.2 - 2014/03/13 - Projectile integration only applies after the user replacements (to change, see sml/use-projectile-p). -;; 2.4.1 - 2014/03/11 - Small fix to dired-mode with uniquify. -;; 2.4 - 2014/03/10 - Projectile integration! To disable it, set sml/use-projectile-p. -;; 2.4 - 2014/03/10 - Change the order of line/column numbers with sml/order-of-line-and-column. -;; 2.4 - 2014/03/10 - Take over dired's buffer-identification. We will undo this if dired ever does anything special with this variable. -;; 2.4 - 2014/03/10 - Show current-directory in Shell and eshell. -;; 2.4 - 2014/03/10 - Tested against 24.4. -;; 2.4 - 2014/03/10 - Ditch total number of lines count. -;; 2.3.13 - 2014/03/05 - sml/apply-theme forces our foreground/background colors. -;; 2.3.12 - 2014/03/05 - Use sml/show-remote to hide/show the "@" symbol. . -;; 2.3.12 - 2014/03/05 - Support showing tramp state (remote buffer). -;; 2.3.12 - 2014/02/27 - sml/apply-theme avoids nesting. -;; 2.3.11 - 2014/02/15 - Silent sml/apply-theme. -;; 2.3.10 - 2014/02/15 - Fix sml/setup ignoring sml/theme. -;; 2.3.9 - 2014/02/10 - sml/hidden-modes allows regexps. -;; 2.3.8 - 2014/02/07 - Buffer identification width auto-updates when sml/name-width changes. -;; 2.3.8 - 2014/02/07 - sml/apply-theme customizes helm-candidate-number. -;; 2.3.7 - 2014/01/21 - Adapt sml/generate-buffer-identification. -;; 2.3.6 - 2013/12/16 - sml/replacer follows symlinks. -;; 2.3.6 - 2013/12/16 - Fix filling and name on the very first update of non-file buffers. -;; 2.3.5 - 2013/12/14 - sml/generate-position-help runs less often now. -;; 2.3.4 - 2013/12/14 - Remove lag-inducing advice. -;; 2.3.3 - 2013/12/09 - Fix sml/get-directory for files attached to mails - Thanks tsdh. -;; 2.3.2 - 2013/12/07 - Fix for themes which set :inverse-video t in the mode-line. -;; 2.3.1 - 2013/12/04 - sml/show-frame-identification now always defaults to nil. -;; 2.3.1 - 2013/12/04 - Fix for sml/show-client not working. -;; 2.3 - 2013/12/04 - sml/show-frame-identification only t for terminals. -;; 2.3 - 2013/12/03 - Mark boolean's as safe-local-variables. -;; 2.2.3 - 2013/12/03 - Fix possible recursion in sml/apply-theme. -;; 2.2.2 - 2013/11/27 - Fix sml/apply-theme to consider saved faces. -;; 2.2.1 - 2013/11/27 - Fix doc for sml/show-frame-identification. -;; 2.2 - 2013/11/26 - Better minor list and some fixes. -;; 2.0.5 - 2013/11/24 - sml/revert no longer available. -;; 2.0.4 - 2013/11/24 - Improved faces a little. -;; 2.0.3.4 - 2013/11/15 - Workaround to prevent core dump. -;; 2.0.3.3 - 2013/11/13 - Small fix on sml/generate-buffer-identification for man pages. -;; 2.0.3.2 - 2013/11/12 - sml/filter-mode-line-list now uses remove nil. -;; 2.0.3.1 - 2013/11/08 - Quick fix sml/get-directory. -;; 2.0.3 - 2013/11/07 - sml/show-frame-identification. -;; 2.0.3 - 2013/11/07 - Improvements to sml/parse-mode-line-elements. -;; 2.0.3 - 2013/11/07 - sml/compile-position-construct. -;; 2.0.3 - 2013/11/07 - Line-number removed from sml/generate-position-help. -;; 2.0.3 - 2013/11/07 - Position optimization with sml/position-construct. -;; 2.0.3 - 2013/11/07 - Performance optimization thanks to sml/buffer-identification. -;; 2.0.2 - 2013/11/05 - better sml/replacer-regexp-list. -;; 2.0.2 - 2013/11/05 - sml/mule-info also hides input system. -;; 2.0.2 - 2013/11/05 - show-encoding is now alias for sml/mule-info. -;; 2.0.2 - 2013/11/05 - Removed anchors. -;; 2.0.1 - 2013/11/04 - Slight fix on sml/apply-theme -;; 2.0 - 2013/11/04 - Remove unnecessary functions. -;; 2.0 - 2013/11/04 - Many other internal improvements. -;; 2.0 - 2013/11/02 - Remove sml/mode-line-format -;; 2.0 - 2013/11/02 - Reduce huge spaces in mode-line-format -;; 2.0 - 2013/11/02 - Redesign the format to use mode-line-mule-info. -;; 2.0 - 2013/11/02 - Redesign the format to use mode-line-client. -;; 2.0 - 2013/11/02 - Redesign the format to use mode-line-modified. -;; 2.0 - 2013/11/02 - Redesign the format to use mode-line-remote. -;; 2.0 - 2013/11/02 - Manually edits mode-line-front-space. -;; 2.0 - 2013/11/02 - Manually edits mode-line-frame-identification. -;; 2.0 - 2013/11/02 - Manually edits mode-line-buffer-identification. -;; 2.0 - 2013/11/02 - Manually edits mode-line-end-spaces. -;; 2.0 - 2013/11/02 - Redesign the format to use mode-line-modes. -;; 2.0 - 2013/11/01 - Redesign the format to use mode-line-position. -;; 1.30.1 - 2013/10/21 - eval-when-compile cl -;; 1.30 - 2013/10/13 - Click mode list to toggle minor-mode hiding. -;; 1.29.2 - 2013/10/02 - Different default position-percentage face. -;; 1.29.1 - 2013/08/22 - Fix hang introduced with last update. -;; 1.29 - 2013/08/11 - Fixed lag with remote files. -;; 1.28.1 - 2013/08/11 - Fix for the erc fix. -;; 1.28 - 2013/08/11 - Fixing erc notifications. -;; 1.27 - 2013/08/10 - Changed default value of sml/mode-width to a number. 'full didn't work for everyone. -;; 1.27 - 2013/08/10 - Doc bug. -;; 1.26 - 2013/07/18 - Fix for % in the process string. -;; 1.25 - 2013/07/16 - sml/override-theme also tries to set good colors for the text (not just the background). -;; 1.24 - 2013/07/16 - sml/mule-info face changed to be less important. -;; 1.23.2 - 2013/07/15 - Changed doc of sml/replacer-regexp-list. -;; 1.23.1 - 2013/07/15 - moved perspective variable to eval-after-load. -;; 1.23 - 2013/07/15 - added an icon to mew-format. -;; 1.23 - 2013/07/15 - obsolete sml/show-time. -;; 1.23 - 2013/07/15 - fixed a bug which required emacs restart for changes to take effect. -;; 1.22 - 2013/07/15 - sml/vc-mode-show-backend implemented. -;; 1.22 - 2013/07/15 - move mew-support variable. -;; 1.22 - 2013/07/15 - Changed default value of sml/replacer-regexp-list. -;; 1.21 - 2013/07/14 - Encoding description. -;; 1.21 - 2013/07/14 - Reestructured some of the present functions. -;; 1.21 - 2013/07/14 - New position indicator. -;; 1.20 - 2013/07/14 - vc-mode support. -;; 1.19 - 2013/07/14 - Reorganized groups. -;; 1.18 - 2013/07/12 - mew variables only get created if mew is loaded. -;; 1.18 - 2013/07/12 - Reformulated the simplified mode-line. -;; 1.18 - 2013/07/12 - Added number of lines to mouse tooltip of position. -;; 1.17 - 2013/07/10 - Fallback 'modified' string. -;; 1.16 - 2013/07/08 - Changed implementation of battery display. -;; 1.16 - 2013/07/08 - Fixed battery-display. -;; 1.15 - 2013/07/06 - Implemented sml-modeline support. -;; 1.14 - 2013/06/25 - Slightly reduced the default value of extra-filler. -;; 1.13 - 2013/06/10 - removed 'cl requirement. -;; 1.13 - 2013/06/10 - Advice to mew-biff-clear. -;; 1.12 - 2013/06/06 - Gigantic typo fix. Sorry about that. -;; 1.11 - 2013/06/05 - Added biff support. -;; 1.10 - 2013/05/24 - Fix for buffer name with '%'. -;; 1.9 - 2013/05/13 - Now uses file name instead of buffer-name by default, controled by `sml/show-file-name'. -;; 1.9 - 2013/05/13 - When showing buffer name, can strip the part by setting `sml/show-trailing-N'. -;; 1.8.3 - 2013/04/21 - Fixed first line of docs. -;; 1.8.2 - 2013/04/18 - added empty anchors throughout the mode-line. -;; 1.8.2 - 2013/04/18 - evil-mode support. -;; 1.8.1 - 2013/04/17 - sml/bug-report function. -;; 1.8.1 - 2013/04/17 - sml/override-theme variable. -;; 1.8.1 - 2013/04/17 - Changed install instruction to override theme settings. -;; 1.8 - 2013/04/14 - sml/mode-width can now be 'full. -;; 1.7.1 - 2012/11/17 - Perspective support. -;; 1.7 - 2012/11/14 - Fixed some modes not showing in the minor mode list - Thanks Constantin. -;; 1.7 - 2012/11/14 - Fixed infinite loop. - Thanks Constantin. -;; 1.7 - 2012/11/14 - Fixed for dired-mode. -;; 1.7 - 2012/11/14 - Added parent customize groups. -;; 1.6.2 - 2012/07/13 - Fixed mode shortenning. -;; 1.6.1 - 2012/07/12 - NEW FEATURE: Modes list now fully supports clicking. -;; 1.6.1 - 2012/07/12 - NEW FEATURE: `sml/version' constant. -;; 1.6.1 - 2012/07/12 - `sml/hidden-modes' is now a list of strings (not regexps). -;; 1.6 - 2012/07/09 - NEW FEATURE: Customizable faces for the prefix, see `sml/prefix-face-list'. -;; 1.5.4 - 2012/06/28 - Optimized regexp-replacer. -;; 1.5.3 - 2012/06/20 - Remove prefix and folder for non-files. Color the :Git prefix. -;; 1.5.2 - 2012/06/14 - Saner default widths and mode-name fix for Term. -;; 1.5.1 - 2012/06/12 - Fixed battery font for corner cases. -;; 1.5 - 2012/06/11 - Added support for display-battery-mode. See the description for more. - -;;; Code: - -(require 'cl-lib) -(require 'custom) -(require 'cus-face) -(require 'rich-minority) - -(defconst sml/version "2.10" "Version of the smart-mode-line.el package.") -(defun sml/bug-report () - "Opens github issues page in a web browser. Please send me any bugs you find, and please include your Emacs and sml versions." - (interactive) - (browse-url "https://github.com/Malabarba/smart-mode-line/issues/new") - (message "Your sml/version is: %s, and your emacs version is: %s.\nPlease include this in your report!" sml/version emacs-version)) -(defun sml/customize () - "Open the customization group for the `smart-mode-line' package." - (interactive) - (customize-group 'smart-mode-line t)) -(defun sml/customize-faces () - "Open the customization group for faces used by the `smart-mode-line' package." - (interactive) - (customize-group 'smart-mode-line-faces t)) - -(defgroup smart-mode-line '() - "Customization group for the `smart-mode-line' package." - :group 'convenience - :prefix 'sml) -(defgroup smart-mode-line-position '() - "Showing the point position in the smart mode line." - :group 'smart-mode-line - :prefix 'sml) -(defgroup smart-mode-line-path-and-prefix '() - "Showing the path, buffer-name, and prefix in the smart mode line." - :group 'smart-mode-line - :prefix 'sml) -(defgroup smart-mode-line-mode-list '() - "Showing major/minor modes in the smart mode line." - :group 'smart-mode-line - :prefix 'sml) -(defgroup smart-mode-line-others '() - "Showing other data in the smart mode line." - :group 'smart-mode-line - :prefix 'sml) - -(defgroup smart-mode-line-faces '() - "Font (face) colors for the `smart-mode-line.el' package. - -You can fully customize any of the fonts to match the color you -want. You can also set properties like bold with ':weight bold'. - -Note that, by default, smart-mode-line overrides your theme's -settings for the background and foreground color of the modeline -face. We need to override, otherwise some elements become -unreadable on lighter themes. If you'd rather configure these -unreadable colors yourself and keep your theme's settings, just -set `sml/override-theme' to nil." - :prefix 'sml - :group 'smart-mode-line - :group 'faces) - - -;;; Actual Code -(defvar erc-track-position-in-mode-line) -(defvar sml/simplified nil - "Temporary dynamic variable. Used for filling.") -(defvar sml/active-background-color) - -(defvar sml/-debug nil - "Whether debugging information should be printed.") - -(defmacro sml/-debug (fmt &rest r) - "If variable `sml/-debug' is non-nil, describe FMT. -If FMT is a string, this is essentially the same as `message'. -If FMT is anything else, this is essentially: - (message \"%s is: %s\" 'FMT FMT)" - (when (and (boundp 'sml/-debug) sml/-debug) - (if (stringp fmt) - `(apply #'message (concat "[sml/debug] " ,fmt) ,r) - `(message "[sml/debug] %s is: %s" ',fmt ,fmt)))) - -(defvar sml/shortener-func 'sml/do-shorten-directory - "Function used to shorten the directory name. - -Value is a funcallable symbol that takes two arguments: the -string to be shortened and the maximum size. This is set -automatically when `sml/shorten-directory' is changed via the -customization menu or via the `sml/toggle-shorten-directory' -function (which are the only ways you should change it).") - -(defun sml/set-shortener-func (sym val) - "Configure `sml/shortener-func' according to `sml/shorten-directory'. -Set SYM to VAL." - (set-default sym val) - (if val (setq sml/shortener-func 'sml/do-shorten-directory) - (setq sml/shortener-func 'sml/not-shorten-directory))) - -(define-obsolete-variable-alias 'sml/time-format 'display-time-format) -(define-obsolete-variable-alias 'sml/show-time 'display-time-mode) -(define-obsolete-variable-alias 'sml/override-theme 'sml/theme) - -(defcustom sml/theme 'automatic - "Defines which theme `smart-mode-line' should use. - -This is usually one of the symbols: -'automatic, 'respectful, 'dark, 'light or nil; -but it can be something else if there are other smart-mode-line -themes defined. - -Setting this to 'light and 'dark will apply some predefined -colors to the mode-line, which are designed to be easy to read. - -Setting this to nil will apply almost no colors. Use this if your -global color theme already customizes sml faces (flatui-theme is -an example). - -Setting this to 'automatic will let sml decide between 'light or -'dark or nil, to best match the global theme that is active when -`sml/setup' is called. - -Setting it to 'respectful will try to use the colors defined by -your current Emacs theme (emphasis on the \"try\"). Use this if -you color theme does NOT customize sml faces, AND if you're not -happy with 'light or 'dark. -This option will make the mode-line colors more consistent with -buffer colors (when compared to 'light or 'dark, which have fixed -colors) , but it's a bit of a shot in the dark. The result will -vary for each color theme, and you may get colors that don't read -well. - -But don't forget, ALL COLORS ARE CUSTOMIZABLE! -`sml/customize-faces' -Any color you change manually won't get affected by this -variable. - -Setting this variable via `setq' only has effect BEFORE calling -`sml/setup'. If smart-mode-line is already loaded, use - `sml/apply-theme' instead (or the customization interface)." - :type '(choice (const :tag "Automatically choose between 'light, 'dark, or nil during setup. (Default and Recommended)" automatic) - (const :tag "Don't use a theme." nil) - (const :tag "Use a dark color-theme." dark) - (const :tag "Use a light color-theme." light) - (const :tag "Respect the color-theme's colors." respectful) - (symbol :tag "Other smart-mode-line theme you installed.")) - :set 'sml/apply-theme - :initialize 'custom-initialize-default - :group 'smart-mode-line-faces :group 'smart-mode-line) - -(defcustom sml/position-percentage-format "%p" - "Format used to display position in the buffer. - -Set it to nil to hide the number." - :type 'string - :group 'smart-mode-line-position - :package-version '(smart-mode-line . "2.0")) -(put 'sml/position-percentage-format 'risky-local-variable t) - -(defcustom sml/line-number-format "%3l" - "Format used to display line number. - -Empty it or disable `line-number-mode' to hide the number." - :type 'string - :group 'smart-mode-line-position - :set 'sml/compile-position-construct - :initialize 'custom-initialize-default) -(put 'sml/line-number-format 'risky-local-variable t) - -(defcustom sml/size-indication-format "%I " - "Format to display buffer size when `size-indication-mode' is on." - :type 'string - :group 'smart-mode-line-position - :package-version '(smart-mode-line . "2.0") - :set 'sml/compile-position-construct - :initialize 'custom-initialize-default) -(put 'sml/size-indication-format 'risky-local-variable t) - -(defcustom sml/col-number-format "%2c" - "Format used to display column number. - -Empty it or disable `column-number-mode' to hide the number." - :type 'string - :group 'smart-mode-line-position - :set 'sml/compile-position-construct - :initialize 'custom-initialize-default) -(put 'sml/col-number-format 'risky-local-variable t) - -(defcustom sml/numbers-separator ":" - "Separator between line and column number. - -Since we use different faces for line and column number, you can -just set this to \"\" to save an extra char of space." - :type 'string - :group 'smart-mode-line-position) - -(defcustom sml/show-remote t - "Whether to display an \"@\" for remote buffers. -If the buffer is local, an \"-\" is displayed instead. -If this variable is nil, nothing is displayed." - :type 'boolean - :group 'smart-mode-line-others) -(put 'sml/show-remote 'safe-local-variable 'booleanp) - -(defcustom sml/show-client nil - "Whether to show an \"@\" for emacsclient frames." - :type 'boolean - :group 'smart-mode-line-others) -(put 'sml/show-client 'safe-local-variable 'booleanp) - -(defcustom sml/modified-char (char-to-string (if (char-displayable-p ?×) ?× ?*)) - "String that indicates if buffer is modified. Should be one SINGLE char." - :type 'string - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "1.16")) - -(defcustom sml/show-trailing-N t - "Whether the \"\" suffix in buffer names should be displayed in the mode-line." - :type 'boolean - :group 'smart-mode-line-path-and-prefix) -(put 'sml/show-trailing-N 'safe-local-variable 'booleanp) - -(defcustom sml/show-file-name t - "Unless nil: show file name instead of buffer name on the mode-line." - :type 'boolean - :group 'smart-mode-line-path-and-prefix) -(put 'sml/show-file-name 'safe-local-variable 'booleanp) - -(defcustom sml/fill-char ?\s - "The char to be used for filling." - :type 'char - :group 'smart-mode-line-path-and-prefix) - -(defcustom sml/replacer-regexp-list - `((,(concat "^" (if (boundp 'org-directory) (regexp-quote org-directory) "~/org/")) ":Org:") - ("^~/\\.emacs\\.d/elpa/" ":ELPA:") - ("^~/\\.emacs\\.d/" ":ED:") - ("^/sudo:.*:" ":SU:") - ("^~/Documents/" ":Doc:") - ("^~/Dropbox/" ":DB:") - ("^:\\([^:]*\\):Documento?s/" ":\\1/Doc:") - ("^~/[Gg]it/" ":Git:") - ("^~/[Gg]it[Hh]ub/" ":Git:") - ("^~/[Gg]it\\([Hh]ub\\|\\)-?[Pp]rojects/" ":Git:")) - "List of pairs of strings used (by `sml/replacer') to create prefixes. - -The first string of each pair is a regular expression, the second -is a replacement. These pairs are sequentially applied on the -file path to replace portions of it, turning them into prefixes. -For instance, \"~/.emacs.d/\" is replaced by \":ED:\", which is -shorter but easily identified. - -The replacement strings can really be anything, but to be colored -as a prefix a string must start and end with \":\" (see the -default as an example, as an exception \"~/\" is also a prefix). - -Replacement doesn't stop on first match, so you can have stacking replacements: - - (add-to-list 'sml/replacer-regexp-list '(\"^:DB:Org/\" \":Org:\") t) - -Remember that `add-to-list' adds items to the FRONT, and you'll -usually want to add them to the back (thus the t at the end). - -You can also set custom colors (faces) for these prefixes, just -set `sml/prefix-face-list' accordingly." - :type '(repeat (list regexp string)) - :group 'smart-mode-line-path-and-prefix - :package-version '(smart-mode-line . "1.22")) - -(defcustom sml/prefix-regexp '(":\\(.*:\\)" "~/") - "List of Regexps used to identify prefixes. - -A prefix is anything at the beginning of a line that matches any -of these regexps. Don't start these regexps with \"^\", the -parser applies that for you." - :type '(repeat regexp) - :group 'smart-mode-line-path-and-prefix) - -(defcustom sml/prefix-face-list '((":SU:" sml/sudo) - (":G" sml/git) - ("" sml/prefix)) - "List of (STRING FACE) pairs used by `sml/propertize-prefix'. - -After the file path is constructed, the prefix contained in it is -colored according to this list. The elements are checked one by -one and, if the prefix contains the STRING part of the pair, then -FACE is applied to it (and checking stops there)." - :type '(repeat (list string face)) - :group 'smart-mode-line-path-and-prefix) - -(defcustom sml/name-width 44 - "Minimum and maximum size of the file name in the mode-line. - -If `sml/shorten-directory' is nil, this is the minimum width. -Otherwise, this is both the minimum and maximum width. - -Alternatively, you can set the minimum and maximum widths -separately, by setting this variable to a cons cell of integers: - (MIN-WIDTH . MAX-WIDTH) -" - :type '(choice integer (cons (integer :tag "Minimum width") - (integer :tag "Maximum width"))) - :group 'smart-mode-line-path-and-prefix) - -(defcustom sml/shorten-directory t - "Should directory name be shortened to fit width? - -When the buffer+directory name is longer than -`sml/name-width': - if nil the rest of the mode-line is pushed right; - otherwise the directory name is shortened to fit." - :type 'boolean - :group 'smart-mode-line-path-and-prefix - :set 'sml/set-shortener-func) -(put 'sml/shorten-directory 'safe-local-variable 'booleanp) - -(defcustom sml/full-mode-string " +" - "String that's appended to the minor-mode list when it's full." - :type 'string - :group 'smart-mode-line-mode-list) - -(defcustom sml/shorten-mode-string " -" - "String that's appended to the minor-mode list when all modes are displayed." - :type 'string - :group 'smart-mode-line-mode-list) - -(defcustom sml/shorten-modes t - "Should modes list be shortened to fit width? - -When the modes list is longer than `sml/mode-width': - if nil the rest of the mode-line is pushed right; - otherwise the list is shortened to fit." - :type 'boolean - :group 'smart-mode-line-mode-list) -(put 'sml/shorten-modes 'safe-local-variable 'booleanp) - -(defun sml/toggle-shorten-directory (&rest val) - "Toggle the variable `sml/shorten-directory'. - -If given an argument VAL, the variable is set to the argument, -otherwise it is toggled. This can be used as an alternative to -customizing the variable with `customize-group'. Setting the -variable with `setq' will NOT work and should be avoided." - (interactive) - (sml/set-shortener-func 'sml/shorten-directory - (if val (car-safe val) - (not sml/shorten-directory)))) - -(defun sml/toggle-shorten-modes (&rest val) - "Toggle the variable `sml/shorten-modes'. - -If given an argument VAL, the variable is set to the argument, -otherwise it is toggled. This can be used as an alternative to -customizing the variable with `customize-group'. Equivalent to -setting the variable with `setq'." - (interactive) - (setq sml/shorten-modes (if val (car val) - (not sml/shorten-modes))) - (force-mode-line-update)) - -(defcustom sml/mode-width 'full - "Maximum and/or minimum size of the modes list in the mode-line. - -If it is an integer, then the modes list width is that many -characters. - -If it is the symbol `full', then the mode-list fills all the -empty space is available in the mode-line (this has the effect of -indenting right anything after the mode-list). - -If it is the symbol `right', then it behaves like `full', but the -minor-modes list is moved all the way to the right. - -If `sml/shorten-modes' is nil, this is the minimum width. -Otherwise, this is both the minimum and maximum width." - :type '(choice integer symbol) - :group 'smart-mode-line-mode-list - :package-version '(smart-mode-line . "2.4.5")) - -(defcustom sml/battery-format " %p" - "Format used to display the battery in the mode-line. - -Only relevant if using `display-battery-mode'. See that function -for the syntax." - :type 'string - :group 'smart-mode-line-others) - -(defcustom sml/modified-time-string "Modified on %T %Y-%m-%d." - "String format used for displaying the modified time. - -This is shown in the tooltip when hovering over the \"modified -file\" character (which is usually a * right before the file -name." - :type 'string - :group 'smart-mode-line-others) - -(defcustom sml/extra-filler 0 - "The number of extra filling chars to use. -It comes into play when `sml/mode-width' is set to 'full. - -This is necessary because the mode-line width (which we need but -don't have access to) is larger than `window-total-width' (which -we have access to). - -Decrease this if right indentation seems to be going too far (or -if you just want to fine-tune it)." - :type 'integer - :group 'smart-mode-line-mode-list) - -;; Face definitions -(defface sml/global '((t :inverse-video nil)) "" :group 'smart-mode-line-faces) -(defface sml/modes '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/minor-modes '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/filename '((t :inherit sml/global :weight bold)) "" :group 'smart-mode-line-faces) -(defface sml/prefix '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/read-only '((t :inherit sml/not-modified)) "" :group 'smart-mode-line-faces) -(defface sml/modified '((t :inherit sml/not-modified :foreground "Red" :weight bold)) - "" :group 'smart-mode-line-faces) -(defface sml/outside-modified '((t :inherit sml/not-modified :foreground "#ffffff" :background "#c82829")) - "" :group 'smart-mode-line-faces) - -(defface sml/line-number '((t :inherit sml/modes :weight bold)) "" :group 'smart-mode-line-faces) -(defface sml/remote '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/name-filling '((t :inherit sml/position-percentage)) "" :group 'smart-mode-line-faces) -(defface sml/position-percentage '((t :inherit sml/prefix :weight normal)) "" :group 'smart-mode-line-faces) -(defface sml/col-number '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/numbers-separator '((t :inherit sml/col-number)) "" :group 'smart-mode-line-faces) -(defface sml/client '((t :inherit sml/prefix)) "" :group 'smart-mode-line-faces) -(defface sml/not-modified '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/mule-info '((t :inherit sml/global)) "" :group 'smart-mode-line-faces) -(defface sml/sudo '((t :inherit sml/outside-modified)) "" :group 'smart-mode-line-faces) -(defface sml/git '((t :inherit (sml/read-only sml/prefix))) "" :group 'smart-mode-line-faces) -(defface sml/folder '((t :inherit sml/global :weight normal)) "" :group 'smart-mode-line-faces) -(defface sml/process '((t :inherit sml/prefix)) "" :group 'smart-mode-line-faces) -(defface sml/vc '((t :inherit sml/git)) "" :group 'smart-mode-line-faces) -(defface sml/vc-edited '((t :inherit sml/prefix)) "" :group 'smart-mode-line-faces) -(defface sml/charging '((t :inherit sml/global :foreground "ForestGreen")) "" :group 'smart-mode-line-faces) -(defface sml/discharging '((t :inherit sml/global :foreground "Red")) "" :group 'smart-mode-line-faces) -(defface sml/time '((t :inherit sml/modes)) "" :group 'smart-mode-line-faces) - -(defvar sml/-apply-theme-is-running nil "Avoid nesting in `sml/apply-theme'.") - -(defcustom sml/no-confirm-load-theme nil - "If non-nil, `sml/apply-theme' will pass the NO-CONFIRM flag to `load-theme'. -If you're having problems with Emacs always asking for permission -to load a theme (and not remembering your choice), you can set -this to t to workaround the problem. But it's recommended that -you try the problem instead." - :type 'boolean - :group 'smart-mode-line-faces - :package-version '(smart-mode-line . "2.5.2")) - -;;;###autoload -(when load-file-name - (let ((dir (file-name-as-directory (file-name-directory load-file-name)))) - (add-to-list 'custom-theme-load-path dir) - (when (file-directory-p (file-name-as-directory (concat dir "themes"))) - (add-to-list 'custom-theme-load-path - (file-name-as-directory (concat dir "themes")))))) - -(defun sml/apply-theme (theme &optional value silent) - "Apply the theme called smart-mode-line-THEME. - -THEME is usually one of the symbols: respectful, dark, or light; -but it can be something else if there are other smart-mode-line -themes defined. -See the `sml/theme' variable for the meaning of each symbol. - -This function will call `disable-theme' on any enabled themes -whose name starts with \"smart-mode-line-\", then it will call -`load-theme' on the theme called \"smart-mode-line-THEME\". - -This also sets the `sml/theme' variable, see its documentation -for more information on each value. - -The second argument (VALUE) is for internal use only, DON'T USE IT. - -Third argument SILENT prevents messages." - (interactive - (list - (intern - (completing-read - "Load smart-mode-line theme: " - (cons - 'automatic - (mapcar - (lambda (x) (replace-regexp-in-string "\\`smart-mode-line-" "" (symbol-name x))) - (cl-remove-if-not #'sml/theme-p (custom-available-themes)))))) - nil nil)) - (sml/-debug "Entering apply-theme") - (when (eq theme (intern "")) (setq theme nil)) - (sml/-debug theme) - (sml/-debug sml/theme) - (unless silent (message "[sml] %s set to %s" 'sml/theme (or value theme))) - (sml/-debug sml/-apply-theme-is-running) - (unless sml/-apply-theme-is-running - (let ((sml/-apply-theme-is-running t)) ;Avoid nesting. - ;; Set the variable - (setq-default sml/theme (or value theme)) - (sml/-debug sml/theme) - - ;; Disable any previous smart-mode-line themes. - (sml/-debug custom-enabled-themes) - (mapc (lambda (x) (when (sml/theme-p x) (disable-theme x))) - custom-enabled-themes) - (sml/-debug custom-enabled-themes) - - ;; Load the theme requested. - (sml/-debug sml/theme) - (when (eq sml/theme 'automatic) - (setq sml/theme (sml/-automatically-decide-theme))) - (sml/-debug sml/theme) - (when sml/theme - (let ((theme-name - (if (sml/theme-p sml/theme) sml/theme - (intern (format "smart-mode-line-%s" sml/theme))))) - (sml/-debug theme-name) - (load-theme theme-name sml/no-confirm-load-theme)))))) - -(defadvice enable-theme (after sml/after-enable-theme-advice (theme) activate) - "Make sure smart-mode-line themes take priority over global themes that don't customize sml faces." - (unless (or (eq theme 'user) (sml/faces-from-theme theme)) - (mapc #'enable-theme - (reverse (cl-remove-if-not #'sml/theme-p custom-enabled-themes))))) - -(defun sml/theme-p (theme) - "Return non-nil if theme named THEME is a smart-mode-line theme. -Takes symbols and strings." - (string-match "\\`smart-mode-line-" (if (symbolp theme) (symbol-name theme) theme))) - -(defvaralias 'sml/show-encoding 'sml/mule-info) - -(defcustom sml/show-eol nil - "Whether to display the buffer EOL in the mode-line." - :type 'boolean - :group 'smart-mode-line-others) -(put 'sml/show-eol 'safe-local-variable 'booleanp) - -(defcustom sml/outside-modified-char "M" - "Char to display if buffer needs to be reverted." - :type 'string - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "1.20")) - -(defvaralias 'sml/encoding-format 'sml/mule-info) -(defcustom sml/mule-info "%z" - "Format for multilingual information. Set this to nil to hide buffer encoding." - :type '(choice string (const :tag "Don't display." nil)) - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "2.0")) - -(defcustom sml/read-only-char "R" - "Displayed when buffer is readonly." - :type 'string - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "1.20")) - -(defcustom sml/show-frame-identification nil - "Whether to show frame identification or not. - -In some systems this doesn't even display anything. It's most useful -on terminals, but you might want to disable it anyway. - -Just set this to nil, and frame identification won't be displayed." - :type 'boolean - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "2.0.3")) -(put 'sml/show-frame-identification 'safe-local-variable 'booleanp) - -(defcustom sml/vc-mode-show-backend nil - "Whether to show or not the backend in vc-mode's mode-line description. - -I think most people only use one backend, so this defaults to nil. -If you want it to show the backend, just set it to t." - :type 'boolean - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "1.22")) -(put 'sml/vc-mode-show-backend 'safe-local-variable 'booleanp) - - -(defvar sml/position-construct nil "Used for recycling position information.") -(put 'sml/position-construct 'risky-local-variable t) - -(defvar sml/position-help-text nil "Help-text for position information.") -(make-variable-buffer-local 'sml/position-help-text) - -;;; Buffer Identification -(defvar sml/buffer-identification-filling nil - "Filling generated by `sml/fill-for-buffer-identification'.") -(make-variable-buffer-local 'sml/buffer-identification-filling) -(put 'sml/buffer-identification-filling 'risky-local-variable t) - -(defvar sml/buffer-identification nil - "Used for recycling buffer identification without having to recompute it.") -(make-variable-buffer-local 'sml/buffer-identification) -(put 'sml/buffer-identification 'risky-local-variable t) - -(defadvice rename-buffer (after sml/after-rename-buffer-advice ()) - "Regenerate buffer-identification after `rename-buffer'." - (sml/generate-buffer-identification)) -(defadvice set-visited-file-name (after sml/after-set-visited-file-name-advice ()) - "Regenerate buffer-identification after `set-visited-file-name'." - (sml/generate-buffer-identification)) - -(defvar sml/name-width-old nil "Used for recalculating buffer identification filling only when necessary.") -(make-variable-buffer-local 'sml/name-width-old) -(defvar sml/shorten-directory-old nil "Used for recalculating buffer identification filling only when necessary.") -(make-variable-buffer-local 'sml/shorten-directory-old) -(defun sml/generate-buffer-identification-if-necessary () - "Call `sml/generate-buffer-identification' only if `sml/name-width' has changed." - (unless (and (equal sml/name-width-old sml/name-width) - (equal sml/shorten-directory-old sml/shorten-directory)) - (setq sml/name-width-old sml/name-width) - (setq sml/shorten-directory-old sml/shorten-directory) - (sml/generate-buffer-identification)) - nil) - -(defvar sml/mode-line-client - `(sml/show-client - (:eval (if (frame-parameter nil 'client) - ,(propertize "@" 'face 'sml/client 'help-echo (purecopy "emacsclient frame")) - " "))) - "Construct that replaces `mode-line-client'.") - -(defvar sml/mode-line-buffer-identification - '("" (sml/buffer-identification - sml/buffer-identification - (:eval (sml/generate-buffer-identification)))) - "Replace the default `mode-line-buffer-identification' with our own.") - -(defvar sml/projectile-replacement-format) -(defvar sml/use-projectile-p) -(defvar sml/projectile-loaded-p nil "Non-nil if projectile has been loaded.") - -(defcustom sml/pos-id-separator " " - "Miscellaneous mode-line construct." - :type 'string) -(put 'sml/pos-id-separator 'risky-local-variable t) -(defcustom sml/pre-modes-separator " " - "Miscellaneous mode-line construct." - :type 'string) -(put 'sml/pre-modes-separator 'risky-local-variable t) -(defcustom sml/pre-id-separator "" - "Miscellaneous mode-line construct." - :type 'string) -(put 'sml/pre-id-separator 'risky-local-variable t) -(defcustom sml/pre-minor-modes-separator "" - "Miscellaneous mode-line construct." - :type 'string) -(put 'sml/pre-minor-modes-separator 'risky-local-variable t) -(defcustom sml/pos-minor-modes-separator "" - "Miscellaneous mode-line construct." - :type 'string) -(put 'sml/pos-minor-modes-separator 'risky-local-variable t) - -(defun sml/-automatically-decide-theme () - "Return the most appropriate sml theme, based on global theme." - (sml/-debug "Entering -automatically-decide-theme") - (sml/-debug (sml/global-theme-support-sml-p)) - (unless (sml/global-theme-support-sml-p) - (sml/-debug (face-background 'mode-line nil t)) - (sml/-debug (face-background 'default nil t)) - (let ((bg (ignore-errors - (or (face-background 'mode-line nil t) - (face-background 'default nil t))))) - (if (ignore-errors - (and (stringp bg) - (> (color-distance "white" bg) - (color-distance "black" bg)))) - 'dark 'light)))) - -(defun sml/-setup-theme () - "Decide what theme to use and apply it. -Used during initialization." - (sml/-debug "Entering -setup-theme") - (sml/-debug sml/theme) - (when sml/theme - (when (eq sml/theme 'automatic) - (setq sml/theme (sml/-automatically-decide-theme))) - (sml/-debug "chosen theme:") - (sml/-debug sml/theme) - (sml/apply-theme sml/theme nil :silent))) - -(defvar battery-mode-line-format) - - -;;;###autoload -(defun sml/setup (&optional arg) - "Setup the mode-line to be smart and sexy. - -ARG is ignored. Just call this function in your init file, and -the mode-line will be setup." - (interactive) - (sml/-debug "Entering setup") - (sml/-debug custom-enabled-themes) - - ;; Just a couple of useful variables - (setq sml/simplified nil) - (setq battery-mode-line-format sml/battery-format) - - ;; Activate rich-minority, and configure it for us. - (setq rm-base-text-properties - (append rm-base-text-properties '('face 'sml/minor-modes))) - - ;; Set the theme the user requested. - (sml/-setup-theme) - - ;;;; And this is where the magic happens. - ;; Remove elements we implement separately, and improve the ones not removed. - (sml/filter-mode-line-list 'mode-line-mule-info) - (setq-default mode-line-client sml/mode-line-client) - (sml/filter-mode-line-list 'mode-line-modified) - (sml/filter-mode-line-list 'mode-line-remote) - (setq-default mode-line-frame-identification - '("" (sml/show-frame-identification "%F") - sml/pre-id-separator)) - - ;; (setq-default mode-line-buffer-identification '("%b")) - - (setq-default mode-line-buffer-identification - sml/mode-line-buffer-identification) - (sml/filter-mode-line-list 'mode-line-position) - (sml/filter-mode-line-list 'mode-line-modes) - (setq-default mode-line-end-spaces nil) - - ;; Add position descriptions on the left (they were already removed - ;; from the middle). Since this is the very first symbol to be - ;; evaluated, we also use it for calculating variables that need to - ;; be updated - (setq-default mode-line-front-space '((:eval (sml/generate-buffer-identification-if-necessary)) - (sml/position-help-text - nil - (:eval (let ((sml/-this-buffer-changed-p t)) - (sml/generate-position-help)))) - (sml/position-construct - sml/position-construct - (:eval (sml/compile-position-construct))))) - - (add-hook 'after-save-hook 'sml/generate-buffer-identification) - (ad-activate 'rename-buffer) - (ad-activate 'set-visited-file-name) - (add-hook 'clone-indirect-buffer-hook 'sml/generate-buffer-identification) - ;; (ad-activate 'set-buffer-modified-p) - (add-hook 'after-change-functions 'sml/-this-buffer-changed) - (add-hook 'post-command-hook 'sml/generate-position-help) - - ;; This is to ensure fixed name width. The reason we do this manually - ;; is that some major-modes change `mode-line-buffer-identification' - ;; (so we can't fill inside the variable), and we want this - ;; symbol to be an element in `mode-line-format' for compatibility - ;; with other packages which hack into the mode-line. - - (add-to-list 'mode-line-position - '(sml/buffer-identification-filling - sml/buffer-identification-filling - (:eval (setq sml/buffer-identification-filling - (sml/fill-for-buffer-identification))))) - - ;; Remove some annoying big spaces - (setq-default mode-line-format - (mapcar - (lambda (x) (cond - ;; ((eq x 'mode-line-buffer-identification) - ;; '(:propertize mode-line-buffer-identification face sml/id)) - ((and (stringp x) (string= x " ")) - 'sml/pos-id-separator) - ((and (stringp x) (string= x " ")) - 'sml/pre-modes-separator) - (t x))) - mode-line-format)) - - ;;;; And here comes support for a bunch of extra stuff. Some of - ;;;; these are just needed for coloring. - - ;; Shell and eshell support - (add-hook 'comint-output-filter-functions 'sml/generate-buffer-identification) - (add-hook 'eshell-directory-change-hook 'sml/generate-buffer-identification) - - ;; Term support - (defadvice term-command-hook (after sml/term-advice-1 activate) - (sml/generate-buffer-identification)) - - (defadvice term-handle-ansi-terminal-messages (after sml/term-advice-2 activate) - (sml/generate-buffer-identification)) - - ;; Dired overrides the buffer-identification (which we would - ;; normally respect) but doesn't actually do anything useful with - ;; it, so we overoverride back. - (add-hook 'dired-mode-hook 'sml/set-buffer-identification) - - ;; Display time - (add-hook 'display-time-hook 'sml/propertize-time-string) - - ;; Battery support - (eval-after-load 'battery - '(defadvice battery-update (after sml/after-battery-update-advice () activate) - "Change battery color." - (when battery-mode-line-string - (setq battery-mode-line-string - (propertize battery-mode-line-string - 'face 'sml/battery))))) - - ;; Projectile support - (eval-after-load "projectile" - '(progn - (setq sml/projectile-loaded-p t) - (defcustom sml/projectile-replacement-format "[%s]" - "Format used for replacements derived from projectile." - :type 'string - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "2.4")) - (defcustom sml/use-projectile-p 'after-prefixes - "Whether we should use projectile to guess path prefixes. - -If this is non-nil, and if current buffer is inside a project (as -defined by projectile), we use the project's name as a -prefix (with the `sml/projectile-replacement-format' variable). - -If this is 'after-prefix, then this replacement will only be used -if no other prefixes (defined in `sml/replacer-regexp-list') were -found to match the current file path." - :type '(choice (const :tag "Use projectile only if current path doesn't match any prefixes." after-prefixes) - (const :tag "Use projectile before checking prefixes." before-prefixes) - (const :tag "Don't use projectile." nil)) - :group 'smart-mode-line-others - :package-version '(smart-mode-line . "2.4.1")) - (defface sml/projectile '((t :inherit sml/git)) "" :group 'smart-mode-line-faces) - (add-to-list 'sml/prefix-regexp (format (regexp-quote sml/projectile-replacement-format) ".*")) - (add-to-list 'sml/prefix-face-list - (list (format (regexp-quote sml/projectile-replacement-format) ".*") - 'sml/projectile)))) - - ;; vc-mode - (eval-after-load "vc-hooks" - '(defadvice vc-mode-line (after sml/after-vc-mode-line-advice () activate) - "Color `vc-mode'." - (when (stringp vc-mode) - (let ((noback (replace-regexp-in-string (format "^ %s" (vc-backend buffer-file-name)) " " vc-mode))) - (setq vc-mode - (propertize (if sml/vc-mode-show-backend vc-mode noback) - 'face (cond ((string-match "^ -" noback) 'sml/vc) - ((string-match "^ [:@]" noback) 'sml/vc-edited) - ((string-match "^ [!\\?]" noback) 'sml/modified)))))))) - - ;; Mew support - (eval-after-load "mew-net" - '(progn - (defgroup smart-mode-line-mew '() "Group for editing the mew-support variables." :group 'smart-mode-line) - (defcustom sml/mew-support t - "Whether to flash the mode-line when mew detects new mail." - :type 'boolean :group 'smart-mode-line-mew - :package-version '(smart-mode-line . "1.11")) - (defcustom sml/new-mail-background-color "#110000" - "When new mail arrives, mode-line background will be tinted this color. - -Only works with mew-biff. Right now it stays colored until you -read the mail, so this color should probably be something sutil. -Might implement a quick flash eventually." - :type 'color :group 'smart-mode-line-mew - :package-version '(smart-mode-line . "1.11")) - (defcustom sml/mew-biff-format (concat "%2d" (if (char-displayable-p ?✉) "✉" "M")) - "Format used for new-mail notifications if you use mew with biff." - :type 'string :group 'smart-mode-line-mew - :package-version '(smart-mode-line . "1.11")) - (defadvice mew-biff-clear (around sml/mew-biff-clear-advice activate) - "Advice used to customize mew-biff-bark to fit sml's style." - ad-do-it - (when sml/mew-support - ;; Remove the color - (set-face-attribute 'mode-line nil :background sml/active-background-color))) - (defadvice mew-biff-bark (around sml/mew-biff-bark-advice (n) activate) - "Advice used to customize mew-biff-bark to fit sml's style." - ad-do-it - (when sml/mew-support - ;; Remove the color if mail has been read. - (if (= n 0) (set-face-attribute 'mode-line nil :background sml/active-background-color) - ;; Apply color if there's mail. (mew-biff-bark 100) - (set-face-attribute 'mode-line nil :background sml/new-mail-background-color) - (setq mew-biff-string (format sml/mew-biff-format n))))))) - - (unless (and (boundp 'erc-track-position-in-mode-line) - (null erc-track-position-in-mode-line)) - (setq erc-track-position-in-mode-line t)) - - (run-hooks 'sml/after-setup-hook)) - -;;;###autoload -(defalias 'smart-mode-line-enable #'sml/setup) - -(defun sml/global-theme-support-sml-p () - "Non-nil if any of the enabled themes supports smart-mode-line." - (cl-remove-if - #'sml/theme-p - (cl-remove-if-not #'sml/faces-from-theme custom-enabled-themes))) - -(defun sml/faces-from-theme (theme) - "Return the sml faces that THEME customizes." - (cl-remove-if-not - (lambda (it) (string-match "\\`sml/" (symbol-name it))) - (mapcar #'cadr (get theme 'theme-settings)))) - -(defun sml/set-buffer-identification (&rest ignored) - "Setq the buffer-identification of this buffer back to ours. - -Currently, we only this for dired. For other modes (like info) we -respect their changes. - -Argument IGNORED is obsolete." - (setq mode-line-buffer-identification sml/mode-line-buffer-identification)) - -(defvar sml/-this-buffer-changed-p nil - "t if buffer was changed since last help-text update.") -(make-variable-buffer-local 'sml/-this-buffer-changed-p) - -(defun sml/-this-buffer-changed (&rest ignored) - "Set variable `sml/-this-buffer-changed-p' to t. -Argument IGNORED is ignored." - (setq sml/-this-buffer-changed-p t) nil) - -(defun sml/generate-position-help (&rest ignored) - "Set the string describing various buffer content information. -Argument IGNORED is ignored." - (when (and sml/-this-buffer-changed-p - (get-buffer-window (current-buffer))) - (setq sml/-this-buffer-changed-p nil) - (setq sml/position-help-text - (format-mode-line - (concat "Buffer size:\n\t%IB\n" - ;; ;; This is way too slow, unfortunately. - ;; "Number of Lines:\n\t" - ;; (int-to-string (line-number-at-pos (point-max))) - "\nmouse-1: Display Line and Column Mode Menu"))) - nil)) - -(defcustom sml/order-of-line-and-column nil - "Decide the order of line-number and column-number display. - -When both `line-number-mode' and `column-number-mode' are -enabled, this variable decides which gets displayed on the left, -and which gets displayed on the right. If either one of the modes -is not enabled, this variable has no effect (obviously). - -It can only be t or nil. - t means column-number:line-number - nil means line-number:column-number" - :type '(choice (const :tag "column-number:line-number" t) - (const :tag "line-number:column-number" nil)) - :group 'smart-mode-line-position - :package-version '(smart-mode-line . "2.4")) - -(defun sml/compile-position-construct (&optional symbol value) - "Recompile the `sml/position-construct' after one of the formats was edited. -Also sets SYMBOL to VALUE." - (when (and symbol value) (set symbol value)) - (sml/generate-position-help) - (setq sml/position-construct - `((size-indication-mode - ,(propertize sml/size-indication-format - 'face 'sml/col-number - 'help-echo 'sml/position-help-text - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map)) - (sml/order-of-line-and-column - (column-number-mode - ,(propertize sml/col-number-format - 'face 'sml/col-number - 'help-echo 'sml/position-help-text - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map)) - (line-number-mode - ,(propertize sml/line-number-format - 'face 'sml/line-number - 'help-echo 'sml/position-help-text - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map))) - (column-number-mode - (line-number-mode - ,(propertize sml/numbers-separator - 'face 'sml/numbers-separator - 'help-echo 'sml/position-help-text - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map))) - (sml/order-of-line-and-column - (line-number-mode - ,(propertize sml/line-number-format - 'face 'sml/line-number - 'help-echo 'sml/position-help-text - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map)) - (column-number-mode - ,(propertize sml/col-number-format - 'face 'sml/col-number - 'help-echo 'sml/position-help-text - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map)))))) - -(defun sml/generate-modified-status () - "Return a string describing the modified status of the buffer." - (cond - ((not (or (and (buffer-file-name) (file-remote-p buffer-file-name)) - (verify-visited-file-modtime (current-buffer)))) - (propertize sml/outside-modified-char 'face 'sml/outside-modified - 'help-echo "Modified outside Emacs!\nRevert first!")) - ((buffer-modified-p) - (propertize (if buffer-read-only - sml/read-only-char - sml/modified-char) - 'face 'sml/modified - 'help-echo (if (and (buffer-file-name) (not (file-remote-p buffer-file-name))) - (format-time-string - sml/modified-time-string - (nth 5 (file-attributes (buffer-file-name)))) - "Buffer Modified") - 'local-map '(keymap (mode-line keymap (mouse-1 . save-buffer))))) - (buffer-read-only (propertize sml/read-only-char - 'face 'sml/read-only - 'help-echo "Read-Only Buffer")) - (t (propertize " " 'face 'sml/not-modified)))) - -(defmacro sml/propertize-position (s face help) - "Propertize string S as a line/column number, using FACE and help-echo HELP." - `(propertize ,s - 'face ,face - 'help-echo ,help - 'mouse-face 'mode-line-highlight - 'local-map mode-line-column-line-number-mode-map)) - -(defun sml/propertize-time-string () - "Function to be added to `display-time-hook' to propertize the string." - (when (and (boundp 'display-time-string) (stringp display-time-string)) - (setq display-time-string - (propertize display-time-string - 'face 'sml/time)))) - -(defun sml/filter-mode-line-list (l) - "Filter some elements of L and propertize the ones not filtered. - -L must be a symbol! We assign right back to it" - (if (and (symbolp l) (listp (eval l))) - (set-default l - (remove nil (mapcar 'sml/parse-mode-line-elements (eval l)))) - (error "l must be a symbol to a list!"))) - -(defun sml/fill-for-buffer-identification () - "Return a string such that `mode-line-buffer-identification' is fixed-width. -In buffers where `mode-line-buffer-identification' is nil, we -don't do any filling. That's because the given mode probably -doesn't want any buffer-id." - (if mode-line-buffer-identification - (propertize - (make-string (max (- (or (car-safe sml/name-width) sml/name-width) - (string-width (format-mode-line mode-line-buffer-identification))) - 0) - sml/fill-char) - 'face 'sml/name-filling) - "")) - -(defun sml/generate-buffer-identification (&rest ignored) - "Return fully propertized prefix+path+buffername. -Argument IGNORED is ignored." - (setq sml/name-width-old sml/name-width) - (setq sml/buffer-identification-filling nil) - (when (or ;; Only calculate all this if it will actually be used - (equal sml/mode-line-buffer-identification mode-line-buffer-identification) - (member (cadr sml/mode-line-buffer-identification) mode-line-buffer-identification) - (member sml/mode-line-buffer-identification mode-line-buffer-identification)) - (setq sml/buffer-identification - (let* ((dir (sml/replacer (abbreviate-file-name (sml/get-directory)))) - (sml/use-projectile-p (unless (or (not sml/projectile-loaded-p) - (and (buffer-file-name) - (file-remote-p (buffer-file-name)))) - sml/use-projectile-p)) - (prefix (sml/get-prefix dir)) - (bufname (sml/buffer-name)) - (dirsize (max 0 (- (abs (or (cdr-safe sml/name-width) sml/name-width)) - (string-width prefix) (string-width bufname)))) - (dirstring (funcall sml/shortener-func dir dirsize))) - - (propertize (concat (sml/propertize-prefix (replace-regexp-in-string "%" "%%" prefix)) - (propertize (replace-regexp-in-string "%" "%%" dirstring) 'face 'sml/folder) - (propertize (replace-regexp-in-string "%" "%%" bufname) 'face 'sml/filename)) - 'help-echo (format "%s\n\nmouse-1: Previous buffer\nmouse-3: Next buffer" - (or (buffer-file-name) (buffer-name))) - 'mouse-face 'mode-line-highlight - 'local-map mode-line-buffer-identification-keymap))))) - -(defun sml/parse-mode-line-elements (el) - "Propertize or delete EL. - -To be used in mapcar and accumulate results." - (cond - ;; These are implemented separately - ((member el '("%[" "%]" "%1+" "(" ")" (t erc-modified-channels-object) - (:eval (if (display-graphic-p) " " "-")) - (:eval (unless (display-graphic-p) "-%-")) - (:eval (mode-line-frame-control)))) - nil) - ((member (car-safe el) '(line-number-mode column-number-mode size-indication-mode current-input-method)) nil) - ;; mode-line-remote - ((and (stringp el) (string= el "%1@")) - `(sml/show-remote - (:propertize ,el face sml/remote))) - ;; mode-line-client - ((equal el '("" (:propertize ("" (:eval (if (frame-parameter nil 'client) "@" ""))) - help-echo "emacsclient frame"))) - `(sml/show-client - (:eval (if (frame-parameter nil 'client) - ,(propertize "@" 'face 'sml/client 'help-echo (purecopy "emacsclient frame")) - " ")))) - - ;; mode-line-modified - ((and (stringp el) (string-match "%[0-9-]*\\*" el)) - '(:eval (sml/generate-modified-status))) - - ;;;; mode-line-position - ;; Color the position percentage - ((sml/is-%p-p el) - `(sml/position-percentage-format - (-3 (:propertize (:eval sml/position-percentage-format) - local-map ,mode-line-column-line-number-mode-map - mouse-face mode-line-highlight - face sml/position-percentage - help-echo "Buffer Relative Position\n\ -mouse-1: Display Line and Column Mode Menu")))) - - ;;;; mode-line-mule-info - ;; Partially hide some MULE info - ((and (stringp el) (string-match "\\s-*%[-0-9]*z" el)) - `(sml/mule-info ((1 (:propertize - (current-input-method - ("" current-input-method-title) - " ") - face sml/mule-info - help-echo (concat - ,(purecopy "Current input method: ") - current-input-method - ,(purecopy "\n\ -mouse-2: Disable input method\n\ -mouse-3: Describe current input method")) - local-map ,mode-line-input-method-map - mouse-face mode-line-highlight)) - (:propertize (:eval sml/mule-info) - face sml/mule-info - help-echo mode-line-mule-info-help-echo - mouse-face mode-line-highlight - local-map ,mode-line-coding-system-map)))) - ;; Make EOL optional - ((equal el '(:eval (mode-line-eol-desc))) - '(sml/show-eol (:eval (mode-line-eol-desc)))) - - ;;;; mode-line-modes - ;; Color the mode line process - ((or (equal el '("" mode-line-process)) - (equal (car (cdr-safe el)) '("" mode-line-process))) - `(:propertize ("" mode-line-process) face sml/process)) - ;; Color the mode name, without changing other properties - ((and (listp el) - (equal (car el) :propertize) - (equal (cadr el) '("" mode-name))) - (setf (cadr el) '("" "%[" mode-name "%]")) - (append el '(face sml/modes))) - ;; Completely replace the minor modes (so we can truncate) - ((and (listp el) - (equal (car el) :propertize) - (equal (cadr el) '("" minor-mode-alist))) - '(:eval (sml/generate-minor-modes))) - - ;; ;;; Propertize misc-info - ;; ((memq (car-safe el) '(which-func-mode global-mode-string)) - ;; `(:eval (add-text-properties (format-mode-line ',el)))) - - ;; If it's something we don't recognize, just leave it as-is. - (t el))) - -(defun sml/is-%p-p (x) - "Non-nil if X matches \"%p\" in a very subjective sense." - (or (and (listp x) - (cl-remove-if-not - (lambda (y) (string-match ".*%p.*" y)) - (cl-remove-if-not #'stringp x))) - (and (stringp x) - (string-match ".*%p.*" x)))) - -(defun sml/buffer-name () - "Return either buffer name or file name to be shown on the mode-line. -Uses `sml/show-file-name' to decide between the two. - -Unless `sml/show-trailing-N' is nil, prevents the \"\" (used in -duplicated buffer names) from being displayed." - (cond ((buffer-base-buffer) - (buffer-name)) - ((and sml/show-file-name (buffer-file-name)) - (file-name-nondirectory (buffer-file-name))) - ((derived-mode-p 'dired-mode) - (file-name-nondirectory (directory-file-name default-directory))) - (sml/show-trailing-N - (buffer-name)) - (t (replace-regexp-in-string "<[0-9]+>$" "" (buffer-name))))) - -(defun sml/fill-width-available () - "Return the size available for filling." - (max 0 - (+ sml/extra-filler - (- (window-total-width) - (let ((sml/simplified t)) - (string-width (format-mode-line mode-line-format))))))) - -(defconst sml/propertized-shorten-mode-string - '(:propertize sml/shorten-mode-string - face sml/minor-modes - help-echo "mouse-1: Shorten minor modes" - local-map (keymap (mode-line keymap (mouse-1 . sml/toggle-shorten-modes))) - mouse-face mode-line-highlight)) -(defconst sml/propertized-full-mode-string - '(:propertize sml/full-mode-string - face sml/minor-modes - help-echo "mouse-1: Show all modes" - local-map (keymap (mode-line keymap (mouse-1 . sml/toggle-shorten-modes))) - mouse-face mode-line-highlight)) - -(defun sml/count-occurrences-starting-at (regex string start) - "Count occurrences of REGEX in STRING starting at index START." - (if (string-match regex string start) - (+ 1 (sml/count-occurrences-starting-at regex string (match-end 0))) - 0)) - -;;; Patch, in case the user is using the wrong variable. -(when (boundp 'sml/hidden-modes) - (message "[smart-mode-line] Warning: `sml/hidden-modes' is obsolete, use `rm-blacklist' instead") - (setq rm-blacklist sml/hidden-modes)) -(define-obsolete-variable-alias 'sml/hidden-modes 'rm-blacklist) - -(defun sml/generate-minor-modes () - "Extracts all rich strings necessary for the minor mode list." - (if sml/simplified - "" - (let* (;; The minor-mode-alist - (nameList (rm--mode-list-as-string-list)) - ;; The size available - (size (max 0 - (- (if (member sml/mode-width '(full right)) - ;; Calculate how much width is available - (sml/fill-width-available) - ;; or use what the user requested. - sml/mode-width) - (string-width (format-mode-line - 'sml/pre-minor-modes-separator)) - (string-width (format-mode-line - 'sml/pos-minor-modes-separator))))) - ;; Used for counting size. - (finalNameList (mapconcat 'identity nameList "")) - needs-removing filling) - - ;; Calculate whether truncation is necessary. - (when (and sml/shorten-modes (> (string-width finalNameList) size)) - ;; We need to remove 1+ "the number of spaces found". - (setq needs-removing - (1+ - (sml/count-occurrences-starting-at - " " finalNameList - (- size (string-width sml/full-mode-string)))))) - ;; Add truncation string if necessary - (when needs-removing - (setcdr (last nameList (1+ needs-removing)) - (list t sml/propertized-full-mode-string))) - ;; If we're not shortenning, add " -" at the end. - (unless sml/shorten-modes - (add-to-list 'nameList sml/propertized-shorten-mode-string t)) - - ;; Padding - (setq filling (- size (string-width (format-mode-line nameList)))) - (setq filling (make-string (max 0 filling) sml/fill-char)) - - (if (eq sml/mode-width 'right) - (list (propertize filling 'face 'sml/modes) - 'sml/pre-minor-modes-separator nameList - 'sml/pos-minor-modes-separator) - (list "" 'sml/pre-minor-modes-separator nameList - 'sml/pos-minor-modes-separator filling))))) - -(defun sml/propertize-prefix (prefix) - "Set the color of PREFIX according to its contents." - (cl-loop for pair in sml/prefix-face-list - if (string-match (car pair) prefix) - return (propertize prefix 'face (car (cdr pair))))) - -(defun sml/get-directory () - "Decide if we want directory shown. If so, return it." - (abbreviate-file-name - (cond - ;; In email attachments, buffer-file-name is non-nil, but - ;; file-name-directory returns nil - ((buffer-file-name) (or (file-name-directory (buffer-file-name)) "")) - ((eq major-mode 'dired-mode) - (replace-regexp-in-string "/[^/]*/$" "/" default-directory)) - ((and (symbolp major-mode) - (member major-mode '(shell-mode eshell-mode term-mode))) - default-directory) - ;; In indirect buffers, buffer-file-name is nil. The correct value is - ;; retrieved from the base buffer. - ((buffer-base-buffer) - (with-current-buffer (buffer-base-buffer) (sml/get-directory))) - (t "")))) - -(defun sml/set-battery-font () - "Set `sml/battery' face depending on battery state." - (let ((data (and (boundp 'battery-status-function) - battery-status-function - (funcall battery-status-function)))) - (if (string-equal "AC" (cdr (assoc 76 data))) - (copy-face 'sml/charging 'sml/battery) - (copy-face 'sml/discharging 'sml/battery)))) - -(defadvice battery-update (before sml/set-battery-font activate) - "Fontify the battery display." - (sml/set-battery-font)) - -(defun sml/replacer (in) - "Run on string IN the replacements from `sml/replacer-regexp-list'. -Runs first on the given path, and if that doesn't have any affect, -runs them again on a version of the given path with all symlinks -expanded via `file-truename'. If neither run succeeds in making -any replacements, returns the path originally given. - -Used by `sml/strip-prefix' and `sml/get-prefix'." - ;; First try replacing on the original path - (if (string= in "") - in - (sml/replacer-raw in))) - -(defun sml/replacer-raw (in) - "Run on the string IN the replacements from `sml/replacer-regexp-list'. - -If projectile is loaded, also performs replacements specified by -project name first." - (let ((out in) - proj) - ;; Maybe try projectile - (when (and sml/projectile-loaded-p - (eq sml/use-projectile-p 'before-prefixes)) - (setq out (sml/perform-projectile-replacement out))) - ;; Try regular replacements - (when (string= out in) - (dolist (cur sml/replacer-regexp-list) - (setq out (replace-regexp-in-string (car cur) (car (cdr cur)) out)))) - ;; Try truename replacements - (when (string= out in) - (let* ((true-in (abbreviate-file-name (file-truename in))) - (true-out true-in)) - (dolist (cur sml/replacer-regexp-list) - (setq true-out (replace-regexp-in-string - (car cur) (car (cdr cur)) true-out))) - (unless (string= true-in true-out) - (setq out true-out)))) - ;; Maybe try projectile later - (when (and sml/projectile-loaded-p - (eq sml/use-projectile-p 'after-prefixes) - (string= out in)) - (setq out (sml/perform-projectile-replacement out))) - out)) - -(declare-function projectile-project-p "projectile") -(declare-function projectile-project-name "projectile") -(defun sml/perform-projectile-replacement (in) - "If path IN is inside a project, use its name as a prefix." - (let ((proj (projectile-project-p))) - (if (stringp proj) - (let* ((replacement - (format sml/projectile-replacement-format - (projectile-project-name))) - (short (replace-regexp-in-string - (concat "^" (regexp-quote (abbreviate-file-name proj))) - replacement - in))) - (if (string= short in) - (let* ((true-in (abbreviate-file-name (file-truename in))) - (true-short - (replace-regexp-in-string - (concat "^" (regexp-quote (abbreviate-file-name (file-truename proj)))) - replacement true-in))) - (if (string= true-in true-short) in true-short)) - short)) - in))) - -(defun sml/regexp-composer (getter) - "Prepare the actual regexp using `sml/prefix-regexp'. -If GETTER is non-nil, result regexp also accepts empty match." - (let ((left "^\\(") - (right (if getter "\\|\\).*" "\\)"))) - (if (stringp sml/prefix-regexp) - (if (string-match "\\(" sml/prefix-regexp) - sml/prefix-regexp - (concat left sml/prefix-regexp right)) - (concat left (mapconcat 'identity sml/prefix-regexp "\\|") right)))) - -(defun sml/strip-prefix (path) - "Remove prefix from string PATH. - -A prefix is anything at the beginning of the line that matches a -regexp in `sml/prefix-regexp'." - (replace-regexp-in-string (sml/regexp-composer nil) "" path)) - -(defun sml/get-prefix (path) - "Get prefix from string PATH. - -A prefix is anything at the beginning of the line that matches a -regexp in `sml/prefix-regexp'." - (replace-regexp-in-string (sml/regexp-composer t) "\\1" path)) - -(defun sml/not-shorten-directory (dir ml) - "Return DIR, abbreviated and prefixed. -ML isn't used." - (sml/strip-prefix dir)) - -(defcustom sml/directory-truncation-string (if (char-displayable-p ?…) "…/" ".../") - "String used when truncating part of the file path. -Set this to nil or an empty string if you don't want any -indication of a truncated path." - :type 'string - :group 'smart-mode-line - :package-version '(smart-mode-line . "2.10")) - -(defun sml/do-shorten-directory (dir max-length) - "Show up to MAX-LENGTH characters of a directory name DIR." - (let ((longname (sml/strip-prefix dir))) - ;; If it fits, return the string. - (if (<= (string-width longname) max-length) longname - ;; If it doesn't, shorten it - (let ((path (reverse (split-string longname "/"))) - (output "")) - (when (and path (equal "" (car path))) - (setq path (cdr path))) - (let ((max (- max-length (string-width sml/directory-truncation-string)))) - ;; Concat as many levels as possible, leaving 4 chars for safety. - (while (and path (<= (string-width (concat (car path) "/" output)) - max)) - (setq output (concat (car path) "/" output)) - (setq path (cdr path)))) - ;; If we had to shorten, prepend .../ - (when path - (setq output (concat sml/directory-truncation-string output))) - output)))) - -(provide 'smart-mode-line) -;;; smart-mode-line.el ends here diff --git a/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.elc b/emacs/.emacs.d/elpa/smart-mode-line-20171013.849/smart-mode-line.elc deleted file mode 100644 index cab24a904efe562213d33a8c506fa34fac560adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49431 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 -;; Maintainer: Matus Goljer -;; Created: 14 July 2016 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens -;; -;; This file is not part of GNU Emacs. -;; -;;; License: -;; -;; This file is part of Smartparens. -;; -;; Smartparens 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. -;; -;; Smartparens 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 Smartparens. If not, see . -;; -;;; Commentary: -;; -;; This file provides some additional configuration for Clojure mode. To use -;; it, simply add: -;; -;; (require 'smartparens-clojure) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;;; Code: - -(require 'smartparens) - -(defvar sp-clojure-prefix "\\(?:[@`'#~,_?^]+\\)" - "Prefix used in `sp-sepx-prefix' for clojure modes.") - -(dolist (mode '(clojure-mode clojurescript-mode clojurec-mode cider-repl-mode)) - (add-to-list 'sp-sexp-prefix `(,mode regexp ,sp-clojure-prefix))) - -;; Match "`" with "`" in strings and comments -(sp-with-modes sp-clojure-modes - (sp-local-pair "`" "`" - :when '(sp-in-string-p - sp-in-comment-p) - :unless '(sp-lisp-invalid-hyperlink-p))) - -(provide 'smartparens-clojure) -;;; smartparens-clojure.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-clojure.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-clojure.elc deleted file mode 100644 index 360c927ba08a44e9aa751b77fab9fb0947ce0e5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965 zcmbtSO>Yx15Y3Htxxk4JAu%L~?m`@8caw%Dhqj7xsKfyYZrws$+vys-wy~Ww<-l)e zc9WnWxOJtmHS?a|eC$kSAEr-QtyVOdOkip%E0y4lBQ?w_$~>%u^U`R@hP}L(HrTBU zB~Ycn*dQzUlLjRCUeth}OX*>OIk_@2vY15nNdhd+7JlU{c6 zj|MlWp-lj0bf8FHh6Q<#5lzlNO)oBhmDEudu*hzco@x%>0HYeN1t>%RO0sRngP=}H z;UJVq%<@fM9KyZ6x`6wBQ53~a{8&mS;K*0h1xuaKK8ZSK!wfz;v5@O}w9V+|-V!hD zn%E|O1PkMUDf4ZK&nv@)@4bv-E*2~50J&ReONVw*#HZuSv-wfySNH4bm#cS0k+dQ1 zyoMeO@;phR`1&pg!cYp?d4Gs@{Itl@^jVSh^XIL@vqu;j6?xh}z#}d6tY{P|U;F;HPya#9~mmZ^y-aM$^Bt@R}(b8A=Y}AI!x&2CNN%VCA@Els9&>JR7p -;; Maintainer: Matus Goljer -;; Created: 30 Jan 2013 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This is a default configuration for smartparens package. If you -;; wish to set up everything by yourself, you can instead require -;; smartparens directly. - -;; However, some configuration is always loaded by default, most -;; notably the built-in list of supported pairs. If you want to erase -;; this list, simply use (setq sp-pairs nil) and then add your own -;; pairs. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp-lisp-invalid-hyperlink-p (id action context) - "Test if there is an invalid hyperlink in a Lisp docstring. -ID, ACTION, CONTEXT." - (when (eq action 'navigate) - ;; Ignore errors due to us being at the start or end of the - ;; buffer. - (ignore-errors - (or (and (looking-at "\\sw\\|\\s_") - (save-excursion - (backward-char 2) - (looking-at "\\sw\\|\\s_"))) - (and (save-excursion - (backward-char 1) - (looking-at "\\sw\\|\\s_")) - (save-excursion - (forward-char 1) - (looking-at "\\sw\\|\\s_"))))))) - -;; emacs is lisp hacking enviroment, so we set up some most common -;; lisp modes too -(sp-with-modes sp-lisp-modes - ;; disable ', it's the quote character! - (sp-local-pair "'" nil :actions nil)) - -(sp-with-modes (-difference sp-lisp-modes sp-clojure-modes) - ;; also only use the pseudo-quote inside strings where it serve as - ;; hyperlink. - (sp-local-pair "`" "'" - :when '(sp-in-string-p - sp-in-comment-p) - :unless '(sp-lisp-invalid-hyperlink-p) - :skip-match (lambda (ms mb me) - (cond - ((equal ms "'") - (or (sp-lisp-invalid-hyperlink-p "`" 'navigate '_) - (not (sp-point-in-string-or-comment)))) - (t (not (sp-point-in-string-or-comment))))))) - -;; Unfortunately emacs devs in their glorious wisdom decided to -;; make @ no longer have prefix syntax, it is now a symbol... because -;; apparently its use in symbols is so frequent. Anyway, since we -;; can't really change that, let's use a regexp based solution -(add-to-list 'sp-sexp-prefix (list 'emacs-lisp-mode 'regexp "\\(?:['`]*,@?\\|[',`]\\)")) - -;; TODO: this should only be active in docstring, otherwise we want -;; the regexp completion \\{\\}. To handle this feature, we must -;; allow multiple pairs on same opening (therefore, the unique ID must -;; become the opening and closing pair) -(sp-local-pair 'emacs-lisp-mode "\\\\{" "}" :when '(sp-in-docstring-p)) - -;; NOTE: Normally, `sp-local-pair' accepts list of modes (or a single -;; mode) as a first argument. The macro `sp-with-modes' adds this -;; automatically. If you want to call sp-local-pair outside this -;; macro, you MUST supply the major mode argument. - -(eval-after-load 'clojure-mode '(require 'smartparens-clojure)) -(eval-after-load 'elixir-mode '(require 'smartparens-elixir)) -(eval-after-load 'enh-ruby-mode '(require 'smartparens-ruby)) -(eval-after-load 'ess '(require 'smartparens-ess)) -(eval-after-load 'haskell-interactive-mode '(require 'smartparens-haskell)) -(eval-after-load 'haskell-mode '(require 'smartparens-haskell)) -(--each sp--html-modes - (eval-after-load it '(require 'smartparens-html))) -(eval-after-load 'latex '(require 'smartparens-latex)) -(eval-after-load 'lua-mode '(require 'smartparens-lua)) -(eval-after-load 'markdown-mode '(require 'smartparens-markdown)) -(--each '(python-mode python) - (eval-after-load it '(require 'smartparens-python))) -(eval-after-load 'org '(require 'smartparens-org)) -(eval-after-load 'racket-mode '(require 'smartparens-racket)) -(eval-after-load 'ruby-mode '(require 'smartparens-ruby)) -(eval-after-load 'rust-mode '(require 'smartparens-rust)) -(eval-after-load 'scala-mode '(require 'smartparens-scala)) -(eval-after-load 'tex-mode '(require 'smartparens-latex)) -(eval-after-load 'text-mode '(require 'smartparens-text)) -(eval-after-load 'tuareg '(require 'smartparens-ml)) -(eval-after-load 'fsharp-mode '(require 'smartparens-ml)) -(--each '(js js2-mode) - (eval-after-load it '(require 'smartparens-javascript))) -(provide 'smartparens-config) - -;;; smartparens-config.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-config.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-config.elc deleted file mode 100644 index f24caaf1b0fa835796e55f680623f2bf300e8123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3381 zcmbtW+iu%N5Y=O%qJAil7Ddo>Dz~*1n1V=(RAQru9mQ>31j$2PpnxgFYjS0+&0D#Y zFTMPG&n!h*Y>)>w0w^wb=bSS$J3Hk5(d+3Kold8_zrRn@EXh?YBlDnAI!Z*S=~@h-l?M9Ug5^+pfUaCa>DM}dVVb?64ER?1>cxb7mrsysei3%yoLR}Urz0kW@ zEp$mDieyA<9sBvvdHxG3gz3sH!$gp<2QUZfG} zj6#vpxuiG~4UttanxrUVB?~GSFm&8X7fJZ2A3N}|zizkNFXSIfRY=;=i73ik6f)I= z?)Jemn@%J$r{?fm!T_0u`zpN_v5IJMmrF#IUU5@fCXf6fb3wc`(sP`anNA?eaGxD4c zhK@brn~Q7w4QAcPoxrgjJbFtEM(ec!7X4wp=)b?{trsW%SsVd6smMTxagR<{ex>4C zU5HXrUlv7H46yy#6-v$$CG~H@@!{y_`vjd=GfB$fW za*z-QrVh*;m^uDY&|9Sk2r~_o%W^PrZ6k*Pa4vA}xHdO4U~v7$48Y^j=FAvgkDbO0 zc*YH$F?hx`&m7~)SMbSxa=`nTbhZu-o*c3dTln`@?1N8F9&H^QvfbxwH~y{jlx<)E zMX#agLD6d{dQkLgMb~4mSDG(bGjLqLv-NUA*58zUS;?~L7?)ow`%v~9%086+hO!T3 zf33{^`cR)Vay9|aq`@-*&!oXK0nentGeK#N>{p$QT;ur&l|Hh6tY3h!-ZuhWVEcpEf=T^%+i3zM8i8syk-GIJ;aH(t2;f zT9iq=npPzaeVr)?IfC#b4q00ZBP~tC+suRaB$#| zI?l+*+s3s2h^Kve!TGo!Av56NI5@HoH8~Dt-9z57X`U&#uF^WFtUzNh@yuvE<5!qf zW=vSJwU)Pl6mqU^N%G6HlH!z8Auq7XZK(fZ?{w#E_H_5)1^UtH&hFVP2nIb~3WC3I z|EE`{a{bce>`8QaOU&`A!`_I9Hg^<>;tlE{Vs5f_T@Lk|WaC9rR|5LpjAX2CRbh6& z4Mhd37}AAREYI&+b1%_-PVX*kNxQeoyv^7BuG%Wr6u3X@2%%rUv58A|1K@3$^ zT(m*L+`zE;SF&s!MFp!EKB|6;rT!o402ytKF57+&4a(qAI;}&$uOI%5YYk^mrM<+b zDfVp7G(c6>qt!%xbB(Wg^nPxb?a}>9O_$m+@K!Z=DXxVM3zb)4 -;; Maintainer: Matúš Goljer -;; Version: 0.0.1 -;; Created: 15th January 2017 -;; Keywords: languages - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License -;; as published by the Free Software Foundation; either version 3 -;; of the License, or (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: - -;;; Code: - -(require 'smartparens) - -(--each '(elixir-mode) - (add-to-list 'sp-sexp-suffix (list it 'regexp ""))) - -(defun sp-elixir-def-p (id) - "Return non-nil if the \"do\" keyword is part of definition. - -ID is the opening delimiter. - -Definitions are the constructions of the form defmodule-do-end, -def-do-end and similar pairs." - (save-excursion - (when (equal "do" id) - (back-to-indentation) - (looking-at (regexp-opt '( - "defmodule" - "defmacro" - "defmacrop" - "quote" - "def" - "defp" - "if" - "unless" - "case" - "cond" - "with" - "for" - "receive" - "try" - )))))) - -(defun sp-elixir-skip-def-p (ms mb me) - "Test if \"do\" is part of definition. -MS, MB, ME." - (sp-elixir-def-p ms)) - -(defun sp-elixir-do-block-post-handler (id action context) - "Insert \"do\" keyword and indent the new block. -ID, ACTION, CONTEXT." - (when (eq action 'insert) - (let ((m (make-marker))) - (save-excursion - (forward-word) ;; over the "end" - (move-marker m (point))) - (save-excursion (newline)) - (save-excursion (insert " do")) - (indent-region (line-beginning-position) m) - (move-marker m nil nil)))) - -(defun sp-elixir-empty-do-block-post-handler (id action context) - "Insert empty \"do\" keyword and indent the new block. - -This is used for receive-do-end expression. -ID, ACTION, CONTEXT." - (when (eq action 'insert) - (let ((m (make-marker))) - (save-excursion - (forward-word) ;; over the "end" - (move-marker m (point))) - (save-excursion - (forward-line -1) - (end-of-line) - (insert " do")) - (save-excursion (newline)) - (indent-region (line-beginning-position) m) - (indent-according-to-mode) - (move-marker m nil nil)))) - -(sp-with-modes 'elixir-mode - (sp-local-pair "do" "end" - :when '(("SPC" "RET" "")) - :skip-match 'sp-elixir-skip-def-p) - (sp-local-pair "def" "end" - :when '(("SPC" "RET" "")) - :post-handlers '(sp-elixir-do-block-post-handler) - :unless '(sp-in-comment-p)) - (sp-local-pair "defp" "end" - :when '(("SPC" "RET" "")) - :post-handlers '(sp-elixir-do-block-post-handler) - :unless '(sp-in-comment-p)) - (sp-local-pair "defmodule" "end" - :when '(("SPC" "RET" "")) - :post-handlers '(sp-elixir-do-block-post-handler) - :unless '(sp-in-comment-p)) - (sp-local-pair "fn" "end" - :when '(("SPC" "RET" "")) - :post-handlers '("| ")) - (sp-local-pair "if" "end" - :when '(("SPC" "RET" "")) - :post-handlers '(sp-elixir-do-block-post-handler) - :unless '(sp-in-comment-p)) - (sp-local-pair "unless" "end" - :when '(("SPC" "RET" "")) - :post-handlers '(sp-elixir-do-block-post-handler) - :unless '(sp-in-comment-p)) - (sp-local-pair "case" "end" - :when '(("SPC" "RET" "")) - :post-handlers '(sp-elixir-do-block-post-handler) - :unless '(sp-in-comment-p)) - (sp-local-pair "receive" "end" - :when '(("RET" "")) - :post-handlers '(sp-elixir-empty-do-block-post-handler)) - ) - -(provide 'smartparens-elixir) -;;; smartparens-elixir.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-elixir.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-elixir.elc deleted file mode 100644 index 4e63d91bc809ff9710b5298b26b8b9d3d63746e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3227 zcmcImO>f&q5cRFLfC9~_X)m49MJg4h;3X;ft8L;sJ{V|{BG#cmXrMH?iWef640q*^ z!a)Ce-z+IxO6;m}5CNo?oY~o#d2eR8cli6k*DEV4oxQz1Iw*@u*O4DJHq=wFA zZB(f#81%!waIy<>SVEP>=9GxjcW7wgok%qD>ofImitW1rqm40hB zAgzt1B+Fz*H|L0*ez5a_jjV(XU0O;@Z4)R@?bzSO8}08O9~>P~dY05lYT@LDJ3i4F znUc~()2XDqOcoAlgE1tNI#;qLdj`cIY|cdzKIz8}eCn^$>2y!8tn|||ljOzWW{4~L zJ`Tht76V+v$9NFm!~sO!%G$GU@op;)A=kJIT)|=N@rK^&=&QAT)_w%-C?2o;1lnokfOIqK}6#!9|YWZ%eYDuO@YFj0>)P}k;SC^{x3pmuHO~%c)rSG7 zx9NDSF0uVBp2+h~XxQtlKNH&#y_R-bYloOtIjJ#nj=-|gqlvt_C~I)Q5YDnxjwzF4 zr4{oDkQ_Z{5v!M#)Zh-pIS2=|A$@+MY6zY>J+K5Uo2HJCY>zjO%er902w<8^KP!Ey zvyBekv}mJy3|=5_prd> z?sd@!)4HslvYex8G%Eb@D@2UDg8KElX=&L?EmNt^d1dP>+^0I1#$dt4jBS7{pzit) z)Tf~ky%UBn+M$tTVvHNt@4@NC@dmy44cFm)X)_a5`8T;M3>BwTfJ{tpu?lWGKH~j* znZET&Y!0>>r-s{fq>Th!7C6KZHYs(OYk5JZd6`c7V9^HcAB>J(z1*OKS1(70e~#|+ z6Vz~<{Hiq8M{CG(^auwxp~)~*+=t|)h3|}f@C(Dkp|FKq1e?Pqy+Z8F@+*tVUj5%JcU<2GL(ugzE;%#<$GBOI zp)u58oU81QfW$e$HXZ_u_y}OG7z$4OKkZ@$P6O&z3mmsuG}#$c+-#lXL74fXg=+?0 z!{8;b&A?646y1{nMLXf{Jcs9Cu+4bBH%i1~1n63p8!C8k^928Hemwc24V_hZkbu8V zg=sCYMc`Rrix@sxn^(o|nQFl4foi~W2&zG_po(g^Rb^|e$`)C5(P}VfHEgYhV!=mr z-5YBm`-dxReGCT+2ZzHsRgM;_5nIKS<;Ja(E|^Dvz}+PyfFnz~)@_>TjRyw`^#+<%tmDhE64 zuU@Z5yRNMkiA~Su8s}WE_0V#?B{t?e9cKMp1HP-|aA-3)oTk$FN+}AAF~34X#A(%% z. - -;;; Commentary: -;; -;; This file provides some additional configuration for ESS. To use -;; it, simply add: -;; -;; (require 'smartparens-ess) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;;; Code: - -(require 'smartparens) -(require 'rx) - - -;; avoid traveling commas when slurping -;; (|a, b), c ---> (|a, b, c) -(dolist (mode '(ess-mode inferior-ess-mode)) - (add-to-list 'sp-sexp-suffix (list mode 'regexp ""))) - -;; `sp-sexp-prefix' for ESS -(add-to-list 'sp-sexp-prefix - (list 'ess-mode 'regexp - (rx (zero-or-more (or word (syntax symbol)))))) - -;; slurping follows Google's R style guide -;; see https://google.github.io/styleguide/Rguide.xml -(defun sp-ess-pre-handler (id action context) - "Remove spaces before opening parenthesis in a function call. -Remove redundant space around commas. -ID, ACTION, CONTEXT." - (when (equal action 'slurp-forward) - (let ((sxp (sp-get-thing 'back))) - (save-excursion - (goto-char (sp-get sxp :beg-prf)) - ;; (|) x ---> (x) - (when (looking-back (rx (syntax open-parenthesis) - (one-or-more space))) - (cycle-spacing 0 nil 'single-shot)) - (cond - ;; (|)if(cond) ---> (|if (cond)) - ((member (sp-get sxp :prefix) '("if" "for" "while")) - (goto-char (sp-get sxp :beg)) - (cycle-spacing 1 nil 'single-shot)) - ;; (|)v [,2] <- if(x > 1) ---> (v[,2] <- if (x > 1)) - ((and - (member (sp-get sxp :op) '("[" "(")) - (equal (sp-get sxp :prefix) "") - (looking-back - (rx (and (not-char "%" ",") - (not (syntax close-parenthesis))) - (one-or-more space))) - (not (member - (save-excursion - (sp-backward-sexp) - (thing-at-point 'word 'noprop)) - '("if" "for" "while")))) - (cycle-spacing 0 nil 'single-shot)) - ;; (|[...])%in% ---> ([...] %in%|) - ((or (looking-at "%") (looking-back "%")) - (just-one-space)) - ;; (|)a , b, c ---> (|a, b, c) - ((looking-back - (rx (zero-or-more space) "," (zero-or-more space)) - (line-beginning-position) 'greedy) - (replace-match ", ")))))) - (when (equal action 'slurp-backward) - (let ((sxp (sp-get-thing))) - (save-excursion - (goto-char (sp-get sxp :end)) - ;; x (|) ---> (x) - (when (looking-at (rx (one-or-more space) - (syntax close-parenthesis))) - (cycle-spacing 0 nil 'single-shot)) - ;; if(cond){} (|) ---> (if (cond) {}|) - (cond ((member (sp-get sxp :prefix) '("if" "for" "while")) - (goto-char (sp-get sxp :beg)) - (cycle-spacing 1 nil 'single-shot)) - ;; for style reasons there should be a space before curly - ;; brackets and binary operators - ((and (member (sp-get sxp :op) '("{" "%")) - (not (looking-at (rx (syntax close-parenthesis))))) - (cycle-spacing 1 nil 'single-shot)) - ;; v[2](|) ---> (v[2]|) - ((and - (not (member (thing-at-point 'word 'noprop) - '("if" "for" "while"))) - (looking-at - (rx (and (zero-or-more space) - (not-char "{") - (or (syntax close-parenthesis) - (char "(") - (char "[")))))) - (cycle-spacing 0 nil 'single-shot)) - ;; 1 , 2 (|) ---> (1, 2) - ((looking-at - (rx (zero-or-more space) "," (zero-or-more space))) - (replace-match ", "))))))) - -;; function(x) {|} ---> function(x) {\n|\n} -;; ##' \tabular{rrr}{|} ---> -;; ##' \tabular{rrr}{ -;; ##' | -;; ##' } -(defun sp-ess-open-sexp-indent (&rest args) - "Open new brace or bracket with indentation. -ARGS." - (if (and (fboundp 'ess-roxy-entry-p) (ess-roxy-entry-p)) - (progn - (save-excursion (ess-roxy-indent-on-newline)) - (when (looking-back ess-roxy-str nil) - (cycle-spacing 3 nil t))) - (newline) - (indent-according-to-mode) - (forward-line -1) - (indent-according-to-mode))) - -(defun sp-ess-roxy-str-p (id action context) - "Test if looking back at `ess-roxy-re'. -ID, ACTION, CONTEXT." - (when (and (boundp 'ess-roxy-re) (eq action 'insert)) - (sp--looking-back-p ess-roxy-re))) - -(sp-with-modes 'ess-mode - (sp-local-pair "{" nil - :pre-handlers '(sp-ess-pre-handler) - ;; the more reasonable C-j interferes with default binding for - ;; `ess-eval-line' - :post-handlers '((sp-ess-open-sexp-indent "M-j"))) - (sp-local-pair "(" nil - :pre-handlers '(sp-ess-pre-handler) - :post-handlers '((sp-ess-open-sexp-indent "M-j"))) - (sp-local-pair "[" nil - :pre-handlers '(sp-ess-pre-handler) - :post-handlers '((sp-ess-open-sexp-indent "M-j"))) - (sp-local-pair "'" nil - :unless '(sp-ess-roxy-str-p sp-in-comment-p sp-in-string-quotes-p))) - -;;; roxygen2 markup -;; see https://cran.r-project.org/web/packages/roxygen2/vignettes/formatting.html -(sp-with-modes 'ess-mode - (sp-local-pair "\\strong{" "}" - :when '(sp-in-comment-p) - :trigger "\\strong") - (sp-local-pair "\\emph{" "}" - :when '(sp-in-comment-p) - :trigger "\\emph") - (sp-local-pair "\\code{" "}" - :when '(sp-in-comment-p) - :trigger "\\code") - (sp-local-pair "\\url{" "}" - :when '(sp-in-comment-p) - :trigger "\\url") - (sp-local-pair "\\link{" "}" - :when '(sp-in-comment-p) - :trigger "\\link") - (sp-local-pair "\\href{" "}" - :when '(sp-in-comment-p) - :trigger "\\href" - :suffix "{[^}]*}") - (sp-local-pair "\\email{" "}" - :when '(sp-in-comment-p) - :trigger "\\email") - (sp-local-pair "\\pkg{" "}" - :when '(sp-in-comment-p) - :trigger "\\pkg") - (sp-local-pair "\\item{" "}" - :when '(sp-in-comment-p) - :post-handlers '((sp-ess-open-sexp-indent "M-j")) - :trigger "\\item{") - (sp-local-pair "\\enumerate{" "}" - :when '(sp-in-comment-p) - :post-handlers '((sp-ess-open-sexp-indent "M-j")) - :trigger "\\enumerate") - (sp-local-pair "\\itemize{" "}" - :when '(sp-in-comment-p) - :post-handlers '((sp-ess-open-sexp-indent "M-j")) - :trigger "\\itemize") - (sp-local-pair "\\describe{" "}" - :when '(sp-in-comment-p) - :post-handlers '((sp-ess-open-sexp-indent "M-j")) - :trigger "\\describe") - (sp-local-pair "\\eqn{" "}" - :when '(sp-in-comment-p) - :trigger "\\eqn") - (sp-local-pair "\\deqn{" "}" - :when '(sp-in-comment-p) - :trigger "\\deqn") - (sp-local-pair "\\tabular{" "}" - :when '(sp-in-comment-p) - :trigger "\\tabular" - :post-handlers '((sp-ess-open-sexp-indent "M-j")) - :suffix "{[^}]*}")) - - -(provide 'smartparens-ess) -;;; smartparens-ess ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ess.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ess.elc deleted file mode 100644 index 0c4230c42a6dbc120477334576cbeaf05a531aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4779 zcmbtYU31&U6=j|hGE>KWYMds{4OrWxA}|0JAYytlwJNKwGD$oW>!DLZZb4v4A_4&z z04*tM{(H||02COB88`L}SNn1H?ETt%7k+Z|-Qk})olft`lP7eTuCgeWp&CR99j*MJ zpf@rvqBJ4P8Htgp*3P4HNq!ttnw8Ni`q?i5C`LWCc(RNNnuCYdg)At%O#D?8P?!cq znMcW@*vD#Kl;nq@3~6(Y`FLbKzQGZu;7HPvf;1_8fY;?*{~9xie(>_}_?UvFpZh@x zA@|kseiBlVQs5^vlN6`^)*-br1xY`TBbigV1ke)IxiG>z{bK>%^?&_EW2t~Nx; zT;@@l>&?uNk|<_B>t(7l6&0CY$O|;<`8>J+Xgnq(Of`<7fMHaCmb3;)i`YeDTA{(LYZ{ zpZ5l#ocnR)7xW0avDnZ+M^J?^qN_h0L?IzO)nSNWc~K5YgKLbjX9-Jr%@U&1IPD8K z(zLptD3>JcJvfj3$bC5Y`M-uUb|yybHV2Vlh=^gN;K> z<2d2)hG(7br@ZFP(c**+CrB)WM2iG)-ez^WpYe`AV9~DFz*Mnab-MR;UcAF?ebz?3 zD;5s2TCS26Ln!D8VNj)qK#al=LR1@tUDMiX<4vtL0$~f{UyPX+n+&%;sG1RAcQ7N| z>YPT6N*EhfvQ0u`!Bn_8tRY6w-L7ue9(-i8itHojllRy`R5|DVNGXff9$(vzg|RCg zJyZOA6SxIYu@4Zw;W?w_ulK?=j(0WL0kL8F|Wy7leLFX zj#XJms2LV&%f-wDV9N{G!Uo|;vG4L4ldx3`!NVJB)eNk^!6=6bYg6uF%n7Bw0tGI6 z-~6UOK`B@VCH1XVU$px6b-#$$d8Xq+pZhsdd!{cWQqqzy_RJ5?C{sBKlQfyh1x@M< z5~t}IFuKAZixdMS5p}VVMZVN1xC~;c^8_;)DpM8c^5hcrW}roLjWnE#_I!zYrVYuY zNt$74in#&CNLcYSkGSpoYpW*5m77~xaU6t<)q4E&Y zuwirhcep4U&VZ4)l3cPehqBH2i0e19Q(9PBfo!xyn@O zRFhCEztme3mFNf}9p>O5!SkqfNw`*T-wHt`TTVgi&3+Ida5=0{(yM2Jd2M&ga-GWX zW0OwUJkh*4q`Iw$=KpNO&gG-Gud9us&}c_lg$ensWU3_eQHRYezF{kW#8$SuJl{%2 zEitIJU6d3uSFaSkZ5lm0C94iCYwW1l`t>92V?K?KM6F{_HeOY(GatTR`A$K&{xuMk z0XQ8$dmF+GHH%8P3~{$0T%;LdasIa+Fh56^bq|f`)>)nlFJn0CBdUaPO#ujJeUuIb z;To(UVjIHC4TPDPWxNf+R0H9{$`HGyF%Ghsyk_Cbpdc-c8N%cZq!!l(6AGko%!l2^ zet3qZq4d$v%1%;mSH|cID-$pgHGEMnD`qnRgz+KxB))SJdO(*0K^+wlS4pK6uSBW4NL>Nk%6`E^`EpMQttqT={Baf*or#-d$&H)XtGXX z$iJazWhlrKCHRC}t&oM0v8r+P0j$4Xr=^72RmCjxG+A&7{RNEYOB5>>sl6LU!I$%5 zfe#8Uv1$YGo+nq?5<73=>oo=9@5o&sUQ?iT9`C|nNkLEr&URsVO@Ws9eA@-$HKa2)DM(bx)vcJfhz1xmS+8X7m$w`2|D)K5 z6aD-SbgT~u6d5jBkVmt3U~3o@oqV0#YAN=|>!dz$HzsUAr9WH8e!h#VUWVVAtG4qh W<1zdu!v8$9{)d4R#3|u9*ZUtD7E=fS diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.el deleted file mode 100644 index 4952cc9..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.el +++ /dev/null @@ -1,113 +0,0 @@ -;;; smartparens-haskell.el --- Additional configuration for Haskell based modes. - -;; Copyright (C) 2015 Michael Xavier - -;; Author: Michael Xavier -;; Maintainer: Michael Xavier -;; Created: 29 Apr 2016 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Haskell based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-haskell) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. - -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: -(require 'smartparens) - -(defun sp-haskell-skip-apostrophe (ms mb me) - (save-excursion - ;; We test the syntax class because haskell mode overrides - ;; the class for ' on the fly when it run the syntax pass of - ;; font-lock... so that if '' is a valid string (char) it - ;; gets an override via 'syntax-table property. In which - ;; case we just agree with haskell mode and let it be used as - ;; a pair. - (not (eq (syntax-class (syntax-after mb)) 7)))) - -(defun sp-haskell-strict-ignore-apostrophe-after-word (_id action _context) - "Ignore trailing ' when navigating. - -Because ' in haskell is symbol class it gets picked up as part of -a words such as myFunction', and then strict mode won't allow us -to delete it. Also show-smartparens-mode incorrectly highlights -it as missing an opener. - -So we ignore that pair when at the end of word." - (when (eq action 'navigate) - (sp--looking-back-p (concat "\\(\\sw\\|\\s_\\)'+")))) - -(sp-with-modes '(haskell-mode haskell-interactive-mode) - (sp-local-pair "{-" "-}") - (sp-local-pair "{-#" "#-}") - (sp-local-pair "{-@" "@-}") - (sp-local-pair "'" nil - :unless '(sp-point-after-word-p - sp-haskell-strict-ignore-apostrophe-after-word) - :skip-match 'sp-haskell-skip-apostrophe) - (sp-local-pair "\\(" nil :actions nil)) - -(defun sp--inferior-haskell-mode-backward-bound-fn () - "Limit the backward search to the prompt if point is on prompt." - (-when-let (limit (cond ((bound-and-true-p comint-last-prompt) - (marker-position (cdr comint-last-prompt))) - ((bound-and-true-p comint-last-prompt-overlay) - (overlay-end comint-last-prompt-overlay)) - (t nil))) - (and (> (point) limit) limit))) - -(defun sp--inferior-haskell-mode-forward-bound-fn () - "Limit the forward search to exclude the prompt if point is before prompt." - (-when-let (limit (cond ((bound-and-true-p comint-last-prompt) - (marker-position (car comint-last-prompt))) - ((bound-and-true-p comint-last-prompt-overlay) - (overlay-start comint-last-prompt-overlay)) - (t nil))) - (and (< (point) limit) limit))) - -(defun sp--setup-inferior-haskell-mode-search-bounds () - "Setup the search bound. - -If the point is after the last prompt, limit the backward search -only for the propmt. - -If the point is before the last prompt, limit the forward search up until the prompt start." - (setq sp-forward-bound-fn 'sp--inferior-haskell-mode-forward-bound-fn) - (setq sp-backward-bound-fn 'sp--inferior-haskell-mode-backward-bound-fn)) - -(add-hook 'inferior-haskell-mode-hook 'sp--setup-inferior-haskell-mode-search-bounds) - -(provide 'smartparens-haskell) - -;;; smartparens-haskell.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-haskell.elc deleted file mode 100644 index ffe539775d0b8706e3dfb2ad5a64d371e3f1761b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2730 zcmcguO>f&q5Y?@=PR*%BFC9y1Eumh)q%1435!9}c0tRw((H=s>U6Ctmq2(^iU0GJs z{`bBisYL#269lLLO62V9?96*_hB|)z=IpChtJOX}KBhC57uu+-deD|$=Q8zlqe`!x zrFb+L4x(ypsl$w0V6o!#;_UpK(wQt}8j$2(b-c70c}J^2FG|H^>%$3r?x)>u_e%B0LYInmeJ;yT$WmF~Z}&1a zl}1Ysdm(1h&y_L4&vhYW;Q+2HW{SFRd%354Lb>WwCyApt8SY28;;o&XK7NO)t9*pkn-l;Mbm*vN&tK9D?zqDPdV{fA ztBT26O31=vWFZ(d&SEP{4C_F8N>#GlXb?+neV{&}?NpW8mG7qpgIMW;LyL)9*i1|< zq{mP&@67f-i);9-wN?MXaT-q}<0puwq=zQqFt&|ck*QFrvMmUsajr^m<#p94jg#OuL=_lcjj*GG zVa&?zo{UEuz)oFx4_9@Yngw+K1ill6EoS2iab0L zwxQ}@;@)E)*)D8=_IXPq#Hz}NJbSL~iH@qPt;zNq-4uUWwF`RTStESRga^`qZC&mM zy}_+K{YIntHec1vlt(M~+y4ME8DX3N diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.el deleted file mode 100644 index 70e143a..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.el +++ /dev/null @@ -1,170 +0,0 @@ -;;; smartparens-html.el --- Additional configuration for HTML based modes. - -;; Copyright (C) 2013-2014 Matus Goljer - -;; Author: Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 14 Sep 2013 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for HTML based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-html) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. - -;; This file provides these interactive functions: - -;; `sp-html-next-tag' - Recommended binding: C-c C-f -;; `sp-html-previous-tag' - Recommended binding: C-c C-b -;; -;; (These two bindings are used for navigation by tags forward or -;; backward, but `sp-forward-sexp' already does that.) - -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp-html-next-tag (arg) - "Move point to the beginning of next SGML tag. - -With ARG positive N > 1, move N tags forward. - -With ARG raw prefix argument \\[universal-argument] move out of -the current tag and to the beginning of enclosing tag. - -Note: this function is based on `sp-beginning-of-sexp' but -specialized to only work with SGML tags and to always move -forward." - (interactive "P") - (let ((sp-prefix-tag-object t)) - (if (sp--raw-argument-p arg) - (sp-beginning-of-sexp arg) - (sp-beginning-of-sexp (1+ (prefix-numeric-value arg)))))) - -(defun sp-html-previous-tag (arg) - "Move point to the beginning of previous SGML tag. - -With ARG positive N > 1, move N tags backward. - -With ARG raw prefix argument \\[universal-argument] move out of -the current tag and to the beginning of enclosing tag. - -Note: this function is based on `sp-beginning-of-sexp' but -specialized to only work with SGML tags and to always move -backward." - (interactive "P") - (let ((sp-prefix-tag-object t)) - (if (sp--raw-argument-p arg) - (sp-beginning-of-sexp arg) - (sp-beginning-of-sexp (1- (- (prefix-numeric-value arg))))))) - -(defun sp-html-post-handler (&optional id action context) - "Post-action hooks for `html-mode'. - -ID is the tag being processed, ACTION is the action and CONTEXT -specifies if we are inside a string or code." - (cl-case action - (slurp-forward - (save-excursion - (let ((sp-prefix-pair-object t)) - (sp-backward-sexp)) - (-when-let (enc (sp-get-enclosing-sexp)) - (sp-get enc - (goto-char :beg-in) - (when (looking-at-p "[ \t]*$") - (goto-char :end-in) - (save-excursion - (sp-backward-sexp) - (forward-line -1) - (when (sp-point-in-blank-line) - (delete-region (line-beginning-position) (1+ (line-end-position))))) - (newline-and-indent)))))) - (slurp-backward - (save-excursion - (-when-let (enc (sp-get-enclosing-sexp)) - (sp-get enc - (goto-char :end-in) - (when (sp--looking-back-p "^[ \t]*") - (save-excursion - (goto-char :beg-in) - (newline-and-indent) - (sp-forward-sexp) - (forward-line) - (when (sp-point-in-blank-line) - (delete-region (line-beginning-position) (1+ (line-end-position)))))))))) - (barf-forward - (save-excursion - (let ((sp-prefix-pair-object t)) - (sp-backward-sexp)) - (-when-let (enc (sp-get-enclosing-sexp)) - (sp-get enc - (goto-char :beg-in) - (when (looking-at-p "[ \t]*$") - (goto-char :end-in) - (newline-and-indent))))) - (save-excursion - (sp-forward-sexp) - (forward-line) - (when (sp-point-in-blank-line) - (delete-region (line-beginning-position) (1+ (line-end-position)))))) - (barf-backward - (save-excursion - (-when-let (enc (sp-get-enclosing-sexp)) - (sp-get enc - (goto-char :end-in) - (when (sp--looking-back-p "^[ \t]*") - (goto-char :beg-in) - (newline-and-indent) - (sp-backward-up-sexp) - (sp-backward-sexp) - (forward-line -1) - (when (sp-point-in-blank-line) - (delete-region (line-beginning-position) (1+ (line-end-position))))))))) - (beginning-of-sexp - (when (looking-at-p "[ \t]*$") - (sp-next-sexp))) - (end-of-sexp - (when (sp--looking-back-p "^[ \t]*" nil t) - (sp-previous-sexp))))) - -(sp-with-modes sp--html-modes - (sp-local-pair "<" ">") - (sp-local-tag "<" "<_>" "" :transform 'sp-match-sgml-tags :post-handlers '(sp-html-post-handler))) - -(--each sp--html-modes - (add-to-list 'sp-navigate-consider-sgml-tags it)) - -(provide 'smartparens-html) - -;;; smartparens-html.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-html.elc deleted file mode 100644 index fd16651f368bfb1ce6fde6b778d16ad3cf80f52d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3501 zcmd^C>u(cB5Kq2=QTfn^`k=IfjUYz3)OY7caVR265sCzX5=(u=X<6T`?Iq{kL1_V?A#ercpT@6FE4&f~W;lkLY(cRycSTdQqvZ_}=sr7DrJ`%s!5&qQSD zL}peQO+jZX-16PtsmiA$l7vi}tC@N$axmDfn%f*qm8CKC(A-K(@wpZ=6;W&=n`cT- z>?U?Io0EuR8Pnn%|Nd5R{~aB%fevkQij2+$nCJP}`yLeS?Hugx?NKxpnTT>2x#^A< zIwor<5}HPm5+ha)DV?z-MV2U;Q9cD@5Ekbm2p{yv27KsWtybH}#n# zq_)jk<5Af5>6tl^lp3XT$_>nyaC4%xMr6s1Nz1dG4xT)FO1YT8tDiYlJ1?I=#Hw6D zcAp-SzezLJv(H?}mdQ><7B91B;*`=%j@227Y%-rooHsn2YiP)C|M$)=zj#&_rHt--A(wtICtgsLKhtj9B> z*D?a?GdNAy@(|)h7`>E9@3>f|z|%-TrXue|By)L0A#F5n(-yVEHtc#)KPte{`zLU~ zniFN_ma4EUXZ-H~G7{18{}CYzzb}PI70!PRlh2l5a(M9H;pBd=bAc1T-K7`C<{qjh z-?OPP$F2m>D+m0UiRE1YWA8`4f_$U-7K|j{)-*Gbw78U;w6il)Cu7?>^rj zJpN@+T+FdT`Bq~(l>oj(v9~J5l8RP9CPQ71<<{llWg}6Z;{k8>2-+DyH&4 z?h3f5#qI1~!42#U>wG&0Ys0_~hN0j35-*?d)oNlD@XG%RES;BYLwy6J@ETrih?UFE zu>NE?9I*sQT|BL?@#?K}!n(ma%l?E+I>Df|5Da_>{#M8pXBWo~!yq^>v;`rKZ-x7i z4%&oQhX#L^rUhMU-otJWPOv9I>B%q%+m$m*)`J|tftzf{N8m2);N_AXVF({Wp9@w8 z5`LwKMJk_px#BY{Da;Msd8{E^ae!5|R(xo#m>zO8;pZ^ycB&KKn+I^Up-g|%U{|j5 zyG({#uUK|@HlQKwxrDGp6$!Uq4n^q}Tgu3IzjI+XTy<_KDsM1ox8ERK?)nRoPxLQp~iKbuq#LF@L8e8oa zQon#;8)oCP!#jo53#KxA>lXJG52MXCncoFwTd$B&EPC0J)ouJpmtg$gV&!xwOo9b6k zUNQA>&EnzGmm5F{MsPO7iJAx(K-Ud3??NT|>j^i=rMchfJR(G*_7}U!6oLQ% diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.el deleted file mode 100644 index 1b6462e..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.el +++ /dev/null @@ -1,55 +0,0 @@ -;;; smartparens-javascript.el --- Additional configuration for JavaScript based modes. - -;; Copyright (c) 2017 Marinin Tim -;; Author: Tim Marinin -;; Maintainer: Tim Marinin -;; Created: 2017-03-03 -;; Keywords: abbrev convenience editing javascript -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for JavaScript based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-javascript) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -;; (|sys).path.append---the dot should not travel with the closing -;; paren -(--each '(js-mode javascript-mode js2-mode typescript-mode) - (add-to-list 'sp-sexp-suffix (list it 'regexp ""))) - -(provide 'smartparens-javascript) -;;; smartparens-javasript.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-javascript.elc deleted file mode 100644 index 8c1fa7e9ed9f79dab6828ff3e4e4cbe63bd5d76b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmbtRJ#X7E5Y^adYNn>0uIds8plO{zV2C67J319K5`(tZS$Ofuug1mIe;PK3h7SxT zc-BH*bFIG1j#sl^^XqFcD;>3A8S-?n*WLmJFxtbdgC^)VCi}|}I2{{w5qKrUqI~w1 zM|fBC1H3oVG(EoEu~Q~k2U%54O3AaYRgq6*aV~jrBu)OgDg?@sgP&hy@3JZd_fm7o zVo_!NfzgNM$AekVJ{0y@RVOEcieTOgPA)U}jjYgHw}o#%8kAo_hUgyF7#&cnBX>GF zPjGxss_iGb*BebHV#oWQisuFII`;|~!KD9T#X$|a)G2aXDeJn%t$5r?2U!MP3>y^T NS8nQ`$sf2FrB7}x$qN7g diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.el deleted file mode 100644 index 65eaa96..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.el +++ /dev/null @@ -1,185 +0,0 @@ -;;; smartparens-latex.el --- Additional configuration for (La)TeX based modes. - -;; Copyright (C) 2013-2016 Matus Goljer - -;; Author: Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 14 Feb 2013 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for (La)TeX based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-latex) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. - -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp-latex-insert-spaces-inside-pair (id action context) - "ID, ACTION, CONTEXT." - (when (eq action 'insert) - (insert " ") - (backward-char 1)) - (when (and (eq action 'wrap) - (save-excursion - (goto-char (sp-get sp-last-wrapped-region :beg-in)) - (not (sp--looking-back-p "[[{(]")))) - (save-excursion - (goto-char (sp-get sp-last-wrapped-region :end-in)) - (insert " ") - (goto-char (sp-get sp-last-wrapped-region :beg-in)) - (insert " ")))) - -(defun sp-latex-skip-match-apostrophe (ms mb me) - "MS, MB, ME." - (when (equal ms "'") - (save-excursion - (goto-char me) - (looking-at-p "\\sw")))) - -(defun sp-latex-skip-double-quote (id action context) - "ID, ACTION, CONTEXT." - (when (eq action 'insert) - (when (looking-at-p "''''") - (delete-char -2) - (delete-char 2) - (forward-char 2)))) - -(defun sp-latex-point-after-backslash (id action context) - "Return t if point follows a backslash, nil otherwise. -This predicate is only tested on \"insert\" action. -ID, ACTION, CONTEXT." - (when (eq action 'insert) - (let ((trigger (sp-get-pair id :trigger))) - (looking-back (concat "\\\\" (regexp-quote (if trigger trigger id))))))) - -(add-to-list 'sp-navigate-skip-match - '((tex-mode plain-tex-mode latex-mode) . sp--backslash-skip-match)) - -(sp-with-modes '( - tex-mode - plain-tex-mode - latex-mode - LaTeX-mode - ) - (sp-local-pair "`" "'" - :actions '(:rem autoskip) - :skip-match 'sp-latex-skip-match-apostrophe - :unless '(sp-latex-point-after-backslash)) - ;; math modes, yay. The :actions are provided automatically if - ;; these pairs do not have global definitions. - (sp-local-pair "$" "$") - (sp-local-pair "\\[" "\\]" - :unless '(sp-latex-point-after-backslash)) - - ;; disable useless pairs. Maybe also remove " ' and \"? - (sp-local-pair "/*" nil :actions nil) - (sp-local-pair "\\\\(" nil :actions nil) - (sp-local-pair "'" nil :actions nil) - (sp-local-pair "\\\"" nil :actions nil) - - ;; quote should insert ``'' instead of double quotes. If we ever - ;; need to insert ", C-q is our friend. - (sp-local-pair "``" "''" - :trigger "\"" - :unless '(sp-latex-point-after-backslash) - :post-handlers '(sp-latex-skip-double-quote)) - - ;; add the prefix function sticking to {} pair - (sp-local-pair "{" nil :prefix "\\\\\\(\\sw\\|\\s_\\)*") - - ;; do not add more space when slurping - (sp-local-pair "{" "}") - (sp-local-pair "(" ")") - (sp-local-pair "[" "]") - - ;; pairs for big brackets. Needs more research on what pairs are - ;; useful to add here. Post suggestions if you know some. - (sp-local-pair "\\left(" "\\right)" - :trigger "\\l(" - :when '(sp-in-math-p) - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\left[" "\\right]" - :trigger "\\l[" - :when '(sp-in-math-p) - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\left\\{" "\\right\\}" - :trigger "\\l{" - :when '(sp-in-math-p) - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\left|" "\\right|" - :trigger "\\l|" - :when '(sp-in-math-p) - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\bigl(" "\\bigr)" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\biggl(" "\\biggr)" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\Bigl(" "\\Bigr)" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\Biggl(" "\\Biggr)" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\bigl[" "\\bigr]" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\biggl[" "\\biggr]" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\Bigl[" "\\Bigr]" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\Biggl[" "\\Biggr]" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\bigl\\{" "\\bigr\\}" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\biggl\\{" "\\biggr\\}" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\Bigl\\{" "\\Bigr\\}" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\Biggl\\{" "\\Biggr\\}" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\lfloor" "\\rfloor" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\lceil" "\\rceil" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - (sp-local-pair "\\langle" "\\rangle" - :post-handlers '(sp-latex-insert-spaces-inside-pair)) - - ;; some common wrappings - (sp-local-tag "\"" "``" "''" :actions '(wrap)) - (sp-local-tag "\\b" "\\begin{_}" "\\end{_}") - (sp-local-tag "bi" "\\begin{itemize}" "\\end{itemize}") - (sp-local-tag "be" "\\begin{enumerate}" "\\end{enumerate}")) - -(provide 'smartparens-latex) - -;;; smartparens-latex.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-latex.elc deleted file mode 100644 index 34ddf3a051898460752bfb1c99d1ff5ad6e34f67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4736 zcmbtY>vP*g5I0{KV!kqz*9=>wP@9Q@bn>IP(}6Yw2=oDMfI<}7vvjsaWl5FJO-tc_ z=eH+WmQ4#W^+eL@e*3G8tg36Gm>#kX{Muj^oP`7DE8Y1Jf1}bO`wMsg(@g~mdJS&P?!dV&ZA^n>;cUS zO)?BsNVOgJvwiW|KXimCbR?;!AWgIc^FmMTD;P=a>-P?hjwqPPTm~9W?iuqk38_da zkO_?y#i?8~QUz0xl6f4dob(Kg!Yl0}39s~H2VV8pZnrzRdc25oMVE`Y%ylMnl@#6f z?iWJP(U*I4{owfM&h0%qxO4mX@c!}shwV0g=p(rB+YvC@EB~?IM$bD)=o5 zm7U2br`?lI6cUog)5>{OPj#29H+;|OU-O0I`I8ptLEsD50Wn-K0oZjI?%!$QUF^Jv z0oPA(7rs@~o^O5a``vLV>-GTjFLpm~$i2_JZ{jv6#h4sI>er=^aE#@h517%P;J!4# z^tu7?cA6f*1;{Q|eJ?_Y&<>&-1#c zJb|u9x9;uHtsA%wUovmSqbRfIQU^0zW+^;Qvzg*Kn-?@6(_B?k<@v%BoYuF>>8LX9 zAmdISbK?wNyNJ{b#B0k0u>yq!H;cxRwy|)MDTh$n3Z<50U54MjUz}N_v3AN3r9LIE zisZ@_QAV;=DVmVNbTN*V{dkdT6VA&@P?#F~fGg0$)q9uYS%$*#8fbvg;l-*z@!~qw zi|e3ToAvN-@h&I)GJfkJQ>bF46=x|YTaZ}gz;&+ls_7I1x~udePmr!?LRlImnkH!+ zr)LF8;^HV`S-7el=J*$FmPPHr*F%ru#g^o-qr=3@eNB_;8JN0G0u3;U@xN)&ba< zb+8`L0GbAs1B1$eA=sI9=&orULesF)GVC>DA418na%I@eig4U7&>|i8Iw~A0LEUII zB=LS=@Goopa0CC!;9uAHHyiko!N0BX?>6w82ESF~w>NO!Q62aD8vkJfziaS&HGaH- z|7h@^YW(L7{Jz0|sqtSo@Dqdke$8;Y!SI`5cu?aHH*jh2ag7HXcxZ4{UCiE;~bb2C!3 zuzQ$(wmX`m*PwZap{-M!H-Fym6Zs^XqEp+e-I+QaK4vjH4hcA#+VyLB0Ar+!-Jg#O z^-j=G(4})Ipquho-8WXctSL?d8JAtvdWg*$+t#Q&_!QI`tqLvkxoL>Dh>4s>oxZmU=u(p!qd?b690VQ5jwVy<#*Ei2aMP?o1p@Q(*-{3oN_ Lh)&6My6wLK5Gisi diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.el deleted file mode 100644 index 7f20b66..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.el +++ /dev/null @@ -1,90 +0,0 @@ -;;; smartparens-lua.el --- Additional configuration for Lua based modes. - -;; Copyright (C) 2013-2014 Matus Goljer - -;; Author: Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 3 August 2013 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Lua based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-lua) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp-lua-post-keyword-insert (id action context) - "ID, ACTION, CONTEXT." - (cond - ((eq action 'insert) - (cond - ((member id '("while" "for")) - (insert " do") - (save-excursion (newline-and-indent)) - (backward-char 3)) - ((equal id "if") - (insert " then") - (save-excursion (newline-and-indent)) - (backward-char 5)) - ((equal id "function") - (save-excursion (newline-and-indent)) - (insert " ")))))) - -;; all the pairs are expanded only if followed by "SPC" event. This -;; will reduce false positives like 'dIFficult' to trigger. -(sp-with-modes '(lua-mode) - (sp-local-pair "if" "end" - :when '(("SPC")) - :unless '(sp-in-comment-p) - :post-handlers '(sp-lua-post-keyword-insert)) - (sp-local-pair "function" "end" - :when '(("SPC")) - :unless '(sp-in-comment-p) - :post-handlers '(sp-lua-post-keyword-insert)) - (sp-local-pair "for" "end" - :when '(("SPC")) - :unless '(sp-in-comment-p) - :post-handlers '(sp-lua-post-keyword-insert)) - (sp-local-pair "while" "end" - :when '(("SPC")) - :unless '(sp-in-comment-p) - :post-handlers '(sp-lua-post-keyword-insert)) - ) - -(provide 'smartparens-lua) - -;;; smartparens-lua.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-lua.elc deleted file mode 100644 index 499b9623cea0a3c6eadda20d0313ad1155d66c44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1332 zcmbtT-*3|}5bh)79~f^ODS||5s>WGYwh4);?4c6ckk$vJbq`+bQj5e6w!1R^dOl|v z>lh%xB3qUo$hcq>Hqbe!djnZ^n^U~3kv`!gKY&O1!UxM9>@&R5FO5j7)tYCGaX$MZuQ$euOlc>rr~Y}O1VOCO&Y-9K=2MEFEQ%3( zyI`a7xc3z6V!?_rw#7~lyWMiZ@)3+-Gp4XfvD#Y$F$wSq;4Hus!1K{>;dy=w2h9x} z!G0yp3pkG^F`aigBHJ$YB;KqrQZdC#V`C(Zd5THPO{KKV&~wx%r1q2*6ssk0=&aN+ zWn;Lkbz5^djW38%(tk-q+AWIoB8`&EYcI3X2uU%@$)DlJf+huQ7dD3N!6u -;; Maintainer: Matus Goljer -;; Created: 11th May 2017 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Markdown based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-markdown) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) -(require 'markdown-mode) - - -(defun sp-gfm-electric-backquote-p (_id action _context) - "Do not insert ```...``` pair if that would be handled by `markdown-electric-backquote'." - (and (eq action 'insert) - markdown-gfm-use-electric-backquote - (sp--looking-back-p "^```"))) - -(defun sp--gfm-point-after-word-p (id action context) - "Return t if point is after a word, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-back-p (concat "\\(\\sw\\)" (regexp-quote id))))) - -(defun sp--gfm-skip-asterisk (ms mb me) - "Non-nil if we should ignore this asterisk as a delimiter." - (save-excursion - (goto-char mb) - (save-match-data (looking-at "^\\* ")))) - -(sp-with-modes '(markdown-mode gfm-mode) - (sp-local-pair "*" "*" - :unless '(sp--gfm-point-after-word-p sp-point-at-bol-p) - :post-handlers '(("[d1]" "SPC")) - :skip-match 'sp--gfm-skip-asterisk) - (sp-local-pair "**" "**") - (sp-local-pair "_" "_" :unless '(sp-point-after-word-p))) - -(sp-with-modes 'markdown-mode - (sp-local-pair "```" "```")) - -(sp-with-modes 'gfm-mode - (sp-local-pair "`" "`" :unless '(:add sp-gfm-electric-backquote-p)) - (sp-local-pair "```" "```" :unless '(:add sp-gfm-electric-backquote-p))) - -(provide 'smartparens-markdown) -;;; smartparens-markdown.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.el deleted file mode 100644 index 79c1bc9..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.el +++ /dev/null @@ -1,57 +0,0 @@ -;;; smartparens-ml.el --- Additional configuration for ML languages - -;; Copyright (C) 2016-2017 Ta Quang Trung -;; Copyright (C) 2017 Matus Goljer - -;; Author: Ta Quang Trung -;; Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 14 July 2016 -;; Keywords: smartparens, ML, ocaml, reason -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for ML languages. -;; To use it, simply add: -;; -;; (require 'smartparens-ml) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -;;; Local pairs for ML-family languages -(sp-with-modes '(tuareg-mode fsharp-mode) (sp-local-pair "(*" "*)" )) -(sp-with-modes '(reason-mode) (sp-local-pair "/*" "*/" )) - -(provide 'smartparens-ml) -;;; smartparens-ml.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ml.elc deleted file mode 100644 index fe13e5dc1d67e7e4fbc218860c9214ba82a9398e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmbtRO;5ux4BZj>2Y}n7TvkNK+K$hi(8K|W8{8NNFUht@ZBpV41iv1)dWWAsJ!^Yp}lZ8AECU9B*mM! z%+CdJ`PJR*<_2m_fmDd8*x^7SBWLd>$bh0f!n2Gk gieWIs@*iDChV;0{k5jb4KU*RB!JaquBPLn$4r|1 -;; Maintainer: Matúš Goljer -;; Version: 0.0.1 -;; Created: 15th January 2017 -;; Keywords: languages - -;; 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 file provides some additional configuration for Org based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-org) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp--org-skip-asterisk (ms mb me) - "Non-nil if the asterisk is part of the outline marker." - (save-excursion - (goto-char mb) - (beginning-of-line) - (let ((skip-distance (skip-chars-forward "*"))) - (if (= skip-distance 1) - (not (memq (syntax-class (syntax-after (point))) '(2 3))) - (<= me (point)))))) - -(sp-with-modes 'org-mode - (sp-local-pair "*" "*" - :unless '(sp-point-after-word-p sp-point-at-bol-p) - :skip-match 'sp--org-skip-asterisk) - (sp-local-pair "_" "_" :unless '(sp-point-after-word-p)) - (sp-local-pair "/" "/" :unless '(sp-point-after-word-p) :post-handlers '(("[d1]" "SPC"))) - (sp-local-pair "~" "~" :unless '(sp-point-after-word-p) :post-handlers '(("[d1]" "SPC"))) - (sp-local-pair "=" "=" :unless '(sp-point-after-word-p) :post-handlers '(("[d1]" "SPC"))) - (sp-local-pair "«" "»")) - -(provide 'smartparens-org) -;;; smartparens-org.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-org.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-org.elc deleted file mode 100644 index 08fa14af7711322b0a2fbc00e4818c6324c64027..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1264 zcmb7D-EPw`6z&~UUI37gcIIxYGvU%WYdf{Tn5tb&LI`OfA*~a06Q{M7*dcaT#sx3L zBXGAT<2dVnD(D4~Vjuf_=lDCHkB7(aM^77#Mlc)>VPuL@5(`(dvdU=S z-FDoLYTrV+8HhXwQ#w_sAHpHPwu9RFX{Ib>m`$*MwDf*_!k{5DsWgqAHt-OLSil|i% zDg!r@AS~up_7YHY#5pjx`)2NPr6pkeCF->q&{Sq3SIDttOU6t!W%g2)>^?#Bj20G( z2^2B}GUgHAnBdqM$DJ6K#y&2(3tU9c(dvC3^G^Jtfo6XkN1cnUEu5mahq%o*8)JR( zWe?3hfip~7pOz}?gier`#A}`^t-Z=7V>MZ_N5Iz>fxX7g`OcDDSbMh+8I}r^LmZyN zKG5biv|&HSRT$98wUaC{sYL2=Cwhhh-@qaEWO1&UNfq+AzH|h_qUeHH3tP&WwD2*%v*rB zmzzZ7tP~1c4<#GSweM4)=qe4q8CFZh7N$yB=>wL#j!g{4g)pcuqYy5cdG|lMfqW%v z@?mqlTJIZ_#yU2`*O}w%21?0U8l4j$ryoZIUl{qhKK5_$oBsjd{K8{yeiJAwbEUje N50A%Jcn$|)@CU@oby)xa diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-pkg.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-pkg.el deleted file mode 100644 index ab2da57..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-pkg.el +++ /dev/null @@ -1,6 +0,0 @@ -(define-package "smartparens" "20171201.242" "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." - '((dash "2.13.0") - (cl-lib "0.3"))) -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.el deleted file mode 100644 index d1cff0d..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.el +++ /dev/null @@ -1,92 +0,0 @@ -;;; smartparens-python.el --- Additional configuration for Python based modes. - -;; Copyright (C) 2015-2016 Matus Goljer - -;; Author: Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 8 February 2015 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Python based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-python) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -;; Python has no sexp suffices. This fixes slurping -;; (|sys).path.append---the dot should not travel with the closing -;; paren -(--each '(python-mode inferior-python-mode) - (add-to-list 'sp-sexp-suffix (list it 'regexp ""))) - -(sp-with-modes 'python-mode - (sp-local-pair "'" "'" :unless '(sp-in-comment-p sp-in-string-quotes-p) :post-handlers '(:add sp-python-fix-tripple-quotes)) - (sp-local-pair "\"" "\"" :post-handlers '(:add sp-python-fix-tripple-quotes)) - (sp-local-pair "'''" "'''") - (sp-local-pair "\\'" "\\'") - (sp-local-pair "\"\"\"" "\"\"\"")) - -(defun sp-python-fix-tripple-quotes (id action _context) - "Properly rewrap tripple quote pairs. - -When the user rewraps a tripple quote pair to the other pair -type (i.e. ''' to \") we check if the old pair was a -tripple-quote pair and if so add two pairs to beg/end of the -newly formed pair (which was a single-quote \"...\" pair)." - (when (eq action 'rewrap-sexp) - (let ((old (plist-get sp-handler-context :parent))) - (when (or (and (equal old "'''") (equal id "\"")) - (and (equal old "\"\"\"") (equal id "'"))) - (save-excursion - (sp-get sp-last-wrapped-region - (goto-char :end-in) - (insert (make-string 2 (aref id 0))) - (goto-char :beg) - (insert (make-string 2 (aref id 0))))))))) - -(defadvice python-indent-dedent-line-backspace - (around sp-backward-delete-char-advice activate) - "Fix indend." - (if smartparens-strict-mode - (cl-letf (((symbol-function 'delete-backward-char) - (lambda (arg &optional killp) - (sp-backward-delete-char arg)))) - ad-do-it) - ad-do-it)) - -(provide 'smartparens-python) -;;; smartparens-python.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-python.elc deleted file mode 100644 index 583415efb798b316a62e9fb61a1b5c4a2a0a0f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2051 zcmbtV?{C{S5cRh;9tLcmx*r&Jle3C{ZQp zIPPD+ca)MQTQ>}-0Ldcn@pvb`_k4W%%gMvRU@$yBKBf~>w@S-03{*p>wJ022N$Zqp zC|itY<7tR(m0y$4noR3et=(DS?+JVA8+4IYb6 z@i^cReh>3mh71|rv+VIFytId8vknqM^B?X;791JfoeAmg%^cohlF&&uIgIFy@~LV{ zc}=6GR$zkic&pK`BP-u-l$GRaVSOvCY#hby&aZLci~wIMX_c|*oymkI%%;?vG~{z_ z>f|*Zo2pXR$a#SgMG@UuLjY-02%WY0?uh01`&u?&cu=D4p^n4{(Bw@38lY`hKlHm+Qmn>u zOsItcQ9@e@!O7y1RMp{i8PK#9NIbmPZWmxZ0t`v=*YR7^Rmb^O^5RE{unD<_johN4 z%GesV5Dq2Yu2r$_a+8C1+P-3#X%XAxWu`h(}LpBBO24uB1_Jbzk3>68O&w^vx14i;~w>GFZ#f|Gcb&T zk?Belm#!7Su$XzY6}ALKOSV@0XWZmylqOGc zpHYi?RSM$C=qFf5NL_+zF?0C6Cxw0s-&s;z=oEP?isRVr>Xp%HwP`w*?e|;WmcV-_ z6!#m&!d}p0{u?!o&~&M^hOzux%>;CU3sOo;lPYlc_Kjz)+2BmLcuX@hu7t-|vgS&` OIq#O=Srkqw8U6)1dv93) diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.el deleted file mode 100644 index 06a6551..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.el +++ /dev/null @@ -1,55 +0,0 @@ -;;; smartparens-racket.el --- Additional configuration for Racket based modes. - -;; Copyright (C) 2015 Vikraman Choudhury - -;; Author: Vikraman Choudhury -;; Maintainer: Vikraman Choudhury -;; Created: 26 Oct 2015 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Racket based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-racket) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(sp-with-modes '(racket-mode racket-repl-mode) - (sp-local-pair "`" nil :actions nil) - (sp-local-pair "#|" "|#")) - -(provide 'smartparens-racket) -;;; smartparens-racket.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-racket.elc deleted file mode 100644 index 627dd16767c00b6635e66ef37167170f9b5f5338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmbtR!A=4(5anq02lV*djR_!pX-8&)a~VYv@ZnK$1h)cF7=gcSIxlZ|`%_@9Qbq+x6TwK=QfE38<>Uoj z?~h_UCzFz7J)Hd5DktGf=0e4sG#+i5jb?oZTss_@$j5ba+ diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.el deleted file mode 100644 index 65bc079..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.el +++ /dev/null @@ -1,407 +0,0 @@ -;;; smartparens-ruby.el --- Additional configuration for Ruby based modes. - -;; Copyright (C) 2013-2014 Jean-Louis Giordano - -;; Author: Jean-Louis Giordano -;; Maintainer: Matus Goljer -;; Created: 16 June 2013 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Ruby based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-ruby) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; - -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp-ruby-forward-sexp () - "Wrapper for `ruby-forward-sexp' based on `enh-ruby-mode'." - (interactive) - (if (boundp 'enh-ruby-forward-sexp) - (enh-ruby-forward-sexp) - (ruby-forward-sexp))) - -(defun sp-ruby-backward-sexp () - "Wrapper for `ruby-backward-sexp' based on `enh-ruby-mode'." - (interactive) - (if (boundp 'enh-ruby-backward-sexp) - (enh-ruby-backward-sexp) - (ruby-backward-sexp))) - -(defun sp-ruby-maybe-one-space () - "Turn whitespace around point to just one space." - (while (looking-back " ") (backward-char)) - (when (or (looking-at-p " ") - (looking-at-p "}") - (looking-back "{") - (and (looking-at-p "\\sw") - (looking-back ":"))) - (save-excursion (just-one-space))) - (when (and (not (looking-back "^.?")) - (save-excursion - (backward-char 2) - (or (looking-at-p ".[^:] [.([,;]") - (looking-at-p ".. ::") - (looking-at-p ".[.@$] ") - (looking-at-p ":: ")))) - (delete-char 1))) - -(defun sp-ruby-delete-indentation (&optional arg) - "Better way of joining ruby lines. - -ARG is how many indentation to delete." - (delete-indentation arg) - (sp-ruby-maybe-one-space)) - -(defun sp-ruby-block-post-handler (id action context) - "Handler for ruby block-like insertions. -ID, ACTION, CONTEXT." - (when (equal action 'insert) - (save-excursion - (newline) - (indent-according-to-mode)) - (indent-according-to-mode)) - (sp-ruby-post-handler id action context)) - -(defun sp-ruby-def-post-handler (id action context) - "Handler for ruby def-like insertions. -ID, ACTION, CONTEXT." - (when (equal action 'insert) - (save-excursion - (insert "x") - (newline) - (indent-according-to-mode)) - (delete-char 1)) - (sp-ruby-post-handler id action context)) - -(defun sp-ruby-post-handler (id action context) - "Ruby post handler. -ID, ACTION, CONTEXT." - (-let (((&plist :arg arg :enc enc) sp-handler-context)) - (when (equal action 'barf-backward) - (sp-ruby-delete-indentation 1) - (indent-according-to-mode) - (save-excursion - (sp-backward-sexp) ; move to begining of current sexp - (sp-backward-sexp arg) - (sp-ruby-maybe-one-space))) - - (when (equal action 'barf-forward) - (sp-get enc - (let ((beg-line (line-number-at-pos :beg-in)) - (end-line (line-number-at-pos :end-in))) - (sp-forward-sexp arg) - (sp-ruby-maybe-one-space) - (when (not (= (line-number-at-pos) beg-line)) - (sp-ruby-delete-indentation -1)) - (indent-according-to-mode)))))) - -(defun sp-ruby-pre-handler (id action context) - "Handler for ruby slurp and barf. -ID, ACTION, CONTEXT." - (let ((enc (plist-get sp-handler-context :enc))) - (sp-get enc - (let ((beg-line (line-number-at-pos :beg-in)) - (end-line (line-number-at-pos :end-in))) - - (when (equal action 'slurp-backward) - (save-excursion - (sp-forward-sexp) - (when (looking-at-p ";") (forward-char)) - (sp-ruby-maybe-one-space) - (when (not (= (line-number-at-pos) end-line)) - (sp-ruby-delete-indentation -1))) - (when (looking-at-p "::") - (while (and (looking-back "\\sw") - (--when-let (sp-get-symbol t) - (sp-get it (goto-char :beg-prf)))))) - (while (thing-at-point-looking-at "\\.[[:blank:]\n]*") - (sp-backward-sexp)) - (when (looking-back "[@$:&?!]") - (backward-char) - (when (looking-back "[@&:]") - (backward-char))) - (just-one-space) - (save-excursion - (if (= (line-number-at-pos) end-line) - (insert " ") - (newline)))) - - (when (equal action 'barf-backward) - ;; Barf whole method chains - (while (thing-at-point-looking-at "[(.:[][\n[:blank:]]*") - (sp-forward-sexp)) - (if (looking-at-p " *$") - (newline) - (save-excursion (newline)))) - - (when (equal action 'slurp-forward) - (save-excursion - (sp-backward-sexp) - (when (looking-back "\.") (backward-char)) - (sp-ruby-maybe-one-space) - (when (not (= (line-number-at-pos) beg-line)) - (if (thing-at-point-looking-at "\\.[[:blank:]\n]*") - (progn - (forward-symbol -1) - (sp-ruby-delete-indentation -1)) - (sp-ruby-delete-indentation)))) - (while (looking-at-p "::") (sp-forward-symbol)) - (when (looking-at-p "[?!;]") (forward-char)) - (if (= (line-number-at-pos) beg-line) - (insert " ") - (newline))) - - (when (equal action 'barf-forward) - (when (looking-back "\\.") (backward-char)) - (when (looking-at-p "::") - (while (and (looking-back "\\sw") - (--when-let (sp-get-symbol t) - (sp-get it (goto-char :beg-prf)))))) - (if (= (line-number-at-pos) end-line) - (insert " ") - (if (looking-back "^[[:blank:]]*") - (save-excursion (newline)) - (newline)))))))) - -(defun sp-ruby-inline-p (id) - "Test if ID is inline." - (save-excursion - (when (looking-back id) - (backward-word)) - (when (not (or (looking-back "^[[:blank:]]*") - (looking-back "= *"))) - (or (save-excursion - (forward-symbol -1) - (forward-symbol 1) - (looking-at-p (concat " *" id))) - (save-excursion - ;; This does not seem to make emacs snapshot happy - (ignore-errors - (sp-ruby-backward-sexp) - (sp-ruby-forward-sexp) - (looking-at-p (concat "[^[:blank:]]* *" id)))))))) - -(defun sp-ruby-method-p (id) - "Test if ID is a method." - (save-excursion - (when (looking-back id) - (backward-word)) - (and (looking-at-p id) - (or - ;; fix for def_foo - (looking-at-p (concat id "[_?!:]")) - ;; fix for foo_def - (looking-back "[_:@$.]") - ;; fix for def for; end - (looking-back "def \\|class \\|module ") - ;; Check if multiline method call - ;; But beware of comments! - (and (looking-back "\\.[[:blank:]\n]*") - (not (save-excursion - (search-backward ".") - (sp-point-in-comment)))))))) - -(defun sp-ruby-skip-inline-match-p (ms mb me) - "If non-nil, skip inline match. -MS, MB, ME." - (or (sp-ruby-method-p ms) - (sp-ruby-inline-p ms))) - -(defun sp-ruby-skip-method-p (ms mb me) - "If non-nil, skip method. -MS, MB, ME." - (sp-ruby-method-p ms)) - -(defun sp-ruby-in-string-or-word-p (id action context) - "Test if point is inside string or word. -ID, ACTION, CONTEXT." - (or (sp-in-string-p id action context) - (and (looking-back id) - (not (looking-back (sp--strict-regexp-quote id)))) - (sp-ruby-method-p id))) - -(defun sp-ruby-in-string-word-or-inline-p (id action context) - "Test if point is inside string, word or inline. -ID, ACTION, CONTEXT." - (or (sp-ruby-in-string-or-word-p id action context) - (and (looking-back id) - (sp-ruby-inline-p id)))) - -(defun sp-ruby-pre-pipe-handler (id action context) - "Ruby pipe handler. -ID, ACTION, CONTEXT." - (when (equal action 'insert) - (save-excursion - (just-one-space)) - (save-excursion - (search-backward id) - (just-one-space)))) - -(defun sp-ruby-should-insert-pipe-close (id action context) - "Test whether to insert the closing pipe for a lambda-binding pipe pair. -ID, ACTION, CONTEXT" - (if (eq action 'insert) - (thing-at-point-looking-at - (rx-to-string `(and (or "do" "{") (* space) ,id))) - t)) - -(defun sp--ruby-skip-match (ms me mb) - "Ruby skip match. -MS, ME, MB." - (when (string= ms "end") - (or (sp-in-string-p ms me mb) - (sp-ruby-method-p "end")))) - -(add-to-list 'sp-navigate-skip-match - '((ruby-mode enh-ruby-mode motion-mode) . sp--ruby-skip-match)) - -(dolist (mode '(ruby-mode motion-mode)) - (add-to-list 'sp-sexp-suffix `(,mode syntax ""))) - -(sp-with-modes '(ruby-mode enh-ruby-mode motion-mode) - (sp-local-pair "do" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-block-post-handler) - :skip-match 'sp-ruby-skip-method-p - :suffix "") - - (sp-local-pair "{" "}" - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-post-handler) - :suffix "") - - (sp-local-pair "begin" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-block-post-handler) - :skip-match 'sp-ruby-skip-method-p - :suffix "") - - (sp-local-pair "def" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-method-p - :suffix "") - - (sp-local-pair "class" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-method-p - :suffix "") - - (sp-local-pair "module" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-method-p - :suffix "") - - (sp-local-pair "case" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-method-p - :suffix "") - - (sp-local-pair "for" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-or-word-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-inline-match-p) - - (sp-local-pair "if" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-word-or-inline-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-inline-match-p - :suffix "") - - (sp-local-pair "unless" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-word-or-inline-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-inline-match-p - :suffix "") - - (sp-local-pair "while" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-word-or-inline-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-inline-match-p - :suffix "") - - (sp-local-pair "until" "end" - :when '(("SPC" "RET" "")) - :unless '(sp-ruby-in-string-word-or-inline-p sp-in-comment-p) - :actions '(insert navigate) - :pre-handlers '(sp-ruby-pre-handler) - :post-handlers '(sp-ruby-def-post-handler) - :skip-match 'sp-ruby-skip-inline-match-p - :suffix "") - - (sp-local-pair "|" "|" - :when '(sp-ruby-should-insert-pipe-close) - :pre-handlers '(sp-ruby-pre-pipe-handler) - :suffix "")) - -(provide 'smartparens-ruby) - -;;; smartparens-ruby.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-ruby.elc deleted file mode 100644 index 145edae798c0bfbeba0079e3a69cc0695214a403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10385 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 diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.el deleted file mode 100644 index 1451069..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.el +++ /dev/null @@ -1,138 +0,0 @@ -;;; smartparens-rust.el --- Additional configuration for Rust based modes. - -;; Copyright (C) 2015 Wilfred Hughes - -;; Created: 3 November 2015 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Rust. To use -;; it, simply add: -;; -;; (require 'smartparens-config) -;; -;; alternatively, you can explicitly load these preferences: -;; -;; (require 'smartparens-rust) -;; -;; in your configuration. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: -(require 'smartparens) - -(defun sp-in-rust-lifetime-context (&rest args) - "Return t if point is in a Rust context where ' represents a lifetime. -If we return nil, ' should be used for character literals. -ARGS." - (or - (condition-case nil - ;; If point is just after a &', it's probably a &'foo. - (save-excursion - (backward-char 2) - (looking-at "&")) - ;; If we're at the beginning of the buffer, just carry on. - (beginning-of-buffer)) - ;; If point is inside < > it's probably a parameterised function. - (let ((paren-pos (nth 1 (syntax-ppss)))) - (and paren-pos - (save-excursion - (goto-char paren-pos) - (looking-at "<")))))) - -(defun sp-rust-skip-match-angle-bracket (ms mb me) - "Non-nil if we should ignore the bracket as valid delimiter." - (save-excursion - (goto-char me) - (let ((on-fn-return-type - (sp--looking-back-p (rx "->") nil)) - (on-match-branch - (sp--looking-back-p (rx "=>") nil)) - (on-comparison - (sp--looking-back-p (rx (or - (seq space "<") - (seq space ">") - (seq space "<<") - (seq space ">>"))) - nil))) - (or on-comparison on-fn-return-type on-match-branch)))) - -(defun sp-rust-filter-angle-brackets (id action context) - "Non-nil if we should allow ID's ACTION in CONTEXT for angle brackets." - ;; See the docstring for `sp-pair' for the possible values of ID, - ;; ACTION and CONTEXT. - (cond - ;; Inside strings, don't do anything with < or >. - ((eq context 'string) - nil) - ;; Don't do any smart pairing inside comments either. - ((eq context 'comment) - nil) - ;; Otherwise, we're in code. - ((eq context 'code) - (let ((on-fn-return-type - (looking-back (rx "->") nil)) - (on-match-branch - (looking-back (rx "=>") nil)) - (on-comparison - (looking-back (rx (or - (seq space "<") - (seq space ">") - (seq space "<<") - (seq space ">>"))) - nil))) - (cond - ;; Only insert a matching > if we're not looking at a - ;; comparison. - ((eq action 'insert) - (and (not on-comparison) (not on-fn-return-type) (not on-match-branch))) - ;; Always allow wrapping in a pair if the region is active. - ((eq action 'wrap) - (not on-match-branch)) - ;; When pressing >, autoskip if we're not looking at a - ;; comparison. - ((eq action 'autoskip) - (and (not on-comparison) (not on-fn-return-type) (not on-match-branch))) - ;; Allow navigation, highlighting and strictness checks if it's - ;; not a comparison. - ((eq action 'navigate) - (and (not on-comparison) (not on-fn-return-type) (not on-match-branch)))))))) - -(sp-with-modes '(rust-mode) - (sp-local-pair "'" "'" - :unless '(sp-in-comment-p sp-in-string-quotes-p sp-in-rust-lifetime-context) - :post-handlers'(:rem sp-escape-quotes-after-insert)) - (sp-local-pair "<" ">" - :when '(sp-rust-filter-angle-brackets) - :skip-match 'sp-rust-skip-match-angle-bracket)) - -;; Rust has no sexp suffices. This fixes slurping -;; (|foo).bar -> (foo.bar) -(add-to-list 'sp-sexp-suffix (list #'rust-mode 'regexp "")) - -(provide 'smartparens-rust) - -;;; smartparens-rust.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-rust.elc deleted file mode 100644 index 15e4312e78316f4dad75f3c13601100714971ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2229 zcmbuA+i%-86o>t`)_vK-fOZ#PC(4jmSZG*s?4(YbHOPV?z>orI9)`tvpe4#CB9SUd z=Q8Y%-;b0XCu>$yGaI>v4W%7rS~(8oxhvQ%B#Iq=JUTg{Y{m`G95%TX+;f$a)s%5X z6G5fskDM$HV@YsRN@2*&pqTa>zku+ppWnc9f9-a=W5lPqG=es5#f_`E5z5Bx_4i4C zNN2*$jUq>~pju0Xf%OnMoy`H&V-mNHZf3$8AR}rctWeHEqm+d}z(luwQqYaSVz8xT zxdl}_)AKU-)DXCw3T;+!@hK4V5#nkpE~P5QJ1#++wr9*KTPNpDF;%XJJ2m)$*I!d>}G-{NW&|EgQ8>rCZ}AK zC=Ouzj8;HpuVl?C?y?!hVhqHhZYu|qN z{Yy{oht{j+HC9^-IF%rrBSWQgBQ44rvt|=;udoub<@(} z(fP@TQ=j)oA5PDY|2Pln8aOTkVV}m1&V-OWMs5kr5i#@;-{}^)3-~WUckmAA`Y(JE z4n0IK+X*tH@k*BTylhZGmLzz5dWSHDna}Ul%m=Os)3|_Y<6+c#`HQzuwq7mXW90{F z*$P_2;PbfkSlaC5&o6(QHhU|d()!t-301Q!*#Day3uaAk4>^J4s?czNG4~C)sWhKB zP1-y^We|2N40@d5HSxLAzLZGuYdPgktP(0oc7{HqI+Hsmkn`A1=s$0OKlNek`;LP5 zs;m&&jjtAM#jE&=T81-05EG~-gGMFBaEJ#bm_jXur8GT8WrmiPLOb1FThLt}RdA1v z6iVNZV_#RL&UndcE)7MS5sl`m6zD;nrlT%EqTZT$! ziMx?HBO@wrN7#(lVrhgIz8D&w$oG8|GYWcy+e3w21mjPZ3_Pqlm^b|8riRO&IgR@P nR{@l*xWykDvb?2xB)E^JkW&;XP diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.el deleted file mode 100644 index 9e32f05..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.el +++ /dev/null @@ -1,80 +0,0 @@ -;;; smartparens-scala.el --- Additional configuration for Scala based modes. - -;; Copyright (C) 2015 Greg Nwosu - -;; Author: Greg Nwosu -;; Maintainer: Greg Nwosu -;; Created: 8 July 2015 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for Scala based -;; modes. To use it, simply add: -;; -;; (require 'smartparens-scala) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. -;; -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. -;; -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -;; Scala has no sexp suffices. This fixes slurping -;; import scala.mutable{|} ListBuffer, Set ---the comma should not travel with the closing -;; paren -(--each '(scala-mode inferior-scala-mode) - (add-to-list 'sp-sexp-suffix (list it 'regexp ""))) - -(defun sp-scala-wrap-with-indented-newlines (_ action _) - "Post handler for the wrap ACTION, putting the region on indented newlines." - (when (eq action 'wrap) - (sp-get sp-last-wrapped-region - (let ((beg :beg-in) - (end :end-in)) - (save-excursion - (goto-char end) - (newline-and-indent)) - (save-excursion - (goto-char beg) - (newline)) - (indent-region beg end))))) - -(sp-local-pair 'scala-mode "(" nil - :post-handlers '(("||\n[i]" "RET") - ("| " "SPC"))) - -(sp-local-pair 'scala-mode "{" nil - :post-handlers '(("||\n[i]" "RET") - ("| " "SPC") - sp-scala-wrap-with-indented-newlines)) - -(provide 'smartparens-scala) -;;; smartparens-scala.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-scala.elc deleted file mode 100644 index 6c158a908b947ba5f0eb1c984961a2aafe68c668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 zcmbtTTW`}a6z=1ey}%P!iGvFwfw^juwPmR$ZK^6X3Bknr#8M$Qaav2M9c*_O*pKHp zO}7CLAT6p>`+Ude@|`ck@yF4lR;%R=heH^tWhF|U*9ReCykwbybFPh05~5xw?u0dV zA?yNJS%RvpSc)IaqJ!ypH8@!a0|mx`mEi{RE6J83gIs0CY9Z%l7g232usr8E+~f)O zJJJ4MF>-}5q_U7HX&E}NY(d|nMbe|w(eW{43#M6SvB=#zJ(D>Y1sRht<4`L0Tau<3 z1Dxqna1C~Wj#0eMizM9ZaRuD>@jTC;U0F^um2)6z+>LSVy-cI9i<=&<{$o6ZPtph> z(%L?Jinc)-BQEhB;)=#8aTkKE$%E}9=lu}9_tK*E7JXyf4+xwIONGq&CA5=L;6Q{0 z&A+dN=3tgg+lpx}4frNwC8JAMkB|k|LTP$y3!v*pNv)!F6jM>dFY&c13UP@M=Xe4_ zrqB<(_TiupCkm4x?|F#>D3lulhYQUrI2uikKY!YVYGo}-r3Ns7lOO(EvC^VuB)=$y zb@0I9sABNSs5Gl^b#>^4s*kF*O7> z(WlS@zx@h2(2w?mY4E4)oZ3)J-3V7LLHzH%UN_m@fc-n*paE+ZLKJK*GS`~IvCxVM z4Y#rZ;uDafgrq__&_)iZHlJKyr}9ip36L-22?+o#fQQqQ5eaZ)KgqwG;D4kLK&92W OKvCZj`&vP@RDS_hPJ_w- diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.el deleted file mode 100644 index dc693fd..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.el +++ /dev/null @@ -1,65 +0,0 @@ -;;; smartparens-latex.el --- Additional configuration for text-mode. - -;; Copyright (C) 2017 Matus Goljer - -;; Author: Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 16 July 2017 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; This file provides some additional configuration for `text-mode'. -;; To use it, simply add: -;; -;; (require 'smartparens-text) -;; -;; into your configuration. You can use this in conjunction with the -;; default config or your own configuration. - -;; If you have good ideas about what should be added please file an -;; issue on the github tracker. - -;; For more info, see github readme at -;; https://github.com/Fuco1/smartparens - -;;; Code: - -(require 'smartparens) - -(defun sp-text-mode-emoticon-p (_id action _context) - (when (memq action '(insert navigate)) - (sp--looking-back-p ":-?[()]" 3))) - -(defun sp-text-mode-skip-emoticon (ms mb me) - (when (member ms '("(" ")")) - (save-excursion - (goto-char mb) - (sp--looking-back-p ":-?" 2)))) - -(sp-local-pair 'text-mode "(" nil - :unless '(:add sp-text-mode-emoticon-p) - :skip-match 'sp-text-mode-skip-emoticon) - -(provide 'smartparens-text) -;;; smartparens-text.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens-text.elc deleted file mode 100644 index d385499b7b5b0824f56de9704bde90b702a3a18a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmbtSO^?$s5bX`fg(KI&NRUYDs!1rj+e#o*?O`QuaBHg7)ONR4{Sj=pu>5)^X$e$l zPitkO#4~>H%^S~ezARpiMx$&#pTol2RvRVzAMN1AqKI%%A!_fSnvUyn+2?-fv;{N< ze4Dh@zc5ij9A|y<+g3-|5Dx64iXa~xS}j0&5mV6aK3-5Z!~`g%k}&X;*W>E?KMd&! z!}$clyM$D{PaA$kJC1+;y12asvBiKQk;sdl9-V~fL7;=R0^{+F(to@b`6$bdr4JO)zePZ%TZI6)r&Q~ zCxf(_)Ux8F?|3q2IRjR(M`banPLkFSNpV320VBi?wWRplc!yq3K2Th~eRkySxXbeO ziIEyNUZCMEYPu+Y{Dw|~(*|aHXH<-k&*&z1HVq|1%e*aM)|+54iS2pOxjAj{2TfxC M8F>%5f~z9?4b&PJ2LJ#7 diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.el b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.el deleted file mode 100644 index eb84b52..0000000 --- a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.el +++ /dev/null @@ -1,9400 +0,0 @@ -;;; smartparens.el --- Automatic insertion, wrapping and paredit-like navigation with user defined pairs. -*- lexical-binding: t -*- - -;; Copyright (C) 2012-2016 Matus Goljer - -;; Author: Matus Goljer -;; Maintainer: Matus Goljer -;; Created: 17 Nov 2012 -;; Keywords: abbrev convenience editing -;; URL: https://github.com/Fuco1/smartparens - -;; This file is not part of GNU Emacs. - -;;; License: - -;; This file is part of Smartparens. - -;; Smartparens 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. - -;; Smartparens 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 Smartparens. If not, see . - -;;; Commentary: - -;; Smartparens is minor mode for Emacs that deals with parens pairs -;; and tries to be smart about it. It started as a unification effort -;; to combine functionality of several existing packages in a single, -;; compatible and extensible way to deal with parentheses, delimiters, -;; tags and the like. Some of these packages include autopair, -;; textmate, wrap-region, electric-pair-mode, paredit and others. With -;; the basic features found in other packages it also brings many -;; improvements as well as completely new features. - -;; For a basic overview, see github readme at -;; https://github.com/Fuco1/smartparens - -;; For the complete documentation visit the documentation wiki located -;; at https://github.com/Fuco1/smartparens/wiki - -;; If you like this project, you can donate here: -;; https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CEYP5YVHDRX8C - -;;; Code: - -(eval-when-compile (require 'cl)) ; for `lexical-let' -(eval-when-compile (require 'subr-x)) ; for `string-trim' -(require 'cl-lib) -(require 'dash) -(require 'thingatpt) -(require 'help-mode) ;; for help-xref-following #85 - -(declare-function cua-replace-region "cua-base") ; FIXME: remove this when we drop support for old emacs -(declare-function cua-delete-region "cua-base") -(declare-function cua--fallback "cua-base") - -(declare-function subword-kill "subword") -(declare-function subword-forward "subword") -(declare-function subword-backward "subword") - -(declare-function hungry-delete-backward "hungry-delete") -(declare-function hungry-delete-forward "hungry-delete") - -(declare-function evil-get-register "evil-common") -(declare-function evil-set-register "evil-common") -(defvar evil-this-register) - - -;;; backport for older emacsen - -;; introduced in 24.3 -(unless (fboundp 'defvar-local) - (defmacro defvar-local (var val &optional docstring) - "Define VAR as a buffer-local variable with default value VAL. -Like `defvar' but additionally marks the variable as being automatically -buffer-local wherever it is set." - (declare (debug defvar) (doc-string 3)) - ;; Can't use backquote here, it's too early in the bootstrap. - (list 'progn (list 'defvar var val docstring) - (list 'make-variable-buffer-local (list 'quote var))))) - -;;;###autoload -(defun sp-cheat-sheet (&optional arg) - "Generate a cheat sheet of all the smartparens interactive functions. - -Without a prefix argument, print only the short documentation and examples. - -With non-nil prefix argument ARG, show the full documentation for each function. - -You can follow the links to the function or variable help page. -To get back to the full list, use \\[help-go-back]. - -You can use `beginning-of-defun' and `end-of-defun' to jump to -the previous/next entry. - -Examples are fontified using the `font-lock-string-face' for -better orientation." - (interactive "P") - (setq arg (not arg)) - (let ((do-not-display '( - smartparens-mode - smartparens-global-mode - turn-on-smartparens-mode - turn-off-smartparens-mode - sp-wrap-cancel - sp-remove-active-pair-overlay - sp-splice-sexp-killing-around ;; is aliased to `sp-raise-sexp' - show-smartparens-mode - show-smartparens-global-mode - turn-on-show-smartparens-mode - turn-off-show-smartparens-mode - )) - (do-not-display-with-arg '( - sp-use-paredit-bindings - sp-use-smartparens-bindings - )) - (commands (cl-loop for i in (cdr (assoc-string (file-truename (locate-library "smartparens")) load-history)) - if (and (consp i) (eq (car i) 'defun) (commandp (cdr i))) - collect (cdr i)))) - (with-current-buffer (get-buffer-create "*Smartparens cheat sheet*") - (let ((standard-output (current-buffer)) - (help-xref-following t)) - (read-only-mode -1) - (erase-buffer) - (help-mode) - (smartparens-mode 1) - (help-setup-xref (list #'sp-cheat-sheet) - (called-interactively-p 'interactive)) - (read-only-mode -1) - (--each (--remove (or (memq it do-not-display) - (and arg (memq it do-not-display-with-arg))) - commands) - (unless (equal (symbol-name it) "advice-compilation") - (let ((start (point)) kill-from) - (insert (propertize (symbol-name it) 'face 'font-lock-function-name-face)) - (insert " is ") - (describe-function-1 it) - (save-excursion - (when arg - (goto-char start) - (forward-paragraph 1) - (forward-line 1) - (if (looking-at "^It is bound") - (forward-paragraph 2) - (forward-paragraph 1)) - (setq kill-from (point)) - (when (re-search-forward "^Examples:" nil t) - (delete-region kill-from - (save-excursion - (forward-line 1) - (point)))))) - (insert (propertize (concat - "\n\n" - (make-string 72 ?―) - "\n\n") 'face 'font-lock-function-name-face))))) - (goto-char (point-min)) - (while (re-search-forward "\\(->\\|​\\)" nil t) - (let ((thing (bounds-of-thing-at-point 'line))) - (put-text-property (car thing) (cdr thing) 'face 'font-lock-string-face))) - (goto-char (point-min)) - (while (re-search-forward "|" nil t) - (put-text-property (1- (point)) (point) 'face 'font-lock-warning-face)) - (goto-char (point-min)) - (while (re-search-forward "^It is bound to \\(.*?\\)\\." nil t) - (put-text-property (match-beginning 1) (match-end 1) 'face 'font-lock-keyword-face)) - (goto-char (point-min)) - (while (re-search-forward ";;.*?$" nil t) - (put-text-property (match-beginning 0) (match-end 0) 'face 'font-lock-comment-face)) - (help-make-xrefs) - (goto-char (point-min)))) - (pop-to-buffer "*Smartparens cheat sheet*"))) - -(defun sp-describe-system () - "Describe user's system. - -The output of this function can be used in bug reports." - (interactive) - (kill-new - (format "- `smartparens` version: %s -- Active major-mode: %s -- Emacs version (`M-x emacs-version`): %s -- Spacemacs/Evil/Other starterkit (specify which)/Vanilla: %s -- OS: %s" - (--if-let (cadr (assoc 'smartparens package-alist)) - (package-version-join (package-desc-version it)) - "") - (symbol-name major-mode) - (replace-regexp-in-string "\n" "" (emacs-version)) - "" - (symbol-name system-type)))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Variables - -(defvar-local sp-forward-bound-fn nil - "Function to restrict the forward search") - -(defvar-local sp-backward-bound-fn nil - "Function to restrict the backward search") - -(defun sp--get-forward-bound () - "Get the bound to limit the forward search for looking for pairs. - -If it returns nil, the original bound passed to the search -function will be considered." - (and sp-forward-bound-fn (funcall sp-forward-bound-fn))) - -(defun sp--get-backward-bound () - "Get the bound to limit the backward search for looking for pairs. - -If it returns nil, the original bound passed to the search -function will be considered." - (and sp-backward-bound-fn (funcall sp-backward-bound-fn))) - - -;;;###autoload -(defvar smartparens-mode-map (make-sparse-keymap) - "Keymap used for `smartparens-mode'.") -(defvaralias 'sp-keymap 'smartparens-mode-map) -(make-obsolete-variable 'sp-keymap 'smartparens-mode-map "2015-01-01") - -(defvar sp-paredit-bindings '( - ("C-M-f" . sp-forward-sexp) ;; navigation - ("C-M-b" . sp-backward-sexp) - ("C-M-u" . sp-backward-up-sexp) - ("C-M-d" . sp-down-sexp) - ("C-M-p" . sp-backward-down-sexp) - ("C-M-n" . sp-up-sexp) - ("M-s" . sp-splice-sexp) ;; depth-changing commands - ("M-" . sp-splice-sexp-killing-backward) - ("M-" . sp-splice-sexp-killing-forward) - ("M-r" . sp-splice-sexp-killing-around) - ("C-)" . sp-forward-slurp-sexp) ;; barf/slurp - ("C-" . sp-forward-slurp-sexp) - ("C-}" . sp-forward-barf-sexp) - ("C-" . sp-forward-barf-sexp) - ("C-(" . sp-backward-slurp-sexp) - ("C-M-" . sp-backward-slurp-sexp) - ("C-{" . sp-backward-barf-sexp) - ("C-M-" . sp-backward-barf-sexp) - ("M-S" . sp-split-sexp) ;; misc - ) - "Paredit inspired bindings. - -Alist containing the default paredit bindings to corresponding -smartparens functions.") - -(defun sp--populate-keymap (bindings) - "Populates the `smartparens-mode-map' from the BINDINGS alist." - (--each bindings - (define-key smartparens-mode-map (read-kbd-macro (car it)) (cdr it)))) - -;;;###autoload -(defun sp-use-paredit-bindings () - "Initiate `smartparens-mode-map' with `sp-paredit-bindings'." - (interactive) - (sp--populate-keymap sp-paredit-bindings)) - -(defvar sp-smartparens-bindings '( - ("C-M-f" . sp-forward-sexp) - ("C-M-b" . sp-backward-sexp) - ("C-M-d" . sp-down-sexp) - ("C-M-a" . sp-backward-down-sexp) - ("C-S-d" . sp-beginning-of-sexp) - ("C-S-a" . sp-end-of-sexp) - ("C-M-e" . sp-up-sexp) - ("C-M-u" . sp-backward-up-sexp) - ("C-M-n" . sp-next-sexp) - ("C-M-p" . sp-previous-sexp) - ("C-M-k" . sp-kill-sexp) - ("C-M-w" . sp-copy-sexp) - ("M-" . sp-unwrap-sexp) - ("M-" . sp-backward-unwrap-sexp) - ("C-" . sp-forward-slurp-sexp) - ("C-" . sp-forward-barf-sexp) - ("C-M-" . sp-backward-slurp-sexp) - ("C-M-" . sp-backward-barf-sexp) - ("M-D" . sp-splice-sexp) - ("C-M-" . sp-splice-sexp-killing-forward) - ("C-M-" . sp-splice-sexp-killing-backward) - ("C-S-" . sp-splice-sexp-killing-around) - ("C-]" . sp-select-next-thing-exchange) - ("C-M-]" . sp-select-next-thing) - ("C-M-SPC" . sp-mark-sexp) - ("M-F" . sp-forward-symbol) - ("M-B" . sp-backward-symbol) - ) - "Alist containing the default smartparens bindings.") - -;;;###autoload -(defun sp-use-smartparens-bindings () - "Initiate `smartparens-mode-map' with `sp-smartparens-bindings'." - (interactive) - (sp--populate-keymap sp-smartparens-bindings)) - -(defun sp--set-base-key-bindings (&optional symbol value) - "Set up the default keymap based on `sp-base-key-bindings'. - -SYMBOL is the symbol being set, that is `sp-base-key-bindings'. - -VALUE is the saved value (as a symbol), can be one of: -- sp -- paredit - -This function is also used as a setter for this customize value." - (when symbol (set-default symbol value)) - (cond - ((eq value 'sp) - (sp-use-smartparens-bindings)) - ((eq value 'paredit) - (sp-use-paredit-bindings)))) - -(defun sp--update-override-key-bindings (&optional symbol value) - "Override the key bindings with values from `sp-override-key-bindings'. - -SYMBOL is `sp-override-key-bindings', VALUE is the value being set. - -This function is also used as a setter for this customize value." - (when symbol (set-default symbol value)) - ;; this also needs to reload the base set, if any is present. - (sp--set-base-key-bindings) - (sp--populate-keymap value)) - -(defcustom sp-base-key-bindings nil - "A default set of key bindings for commands provided by smartparens. - -Paredit binding adds the bindings in `sp-paredit-bindings' to the -corresponding smartparens commands. It does not add bindings to -any other commands, or commands that do not have a paredit -counterpart. - -Smartparens binding adds the bindings in -`sp-smartparens-bindings' to most common smartparens commands. -These are somewhat inspired by paredit, but in many cases differ. - -Note that neither \"paredit\" nor \"smartparens\" bindings add a -binding for all the provided commands." - :type '(radio - (const :tag "Don't use any default set of bindings" nil) - (const :tag "Use smartparens set of bindings" sp) - (const :tag "Use paredit set of bindings" paredit)) - :set 'sp--set-base-key-bindings - :group 'smartparens) - -(defcustom sp-override-key-bindings nil - "An alist of bindings and commands that should override the base key set. - -If you wish to override a binding from the base set, set the -value for the binding to the `kbd' recognizable string constant -and command to the command symbol you wish to bind there. - -If you wish to disable a binding from the base set, set the value -for the command to nil. - -Examples: - (\"C-M-f\" . sp-forward-sexp) - (\"C-\" . nil) - -See `sp-base-key-bindings'." - :type '(alist - :key-type string - :value-type symbol) - :set 'sp--update-override-key-bindings - :group 'smartparens) - -(defvar sp-escape-char nil - "Character used to escape quotes inside strings.") -(make-variable-buffer-local 'sp-escape-char) - -(defvar sp-comment-char nil - "Character used to start comments.") -(make-variable-buffer-local 'sp-comment-char) - -(defvar sp-pair-list nil - "List of pairs for autoinsertion or wrapping. - -Maximum length of opening or closing pair is -`sp-max-pair-length' characters.") -(make-variable-buffer-local 'sp-pair-list) - -(defvar sp-local-pairs nil - "List of pair definitions used for current buffer.") -(make-variable-buffer-local 'sp-local-pairs) - -(defvar sp-last-operation nil - "Symbol holding the last successful operation.") -(make-variable-buffer-local 'sp-last-operation) - -(cl-defstruct sp-state - "Smartparens state for the current buffer." - ;; A "counter" to track delayed hook. When a pair is inserted, a - ;; cons of the form (:next . pair) is stored. On the next - ;; (immediately after insertion) invocation of post-command-hook, it - ;; is changed to (:this . pair). When the `car' is :this, the - ;; post-command-hook checks the delayed hooks for `pair' and - ;; executes them, then reset the "counter". - delayed-hook - ;; TODO - delayed-insertion - ;; The last point checked by sp--syntax-ppss and its result, used for - ;; memoization - last-syntax-ppss-point - last-syntax-ppss-result - ;; Value of `sp-pair-list' for this buffer. Note that this might - ;; differ from `sp-pair-list' which is often changed by dynamic - ;; binding - pair-list - ;; Value of `sp-local-pairs' for this buffer. Note that this might - ;; differ from `sp-local-pairs' which is often changed by dynamic - ;; binding - local-pairs - ) - -(defvar sp-state (make-sp-state) - "Smartparens state for the current buffer.") -(make-variable-buffer-local 'sp-state) - -;; TODO: get rid of this -(defvar sp-previous-point -1 - "Location of point before last command. - -This is only updated when some pair-overlay is active. Do not -rely on the value of this variable anywhere else!") -(make-variable-buffer-local 'sp-previous-point) - -;; TODO: get rid of this -(defvar sp-wrap-point nil - "Save the value of point before attemt to wrap a region. - -Used for restoring the original state if the wrapping is -cancelled.") -(make-variable-buffer-local 'sp-wrap-point) - -;; TODO: get rid of this -(defvar sp-wrap-mark nil - "Save the value of mark before attemt to wrap a region. - -Used for restoring the original state if the wrapping is -cancelled.") -(make-variable-buffer-local 'sp-wrap-mark) - -(defvar sp-last-inserted-characters "" - "Characters typed during the wrapping selection. - -If wrapping is cancelled, these characters are re-inserted to the -location of point before the wrapping.") -(make-variable-buffer-local 'sp-last-inserted-characters) - -(defvar sp-last-inserted-pair nil - "Last inserted pair.") -(make-variable-buffer-local 'sp-last-inserted-pair) - -(defvar sp-delayed-pair nil - "The pair whose insertion is being delayed. - -The insertion of this pair is delayed to be carried out in -`sp--post-command-hook-handler'. The format is (opening delim -. beg of the opening delim)") -(make-variable-buffer-local 'sp-delayed-pair) - -(defvar sp-last-wrapped-region nil - "Information about the last wrapped region. -The format is the same as returned by `sp-get-sexp'.") -(make-variable-buffer-local 'sp-last-wrapped-region) - -(defvar sp-point-inside-string nil - "Non-nil if point is inside a string. - -Used to remember the state from before `self-insert-command' is -run.") - -(defvar sp-buffer-modified-p nil - "Non-nil if buffer was modified before `pre-command-hook'.") - -(defvar sp-pre-command-point nil - "Position of `point' before `this-command' gets executed.") - -(defconst sp-max-pair-length 10 - "Maximum length of an opening or closing delimiter. - -Only the pairs defined by `sp-pair' are considered. Tag pairs -can be of any length.") - -(defconst sp-max-prefix-length 100 - "Maximum length of a pair prefix. - -Because prefixes for pairs can be specified using regular -expressions, they can potentially be of arbitrary length. This -settings solves the problem where the parser would decide to -backtrack the entire buffer which would lock up Emacs.") - -(defvar sp-pairs - '((t - . - ((:open "\\\\(" :close "\\\\)" :actions (insert wrap autoskip navigate)) - (:open "\\{" :close "\\}" :actions (insert wrap autoskip navigate)) - (:open "\\(" :close "\\)" :actions (insert wrap autoskip navigate)) - (:open "\\\"" :close "\\\"" :actions (insert wrap autoskip navigate)) - (:open "\"" :close "\"" - :actions (insert wrap autoskip navigate escape) - :unless (sp-in-string-quotes-p) - :post-handlers (sp-escape-wrapped-region sp-escape-quotes-after-insert)) - (:open "'" :close "'" - :actions (insert wrap autoskip navigate escape) - :unless (sp-in-string-quotes-p sp-point-after-word-p) - :post-handlers (sp-escape-wrapped-region sp-escape-quotes-after-insert)) - (:open "(" :close ")" :actions (insert wrap autoskip navigate)) - (:open "[" :close "]" :actions (insert wrap autoskip navigate)) - (:open "{" :close "}" :actions (insert wrap autoskip navigate)) - (:open "`" :close "`" :actions (insert wrap autoskip navigate))))) - "List of pair definitions. - -Maximum length of opening or closing pair is -`sp-max-pair-length' characters.") - -(defvar sp-tags nil - "List of tag definitions. See `sp-local-tag' for more information.") - -(defvar sp-prefix-tag-object nil - "If non-nil, only consider tags while searching for next thing.") - -(defvar sp-prefix-pair-object nil - "If non-nil, only consider pairs while searching for next thing. - -Pairs are defined as expressions delimited by pairs from -`sp-pair-list'.") - -(defvar sp-prefix-symbol-object nil - "If non-nil, only consider symbols while searching for next thing. - -Symbol is defined as a chunk of text recognized by -`sp-forward-symbol'.") - -(define-obsolete-variable-alias 'sp--lisp-modes 'sp-lisp-modes "2015-11-08") - -(defcustom sp-lisp-modes '( - cider-repl-mode - clojure-mode - clojurec-mode - clojurescript-mode - clojurex-mode - common-lisp-mode - emacs-lisp-mode - eshell-mode - geiser-repl-mode - inf-clojure-mode - inferior-emacs-lisp-mode - inferior-lisp-mode - inferior-scheme-mode - lisp-interaction-mode - lisp-mode - monroe-mode - racket-mode - racket-repl-mode - scheme-interaction-mode - scheme-mode - slime-repl-mode - stumpwm-mode - ) - "List of Lisp-related modes." - :type '(repeat symbol) - :group 'smartparens) - -(defcustom sp-clojure-modes '( - cider-repl-mode - clojure-mode - clojurec-mode - clojurescript-mode - clojurex-mode - inf-clojure-mode - ) - "List of Clojure-related modes." - :type '(repeat symbol) - :group 'smartparens) - -(defcustom sp-no-reindent-after-kill-modes '( - python-mode - coffee-mode - asm-mode - makefile-gmake-mode - ) - "List of modes that should not reindent after kill." - :type '(repeat symbol) - :group 'smartparens) - -(defvar sp--html-modes '( - sgml-mode - html-mode - rhtml-mode - nxhtml-mode - nxml-mode - web-mode - jinja2-mode - html-erb-mode - ) - "List of HTML modes.") - -(defvar sp-message-alist - '((:unmatched-expression - "Search failed: there is an unmatched expression somewhere or we are at the beginning/end of file" - "Unmatched expression") - (:unbalanced-region - "Can not kill the region: the buffer would end up in an unbalanced state after deleting the active region" - "Killing the region would make the buffer unbalanced" - "Unbalanced region") - (:delimiter-in-string - "Ignored: opening or closing pair is inside a string or comment and matching pair is outside (or vice versa)") - (:no-matching-tag - "Search failed: no matching tag found" - "No matching tag") - (:invalid-context-prev - "Invalid context: previous h-sexp ends after the next one" - "Invalid context") - (:invalid-context-cur - "Invalid context: current h-sexp starts after the next one" - "Invalid context") - (:no-structure-found - "Previous sexp starts after current h-sexp or no structure was found" - "No valid structure found") - (:invalid-structure - "Ignored: this operation would result in invalid structure" - "Ignored because of invalid structure") - (:cant-slurp - "Ignored: we can not slurp without breaking strictly balanced expression" - "Can not slurp without breaking balance") - (:cant-slurp-context - "Ignored: we can not slurp into different context (comment -> code)" - "Can not slurp into different context") - (:cant-insert-closing-delimiter - "We can not insert unbalanced closing delimiter in strict mode" - "Can not insert unbalanced delimiter") - (:blank-sexp - "Point is in blank sexp, nothing to barf" - "Point is in blank sexp") - (:point-not-deep-enough - "Point has to be at least two levels deep to swap the enclosing delimiters" - "Point has to be at least two levels deep" - "Point not deep enough") - (:different-type - "The expressions to be joined are of different type" - "Expressions are of different type")) - "List of predefined messages to be displayed by `sp-message'. - -Each element is a list consisting of a keyword and one or more -strings, which are chosen based on the `sp-message-width' -variable. If the latter is t, the first string is chosen as -default, which should be the most verbose option available.") - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Customize & Mode definitions - -(defgroup smartparens () - "Smartparens minor mode." - :group 'editing - :prefix "sp-") - -;;;###autoload -(define-minor-mode smartparens-mode - "Toggle smartparens mode. - -You can enable pre-set bindings by customizing -`sp-base-key-bindings' variable. The current content of -`smartparens-mode-map' is: - - \\{smartparens-mode-map}" - :init-value nil - :lighter (" SP" (:eval (if smartparens-strict-mode "/s" ""))) - :group 'smartparens - :keymap smartparens-mode-map - (if smartparens-mode - (progn - (sp--init) - (add-hook 'self-insert-uses-region-functions 'sp-wrap--can-wrap-p nil 'local) - (run-hooks 'smartparens-enabled-hook)) - (remove-hook 'self-insert-uses-region-functions 'sp-wrap--can-wrap-p 'local) - (run-hooks 'smartparens-disabled-hook))) - -(defvar smartparens-strict-mode-map - (let ((map (make-sparse-keymap))) - (define-key map [remap delete-char] 'sp-delete-char) - (define-key map [remap delete-forward-char] 'sp-delete-char) - (define-key map [remap backward-delete-char-untabify] 'sp-backward-delete-char) - (define-key map [remap backward-delete-char] 'sp-backward-delete-char) - (define-key map [remap delete-backward-char] 'sp-backward-delete-char) - (define-key map [remap kill-word] 'sp-kill-word) - (define-key map [remap kill-line] 'sp-kill-hybrid-sexp) - (define-key map [remap backward-kill-word] 'sp-backward-kill-word) - (define-key map [remap kill-region] 'sp-kill-region) - (define-key map [remap delete-region] 'sp-delete-region) - (define-key map [remap kill-whole-line] 'sp-kill-whole-line) - map) - "Keymap used for `smartparens-strict-mode'.") - -;;;###autoload -(define-minor-mode smartparens-strict-mode - "Toggle the strict smartparens mode. - -When strict mode is active, `delete-char', `kill-word' and their -backward variants will skip over the pair delimiters in order to -keep the structure always valid (the same way as `paredit-mode' -does). This is accomplished by remapping them to -`sp-delete-char' and `sp-kill-word'. There is also function -`sp-kill-symbol' that deletes symbols instead of words, otherwise -working exactly the same (it is not bound to any key by default). - -When strict mode is active, this is indicated with \"/s\" -after the smartparens indicator in the mode list." - :init-value nil - :group 'smartparens - (if smartparens-strict-mode - (progn - (unless smartparens-mode - (smartparens-mode 1)) - (unless (-find-indices (lambda (it) (eq (car it) 'smartparens-strict-mode)) minor-mode-overriding-map-alist) - (setq minor-mode-overriding-map-alist - (cons `(smartparens-strict-mode . ,smartparens-strict-mode-map) minor-mode-overriding-map-alist))) - (put 'sp-backward-delete-char 'delete-selection 'sp--delete-selection-supersede-p) - (put 'sp-delete-char 'delete-selection 'sp--delete-selection-supersede-p) - (add-hook 'self-insert-uses-region-functions 'sp--self-insert-uses-region-strict-p nil 'local) - (setq sp-autoskip-closing-pair 'always)) - (setq minor-mode-overriding-map-alist - (-remove (lambda (it) (eq (car it) 'smartparens-strict-mode)) minor-mode-overriding-map-alist)) - (put 'sp-backward-delete-char 'delete-selection 'supersede) - (put 'sp-delete-char 'delete-selection 'supersede) - (remove-hook 'self-insert-uses-region-functions 'sp--self-insert-uses-region-strict-p 'local) - (let ((std-val (car (plist-get (symbol-plist 'sp-autoskip-closing-pair) 'standard-value))) - (saved-val (car (plist-get (symbol-plist 'sp-autoskip-closing-pair) 'saved-value)))) - (setq sp-autoskip-closing-pair (eval (or saved-val std-val)))))) - -;;;###autoload -(define-globalized-minor-mode smartparens-global-strict-mode - smartparens-strict-mode - turn-on-smartparens-strict-mode - :group 'smartparens) - -(defcustom sp-ignore-modes-list '( - minibuffer-inactive-mode - ) - "Modes where smartparens mode is inactive if allowed globally." - :type '(repeat symbol) - :group 'smartparens) - -;;;###autoload -(defun turn-on-smartparens-strict-mode () - "Turn on `smartparens-strict-mode'." - (interactive) - (unless (or (member major-mode sp-ignore-modes-list) - (and (not (derived-mode-p 'comint-mode)) - (eq (get major-mode 'mode-class) 'special))) - (smartparens-strict-mode 1))) - -;;;###autoload -(defun turn-off-smartparens-strict-mode () - "Turn off `smartparens-strict-mode'." - (interactive) - (smartparens-strict-mode -1)) - -(defun sp--init () - "Initialize the buffer local smartparens state. - - This includes pair bindings and other buffer local variables -that depend on the active `major-mode'." - (setq sp-state (make-sp-state)) - ;; setup local pair replacements - (sp--update-local-pairs) - ;; set the escape char - (dotimes (char 256) - (unless sp-escape-char - (when (= ?\\ (char-syntax char)) - (setq sp-escape-char (string char)))) - (unless sp-comment-char - (when (= ?< (char-syntax char)) - (setq sp-comment-char (string char)))))) - -(defun sp--maybe-init () - "Initialize the buffer if it is not already initialized. - -See `sp--init'." - (unless sp-pair-list - (sp--init))) - -(defun sp--update-sp-pair-list () - "Update `sp-pair-list' according to current value of `sp-local-pairs'." - (setq sp-pair-list - (->> sp-local-pairs - (--map (cons (plist-get it :open) (plist-get it :close))) - (-sort (lambda (x y) (> (length (car x)) (length (car y)))))))) - -(defun sp--update-local-pairs () - "Update local pairs after change or at mode initialization. - -This commands load all the parent major mode definitions and -merges them into current buffer's `sp-local-pairs'." - (let ((parent-modes (-fix (lambda (x) - (--if-let (get (car x) 'derived-mode-parent) - (cons it x) - x)) - (list major-mode)))) - ;; Combine all the definitions from the most ancient parent to the - ;; most recent parent - (--each parent-modes (sp-update-local-pairs it)))) - -(defun sp-update-local-pairs (configuration) - "Update `sp-local-pairs' with CONFIGURATION. - -The pairs are only updated in current buffer not in all buffers -with the same major mode! If you want to update all buffers of -the specific major-modes use `sp-local-pair'. - -CONFIGURATION can be a symbol to be looked up in `sp-pairs' or a -property list corresponding to the arguments of `sp-local-pair' -or a list of such property lists." - (setq sp-local-pairs - (cond - ((symbolp configuration) - (sp--merge-pair-configurations (cdr (assq configuration sp-pairs)))) - ((plist-member configuration :open) - (sp--merge-pair-configurations (list configuration))) - (t - (sp--merge-pair-configurations configuration)))) - - ;; Keep only those which have non-nil :actions - (setq sp-local-pairs (--filter (plist-get it :actions) sp-local-pairs)) - - ;; update the `sp-pair-list'. This is a list only containing - ;; (open.close) cons pairs for easier querying. We also must order - ;; it by length of opening delimiter in descending order (first - ;; value is the longest) - (sp--update-sp-pair-list) - (setf (sp-state-local-pairs sp-state) sp-local-pairs) - (setf (sp-state-pair-list sp-state) sp-pair-list)) - -(defun sp--update-local-pairs-everywhere (&rest modes) - "Run `sp--update-local-pairs' in all buffers. - -This is necessary to update all the buffer-local definitions. If -MODES is non-nil, only update buffers with `major-mode' equal to -MODES." - (setq modes (-flatten modes)) - (--each (buffer-list) - (with-current-buffer it - (when (and smartparens-mode - (or (not modes) - (--any? (derived-mode-p it) modes))) - (sp--update-local-pairs))))) - -(defcustom smartparens-enabled-hook nil - "Called after `smartparens-mode' is turned on." - :type 'hook - :group 'smartparens) - -(defcustom smartparens-disabled-hook nil - "Called after `smartparens-mode' is turned off." - :type 'hook - :group 'smartparens) - -;;;###autoload -(define-globalized-minor-mode smartparens-global-mode - smartparens-mode - turn-on-smartparens-mode) - -;;;###autoload -(defun turn-on-smartparens-mode () - "Turn on `smartparens-mode'. - -This function is used to turn on `smartparens-global-mode'. - -By default `smartparens-global-mode' ignores buffers with -`mode-class' set to special, but only if they are also not comint -buffers. - -Additionally, buffers on `sp-ignore-modes-list' are ignored. - -You can still turn on smartparens in these mode manually (or -in mode's startup-hook etc.) by calling `smartparens-mode'." - (interactive) - (unless (or (member major-mode sp-ignore-modes-list) - (and (not (derived-mode-p 'comint-mode)) - (eq (get major-mode 'mode-class) 'special))) - (smartparens-mode t))) - -;;;###autoload -(defun turn-off-smartparens-mode () - "Turn off `smartparens-mode'." - (interactive) - (smartparens-mode -1)) - -;; insert custom -(defcustom sp-autoinsert-pair t - "If non-nil, autoinsert pairs. See `sp-insert-pair'." - :type 'boolean - :group 'smartparens) - -;; TODO: remove this in 1.12 -(defcustom sp-autoinsert-quote-if-followed-by-closing-pair nil - "If non-nil autoinsert quotes when the point is followed by closing delimiter. - -This option only changes behaviour of the insertion process if -point is inside a string. In other words, if string is not -closed and next character is a closing pair. - -For example, in a situation like this: - - [\"some text|] - -after pressing \", one would probably want to insert the closing -quote, not a nested pair (\\\"\\\"), to close the string literal -in the array. To enable such behaviour, set this variable to -nil. - -Note: the values of this varible seem to be backward, i.e. it is -\"enabled\" when the value is nil. This was an unfortunate -choice of wording. It is kept this way to preserve backward -compatibility. The intended meaning is \"insert the pair if -followed by closing pair?\", t = yes." - :type 'boolean - :group 'smartparens) -(make-obsolete-variable - 'sp-autoinsert-quote-if-followed-by-closing-pair - "the option was removed and no longer has any effect." "1.10") - -(defcustom sp-autoskip-closing-pair 'always-end - "Determine the behaviour when skipping closing delimiters. - -If t, skip the following closing pair if the expression is -active (that is right after insertion). This is controlled by -`sp-cancel-autoskip-on-backward-movement'. - -If set to \"always-end\", skip the closing pair even if the -expression is not active and point is at the end of the -expression. This only works for expressions with -single-character delimiters. - -If set to \"always\", `sp-up-sexp' is called whenever the closing -delimiter is typed inside a sexp of the same type. This is the -paredit-like behaviour. This setting only works for -single-character delimiters and does not work for string-like -delimiters. - -See `sp-autoskip-opening-pair' for similar setting for -string-like delimiters. - -See also `sp-skip-closing-pair'." - :type '(radio - (const :tag "Never skip closing delimiter" nil) - (const :tag "Skip closing delimiter in active expressions" t) - (const :tag "Always skip closing delimiter if at the end of sexp" always-end) - (const :tag "Always skip closing delimiter" always)) - :group 'smartparens) -(make-variable-buffer-local 'sp-autoskip-closing-pair) - -(defcustom sp-autoskip-opening-pair nil - "Determine the behaviour when skipping opening delimiters. - -If non-nil, skip into the following string-like expression -instead of inserting a new pair." - :type 'boolean - :group 'smartparens) -(make-variable-buffer-local 'sp-autoskip-opening-pair) - -;; TODO: rename to reflect what this actually does -(defcustom sp-cancel-autoskip-on-backward-movement t - "If non-nil, deactivate the active expression on backward movement. - -Note: the name of this variable is a historic coincidence and -will change in some future release to reflect its real purpose. - -See also `sp-skip-closing-pair'." - :type 'boolean - :group 'smartparens) - -;; delete custom -(defcustom sp-autodelete-pair t - "If non-nil, auto delete pairs. See `sp-delete-pair'." - :type 'boolean - :group 'smartparens) - -(defcustom sp-autodelete-closing-pair t - "If non-nil, auto delete the whole closing-pair. See `sp-delete-pair'." - :type 'boolean - :group 'smartparens) - -(defcustom sp-autodelete-opening-pair t - "If non-nil, auto delete the whole opening-pair. See `sp-delete-pair'." - :type 'boolean - :group 'smartparens) - -(defcustom sp-undo-pairs-separately nil - "If non-nil, put an `undo-boundary' before each inserted pair. - -Calling undo after smartparens complete a pair will remove only -the pair before undoing any previous insertion. - -WARNING: This option is implemented by hacking the -`buffer-undo-list'. Turning this option on might have -irreversible consequences on the buffer's undo information and in -some cases might remove important information. Usage of package -`undo-tree' is recommended if you ever need to revert to a state -unreachable by undo." - :type 'boolean - :group 'smartparens) - -(defcustom sp-successive-kill-preserve-whitespace 1 - "Control the behaviour of `sp-kill-sexp' on successive kills. - -In the description, we consider more than one space -\"superfluous\", however, newlines are preserved." - :type '(radio - (const :tag "Always preserve the whitespace" 0) - (const :tag "Remove superfluous whitespace after last kill" 1) - (const :tag "Remove superfluous whitespace after all kills" 2)) - :group 'smartparens) - -;; wrap custom -(defcustom sp-autowrap-region t - "If non-nil, wrap the active region with pair." - :type 'boolean - :group 'smartparens) - -(defcustom sp-wrap-show-possible-pairs t - "If non-nil, show possible pairs which can complete the wrapping." - :type 'boolean - :group 'smartparens) - -(defcustom sp-autodelete-wrap t - "If non-nil, autodelete opening and closing pair of most recent wrapping. - -Deletion command must be the very first command after the -insertion, otherwise normal behaviour is applied." - :type 'boolean - :group 'smartparens) - -(defcustom sp-wrap-repeat-last 1 - "Context in which smartparens repeats the last wrap. - -If the last operation was a wrap and we insert another pair at -the beginning or end of the last wrapped region, repeat the -wrap on this region with current pair." - :type '(radio - (const :tag "Do not repeat wrapping" 0) - (const :tag "Only repeat if current tag is the same as the last one" 1) - (const :tag "Always repeat if the point is after the opening/closing delimiter of last wrapped region" 2)) - :group 'smartparens) - -(defcustom sp-wrap-entire-symbol nil - "If non-nil, do NOT wrap the entire symbol, only the part after point. - -If set to \"Enable globally\", smart symbol wrapping is active -everywhere. This is the default option. - -If set to \"Disable globally\", smart symbol wrapping is disabled -everywhere. - -Otherwise, a list of major modes where smart symbol wrapping is -*disabled* can be supplied. - -Examples: - - foo-ba|r-baz -> (|foo-bar-baz) ;; if enabled - - foo-ba|r-baz -> foo-ba(|r-baz) ;; if disabled" - :type '(choice - (const :tag "Enable globally" nil) - (const :tag "Disable globally" globally) - (repeat :tag "Disable in these major modes" symbol)) - :group 'smartparens) - -(defcustom sp-wrap-from-point nil - "If non-nil, do not wrap from the beginning of next expression but from point. - -However, if the point is inside a symbol/word, the entire -symbol/word is wrapped. To customize this behaviour, see -variable `sp-wrap-entire-symbol'." - :type 'boolean - :group 'smartparens) - -(defcustom sp-wrap-respect-direction nil - "When non-nil respect the wrap direction. - -When non-nil, wrapping with opening pair always jumps to the -beginning of the region and wrapping with closing pair always -jumps to the end of the region. - - |fooM -> [ -> |[foo]M - Mfoo| -> [ -> |[foo]M - |fooM -> ] -> M[foo]| - Mfoo| -> ] -> M[foo]| - -When nil, closing pair places the point at the end of the region -and the opening pair leaves the point at its original -position (before or after the region). - - |fooM -> [ -> [|fooM] - Mfoo| -> [ -> M[foo]| - |fooM -> ] -> M[foo]| - Mfoo| -> ] -> M[foo]|" - :type 'boolean - :group 'smartparens) - -;; escaping custom -(defcustom sp-escape-wrapped-region t - "If non-nil, escape special chars inside the just wrapped region." - :type 'boolean - :group 'smartparens) - -(defcustom sp-escape-quotes-after-insert t - "If non-nil, escape string quotes if typed inside string." - :type 'boolean - :group 'smartparens) - -;; navigation & manip custom -(defcustom sp-navigate-consider-sgml-tags '( - html-mode - ) - "List of modes where sgml tags are considered to be sexps." - :type '(repeat symbol) - :group 'smartparens) - - -(defcustom sp-navigate-use-textmode-stringlike-parser '((derived . text-mode)) - "List of modes where textmode stringlike parser is used. - -See `sp-get-textmode-stringlike-expression'. - -Each element of the list can either be a symbol which is then -checked against `major-mode', or a cons (derived . PARENT-MODE), -where PARENT-MODE is checked using `derived-mode-p'." - :type '(repeat (choice - (symbol :tag "Major mode") - (cons :tag "Derived mode" - (const derived) - (symbol :tag "Parent major mode name")))) - :group 'smartparens) - -(defcustom sp-navigate-consider-symbols t - "If non-nil, consider symbols outside balanced expressions as such. - -Symbols are recognized by function `sp-forward-symbol'. This -setting affect all the navigation and manipulation functions -where it make sense. - -Also, special handling of strings is enabled, where the whole -string delimited with \"\" is considered as one token. - -WARNING: This is a legacy setting and changing its value to NIL -may break many things. It is kept only for backward -compatibility and will be removed in the next major release." - :type 'boolean - :group 'smartparens) - -(defcustom sp-navigate-comments-as-sexps t - "If non-nil, consider comments as sexps in `sp-get-enclosing-sexp'. - -If this option is enabled, unbalanced expressions in comments are -never automatically closed (see `sp-navigate-close-if-unbalanced')." - :type 'boolean - :group 'smartparens) - -;; TODO: add -alist suffix -(defcustom sp-navigate-skip-match `( - (,sp-lisp-modes . sp--elisp-skip-match) - ) - "Major-mode dependent specifications of skip functions. - -Alist where the key is a list of major-modes and the value is a -function used to skip over matches in `sp-get-paired-expression'. -This function takes three arguments: the currently matched -delimiter, beginning of match and end of match. If this function -returns true, the current match will be skipped. - -You can use this to skip over expressions that serve multiple -functions, such as if/end pair or unary if in Ruby or * in -markdown when it signifies list item instead of emphasis. If the -exception is only relevant to one pair, you should rather -use :skip-match option in `sp-local-pair'." - :type '(alist - :key-type (repeat symbol) - :value-type symbol) - :group 'smartparens) - -(defcustom sp-navigate-reindent-after-up `( - (interactive - ,@sp-lisp-modes - ) - ) - "Modes where sexps should be reindented after `sp-up-sexp'. - -The whitespace between the closing delimiter and last \"thing\" -inside the expression is removed. It works analogically for the -`sp-backward-up-sexp'. - -Note that this also happens when `sp-skip-closing-pair' is -invoked (usually in strict mode when the closing delimiter is -typed) as it calls `sp-up-sexp' internally. This behaviour can -be customized by various settings of `sp-autoskip-closing-pair' -and `sp-autoskip-opening-pair'. - -If the mode is in the list \"interactive\", only reindent the sexp -if the command was called interactively. This is recommended for -general use. - -If the mode is in the list \"always\", reindend the sexp even if the -command was called programatically." - :type '(alist - :options (interactive always) - :value-type (repeat symbol)) - :group 'smartparens) - -(defcustom sp-navigate-reindent-after-up-in-string t - "If non-nil, `sp-up-sexp' will reindent inside strings. - -If `sp-navigate-reindent-after-up' is enabled and the point is -inside a string, this setting determines if smartparens should -reindent the current (string) sexp or not." - :type 'boolean - :group 'smartparens) - -(defcustom sp-navigate-close-if-unbalanced nil - "If non-nil, insert the closing pair of the un-matched pair on `sp-up-sexp'. - -The closing delimiter is inserted after the symbol at -point (using `sp-previous-sexp')." - :type 'boolean - :group 'smartparens) - -(defcustom sp-navigate-interactive-always-progress-point nil - "Make point always move in the direction of navigation. - -If non-nil and the function is called interactively, -`sp-next-sexp' and `sp-previous-sexp' will always move the point -to the end/beg of such an expression where the point would end up -being further in the direction of travel. - -Note: this behaviour will become default in release 2.0 and will -cease to be configurable." - :type 'boolean - :group 'smartparens) - -(defcustom sp-sexp-prefix nil - "Alist of `major-mode' specific prefix specification. - -Each item is a list with three properties: -- major mode -- a constant symbol 'regexp or 'syntax -- a regexp or a string containing syntax class codes. - -If the second argument is 'regexp, the third argument is -interpreted as a regexp to search backward from the start of an -expression. - -If the second argument is 'syntax, the third argument is -interpreted as string containing syntax codes that will be -skipped. - -You can also override this property locally for a specific pair -by specifying its :prefix property." - :type '(repeat - (list symbol - (choice - (const :tag "Regexp" regexp) - (const :tag "Syntax class codes" syntax)) - string)) - :group 'smartparens) - -(defcustom sp-sexp-suffix nil - "Alist of `major-mode' specific suffix specification. - -Each item is a list with three properties: -- major mode -- a constant symbol 'regexp or 'syntax -- a regexp or a string containing syntax class codes. - -If the second argument is 'regexp, the third argument is -interpreted as a regexp to search forward from the end of an -expression. - -If the second argument is 'syntax, the third argument is -interpreted as string containing syntax codes that will be -skipped. - -You can also override this property locally for a specific pair -by specifying its :suffix property." - :type '(repeat - (list symbol - (choice - (const :tag "Regexp" regexp) - (const :tag "Syntax class codes" syntax)) - string)) - :group 'smartparens) - -(defcustom sp-split-sexp-always-split-as-string t - "Determine if sexp inside string is split. - -If the point is inside a sexp inside a string, the default -behaviour is now to split the string, such that: - - \"foo (|) bar\" - -becomes - - \"foo (\"|\") bar\" - -instead of - - \"foo ()|() bar\". - -Note: the old default behaviour was the reverse, it would split -the sexp, but this is hardly ever what you want. - -You can add a post-handler on string pair and check for -'split-string action to add concatenation operators of the -language you work in (in each `major-mode' you can have a separate -hook). - -For example, in PHP the string concatenation operator is a -dot (.), so you would add: - - (defun my-php-post-split-handler (_ action _) - (when (eq action 'split-sexp) - (just-one-space) - (insert \". . \") - (backward-char 3))) - - (sp-local-pair 'php-mode \"'\" nil - :post-handlers '(my-php-post-split-handler)) - -Then - - echo 'foo |baz'; - -results in - - echo 'foo' . | . 'baz';" - :type 'boolean - :group 'smartparens) - -;; hybrid lines -(defcustom sp-hybrid-kill-excessive-whitespace nil - "Determine how `sp-kill-hybrid-sexp' kills excessive whitespace. - -If non-nil, `sp-kill-hybrid-sexp' will delete all whitespace -up until next hybrid sexp if the point is at the end of line or -on a blank line. - -When it is set to 'kill, whitespace will be appended to the sexp -in kill ring." - :type '(choice - (const :tag "Delete" t) - (const :tag "Kill" kill) - (const :tag "Off" nil)) - :group 'smartparens) - -(defcustom sp-hybrid-kill-entire-symbol nil - "Governs how symbols under point are treated by `sp-kill-hybrid-sexp'. - -If t, always kill the symbol under point. - -If nil, never kill the entire symbol and only kill the part after point. - -If a function, this should be a zero-arg predicate. When it -returns non-nil value, we should kill from point." - :type '(radio - (const :tag "Always kill entire symbol" t) - (const :tag "Always kill from point" nil) - (const :tag "Kill from point only inside strings" sp-point-in-string) - (function :tag "Custom predicate")) - :group 'smartparens) - -(defcustom sp-comment-string nil - "String that is inserted after calling `sp-comment'. - -It is an alist of list of major modes to a string. - -The value of `comment-start' is used if the major mode is not found." - :type '(alist - :key-type (repeat symbol) - :value-type string) - :group 'smartparens) - -;; ui custom -(defcustom sp-highlight-pair-overlay t - "If non-nil, autoinserted pairs are highlighted while point is inside the pair." - :type 'boolean - :group 'smartparens) - -(defcustom sp-highlight-wrap-overlay t - "If non-nil, wrap overlays are highlighted during editing of the wrapping pair." - :type 'boolean - :group 'smartparens) - -(defcustom sp-highlight-wrap-tag-overlay t - "If non-nil, wrap tag overlays are highlighted during editing of the wrapping tag pair." - :type 'boolean - :group 'smartparens) - -(defcustom sp-echo-match-when-invisible t - "If non-nil, show-smartparens-mode prints the line of the -matching paren in the echo area if not visible on screen." - :type 'boolean - :group 'smartparens) - -(defcustom sp-message-width 'frame - "Length of information and error messages to display. - -If set to 'frame (the default), messages are chosen based of the -frame width. t means chose the default (verbose) message, nil -means mute. Integers specify the maximum width." - :type '(choice (const :tag "Fit to frame" frame) - (const :tag "Verbose" t) - (const :tag "Mute" nil) - (integer :tag "Max width")) - :group 'smartparens) - -;; TODO: this should be true by default > then the behaviour is -;; controlled by subword-mode... and this is a hard override -(defcustom sp-use-subword nil - "Override of `subword-mode' killing behaviour. - -If non-nill, `sp-kill-word' and `sp-backward-kill-word' only -kill \"subwords\" when `subword-mode' is active." - :type 'boolean - :group 'smartparens) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Selection mode handling - -(defun sp--delete-selection-p () - "Return t if `delete-selection-mode' or `cua-delete-selection' is enabled." - (or (and (boundp 'delete-selection-mode) delete-selection-mode) - (and (boundp 'cua-delete-selection) cua-delete-selection cua-mode))) - -(defun sp--delete-selection-supersede-p () - "Decide if the current command should delete the region or not. - -This check is used as value of 'delete-selection property on the -command symbol." - (if (or (equal current-prefix-arg '(4)) - (sp-region-ok-p (region-beginning) (region-end))) - 'supersede - (sp-message :unbalanced-region) - ;; Since this check runs in the pre-command-hook we can change the - ;; command to be executed... in this case we set it to ignore - ;; because we don't want to do anything. - (setq this-command 'ignore) - nil)) - -(defun sp--self-insert-uses-region-strict-p () - "Decide if the current `self-insert-command' should be able to -replace the region. - -This check is added to the special hook -`self-insert-uses-region-functions' which is checked by -`delete-selection-uses-region-p'." - (if (or (equal current-prefix-arg '(4)) - (sp-region-ok-p (region-beginning) (region-end))) - ;; region is OK or we are allowed to replace it, just say nil so - ;; that delsel handles this - nil - ;; in case region is bad we interrupt the insertion - (setq this-command 'ignore) - t)) - -;; TODO: this function was removed from Emacs, we should get rid of -;; the advice in time. -(defadvice cua-replace-region (around fix-sp-wrap activate) - "Fix `sp-wrap' in `cua-selection-mode'." - (if (sp-wrap--can-wrap-p) - (cua--fallback) - ad-do-it)) - -(defadvice cua-delete-region (around fix-sp-delete-region activate) - "If `smartparens-strict-mode' is enabled, perform a region -check before deleting." - (if smartparens-strict-mode - (progn - (unless (or current-prefix-arg - (sp-region-ok-p (region-beginning) (region-end))) - (user-error (sp-message :unbalanced-region :return))) - ad-do-it) - ad-do-it)) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Misc/Utility functions - -(defun sp--indent-region (start end &optional column) - "Call `indent-region' unless `aggressive-indent-mode' is enabled. - -START, END and COLUMN are the same as in `indent-region'." - (unless (bound-and-true-p aggressive-indent-mode) - ;; Don't issue "Indenting region..." message. - (cl-letf (((symbol-function 'message) #'ignore)) - (indent-region start end column)))) - -(defmacro sp-with-modes (arg &rest forms) - "Add ARG as first argument to each form in FORMS. - -This can be used with `sp-local-pair' calls to automatically -insert the modes." - (declare (indent 1) - (debug (form body))) - (let ((modes (make-symbol "modes"))) - `(let ((,modes ,arg)) - (progn - ,@(mapcar (lambda (form) (append (list (car form) modes) (cdr form))) forms))))) - -(font-lock-add-keywords 'emacs-lisp-mode `((,(concat "(" - (regexp-opt '("sp-with-modes" - "sp-get" - "sp-compare-sexps") t) - "\\_>") - (1 font-lock-keyword-face)))) - -(defmacro sp--with-case-sensitive (&rest body) - "Ensure that searching done within BODY is case-sensitive. - -Bind `case-fold-search' to nil if it is not already and avoid the -bind if it is already. Any function that needs to use any of the -sp--looking-* functions more than once should wrap them all in -`sp--with-case-sensitive'." - (declare (indent 0) - (debug (body))) - `(if case-fold-search - (let ((case-fold-search nil)) - ,@body) - ,@body)) - -(defun sp--evil-normal-state-p () - "Check to see if the current `evil-state' is in normal mode." - (and (fboundp 'evil-normal-state-p) (evil-normal-state-p))) - -(defun sp--evil-motion-state-p () - "Check to see if the current `evil-state' is in motion mode." - (and (fboundp 'evil-motion-state-p) (evil-motion-state-p))) - -(defun sp--evil-visual-state-p () - "Check to see if the current `evil-state' is in visual mode." - (and (fboundp 'evil-visual-state-p) (evil-visual-state-p))) - -(defun sp-point-in-blank-line (&optional p) - "Return non-nil if line at point is blank (whitespace only). - -If optional argument P is present test this instead of point." - (save-excursion - (when p (goto-char p)) - (beginning-of-line) - (looking-at "[ \t]*$"))) - -(defun sp-point-in-blank-sexp (&optional p) - "Return non-nil if point is inside blank (whitespace only) sexp. - -If optional argument P is present test this instead of point. - -Warning: it is only safe to call this when point is inside a -sexp, otherwise the call may be very slow." - (save-excursion - (when p (goto-char p)) - (-when-let (enc (sp-get-enclosing-sexp)) - (sp-get enc (string-match-p - "\\`[ \t\n]*\\'" - (buffer-substring-no-properties :beg-in :end-in)))))) - -(defun sp-char-is-escaped-p (&optional point) - "Test if the char at POINT is escaped or not. - -POINT defaults to `point'." - (setq point (or point (point))) - (save-match-data - (when (save-excursion - (goto-char point) - (looking-back (concat sp-escape-char sp-escape-char "+") nil t)) - (eq (logand (length (match-string 0)) 1) 1)))) - -(defun sp--syntax-ppss (&optional p) - "Memoize the last result of `syntax-ppss'. - -P is the point at which we run `syntax-ppss'" - (let ((p (or p (point)))) - (if (eq p (sp-state-last-syntax-ppss-point sp-state)) - (sp-state-last-syntax-ppss-result sp-state) - ;; Add hook to reset memoization if necessary - (unless (sp-state-last-syntax-ppss-point sp-state) - (add-hook 'before-change-functions 'sp--reset-memoization t t)) - (setf (sp-state-last-syntax-ppss-point sp-state) p - (sp-state-last-syntax-ppss-result sp-state) (syntax-ppss p))))) - -(defun sp-point-in-string (&optional p) - "Return non-nil if point is inside string or documentation string. - -This function actually returns the 3rd element of `syntax-ppss' -which can be a number if the string is delimited by that -character or t if the string is delimited by general string -fences. - -If optional argument P is present test this instead of point." - (ignore-errors - (save-excursion - (nth 3 (sp--syntax-ppss p))))) - -(defun sp-point-in-comment (&optional p) - "Return non-nil if point is inside comment. - -If optional argument P is present test this instead off point." - (setq p (or p (point))) - (ignore-errors - (save-excursion - (or (nth 4 (sp--syntax-ppss p)) - ;; this also test opening and closing comment delimiters... we - ;; need to chack that it is not newline, which is in "comment - ;; ender" class in elisp-mode, but we just want it to be - ;; treated as whitespace - (and (< p (point-max)) - (memq (char-syntax (char-after p)) '(?< ?>)) - (not (eq (char-after p) ?\n))) - ;; we also need to test the special syntax flag for comment - ;; starters and enders, because `syntax-ppss' does not yet - ;; know if we are inside a comment or not (e.g. / can be a - ;; division or comment starter...). - (-when-let (s (car (syntax-after p))) - (or (and (/= 0 (logand (lsh 1 16) s)) - (nth 4 (syntax-ppss (+ p 2)))) - (and (/= 0 (logand (lsh 1 17) s)) - (nth 4 (syntax-ppss (+ p 1)))) - (and (/= 0 (logand (lsh 1 18) s)) - (nth 4 (syntax-ppss (- p 1)))) - (and (/= 0 (logand (lsh 1 19) s)) - (nth 4 (syntax-ppss (- p 2)))))))))) - -(defun sp-point-in-string-or-comment (&optional p) - "Return non-nil if point is inside string, documentation string or a comment. - -If optional argument P is present, test this instead of point." - (or (sp-point-in-string p) - (sp-point-in-comment p))) - -;; TODO: add -p suffix -(defun sp-point-in-symbol (&optional p) - "Return non-nil if `point' is inside symbol. - -If P is non-nil, interpret it as buffer position and test there. - -Point is inside symbol if characters on both sides of the point -are in either word or symbol class." - (setq p (or p (point))) - (save-excursion - (goto-char p) - (and (/= 0 (following-char)) - (memq (char-syntax (following-char)) '(?w ?_)) - (memq (char-syntax (preceding-char)) '(?w ?_))))) - -(defun sp--single-key-description (event) - "Return a description of the last EVENT. - -Replace all the function key symbols with garbage character (ň). - -TODO: fix this!" - (let ((original (single-key-description event))) - (cond - ((string-match-p "<.*?>" original) "ň") - ((string-match-p "SPC" original) " ") - (t original)))) - -;; see https://github.com/Fuco1/smartparens/issues/125#issuecomment-20356176 -(defun sp--current-indentation () - "Get the indentation offset of the current line." - (save-excursion - (back-to-indentation) - (current-column))) - -(defun sp--calculate-indentation-offset (old-column old-indentation) - "Calculate correct indentation after re-indent. - -OLD-COLUMN is the column before reindent. - -OLD-INDENTATION is the indentation depth before reindent." - (let ((indentation (sp--current-indentation))) - (cond - ;; Point was in code, so move it along with the re-indented code - ((>= old-column old-indentation) - (+ old-column (- indentation old-indentation))) - ;; Point was indentation, but would be in code now, so move to - ;; the beginning of indentation - ((<= indentation old-column) indentation) - ;; Point was in indentation, and still is, so leave it there - (:else old-column)))) - -(defun sp--back-to-indentation (old-column old-indentation) - "Set the current column to proper value. - -See `sp--keep-indentation'. - -OLD-COLUMN is the column before reindent. - -OLD-INDENTATION is the indentation depth before reindent." - (let ((offset (sp--calculate-indentation-offset old-column old-indentation))) - (move-to-column offset))) - -;; TODO: rename to preserve-current-column -(defmacro sp--keep-indentation (&rest body) - "Execute BODY and restore the column. - -If point was in code move it along if the line is reinvented so -it is the same distance relative to first code column. - -If point was previously in the indentation region but would end -up in code, move it to the first code column. - -If point was in the indentation region and is still there after -BODY, do nothing." - (declare (indent 0) - (debug (body))) - (let ((c (make-symbol "c")) - (i (make-symbol "i"))) - `(let ((,c (current-column)) - (,i (sp--current-indentation))) - ,@body - (sp--back-to-indentation ,c ,i)))) - -;; Please contribute these if you come across some! -(defvar sp--self-insert-commands - '(self-insert-command - org-self-insert-command - LaTeX-insert-left-brace) - "List of commands that are some sort of `self-insert-command'. - -Many modes rebind \"self-inserting\" keys to \"smart\" versions -which do some additional processing before delegating the -insertion to `self-insert-command'. Smartparens needs to be able -to distinguish these to properly handle insertion and reinsertion -of pairs and wraps.") - -;; Please contribute these if you come across some! -(defvar sp--special-self-insert-commands - '( - TeX-insert-dollar - TeX-insert-quote - quack-insert-opening-paren - quack-insert-closing-paren - quack-insert-opening-bracket - quack-insert-closing-bracket - racket-insert-closing-paren - racket-insert-closing-bracket - racket-insert-closing-brace - ) - "List of commands which are handled as if they were `self-insert-command's. - -Some modes redefine \"self-inserting\" keys to \"smart\" versions -which do some additional processing but do _not_ delegate the -insertion to `self-insert-command', instead inserting via -`insert'. Smartparens needs to be able to distinguish these to -properly handle insertion and reinsertion of pairs and wraps. - -The `sp--post-self-insert-hook-handler' is called in the -`post-command-hook' for these commands.") - -(defun sp--self-insert-command-p () - "Return non-nil if `this-command' is some sort of `self-insert-command'." - (memq this-command sp--self-insert-commands)) - -(defun sp--special-self-insert-command-p () - "Return non-nil if `this-command' is \"special\" self insert command. - -A special self insert command is one that inserts a character but -does not trigger `post-self-insert-hook'." - (memq this-command sp--special-self-insert-commands)) - -(defun sp--signum (x) - "Return 1 if X is positive, -1 if negative, 0 if zero." - (cond ((> x 0) 1) ((< x 0) -1) (t 0))) - -(cl-eval-when (compile eval load) - (defun sp--get-substitute (struct list) - "Only ever call this from sp-get! This function does the -replacement of all the keywords with actual calls to sp-get." - (if (listp list) - (if (eq (car list) 'sp-get) - list - (mapcar (lambda (x) (sp--get-substitute struct x)) - (let ((command (car list))) - (cond - ((eq command 'sp-do-move-op) - (let ((argument (make-symbol "--sp-argument--"))) - `(let ((,argument ,(cadr list))) - (if (< ,argument :beg-prf) - (progn - (goto-char :beg-prf) - (delete-char (+ :op-l :prefix-l)) - (goto-char ,argument) - (insert :prefix :op)) - (goto-char ,argument) - (insert :prefix :op) - (goto-char :beg-prf) - (delete-char (+ :op-l :prefix-l)))))) - ((eq command 'sp-do-move-cl) - (let ((argument (make-symbol "--sp-argument--"))) - `(let ((,argument ,(cadr list))) - (if (> ,argument :end-in) - (progn - (goto-char ,argument) - (insert :cl :suffix) - (goto-char :end-in) - (delete-char (+ :cl-l :suffix-l))) - (goto-char :end-in) - (delete-char (+ :cl-l :suffix-l)) - (goto-char ,argument) - (insert :cl :suffix))))) - ((eq command 'sp-do-del-op) - `(progn - (goto-char :beg-prf) - (delete-char (+ :op-l :prefix-l)))) - ((eq command 'sp-do-del-cl) - `(progn - (goto-char :end-in) - (delete-char (+ :cl-l :suffix-l)))) - ((eq command 'sp-do-put-op) - `(progn - (goto-char ,(cadr list)) - (insert :prefix :op))) - ((eq command 'sp-do-put-cl) - `(progn - (goto-char ,(cadr list)) - (insert :cl :suffix))) - (t list))))) - (if (keywordp list) - (sp--get-replace-keyword struct list) - list))) - - (defun sp--get-replace-keyword (struct keyword) - (cl-case keyword - ;; point in buffer before the opening delimiter - (:beg `(plist-get ,struct :beg)) - ;; point in the buffer after the closing delimiter - (:end `(plist-get ,struct :end)) - ;; point in buffer after the opening delimiter - (:beg-in `(+ (plist-get ,struct :beg) (length (plist-get ,struct :op)))) - ;; point in buffer before the closing delimiter - (:end-in `(- (plist-get ,struct :end) (length (plist-get ,struct :cl)))) - ;; point in buffer before the prefix of this expression - (:beg-prf `(- (plist-get ,struct :beg) (length (plist-get ,struct :prefix)))) - ;; point in the buffer after the suffix of this expression - (:end-suf `(+ (plist-get ,struct :end) (length (plist-get ,struct :suffix)))) - ;; opening delimiter - (:op `(plist-get ,struct :op)) - ;; closing delimiter - (:cl `(plist-get ,struct :cl)) - ;; length of the opening pair - (:op-l `(length (plist-get ,struct :op))) - ;; length of the closing pair - (:cl-l `(length (plist-get ,struct :cl))) - ;; length of the entire expression, including enclosing - ;; delimiters and the prefix and suffix - (:len `(- (plist-get ,struct :end) - (plist-get ,struct :beg) - (- (length (plist-get ,struct :prefix))) - (- (length (plist-get ,struct :suffix))))) - ;; length of the the pair ignoring the prefix, including delimiters - (:len-out `(- (plist-get ,struct :end) (plist-get ,struct :beg))) - ;; length of the pair inside the delimiters - (:len-in `(- (plist-get ,struct :end) - (plist-get ,struct :beg) - (length (plist-get ,struct :op)) - (length (plist-get ,struct :cl)))) - ;; expression prefix - (:prefix `(plist-get ,struct :prefix)) - ;; expression prefix length - (:prefix-l `(length (plist-get ,struct :prefix))) - (:suffix `(plist-get ,struct :suffix)) - (:suffix-l `(length (plist-get ,struct :suffix))) - ;; combined op/cl and suffix/prefix - (:opp `(concat (plist-get ,struct :prefix) - (plist-get ,struct :op))) - (:opp-l `(+ (length (plist-get ,struct :prefix)) - (length (plist-get ,struct :op)))) - (:cls `(concat (plist-get ,struct :cl) - (plist-get ,struct :suffix))) - (:cls-l `(+ (length (plist-get ,struct :cl)) - (length (plist-get ,struct :suffix)))) - (t keyword)))) - -;; The structure returned by sp-get-sexp is a plist with following properties: -;; -;; :beg - point in the buffer before the opening delimiter (ignoring prefix) -;; :end - point in the buffer after the closing delimiter -;; :op - opening delimiter -;; :cl - closing delimiter -;; :prefix - expression prefix -;; -;; This structure should never be accessed directly and should only be -;; exposed by the sp-get macro. This way, we can later change the -;; internal representation without much trouble. - -;; TODO: rewrite this in terms of `symbol-macrolet' ?? -(defmacro sp-get (struct &rest forms) - "Get a property from a structure. - -STRUCT is a plist with the format as returned by `sp-get-sexp'. -Which means this macro also works with `sp-get-symbol', -`sp-get-string' and `sp-get-thing'. - -FORMS is an attribute we want to query. Currently supported -attributes are: - -:beg - point in buffer before the opening delimiter -:end - point in the buffer after the closing delimiter -:beg-in - point in buffer after the opening delimiter -:end-in - point in buffer before the closing delimiter -:beg-prf - point in buffer before the prefix of this expression -:end-suf - point in buffer after the suffix of this expression -:op - opening delimiter -:cl - closing delimiter -:op-l - length of the opening pair -:cl-l - length of the closing pair -:len - length of the entire expression, including enclosing - delimiters, the prefix and the suffix -:len-out - length of the the pair ignoring the prefix and suffix, - including delimiters -:len-in - length of the pair inside the delimiters -:prefix - expression prefix -:prefix-l - expression prefix length -:suffix - expression suffix -:suffix-l - expression suffix length - -These special \"functions\" are expanded to do the selected -action in the context of currently queried pair: - -Nullary: -\(sp-do-del-op) - remove prefix and opening delimiter -\(sp-do-del-cl) - remove closing delimiter and suffix - -Unary: -\(sp-do-move-op p) - move prefix and opening delimiter to point p -\(sp-do-move-cl p) - move closing delimiter and suffix to point p -\(sp-do-put-op p) - put prefix and opening delimiter at point p -\(sp-do-put-cl p) - put closing delimiter and suffix at point p - -In addition to these simple queries and commands, this macro -understands arbitrary forms where any of the aforementioned -attributes are used. Therefore, you can for example query for -\"(+ :op-l :cl-l)\". This query would return the sum of lengths -of opening and closing delimiter. A query -\"(concat :prefix :op)\" would return the string containing -expression prefix and the opening delimiter. - -Special care is taken to only evaluate the STRUCT argument once." - (declare (indent 1) - (debug (form body))) - (let ((st (make-symbol "struct"))) - (sp--get-substitute st `(let ((,st ,struct)) ,@forms)))) - -(defmacro sp-compare-sexps (a b &optional fun what-a what-b) - "Return non-nil if the expressions A and B are equal. - -Two expressions are equal if their :beg property is the same. - -If optional argument FUN is non-nil, it is the comparison -function. - -If optional argument WHAT-A is non-nil, use it as a keyword on -which to do the comparsion (default to :beg). - -If optional argument WHAT-B is non-nil, use it as a keyword on -which to do the comparsion (default to WHAT-A)." - (declare (debug (form form &optional functionp keywordp keywordp))) - (setq fun (or fun 'equal)) - (setq what-a (or what-a :beg)) - (setq what-b (or what-b what-a)) - `(,fun (sp-get ,a ,what-a) (sp-get ,b ,what-b))) - -(defun sp-message (key &optional return) - "Display a message. - -KEY is either a string or list of strings, or a keyword, -in which case the string list is looked up in -`sp-message-alist'. The string to be displayed is chosen based on -the `sp-message-width' variable. - -If RETURN is non-nil return the string instead of printing it." - (let ((msgs (cond ((listp key) key) - ((stringp key) (list key)) - (t (cdr (assq key sp-message-alist)))))) - (when (and msgs sp-message-width) - (if (eq sp-message-width t) - (if return (car msgs) (message "%s." (car msgs))) - (let ((maxlen (if (eq sp-message-width 'frame) - (frame-width) - sp-message-width)) - (s nil)) - (dolist (msg msgs) - (if (and (<= (length msg) maxlen) - (> (length msg) (length s))) - (setf s msg))) - (when s - (if return s (message "%s." s)))))))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Adding/removing of pairs/bans/allows etc. - -(defun sp--merge-prop (prop new-pair old-pair) - "Merge a property PROP from NEW-PAIR into OLD-PAIR. - -The list OLD-PAIR must not be nil." - (let ((new-val (plist-get new-pair prop))) - (cl-case prop - (:close (plist-put old-pair :close new-val)) - (:prefix (plist-put old-pair :prefix new-val)) - (:suffix (plist-put old-pair :suffix new-val)) - (:skip-match (plist-put old-pair :skip-match new-val)) - (:trigger (plist-put old-pair :trigger new-val)) - (:trigger-wrap (plist-put old-pair :trigger-wrap new-val)) - ((:actions :when :unless :pre-handlers :post-handlers) - (cl-case (car new-val) - (:add (plist-put old-pair prop (-union (plist-get old-pair prop) (cdr new-val)))) - (:rem (plist-put old-pair prop (-difference (plist-get old-pair prop) (cdr new-val)))) - (t - (cond - ;; this means we have ((:add ...) (:rem ...)) argument - ((and new-val - (listp (car new-val)) - (memq (caar new-val) '(:add :rem))) - (let ((a (assq :add new-val)) - (r (assq :rem new-val))) - (plist-put old-pair prop (-union (plist-get old-pair prop) (cdr a))) - (plist-put old-pair prop (-difference (plist-get old-pair prop) (cdr r))))) - (t - (plist-put old-pair prop (plist-get new-pair prop)))))))))) - -(defun sp--merge-pairs (old-pair new-pair) - "Merge OLD-PAIR and NEW-PAIR. -This modifies the OLD-PAIR by side effect." - (let ((ind 0)) - (--each new-pair - (when (= 0 (% ind 2)) - (sp--merge-prop it new-pair old-pair)) - (setq ind (1+ ind)))) - old-pair) - -(defun sp--update-pair (new-pair old-pair) - "Copy properties from NEW-PAIR to OLD-PAIR. - -The list OLD-PAIR must not be nil." - (let ((ind 0)) - (--each new-pair - (when (= 0 (% ind 2)) - (when (or (not (plist-get old-pair it)) - ;; HACK: we don't want to overwrite list properties - ;; that aren't just :add with :add because this - ;; would break the "idempotency". - (not (equal '(:add) (plist-get new-pair it)))) - (plist-put old-pair it (plist-get new-pair it)))) - (setq ind (1+ ind)))) - old-pair) - -(defun sp--update-pair-list (pair mode) - "Update the PAIR for major mode MODE. - -If this pair is not defined yet for this major mode, add it. If -this pair is already defined, replace all the properties in the -old definition with values from PAIR." - ;; get the structure relevant to mode. t means global setting - (let ((struct (--first (eq mode (car it)) sp-pairs))) - (if (not struct) - (!cons (cons mode (list pair)) sp-pairs) - ;; this does NOT merge changes, only replace the values at - ;; properties. Open delimiter works as ID as usual. - (let ((old-pair (--first (equal (plist-get pair :open) - (plist-get it :open)) - (cdr struct)))) - (if (not old-pair) - (setcdr struct (cons pair (cdr struct))) - (sp--update-pair pair old-pair))))) - sp-pairs) - -(defun sp--get-pair (open list) - "Get the pair with id OPEN from list LIST." - (--first (equal open (plist-get it :open)) list)) - -(defun sp--get-pair-definition (open list &optional prop) - "Get the definition of a pair identified by OPEN from list LIST. - -If PROP is non-nil, return the value of that property instead." - (let ((pair (sp--get-pair open list))) - (if prop - (cond - ((eq prop :op-l) - (length (plist-get pair :open))) - ((eq prop :cl-l) - (length (plist-get pair :close))) - ((eq prop :len) - (+ (length (plist-get pair :open)) (length (plist-get pair :close)))) - ((eq prop :post-handlers) - (--filter (not (listp it)) (plist-get pair prop))) - ((eq prop :post-handlers-cond) - (--filter (listp it) (plist-get pair :post-handlers))) - ((eq prop :when) - (--filter (not (listp it)) (plist-get pair :when))) - ((eq prop :when-cond) - (-flatten (-concat (--filter (listp it) (plist-get pair :when))))) - (t (plist-get pair prop))) - pair))) - -(defun sp-get-pair-definition (open mode &optional prop) - "Get the definition of pair identified by OPEN. - -OPEN is the opening delimiter, MODE is the major mode symbol or t -for global definition. - -If PROP is non-nil, return the value of that property instead." - (sp--get-pair-definition open (cdr (assq mode sp-pairs)) prop)) - -(defun sp-get-pair (open &optional prop) - "Return the definition of pair defined by OPEN in the current buffer. - -The value is fetched from `sp-local-pairs'. - -If PROP is non-nil, return the value of that property instead." - (sp--get-pair-definition open sp-local-pairs prop)) - -(defun sp--merge-pair-configurations (specific &optional current) - "Merge SPECIFIC pair configuration to the CURRENT configuration. - -CURRENT defaults to `sp-local-pairs' if it is non-nil or the -global definition from `sp-pairs' if `sp-local-pairs' is nil." - (let* ((global (or current sp-local-pairs (cdr (assq t sp-pairs)))) - (local specific) - (result nil)) - ;; copy the pairs on global list first. This creates new plists - ;; so we can modify them without changing the global "template" - ;; values. - (dolist (old-pair global) - (!cons (list :open (plist-get old-pair :open)) result)) - - ;; merge the global list with result. This basically "deep copy" - ;; global list. We use `sp--merge-pairs' because it also clones - ;; the list properties (actions, filters etc.) - (dolist (new-pair global) - (let ((old-pair (sp--get-pair (plist-get new-pair :open) result))) - (sp--merge-pairs old-pair new-pair))) - - ;; for each local pair, merge it into the global definition - (dolist (new-pair local) - (let ((old-pair (sp--get-pair (plist-get new-pair :open) result))) - (if old-pair - (sp--merge-pairs old-pair new-pair) - ;; pair does not have global definition, simply copy it over - (!cons - ;; this "deep copy" the new-pair - (sp--merge-pairs (list :open (plist-get new-pair :open)) new-pair) - ;; TODO: remove the nil lists from the definitions - result)))) - result)) - -(defun sp-wrap-with-pair (pair) - "Wrap the following expression with PAIR. - -This function is a non-interactive helper. To use this function -interactively, bind the following lambda to a key: - - (lambda (&optional arg) (interactive \"P\") (sp-wrap-with-pair \"(\")) - -This lambda accepts the same prefix arguments as -`sp-select-next-thing'. - -If region is active and `use-region-p' returns true, the region -is wrapped instead. This is useful with selection functions in -`evil-mode' to wrap regions with pairs." - (let* ((arg (or current-prefix-arg 1)) - (sel (and (not (use-region-p)) - (sp-select-next-thing-exchange - arg - (cond - ;; point is inside symbol and smart symbol wrapping is disabled - ((and (sp-point-in-symbol) - (or (eq sp-wrap-entire-symbol 'globally) - (memq major-mode sp-wrap-entire-symbol))) - (point)) - ;; wrap from point, not the start of the next expression - ((and sp-wrap-from-point - (not (sp-point-in-symbol))) - (point)))))) - (active-pair (--first (equal (car it) pair) sp-pair-list)) - (rb (region-beginning)) - (re (region-end))) - (goto-char re) - (insert (cdr active-pair)) - (goto-char rb) - (insert (car active-pair)) - (if (use-region-p) - (sp--indent-region rb re) - (sp-get sel (sp--indent-region :beg :end))))) - -(cl-defun sp-pair (open - close - &key - trigger - trigger-wrap - (actions '(wrap insert autoskip navigate)) - when - unless - pre-handlers - post-handlers - wrap - bind - insert) - "Add a pair definition. - -OPEN is the opening delimiter. Every pair is uniquely determined -by this string. - -CLOSE is the closing delimiter. You can use nil for this -argument if you are updating an existing definition. In this -case, the old value is retained. - -TRIGGER is an optional trigger for the pair. The pair will be -inserted if either OPEN or TRIGGER is typed. This is usually -used as a shortcut for longer pairs or for pairs that can't be -typed easily. - -TRIGGER-WRAP is the same as TRIGGER but used for wrapping. - -ACTIONS is a list of actions that smartparens will perform with -this pair. Possible values are: - -- insert - autoinsert the closing pair when opening pair is - typed. -- wrap - wrap an active region with the pair defined by opening - delimiter if this is typed while region is active. -- autoskip - if the sexp is active or `sp-autoskip-closing-pair' is - set to 'always, skip over the closing delimiter if user types its - characters in order. -- navigate - enable this pair for navigation/highlight and strictness - checks -- escape - allow autoescaping of this delimiter in string contexts - -If the ACTIONS argument has value :rem, the pair is removed. -This can be used to remove default pairs you don't want to use. -For example: (sp-pair \"[\" nil :actions :rem) - -WHEN is a list of predicates that test whether the action -should be performed in current context. The values in the list -should be names of the predicates (that is symbols, not -lambdas!). They should accept three arguments: opening -delimiter (which uniquely determines the pair), action and -context. The context argument can have values: - -- string - if point is inside string. -- comment - if point is inside comment. -- code - if point is inside code. This context is only - recognized in programming modes that define string semantics. - -If *any* filter returns t, the action WILL be performed. A number -of filters are predefined: `sp-point-after-word-p', -`sp-point-before-word-p', `sp-in-string-p', -`sp-point-before-eol-p' etc. - -When clause also supports a special format for delayed insertion. -The condition is a list with commands, predicates (with three -arguments as regular when form) or strings specifying the last -event. All three types can be combined in one list. The pair -will be inserted *after* the next command if it matches the any -command on the list, if the last event matches any string on the -list or if any predicate returns true. If the pair's :when -clause contains this special form, it will never be immediately -inserted and will always test for delayed insertion. - -UNLESS is a list of predicates. The conventions are the same as -for the WHEN list. If *any* filter on this list returns t, the -action WILL NOT be performed. The predicates in the WHEN list -are checked first, and if any of them succeeds, the UNLESS list -is not checked. - -Note: the functions on the WHEN/UNLESS lists are also called -\"filters\" in the documentation. - -All the filters are run *after* the trigger character is -inserted. - -PRE-HANDLERS is a list of functions that are called before there -has been some action caused by this pair. The arguments are the -same as for filters. Context is relative to the point *before* -the last inserted character. Because of the nature of the -wrapping operation, this hook is not called if the action is -wrapping. - -POST-HANDLERS is a list of functions that are called after there -has been some action caused by this pair. The arguments are the -same as for filters. Context is relative to current position of -point *after* the closing pair was inserted. - -After a wrapping action, the point might end on either side of -the wrapped region, depending on the original direction. You can -use the variable `sp-last-wrapped-region' to retrieve information -about the wrapped region and position the point to suit your -needs. - -A special syntax for conditional execution of hooks is also -supported. If the added item is a list (function command1 -command2...), where function is a 3 argument function described -above and command(s) can be either name of a command or a string -representing an event. If the last command or event as described -by `single-key-description' matches any on the list, the hook -will be executed. This means these hooks are run not after the -insertion, but after the *next* command is executed. - -Example: - ((lambda (id act con) - (save-excursion - (newline))) \"RET\" newline) - -This function will move the closing pair on its own line only if -the next command is `newline' or is triggered by RET. Otherwise -the pairs stay on the same line. - -WRAP is a key binding to which a \"wrapping\" action is bound. -The key should be in format that is accepted by `kbd'. This -option binds a lambda form: - - `(lambda (&optional arg) - (interactive \"P\") - (sp-wrap-with-pair ,OPEN)) - -to the specified key sequence. The binding is added to global -keymap. When executed, it wraps ARG (default 1) expressions with -this pair (like `paredit-wrap-round' and friends). Additionally, -it accepts the same prefix arguments as `sp-select-next-thing'. - -BIND is equivalent to WRAP. It is a legacy setting and will be -removed soon. - -INSERT is a key binding to which an \"insert\" action is bound. -The key should be in format that is accepted by `kbd'. This is -achieved by binding a lambda form: - - (lambda () (interactive) (sp-insert-pair \"pair-id\")) - -to the supplied key, where pair-id is the open delimiter of the -pair. The binding is added to the global map. You can also bind -a similar lambda manually. To only bind this in specific major -modes, use this property on `sp-local-pair' instead." - (if (eq actions :rem) - (let ((global-list (assq t sp-pairs))) - (setcdr global-list (--remove (equal (plist-get it :open) open) (cdr global-list)))) - (let ((pair nil)) - (setq pair (plist-put pair :open open)) - (when close (plist-put pair :close close)) - (when trigger (plist-put pair :trigger trigger)) - (when trigger-wrap (plist-put pair :trigger-wrap trigger-wrap)) - (dolist (arg `((:actions . ,actions) - (:when . ,when) - (:unless . ,unless) - (:pre-handlers . ,pre-handlers) - (:post-handlers . ,post-handlers))) - ;; We only consider "nil" as a proper value if the property - ;; already exists in the pair. In that case, we will set it to - ;; nil. This allows for removing properties in global - ;; definitions. - (when (or (cdr arg) - (sp-get-pair-definition open t (car arg))) - (plist-put pair (car arg) (cdr arg)))) - (sp--update-pair-list pair t)) - (when (or wrap bind) (global-set-key (read-kbd-macro (or wrap bind)) - `(lambda (&optional arg) - (interactive "P") - (sp-wrap-with-pair ,open)))) - (when insert (global-set-key (kbd insert) `(lambda () (interactive) (sp-insert-pair ,open))))) - (sp--update-local-pairs-everywhere) - sp-pairs) - -(cl-defun sp-local-pair (modes - open - close - &key - trigger - trigger-wrap - (actions '(:add)) - (when '(:add)) - (unless '(:add)) - (pre-handlers '(:add)) - (post-handlers '(:add)) - wrap - bind - insert - prefix - suffix - skip-match) - "Add a local pair definition or override a global definition. - -MODES can be a single mode or a list of modes where these settings -should be applied. - -PREFIX is a regular expression matching an optional prefix for -this pair in the specified major modes. If not specified, the -characters of expression prefix syntax class are automatically -considered instead. This can be used to attach custom prefixes -to pairs, such as prefix \"\\function\" in \\function{arg} in -`LaTeX-mode'. - -SUFFIX is a regular expression matching an optional suffix for -this pair in the specified major modes. If not specified, the -characters of punctuation syntax class are automatically -considered instead. - -The rest of the arguments have same semantics as in `sp-pair'. - -If the pair is not defined globally, ACTIONS defaults to (wrap -insert) instead of (:add) (which inherits global settings) - -The pairs are uniquely identified by the opening delimiter. If you -replace the closing one with a different string in the local -definition, this will override the global closing delimiter. - -The list arguments can optionally be of form starting with -\":add\" or \":rem\" when these mean \"add to the global list\" -and \"remove from the global list\" respectively. Otherwise, -the global list is replaced. If you wish to both add and remove -things with single call, use \"((:add ...) (:rem ...))\" as an -argument. Therefore, - - :when '(:add my-test) - -would mean \"use the global settings for this pair, but also this -additional test\". If no value is provided for list arguments, -they default to \"(:add)\" which means they inherit the list from -the global definition. - -To disable a pair in a major mode, simply set its actions set to -nil. This will ensure the pair is not even loaded when the mode is -activated. - -If WRAP is non-nil, the binding is added into major mode keymap -called \"foo-mode-map\". If the mode does not follow this -convention, you will need to bind the function manually (see -`sp-pair' to how the function is named for each particular pair). -The bindings are not added into `smartparens-mode-map' to prevent -clashes between different modes. - -BIND is equivalent to WRAP. It is a legacy setting and will be -removed soon. - -The binding for INSERT follows the same convention as BIND. See -`sp-pair' for more info. - -You can provide a function SKIP-MATCH, that will take three -arguments: the currently matched delimiter, beginning of match -and end of match. If this function returns true, the -`sp-get-paired-expression' matcher will ignore this match. You -can use this to skip over expressions that serve multiple -functions, such as if/end pair or unary if in Ruby or * in -markdown when it signifies list item instead of emphasis. In -addition, there is a global per major-mode option, see -`sp-navigate-skip-match'." - (if (eq actions :rem) - (let ((remove "")) - (dolist (m (-flatten (list modes))) - (setq remove (concat remove - (sp-get-pair-definition open m :open) - (sp-get-pair-definition open m :close))) - (let ((mode-pairs (assq m sp-pairs))) - (setcdr mode-pairs - (--remove (equal (plist-get it :open) open) - (cdr mode-pairs)))))) - (dolist (m (-flatten (list modes))) - (let* ((pair nil)) - (setq pair (plist-put pair :open open)) - (when close (plist-put pair :close close)) - (when trigger (plist-put pair :trigger trigger)) - (when trigger-wrap (plist-put pair :trigger-wrap trigger-wrap)) - (when prefix (plist-put pair :prefix prefix)) - (when suffix (plist-put pair :suffix suffix)) - (when skip-match (plist-put pair :skip-match skip-match)) - (when (and (not (sp-get-pair-definition open t)) - (equal actions '(:add))) - (setq actions '(wrap insert autoskip navigate))) - (plist-put pair :actions actions) - (plist-put pair :when when) - (plist-put pair :unless unless) - (plist-put pair :pre-handlers pre-handlers) - (plist-put pair :post-handlers post-handlers) - (sp--update-pair-list pair m) - (-when-let* ((symbol (intern (concat (symbol-name m) "-map"))) - (map (and (boundp symbol) (symbol-value symbol)))) - (when (or wrap bind) (define-key map - (read-kbd-macro (or wrap bind)) - `(lambda (&optional arg) - (interactive "P") - (sp-wrap-with-pair ,open)))) - (when insert (define-key map - (kbd insert) - `(lambda () (interactive) (sp-insert-pair ,open)))))))) - (sp--update-local-pairs-everywhere (-flatten (list modes))) - sp-pairs) - -(cl-defun sp-local-tag (modes trig open close &key - (transform 'identity) - (actions '(wrap insert)) - post-handlers) - "Add a tag definition. - -MODES is a mode or a list of modes where this tag should -activate. It is impossible to define global tags. - -TRIG is the trigger sequence. It can be a string of any length. -If more triggers share a common prefix, the shortest trigger is -executed. - -OPEN is the format of the opening tag. This is inserted before -the active region. - -CLOSE is the format of the closing tag. This is inserted after -the active region. - -Opening and closing tags can optionally contain the _ character. - -If the opening tag contains the _ character, after you type the -trigger, the region is wrapped with \"skeleton\" tags and a -special tag editing mode is entered. The text you now type is -substituted for the _ character in the opening tag. - -If the closing tag contains the _ character, the text from the -opening pair is mirrored to the closing pair and substituted for -the _ character. - -TRANSFORM is a function name (symbol) that is called to perform a -transformation of the opening tag text before this is inserted to -the closing tag. For example, in html tag it might simply select -the name of the tag and cut off the tag attributes (like -class/style etc.). Defaults to identity. - -ACTIONS is a list of actions this tag should support. Currently, -only \"wrap\" action is supported. Usually, you don't need to -specify this argument. - -POST-HANDLERS is a list of functions that are called after the -tag is inserted. If the tag does contain the _ character, these -functions are called after the tag editing mode is exited. Each -function on this list should accept two arguments: the trigger -string and the action." - (dolist (mode (-flatten (list modes))) - (let* ((tag-list (assq mode sp-tags)) - (tag (--first (equal trig (plist-get it :trigger)) (cdr tag-list))) - (new-tag nil)) - (setq new-tag (plist-put new-tag :trigger trig)) - (plist-put new-tag :open open) - (plist-put new-tag :close close) - (when transform (plist-put new-tag :transform transform)) - (when actions (plist-put new-tag :actions actions)) - (when post-handlers (plist-put new-tag :post-handlers post-handlers)) - (if tag-list - (if (not actions) - (setcdr tag-list (--remove (equal trig (plist-get it :trigger)) (cdr tag-list))) - (if (not tag) - (setcdr tag-list (cons new-tag (cdr tag-list))) - (sp--update-pair new-tag tag))) - ;; mode doesn't exist - (when actions - (!cons (cons mode (list new-tag)) sp-tags)))))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Overlay management - -;; burlywood4 -(defface sp-pair-overlay-face - '((t (:inherit highlight))) - "The face used to highlight pair overlays." - :group 'smartparens) - -(defface sp-wrap-overlay-face - '((t (:inherit sp-pair-overlay-face))) - "The face used to highlight wrap overlays. - -When the user wraps a region with multi-character pair a special -insertion mode is entered. This face is used for the overlays -where the possible wrappings are displayed. - -The opening and closing delimiters use -`sp-wrap-overlay-opening-pair' and `sp-wrap-overlay-closing-pair' -respectively." - :group 'smartparens) - -(defface sp-wrap-overlay-opening-pair - '((t (:inherit sp-wrap-overlay-face - :foreground "green"))) - "The face used to highlight opening pairs for wrapping. - -See `sp-wrap-overlay-face'." - :group 'smartparens) - -(defface sp-wrap-overlay-closing-pair - '((t (:inherit sp-wrap-overlay-face - :foreground "red"))) - "The face used to highlight closing pairs for wrapping. - -See `sp-wrap-overlay-face'." - :group 'smartparens) - -(defface sp-wrap-tag-overlay-face - '((t (:inherit sp-pair-overlay-face))) - "The face used to highlight wrap tag overlays." - :group 'smartparens) - -(defvar sp-pair-overlay-list '() - "List of overlays used for tracking inserted pairs. - -When a pair is inserted, an overlay is created over it. When the -user starts typing the closing pair we will not insert it again. -If user leaves the overlay, it is canceled and the insertion -works again as usual.") -(make-variable-buffer-local 'sp-pair-overlay-list) - -(defvar sp-wrap-overlays nil - "Cons pair of wrap overlays.") -(make-variable-buffer-local 'sp-wrap-overlays) - -(defvar sp-wrap-tag-overlays nil - "Cons pair of tag wrap overlays.") -(make-variable-buffer-local 'sp-wrap-tag-overlays) - -(defvar sp-pair-overlay-keymap (make-sparse-keymap) - "Keymap for the pair overlays.") -(define-key sp-pair-overlay-keymap (kbd "C-g") 'sp-remove-active-pair-overlay) - -(defvar sp-wrap-overlay-keymap (make-sparse-keymap) - "Keymap for the wrap overlays.") -(define-key sp-wrap-overlay-keymap (kbd "C-g") 'sp-wrap-cancel) - -(defun sp--overlays-at (&optional pos) - "Wrapper around `overlays-at' to get smartparens overlays. - -POS is the same as for `overlays-at'. - -Smartparens functions must use this function instead of -`overlays-at' directly." - ;; TODO: we should probably also check the returned value - (--filter (overlay-get it 'type) (overlays-at (or pos (point))))) - -(defun sp--point-in-overlay-p (overlay) - "Return t if point is in OVERLAY." - (and (< (point) (overlay-end overlay)) - (> (point) (overlay-start overlay)))) - -(defun sp--get-overlay-length (overlay) - "Compute the length of OVERLAY." - (- (overlay-end overlay) (overlay-start overlay))) - -(defun sp--get-active-overlay (&optional type) - "Get active overlay. - -Active overlay is the shortest overlay at point. Optional -argument TYPE restrict overlays to only those with given type." - (let ((overlays (sp--overlays-at))) - (when type - (setq overlays (--filter (eq (overlay-get it 'type) type) overlays))) - (cond - ((not overlays) nil) - ((not (cdr overlays)) (car overlays)) - (t - (--reduce (if (< (sp--get-overlay-length it) (sp--get-overlay-length acc)) it acc) overlays))))) - -(defun sp--pair-overlay-create (start end id) - "Create an overlay over the currently inserted pair. - -This overlay is used for tracking the position of the point and -marks the active expression. START and END are the boundaries of -the overlay, ID is the id of the pair." - (let ((overlay (make-overlay start end))) - ;; set priority to 99 so that yasnippet with 100 overloads the - ;; keymap #625 - (overlay-put overlay 'priority 99) - (overlay-put overlay 'keymap sp-pair-overlay-keymap) - (overlay-put overlay 'pair-id id) - (overlay-put overlay 'type 'pair) - (!cons overlay sp-pair-overlay-list) - (sp--pair-overlay-fix-highlight) - (add-hook 'post-command-hook 'sp--pair-overlay-post-command-handler nil t))) - -(defun sp-wrap-cancel () - "Cancel the active wrapping." - (interactive) - (unwind-protect - (-let (((obeg . oend) sp-wrap-overlays)) - (when (and (not (called-interactively-p 'any)) - (sp--delete-selection-p)) - (kill-region (overlay-end obeg) (overlay-start oend))) - (delete-region (overlay-start oend) (overlay-end oend)) - (when (> sp-wrap-point sp-wrap-mark) - (let ((beg (delete-and-extract-region (overlay-start obeg) (overlay-end obeg)))) - (goto-char (overlay-start oend)) - (insert beg)))) - (sp-wrap--clean-overlays))) - -(defun sp-wrap--clean-overlays () - "Delete wrap overlays." - (-let [(obeg . oend) sp-wrap-overlays] - (delete-overlay obeg) - (delete-overlay oend) - (setq sp-wrap-overlays nil))) - -(defun sp--pair-overlay-fix-highlight () - "Fix highlighting of the pair overlays. - -Only the active overlay should be highlighted." - (--each (sp--overlays-at) (overlay-put it 'face nil)) - (let* ((active (sp--get-active-overlay)) - (type (and active (overlay-get active 'type)))) - (if active - (cond - ((eq 'wrap-tag type) - (when sp-highlight-wrap-tag-overlay - (overlay-put active 'face 'sp-wrap-tag-overlay-face))) - ((eq 'pair type) - (when sp-highlight-pair-overlay - (overlay-put active 'face 'sp-pair-overlay-face)))) - ;; edge case where we're at the end of active overlay. If - ;; there is a wrap-tag overlay, restore it's face - (when sp-wrap-tag-overlays - (overlay-put (car sp-wrap-tag-overlays) 'face 'sp-wrap-tag-overlay-face))))) - -(defun sp--pair-overlay-post-command-handler () - "Remove all invalid pair overlays. - -An invalid overlay is one that doesn't have point inside it or -is of zero length. - -Also remove all pair overlays if point moved backwards and -`sp-cancel-autoskip-on-backward-movement' is non-nil." - ;; if the point moved backwards, remove all overlays - (if (and sp-cancel-autoskip-on-backward-movement - (< (point) sp-previous-point)) - (dolist (o sp-pair-overlay-list) (sp--remove-overlay o)) - ;; else only remove the overlays where point is outside them or - ;; their length is zero - (dolist (o (--remove (and (sp--point-in-overlay-p it) - (> (sp--get-overlay-length it) 0)) - sp-pair-overlay-list)) - (sp--remove-overlay o))) - (when sp-pair-overlay-list - (setq sp-previous-point (point)))) - -(defun sp--reset-memoization (&rest ignored) - "Reset memoization as a safety precaution. - -IGNORED is a dummy argument used to eat up arguments passed from -the hook where this is executed." - (setf (sp-state-last-syntax-ppss-point sp-state) nil - (sp-state-last-syntax-ppss-result sp-state) nil)) - -(defun sp-remove-active-pair-overlay () - "Deactivate the active overlay. See `sp--get-active-overlay'." - (interactive) - (-when-let (active-overlay (sp--get-active-overlay 'pair)) - (sp--remove-overlay active-overlay))) - -(defun sp--remove-overlay (overlay) - "Remove OVERLAY." - ;; if it's not a pair overlay, nothing happens here anyway - (setq sp-pair-overlay-list (--remove (equal it overlay) sp-pair-overlay-list)) - ;; if we have zero pair overlays, remove the post-command hook - (when (not sp-pair-overlay-list) - (remove-hook 'post-command-hook 'sp--pair-overlay-post-command-handler t) - ;; this is only updated when sp--pair-overlay-post-command-handler - ;; is active. Therefore, we need to reset this to 1. If not, newly - ;; created overlay could be removed right after creation - if - ;; sp-previous-point was greater than actual point - (setq sp-previous-point -1)) - (delete-overlay overlay) - (sp--pair-overlay-fix-highlight)) - -(defun sp--replace-overlay-text (o string) - "Replace text inside overlay O with STRING." - (save-excursion - (goto-char (overlay-start o)) - (insert string) - (delete-region (point) (overlay-end o)))) - -(defun sp--get-overlay-text (o) - "Get text inside overlay O." - (buffer-substring (overlay-start o) (overlay-end o))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Action predicates - -(defun sp-in-string-p (_id _action context) - "Return t if point is inside string or comment, nil otherwise." - (eq context 'string)) - -(defun sp-in-string-quotes-p (_id action context) - "Special string test for quotes. - -On insert action, test the string context one character back from -point. Return nil at `bobp'. - -On escape action use the value of CONTEXT." - (cond - ((eq action 'insert) - (if (bobp) nil - (save-excursion (backward-char 1) (sp-point-in-string)))) - ((eq action 'escape) - (eq context 'string)))) - -(defun sp-in-docstring-p (_id _action context) - "Return t if point is inside elisp docstring, nil otherwise." - (and (eq context 'string) - (save-excursion - (--when-let (car (sp-get-quoted-string-bounds)) - (goto-char it) - (ignore-errors (backward-sexp 3)) - (looking-at-p (regexp-opt '("defun" "defmacro" - "cl-defun" "cl-defmacro" - "defun*" "defmacro*" - "lambda" "-lambda"))))))) - -(defun sp-in-code-p (_id _action context) - "Return t if point is inside code, nil otherwise." - (eq context 'code)) - -(defun sp-in-comment-p (_id _action context) - "Return t if point is inside comment, nil otherwise." - (eq context 'comment)) - -(defun sp-in-math-p (_id _action _context) - "Return t if point is inside code, nil otherwise." - (when (functionp 'texmathp) - (texmathp))) - -(defun sp-point-before-eol-p (_id action _context) - "Return t if point is followed by optional white spaces and end of line, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-at-p "\\s-*$"))) - -(defun sp-point-after-bol-p (id action _context) - "Return t if point follows beginning of line and possibly white spaces, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-back-p (concat "^\\s-*" (regexp-quote id))))) - -(defun sp-point-at-bol-p (id action _context) - "Return t if point is at the beginning of line, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-back-p (concat "^" (regexp-quote id))))) - -(defun sp-point-before-symbol-p (_id action _context) - "Return t if point is followed by a symbol, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-at-p "\\s_"))) - -(defun sp-point-before-word-p (_id action _context) - "Return t if point is followed by a word, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-at-p "\\sw\\|\\s_"))) - -(defun sp-point-after-word-p (id action _context) - "Return t if point is after a word, nil otherwise. -This predicate is only tested on \"insert\" action." - ;; TODO: remove condition with sp-defpair - (when (memq action '(insert escape)) - (sp--looking-back-p (concat "\\(\\sw\\|\\s_\\)" (regexp-quote id))))) - -(defun sp-point-before-same-p (id action _context) - "Return t if point is followed by ID, nil otherwise. -This predicate is only tested on \"insert\" action." - (when (eq action 'insert) - (sp--looking-at-p (regexp-quote id)))) - -(defun sp-point-in-empty-line-p (id _action _context) - "Return t if point is on an empty line, nil otherwise." - (and (sp--looking-at-p "\\s-*$") - (sp--looking-back-p (concat "^\\s-*" (regexp-quote id))))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Pair insertion/deletion/skipping - -(defun sp--do-action-p (id action &optional use-inside-string) - "Return t if pair ID can perform ACTION. - -If ACTION is a list, return t if at least one action from the -list can be performed. - -If USE-INSIDE-STRING is non-nil, use value of -`sp-point-inside-string' instead of testing with -`sp-point-in-string-or-comment'." - (setq action (-flatten (list action))) - (let* ((actions (sp-get-pair id :actions)) - (when-l (sp-get-pair id :when)) - (unless-l (sp-get-pair id :unless)) - (in-string (if use-inside-string - sp-point-inside-string - (sp-point-in-string))) - (context (cond - (in-string 'string) - ((sp-point-in-comment) 'comment) - (t 'code))) - a r) - (while (and action (not r)) - (setq a (car action)) - (setq r (when (memq a actions) - ;;(and (when-clause) (not (unless-clause))) - (and (or (not when-l) - (--some (funcall it id a context) when-l)) - (or (not unless-l) - (not (--some (funcall it id a context) unless-l)))))) - (!cdr action)) - r)) - -(defun sp--get-handler-context (type) - "Return the context constant. TYPE is type of the handler." - (let ((in-string (cl-case type - (:pre-handlers - (save-excursion - (unless (bobp) (backward-char 1)) - (sp-point-in-string-or-comment))) - (:post-handlers - (sp-point-in-string-or-comment))))) - (if in-string 'string 'code))) - -(defun sp--get-context (&optional point in-string in-comment) - "Return the context of POINT. - -If the optional arguments IN-STRING or IN-COMMENT non-nil, their -value is used instead of a test." - (save-excursion - (goto-char (or point (point))) - (cond - ((or in-string (sp-point-in-string)) 'string) - ((or in-comment (sp-point-in-comment)) 'comment) - (t 'code)))) - -(defun sp--parse-insertion-spec (fun) - "Parse the insertion specification FUN and return a form to evaluate." - (let ((spec nil) - (after nil) - (last 1)) - (cl-labels ((push-non-empty - (what) - (unless (equal (cadr what) "") - (push what spec)))) - (with-temp-buffer - (insert fun) - (goto-char (point-min)) - (while (re-search-forward "\\(|\\|\\[\\)" nil t) - (cond - ((equal (match-string 0) "[") - (if (save-excursion (backward-char 1) (eq (preceding-char) 92)) - (push-non-empty `(insert ,(concat (buffer-substring-no-properties last (- (point) 2)) "["))) - (push-non-empty `(insert ,(buffer-substring-no-properties last (1- (point))))) - (let* ((p (point)) - (fun-end (progn - (re-search-forward "]" nil t) - (1- (point)))) - (fun-spec (buffer-substring-no-properties p fun-end)) - (instruction (cond - ((equal fun-spec "i") - '(indent-according-to-mode)) - ((equal (aref fun-spec 0) ?d) - `(delete-char ,(string-to-number (substring fun-spec 1))))))) - (when instruction (push instruction spec))))) - ((equal (match-string 0) "|") - (cond - ((save-excursion (backward-char 1) (eq (preceding-char) 92)) - (push-non-empty `(insert ,(concat (buffer-substring-no-properties last (- (point) 2)) "|")))) - (t - (push-non-empty `(insert ,(buffer-substring-no-properties last (1- (point))))) - (push 'save-excursion spec) - (when (eq (following-char) 124) - (forward-char 1) - (setq after '(indent-according-to-mode))))))) - (setq last (point))) - (push-non-empty `(insert ,(buffer-substring-no-properties last (point-max))))) - (let* ((specr (nreverse spec)) - (specsplit (--split-with (not (eq it 'save-excursion)) specr)) - (re (-concat (car specsplit) (if (cadr specsplit) (cdr specsplit) nil)))) - (cons 'progn (if after (-snoc re after) re)))))) - -(defun sp--run-function-or-insertion (fun id action context) - "Run a function or insertion. - -If FUN is a function, call it with `funcall' with ID, ACTION and -CONTEXT as arguments. - -If FUN is a string, interpret it as \"insertion specification\", -see `sp-pair' for description." - (cond - ((functionp fun) - (funcall fun id action context)) - ((stringp fun) - (eval (sp--parse-insertion-spec fun))))) - - -(defvar sp-handler-context nil - "Special variable holding context during handler execution.") - -;; TODO: get rid of `sp-handler-context' and make all the handlers (we -;; should call them hooks) take better arguments, what we pass now is -;; useless almost always -(defun sp--run-hook-with-args (id type action &optional context-values) - "Run all the hooks for pair ID of type TYPE on action ACTION. - -CONTEXT-VALUES is a plist with arbitrary values (depending on the -action). A dynamic varable `sp-handler-context' will be bound to -this value during execution of the handler." - (ignore-errors - (let ((hook (sp-get-pair id type)) - (context (sp--get-handler-context type))) - (if hook - (let ((sp-handler-context context-values)) - (--each hook (sp--run-function-or-insertion it id action context))) - ;; TODO: WHAT THE FUCK IS THIS ???11? - (let ((tag-hook (plist-get - (--first (string-match-p - (replace-regexp-in-string "_" ".*?" (plist-get it :open)) - id) - (cdr (assq 'html-mode sp-tags))) ;; REALLY? - type))) - (run-hook-with-args 'tag-hook id action context)))))) - -;; TODO: add a test for a symbol property that would tell this handler -;; not to re=set `sp-last-operation'. Useful for example in "macro -;; functions" like `my-wrap-with-paren'. -(defun sp--post-command-hook-handler () - "Handle the situation after some command has executed." - (sp--with-case-sensitive - (when (sp--special-self-insert-command-p) - (sp--post-self-insert-hook-handler)) - (ignore-errors - (when smartparens-mode - ;; handle the wrap overlays - (when sp-wrap-overlays - (let* ((overlay (car sp-wrap-overlays)) - (start (overlay-start overlay)) - (end (overlay-end overlay)) - (p (point))) - (when (or (< p sp-previous-point) - (> p end) - (< p start)) - (sp-wrap-cancel)))) - (when sp-wrap-overlays - (setq sp-previous-point (point))) - - ;; Here we run the delayed hooks. See issue #80 - (cond - ((eq (car-safe (sp-state-delayed-hook sp-state)) :next) - (setf (car (sp-state-delayed-hook sp-state)) :this)) - ((eq (car-safe (sp-state-delayed-hook sp-state)) :this) - (let* ((pair (cdr (sp-state-delayed-hook sp-state))) - (hooks (sp-get-pair pair :post-handlers-cond))) - (--each hooks - (let ((fun (car it)) - (conds (cdr it))) - (when (or (--any? (eq this-command it) conds) - (--any? (equal (single-key-description last-command-event) it) conds)) - (sp--run-function-or-insertion - fun pair 'insert - (sp--get-handler-context :post-handlers))))) - (setf (sp-state-delayed-hook sp-state) nil) - (setq sp-last-inserted-pair nil)))) - - ;; Here we run the delayed insertion. Some details in issue #113 - (when (and (not (eq sp-last-operation 'sp-insert-pair-delayed)) - sp-delayed-pair) - (let* ((pair (car sp-delayed-pair)) - (beg (cdr sp-delayed-pair)) - (conds (sp-get-pair pair :when-cond)) - (open-pair pair) - (close-pair (sp-get-pair pair :close))) - (when (and conds - (--any? (cond - ((and (commandp it) - (not (stringp it))) - (eq this-command it)) - ((stringp it) - (equal (single-key-description last-command-event) it)) - ((ignore-errors (funcall it pair 'insert (sp--get-handler-context :post-handlers))))) conds)) - ;; TODO: refactor this and the same code in - ;; `sp-insert-pair' to a separate function - (sp--run-hook-with-args open-pair :pre-handlers 'insert) - (insert close-pair) - (backward-char (length close-pair)) - (sp--pair-overlay-create beg - (+ (point) (length close-pair)) - open-pair) - ;; no auto-escape here? Should be fairly safe - (sp--run-hook-with-args open-pair :post-handlers 'insert) - (setq sp-last-inserted-pair open-pair) - ;; TODO: this is probably useless - (setq sp-last-operation 'sp-insert-pair))) - (setq sp-delayed-pair nil)) - - (when (eq sp-last-operation 'sp-insert-pair-delayed) - (setq sp-last-operation nil)) - - (unless (or (sp--self-insert-command-p) - (sp--special-self-insert-command-p)) - ;; unless the last command was a self-insert, remove the - ;; information about the last wrapped region. It is only used - ;; for: 1. deleting the wrapping immediately after the wrap, - ;; 2. re-wrapping region immediatelly after a sucessful wrap. - ;; Therefore, the deletion should have no ill-effect. If the - ;; necessity will arise, we can add a different flag. - (setq sp-last-wrapped-region nil) - (setq sp-last-operation nil)) - - (when show-smartparens-mode - (if (member this-command sp-show-enclosing-pair-commands) - (sp-show--pair-enc-function) - (when (not (eq this-command 'sp-highlight-current-sexp)) - (sp-show--pair-delete-enc-overlays)))))))) - -(defmacro sp--setaction (action &rest forms) - "Use ACTION as a flag to evaluating FORMS. - -If ACTION is nil, evaluate FORMS and set it to the value of the -last form; otherwise do nothing." - (declare (debug (form body))) - `(unless ,action - (setq ,action (progn ,@forms)))) - -;; TODO: this introduces a regression, where doing C-4 [ inserts [[[[] -;; figure out how to detect the argument to self-insert-command that -;; resulted to this insertion -(defun sp--post-self-insert-hook-handler () - "Handler for `post-self-insert-hook'." - (with-demoted-errors "sp--post-self-insert-hook-handler: %S" - (when smartparens-mode - (sp--with-case-sensitive - (catch 'done - (let (action) - (when (region-active-p) - (condition-case err - (sp-wrap--initialize) - (user-error - (message (error-message-string err)) - ;; we need to remove the undo record of the insertion - (unless (eq buffer-undo-list t) - ;; pop all undo info until we hit an insertion node - (sp--undo-pop-to-last-insertion-node) - ;; get rid of it and insert an undo boundary marker - (pop buffer-undo-list) - (undo-boundary)) - (restore-buffer-modified-p sp-buffer-modified-p) - (throw 'done nil)))) - (cond - (sp-wrap-overlays - (sp-wrap)) - (t - ;; TODO: this does not pick correct pair!! it uses insert and not wrapping code - (sp--setaction - action - (-when-let ((_ . open-pairs) (sp--all-pairs-to-insert nil 'wrap)) - (catch 'done - (-each open-pairs - (-lambda ((&keys :open open :close close)) - (--when-let (sp--wrap-repeat-last (cons open close)) - (throw 'done it))))))) - (unless overwrite-mode (sp--setaction action (sp-insert-pair))) - (sp--setaction action (sp-skip-closing-pair)) - (unless action (sp-escape-open-delimiter)) - ;; if nothing happened, we just inserted a character, so - ;; set the apropriate operation. - (unless action - (setq sp-last-operation 'sp-self-insert)))))))))) - -;; Unfortunately, some modes rebind "inserting" keys to their own -;; handlers but do not hand over the insertion back to -;; `self-insert-command', rather, they insert via `insert'. -;; Therefore, we need to call this handler in `post-command-hook' too. -;; The list `sp--special-self-insert-commands' specifies which -;; commands to handle specially. -(add-hook 'post-self-insert-hook 'sp--post-self-insert-hook-handler) - -;; TODO: make a proper data structure for state tracking and describe -;; why we need each of these. -(defun sp--save-pre-command-state () - "Save some of the buffer state before `pre-command-hook'." - (setq sp-point-inside-string (sp-point-in-string)) - (setq sp-pre-command-point (point)) - (setq sp-buffer-modified-p (buffer-modified-p))) - -(add-hook 'pre-command-hook 'sp--save-pre-command-state) - -(defun sp--get-pair-list () - "Get all non-stringlike pairs. - -Return all pairs that are recognized in this `major-mode' and do -not have same opening and closing delimiter. This is used for -navigation functions." - (--filter (not (string= (car it) (cdr it))) sp-pair-list)) - -(defun sp--get-stringlike-list () - "Get all string-like pairs. - -Return all pairs that are recognized in this `major-mode' that -have same opening and closing delimiter." - (--filter (string= (car it) (cdr it)) sp-pair-list)) - -(defun sp--get-allowed-pair-list () - "Get all allowed non string-like pairs. - -Return all pairs that are recognized in this `major-mode', do not -have same opening and closing delimiter and are allowed in the -current context. See also `sp--get-pair-list'." - (--filter (and (sp--do-action-p (car it) 'navigate) - (not (equal (car it) (cdr it)))) sp-pair-list)) - -(defun sp--get-allowed-stringlike-list () - "Get all allowed string-like pairs. - -Return all pairs that are recognized in this `major-mode', -have the same opening and closing delimiter and are allowed in -the current context." - (--filter (and (sp--do-action-p (car it) 'navigate) - (equal (car it) (cdr it))) sp-pair-list)) - -(defun sp--get-pair-list-context (&optional action) - "Return all pairs that are recognized in this `major-mode' and -are allowed in the current context." - (setq action (or action 'insert)) - (--filter (sp--do-action-p (car it) action) sp-pair-list)) - -(defun sp--get-pair-list-wrap () - "Return the list of all pairs that can be used for wrapping." - (--filter (sp--do-action-p (car it) 'wrap) sp-pair-list)) - -(defun sp--wrap-regexp (string start end) - "Wraps regexp with start and end boundary conditions to avoid -matching symbols in symbols." - (concat "\\(?:" (when start "\\<") string (when end "\\>") "\\)")) - -(defun sp--regexp-for-group (parens &rest strings) - "Generates an optimized regexp matching all string, but with -extra boundary conditions depending on parens." - (let* ((start (car parens)) - (end (cadr parens))) - (sp--wrap-regexp (regexp-opt strings) start end))) - -(defun sp--strict-regexp-opt (strings &optional ignored) - "Like regexp-opt, but with extra boundary conditions to ensure -that the strings are not matched in-symbol." - (if strings - (with-syntax-table - ;; HACK: this is a terrible hack to make ' be treated as a - ;; punctuation. Many text modes set it as word character which - ;; messes up the regexps - (let ((table (make-syntax-table (syntax-table)))) - (modify-syntax-entry ?' "." table) - table) - (--> strings - (-group-by (lambda (string) - (list (and (string-match-p "\\`\\<" string) t) - (and (string-match-p "\\>\\'" string) t))) - it) - (mapconcat (lambda (g) (apply 'sp--regexp-for-group g)) it "\\|") - (concat "\\(?:" it "\\)"))) - "^\\<$")) - -(defun sp--strict-regexp-quote (string) - "Like regexp-quote, but make sure that the string is not -matched in-symbol." - (sp--wrap-regexp (regexp-quote string) - (string-match-p "\\`\\<" string) - (string-match-p "\\>\\'" string))) - -(cl-defun sp--get-opening-regexp (&optional (pair-list (sp--get-pair-list))) - "Return regexp matching any opening pair." - (sp--strict-regexp-opt (--map (car it) pair-list))) - -(cl-defun sp--get-closing-regexp (&optional (pair-list (sp--get-pair-list))) - "Return regexp matching any closing pair." - (sp--strict-regexp-opt (--map (cdr it) pair-list))) - -(cl-defun sp--get-allowed-regexp (&optional (pair-list (sp--get-allowed-pair-list))) - "Return regexp matching any opening or closing -delimiter for any pair allowed in current context." - (sp--strict-regexp-opt (--mapcat (list (car it) (cdr it)) pair-list))) - -(cl-defun sp--get-stringlike-regexp (&optional (pair-list (sp--get-allowed-stringlike-list))) - "Return a regexp matching any string-like delimiter. - -In case PAIR-LIST is empty return a regexp that never matches -anything." - (if (consp pair-list) - (regexp-opt (--map (car it) pair-list)) - "^\\<$")) - -(defun sp--get-last-wraped-region (beg end open close) - "Return `sp-get-sexp' style plist about the last wrapped region. - -Note: this function does not retrieve the actual value of -`sp-last-wrapped-region', it merely construct the plist from the -provided values." - (let ((b (make-marker)) - (e (make-marker))) - (set-marker b beg) - (set-marker e end) - (set-marker-insertion-type e t) - `(:beg ,b :end ,e :op ,open :cl ,close :prefix ""))) - -;; Wrapping is basically the same thing as insertion, only the closing -;; pair is placed at a distance. - -;; However, we want to be able to insert the *closing* delimiter and -;; go to the end of block. This will only work with delimiters which -;; are unique wrt their opening one. For more complex wrapping, there -;; will probably be an IDO/minibuffer interface. Openings are checked -;; first. - -;; Inserting the opening delimiter should put the point wherever it -;; was when we started insertion. - -(defun sp-wrap--can-wrap-p () - "Return non-nil if we can wrap a region. - -This is used in advices on various pre-command-hooks from -\"selection deleting\" modes to intercept their actions." - (--any? (or (string-prefix-p (sp--single-key-description last-command-event) (car it)) - (string-prefix-p (sp--single-key-description last-command-event) (cdr it))) - (sp--get-pair-list-wrap))) - -(defun sp--pair-to-wrap-comparator (prop a b) - "Comparator for wrapping pair selection. - -PROP specifies wrapping-end. A and B are pairs to be compared." - (< (length (plist-get a prop)) (length (plist-get b prop)))) - -(defun sp--pair-to-wrap (&optional prefix) - "Return information about possible wrapping pairs. - -If optional PREFIX is non-nil, this is used to determine the -possible wrapping pairs instead of the text in the wrapping -overlay." - (let* ((working-pairs - ;; TODO: abstract this into a new "sp--get-..." hierarchy - (--filter (sp--do-action-p (plist-get it :open) 'wrap) sp-local-pairs)) - (obeg (car sp-wrap-overlays)) - (prefix (or prefix (sp--get-overlay-text obeg))) - (opening-pairs (--filter (string-prefix-p prefix (plist-get it :open)) working-pairs)) - ;; HACK: Here, we will add special "trigger pairs" to the - ;; opening list. We set the opening delimiter to the - ;; trigger, leave the rest alone and put the real open into - ;; :open-real property. When we get the pair back, we will - ;; check this property, and if present, fix the pair back to - ;; the regular form - (wrapper-pairs (->> (--filter (string-prefix-p prefix (or (plist-get it :trigger-wrap) "")) working-pairs) - (-map (-lambda ((pair &as &plist :open open :trigger-wrap trigger-wrap)) - (setq pair (copy-sequence pair)) - (setq pair (plist-put pair :open trigger-wrap)) - (setq pair (plist-put pair :open-real open)) - pair)))) - (opening-pairs (-concat wrapper-pairs opening-pairs)) - (closing-pairs (--filter (string-prefix-p prefix (plist-get it :close)) working-pairs)) - (open (car (--sort (sp--pair-to-wrap-comparator :open it other) opening-pairs))) - ;; TODO: do we need the special sorting here? - (close (car (--sort (sp--pair-to-wrap-comparator :close it other) closing-pairs)))) - (list :open open - :close close - :opening opening-pairs - :closing closing-pairs))) - -(defun sp-wrap--initialize () - "Initialize wrapping." - (when (and sp-autowrap-region - (sp-wrap--can-wrap-p)) - ;; This is the length of string which was inserted by the last - ;; "self-insert" action. Typically this is 1, but sometimes a - ;; single key inserts two or more characters, such as " in latex - ;; where it translates into `` or ''. - (let ((inserted-string-length (- (point) sp-pre-command-point))) - ;; TODO: get rid of the following variables - (setq sp-wrap-point (- (point) inserted-string-length)) - (setq sp-wrap-mark (mark)) - ;; balance check - (with-silent-modifications - (let ((inserted-string - (prog1 (delete-and-extract-region sp-wrap-point (point)) - ;; HACK: in modes with string fences, the insertion - ;; of the delimiter causes `syntax-propertize' to - ;; fire, but the above deletion doesn't re-run it - ;; because the cache tells it the state is OK. We - ;; need to destroy the cache and re-run the - ;; `syntax-propertize' on the buffer. This might be - ;; expensive, but we only done this on wrap-init so - ;; it's fine, I guess. - (setq syntax-propertize--done -1) - (syntax-propertize (point-max)))) - (point-string-context (sp-get-quoted-string-bounds sp-wrap-point)) - (mark-string-context (sp-get-quoted-string-bounds (mark)))) - ;; If point and mark are inside the same string, we don't - ;; need to check if the region is OK. If both are outisde - ;; strings, we have to. If one is inside and the other is - ;; not, no matter what we would break, so we exit. - (cond - ;; inside the same string - ((and point-string-context mark-string-context - (eq (car point-string-context) - (car mark-string-context)))) - ;; neither is inside string - ((and (not point-string-context) - (not mark-string-context)) - (unless (sp-region-ok-p sp-wrap-point (mark)) - (user-error "Mismatched sexp state: wrapping would break structure"))) - ;; one is in and the other isn't - ((if point-string-context (not mark-string-context) mark-string-context) - (user-error "Mismatched string state: point %sin string, mark %sin string" - (if (car-safe point-string-context) "" "not ") - (if (car-safe mark-string-context) "" "not "))) - ;; both are in but in different strings - (t (user-error "Mismatched string state: point and mark are inside different strings"))) - (insert inserted-string))) - ;; if point > mark, we need to move point to mark and reinsert the - ;; just inserted character. - (when (> (point) (mark)) - (let ((char (delete-and-extract-region (- (point) inserted-string-length) (point)))) - (exchange-point-and-mark) - (insert char))) - (let* ((oleft (make-overlay (- (region-beginning) inserted-string-length) - (region-beginning) nil nil t)) - (oright (make-overlay (region-end) (region-end) nil nil t))) - (setq sp-wrap-overlays (cons oleft oright)) - (when sp-highlight-wrap-overlay - (overlay-put oleft 'face 'sp-wrap-overlay-face) - (overlay-put oright 'face 'sp-wrap-overlay-face)) - (overlay-put oleft 'priority 100) - (overlay-put oright 'priority 100) - (overlay-put oleft 'keymap sp-wrap-overlay-keymap) - (overlay-put oleft 'type 'wrap) - (setq sp-previous-point (point)) - (goto-char (1+ (overlay-start oleft))))))) - -(defun sp-wrap--finalize (wrapping-end open close) - "Finalize a successful wrapping. - -WRAPPING-END specifies the wrapping end. If we wrapped using -opening delimiter it is :open. If we wrapped using closing -delimiter it is :close. Position of point after wrapping depends -on this value---if :open, go where the wrapping was initalized, -if :close, go after the newly-formed sexp. - -OPEN and CLOSE are the delimiters." - (-let (((obeg . oend) sp-wrap-overlays)) - (sp--replace-overlay-text obeg open) - (sp--replace-overlay-text oend close) - (setq sp-last-operation 'sp-wrap-region) - (setq sp-last-wrapped-region - (sp--get-last-wraped-region - (overlay-start obeg) (overlay-end oend) - open close)) - (cond - ((eq wrapping-end :open) - (if sp-wrap-respect-direction - (progn - (set-mark (overlay-end oend)) - (goto-char (overlay-start obeg))) - (when (> sp-wrap-point sp-wrap-mark) - (set-mark (overlay-start obeg)) - (goto-char (overlay-end oend))))) - ((eq wrapping-end :close) - (set-mark (overlay-start obeg)) - (goto-char (overlay-end oend)))) - (sp-wrap--clean-overlays) - (sp--run-hook-with-args open :post-handlers 'wrap))) - -(defun sp-wrap () - "Try to wrap the active region with some pair. - -This function is not ment to be used to wrap sexps with pairs -programatically. Use `sp-wrap-with-pair' instead." - (-let* (((&plist :open open :close close - :opening opening-pairs - :closing closing-pairs) (sp--pair-to-wrap)) - ((obeg . oend) sp-wrap-overlays)) - (cond - (open - (-let (((&plist :open open :close close :open-real open-real) open)) - (when sp-wrap-show-possible-pairs - (overlay-put - oend 'after-string - (mapconcat (lambda (x) - (if sp-highlight-wrap-overlay - (concat - (propertize - (plist-get x :open) 'face - 'sp-wrap-overlay-opening-pair) - (propertize - (plist-get x :close) - 'face 'sp-wrap-overlay-closing-pair)) - (concat (plist-get x :open) (plist-get x :close)))) - opening-pairs " "))) - (when (equal (sp--get-overlay-text obeg) open) - (sp-wrap--finalize :open (or open-real open) close)))) - ((and close (= 1 (length closing-pairs))) - (-let (((&plist :open open :close close) close)) - (when (equal (sp--get-overlay-text obeg) close) - (sp-wrap--finalize :close open close)))) - (t - (sp-wrap-cancel))))) - -(defun sp--escape-region (chars-to-escape beg end) - "Escape instances of CHARS-TO-ESCAPE between BEG and END. - -Return non-nil if at least one escaping was performed." - (save-excursion - (goto-char beg) - (let ((pattern (regexp-opt chars-to-escape)) - (end-marker (set-marker (make-marker) end)) - (re nil)) - (while (re-search-forward pattern end-marker t) - (setq re t) - (save-excursion - (goto-char (match-beginning 0)) - (insert sp-escape-char))) - re))) - -;; TODO: refactor the rewrap-sexp dependent parts out so that this -;; function has less dependencies on the action -;; TODO: add mode-dependent escape/unescape actions? -(defun sp-escape-wrapped-region (id action _context) - "Escape quotes and special chars when a region is (re)wrapped." - (when (and sp-escape-wrapped-region - (memq action '(wrap rewrap-sexp))) - (sp-get sp-last-wrapped-region - (let* ((parent-delim (save-excursion - (goto-char :beg) - (sp-get (sp-get-string) - (cond - ((and (< :beg (point)) - (< (point) :end)) - :op) - ((eq action 'rewrap-sexp) - (plist-get sp-handler-context :parent))))))) - (cond - ((equal parent-delim id) - (sp--escape-region (list id sp-escape-char) :beg :end)) - (parent-delim - (sp--escape-region (list id) :beg-in :end-in)) - (t - (sp--escape-region (list id sp-escape-char) :beg-in :end-in))))))) - -(defun sp-escape-quotes-after-insert (id action context) - "Escape quotes inserted via `sp-insert-pair'." - (when (and sp-escape-quotes-after-insert - (eq action 'insert) - ;; we test not being inside string because if we were - ;; before inserting the "" pair it is now split into two - ;; -> which moves us outside the pair - (not (eq context 'string)) - ;; the inserted character must have string syntax, otherwise no "context" flip happens - (eq (char-syntax (aref id 0)) ?\")) - (let ((open id) - (close (sp-get-pair id :close))) - (sp--escape-region (list open close) - (- (point) (length open)) - (+ (point) (length close)))))) - -(defun sp--buffer-is-string-balanced-p () - "Check if the buffer is string-balanced. - -A string-balanced buffer is one where where is no unclosed -string, that is, the string state at the end of the buffer is -\"closed\"." - (save-excursion - (save-restriction - (widen) - (goto-char (point-max)) - (let ((syntax (sp--syntax-ppss))) - (or (< (car syntax) 0) - (nth 3 syntax)))))) - -(defun sp-escape-open-delimiter () - "Escape just inserted opening pair if `sp-insert-pair' was skipped. - -This is useful for escaping of \" inside strings when its pairing -is disabled. This way, we can control autoescape and closing -delimiter insertion separately." - (-when-let (open (plist-get (sp--pair-to-insert 'escape) :open)) - (when (and (sp--do-action-p open 'escape) - sp-point-inside-string - ;; do not escape if we are looking at a closing - ;; delimiter, that means we closed an opened string, - ;; most likely. - (sp--buffer-is-string-balanced-p)) - (sp--escape-region (list open) (- (point) (length open)) (point))))) - -;; kept to not break people's config... remove later -(defun sp-match-sgml-tags (tag) - "Split the html tag TAG at the first space and return its name." - (let* ((split (split-string tag " ")) - (close (car split))) - close)) -(make-obsolete 'sp-match-sgml-tags "do not use this function as the tag system has been removed." "2015-02-07") - -(defun sp--is-number-cons (c) - "Return non-nil if C is a cons cell with numbers at `car' and `cdr'." - (and (consp c) (numberp (car c)) (numberp (cdr c)))) - -;; TODO: more research is needed -(defun sp--undo-pop-to-last-insertion-node () - "Pop all undo info until an insertion node (beg . end) is found. - -This can potentially remove some undo important information." - (while (and buffer-undo-list - (or (null (car buffer-undo-list)) ;; is nil - ;; is not undo action we're interested in - (not (sp--is-number-cons (car buffer-undo-list))))) - (pop buffer-undo-list))) - -;; modified from: https://github.com/Fuco1/smartparens/issues/90#issuecomment-18800369 -(defun sp--split-last-insertion-undo (len) - "Split the last insertion node in the `buffer-undo-list' to -include separate pair node." - (sp--undo-pop-to-last-insertion-node) - (when buffer-undo-list - (let* ((previous-undo-actions (cdr buffer-undo-list)) - (beg (caar buffer-undo-list)) - (end (cdar buffer-undo-list)) - first-action second-action) - (unless (< beg (- end len)) - ;; We need to go back more than one action. Given the pairs - ;; are limited to 10 chars now and the chunks seem to be 20 - ;; chars, we probably wouldn't need more. - (pop buffer-undo-list) - (sp--undo-pop-to-last-insertion-node) - (when buffer-undo-list - (setq beg (caar buffer-undo-list)) - (setq previous-undo-actions (cdr buffer-undo-list)))) - (setq first-action (cons beg (- end len))) - (setq second-action (cons (- end len) end)) - (setq buffer-undo-list - (append (list nil second-action nil first-action) - previous-undo-actions))))) - -;; TODO: remove ACTION argument and make the selection process more -;; unified (see also sp--pair-to-wrap which depends on buffer state -;; among other things) -(defun sp--all-pairs-to-insert (&optional looking-fn action) - "Return all pairs that can be inserted at point. - -Return nil if such pair does not exist. - -Pairs inserted using a trigger have higher priority over pairs -without a trigger and only one or the other list is returned. - -In other words, if any pair can be inserted using a trigger, only -pairs insertable by trigger are returned. - -ACTION is an implementation detail. Usually it has the value -'insert when we determine pairs to insert. On repeated wrapping -however we pass the value 'wrap. This will be refactored away in -the upcoming version." - (setq looking-fn (or looking-fn 'sp--looking-back-p)) - (setq action (or action 'insert)) - (let ((working-pairs - ;; TODO: abstract this into a new "sp--get-..." hierarchy - (--filter (sp--do-action-p (plist-get it :open) action) sp-local-pairs))) - (-if-let (trigs (--filter (and (plist-get it :trigger) - (funcall looking-fn (sp--strict-regexp-quote (plist-get it :trigger)))) - working-pairs)) - (cons :trigger trigs) - (-when-let (pairs (--filter (funcall looking-fn (sp--strict-regexp-quote (plist-get it :open))) working-pairs)) - (cons :open pairs))))) - -(defun sp--pair-to-insert-comparator (prop a b) - (cond - ;; in case of triggers shorter always wins - ((eq prop :trigger) - (< (length (plist-get a :trigger)) (length (plist-get b :trigger)))) - ;; Shorter wins only if the shorter's closing is a prefix of the - ;; longer's closing. In other words, if we are looking at - ;; shorter's closing and we are trying to nest it. - (t - (if (< (length (plist-get a :open)) (length (plist-get b :open))) - (and (string-prefix-p (plist-get a :close) (plist-get b :close)) - (sp--looking-at-p (plist-get a :close))) - (not (and (string-prefix-p (plist-get b :close) (plist-get a :close)) - (sp--looking-at-p (plist-get b :close)))))))) - -(defun sp--pair-to-insert (&optional action) - "Return pair that can be inserted at point. - -Return nil if such pair does not exist. - -If more triggers or opening pairs are possible select the -shortest one." - (-when-let ((property . pairs) (sp--all-pairs-to-insert nil action)) - (car (--sort (sp--pair-to-insert-comparator property it other) pairs)))) - -(defun sp--longest-prefix-to-insert () - "Return pair with the longest :open which can be inserted at point." - (-when-let (pairs (--filter (sp--looking-back-p (sp--strict-regexp-quote (plist-get it :open))) sp-local-pairs)) - (car (--sort (> (length (plist-get it :open)) (length (plist-get other :open))) pairs)))) - -(defun sp--pair-to-uninsert () - "Return pair to uninsert. - -If the current to-be-inserted pair shares a prefix with -another (shorter) pair, we must first remove the effect of -inserting its closing pair before inserting the current one. - -The previously inserted pair must be the one with the longest -common prefix excluding the current pair." - (-when-let (lp (sp--longest-prefix-to-insert)) - (save-excursion - (backward-char (length (plist-get lp :open))) - (-when-let ((property . pairs) (sp--all-pairs-to-insert 'sp--looking-at-p)) - (car (--sort (> (length (plist-get it property)) (length (plist-get other property))) - ;; remove pairs whose open is longer than the - ;; current longest possible prefix---otherwise - ;; they would overflow to the closing pair - ;; TODO: this ignores the possibility when lp is - ;; inserted by trigger. We assume triggers are - ;; shorter than the openings and this situation, - ;; if ever, should be very rare - (--remove (>= (length (plist-get it :open)) - (length (plist-get lp :open))) pairs))))))) - -(defun sp--insert-pair-get-pair-info (active-pair) - "Get basic info about the to-be-inserted pair." - (let ((open-pair (plist-get active-pair :open))) - (list - open-pair - (plist-get active-pair :close) - (-if-let (tr (plist-get active-pair :trigger)) - (if (sp--looking-back-p (sp--strict-regexp-quote tr)) tr open-pair) - open-pair)))) - -(defun sp-insert-pair (&optional pair) - "Automatically insert the closing pair if it is allowed in current context. - -If PAIR is provided, use this as pair ID instead of looking -through the recent history of pressed keys. - -You can disable this feature completely for all modes and all pairs by -setting `sp-autoinsert-pair' to nil. - -You can globally disable insertion of closing pair if point is -followed by the matching opening pair. It is disabled by -default." - (sp--with-case-sensitive - (catch 'done - (-let* ((active-pair (unwind-protect - ;; This fake insertion manufactures proper - ;; context for the tests below... in effect - ;; we must make it look as if the user - ;; typed in the opening part themselves - ;; TODO: it is duplicated in the test - ;; below, maybe it wouldn't hurt to - ;; restructure this function a bit - (progn - (when pair (insert pair)) - (sp--pair-to-insert)) - (when pair (delete-char (- (length pair)))))) - ((open-pair close-pair trig) (sp--insert-pair-get-pair-info active-pair))) - ;; We are not looking at a closing delimiter which might mean we - ;; are in an already existing sexp. If the to-be-inserted pair - ;; has a prefix which is also a pair we migth be extending the - ;; opener of a sexp with this opener. In which case we should - ;; probably rewrap. - (unless (sp--looking-at-p (sp--get-closing-regexp)) - (when (and open-pair - (= 1 (- (point) sp-pre-command-point))) - (-when-let (prefix-pair (sp-get-pair (substring open-pair 0 -1))) - (let ((last-char-of-open-pair (substring open-pair -1))) - (unwind-protect - (progn - (delete-char -1) - (--when-let (sp-get-thing t) - (save-excursion - (sp-get it - (delete-region :end-in :end) - (goto-char :end-in) - (insert close-pair))) - (throw 'done t))) - (insert last-char-of-open-pair)))))) - (if (not (unwind-protect - (progn - (when pair (insert pair)) - ;; TODO: all these tests must go into `sp--pair-to-insert' - (and sp-autoinsert-pair - active-pair - (if (memq sp-autoskip-closing-pair '(always always-end)) - (or (not (equal open-pair close-pair)) - (not (sp-skip-closing-pair nil t))) - t) - (sp--do-action-p open-pair 'insert t) - ;; was sp-autoinsert-if-followed-by-same - (or (not (sp--get-active-overlay 'pair)) - (not (sp--looking-at (sp--strict-regexp-quote open-pair))) - (and (equal open-pair close-pair) - (eq sp-last-operation 'sp-insert-pair) - (save-excursion - (backward-char (length trig)) - (sp--looking-back (sp--strict-regexp-quote open-pair)))) - (not (equal open-pair close-pair))))) - (when pair (delete-char (- (length pair)))))) - ;; if this pair could not be inserted, we try the procedure - ;; again with this pair removed from sp-pair-list to give - ;; chance to other pairs sharing a common suffix (for - ;; example \[ and [) - (let ((new-sp-pair-list (--remove (equal (car it) open-pair) sp-pair-list)) - (new-sp-local-pairs (--remove (equal (plist-get it :open) open-pair) sp-local-pairs))) - (when (> (length sp-pair-list) (length new-sp-pair-list)) - (let ((sp-pair-list new-sp-pair-list) - (sp-local-pairs new-sp-local-pairs)) - (sp-insert-pair)))) - ;; setup the delayed insertion here. - (if (sp-get-pair open-pair :when-cond) - (progn - (setq sp-delayed-pair (cons open-pair (- (point) (length open-pair)))) - (setq sp-last-operation 'sp-insert-pair-delayed)) - (unless pair (delete-char (- (length trig)))) - (insert open-pair) - (sp--run-hook-with-args open-pair :pre-handlers 'insert) - ;; The re-binding of these dynamic variables is a hack to - ;; combat the similar rebinding in the branch above where - ;; we retry `sp-insert-pair' with some pairs removed. - ;; This however causes them to be uninserted improperly, - ;; so for this one operation we need to restore the state - ;; to the "full" pair list. TODO: in the future we might - ;; want to pass the state around explicitly so we have - ;; better control. - (--when-let (let ((sp-pair-list (sp-state-pair-list sp-state)) - (sp-local-pairs (sp-state-local-pairs sp-state))) - (sp--pair-to-uninsert)) - (let ((cl (plist-get it :close))) - (when (and (sp--looking-at-p (sp--strict-regexp-quote cl)) - (> (- (length close-pair) (length cl)) 0)) - (delete-char (length cl))))) - (insert close-pair) - (backward-char (length close-pair)) - (sp--pair-overlay-create (- (point) (length open-pair)) - (+ (point) (length close-pair)) - open-pair) - (when sp-undo-pairs-separately - (sp--split-last-insertion-undo (+ (length open-pair) (length close-pair))) - ;; TODO: abc\{abc\} undo undo \{asd\} . next undo removes the - ;; entire \{asd\} if we do not insert two nils here. - ;; Normally, repeated nils are ignored so it shouldn't - ;; matter. It would still be useful to inspect further. - (push nil buffer-undo-list) - (push nil buffer-undo-list)) - (sp--run-hook-with-args open-pair :post-handlers 'insert) - (setq sp-last-inserted-pair open-pair) - (setf (sp-state-delayed-hook sp-state) (cons :next open-pair)) - (setq sp-last-operation 'sp-insert-pair))))))) - -(defun sp--wrap-repeat-last (active-pair) - "If the last operation was a wrap and `sp-wrap-repeat-last' is -non-nil, repeat the wrapping with this pair around the last -active region." - (unless (= 0 sp-wrap-repeat-last) - (when sp-last-wrapped-region - (let* ((b (sp-get sp-last-wrapped-region :beg)) - (e (sp-get sp-last-wrapped-region :end)) - (op (sp-get sp-last-wrapped-region :op)) - (oplen (length op)) - (cllen (sp-get sp-last-wrapped-region :cl-l)) - (acolen (length (car active-pair)))) - (when (and - (cond - ((= 1 sp-wrap-repeat-last) - (equal (car active-pair) op)) - ((= 2 sp-wrap-repeat-last))) - (memq sp-last-operation '(sp-self-insert sp-wrap-region)) - (or (= (point) (+ b oplen acolen)) - (= (point) e))) - (delete-char (- acolen)) - (if (< (point) e) - (progn (goto-char (+ b oplen)) - (insert (car active-pair)) - (goto-char (- e cllen)) - (insert (cdr active-pair)) - (setq sp-last-wrapped-region - (sp--get-last-wraped-region - (+ b oplen) (point) - (car active-pair) (cdr active-pair))) - (goto-char (+ b oplen acolen))) - (goto-char b) - (insert (car active-pair)) - (goto-char e) - (insert (cdr active-pair)) - (setq sp-last-wrapped-region - (sp--get-last-wraped-region - b e (car active-pair) (cdr active-pair)))) - (setq sp-last-operation 'sp-wrap-region) - (sp--run-hook-with-args (car active-pair) :post-handlers 'wrap) - sp-last-operation))))) - -(defun sp--char-is-part-of-stringlike (char) - "Return non-nil if CHAR is part of a string-like delimiter of length 1." - (->> (sp--get-stringlike-list) - (--filter (= 1 (length (cdr it)))) - (-map 'car) - (--any? (string-match-p (regexp-quote char) it)))) - -(defun sp--char-is-part-of-closing (char &optional pair-list) - "Return non-nil if CHAR is part of a pair delimiter of length 1. -Specifically, return the pair for which CHAR is the closing -delimiter." - (let ((regexp (regexp-quote char))) - (->> (or pair-list (sp--get-pair-list)) - (--filter (= 1 (length (cdr it)))) - (--find (string-match-p regexp (cdr it)))))) - -;; TODO: this only supports single-char delimiters. Maybe it should -;; that that way. -(defun sp-skip-closing-pair (&optional last test-only) - "Automatically skip the closing delimiters of pairs. - -If point is inside an inserted pair, and the user only moved -forward with point (that is, only inserted text), if the closing -pair is typed, we shouldn't insert it again but skip forward. We -call this state \"active sexp\". The setting -`sp-cancel-autoskip-on-backward-movement' controls when an active -expression become inactive. - -For example, pressing ( is followed by inserting the pair (|). If -we then type 'word' and follow by ), the result should be (word)| -instead of (word)|). - -This behaviour can be customized by various settings of -`sp-autoskip-closing-pair' and `sp-autoskip-opening-pair'. - -Additionally, this behaviour can be selectively disabled for -specific pairs by removing their \"autoskip\" action. You can -achieve this by using `sp-pair' or `sp-local-pair' with -\":actions '(:rem autoskip)\"." - (sp--with-case-sensitive - (when (or (and (eq sp-autoskip-closing-pair t) - sp-pair-overlay-list - (sp--get-active-overlay 'pair)) - (memq sp-autoskip-closing-pair '(always always-end))) - ;; TODO: ugly hack to override 'navigate with 'autoskip. Each of - ;; these submodules should set-up their own environment somehow - ;; and thread it through the entire computation - (cl-letf (((symbol-function 'sp--get-allowed-stringlike-list) - (lambda () - (--filter (and (sp--do-action-p (car it) 'autoskip) - (equal (car it) (cdr it))) sp-pair-list)))) - ;; these two are pretty hackish ~_~ - (cl-labels ((get-sexp - (last) - (delete-char -1) - (insert " ") - (prog1 (sp-get-sexp) - (delete-char -1) - (insert last))) - (get-enclosing-sexp - (last) - (delete-char -1) - (insert " ") - (prog1 (sp-get-enclosing-sexp) - (delete-char -1) - (insert last)))) - (let ((last (or last (sp--single-key-description last-command-event)))) - (-if-let (active-sexp - (cond - ((-when-let* ((ov (sp--get-active-overlay 'pair)) - (op (overlay-get ov 'pair-id)) - (cl (cdr (assoc op sp-pair-list)))) - ;; if the sexp is active, we are inside it. - (when (and (= 1 (length op)) - (equal last cl)) - (list :beg (overlay-start ov) - :end (overlay-end ov) - :op op - :cl cl - :prefix "" - :suffix "")))) - ((sp--char-is-part-of-stringlike last) - ;; a part of closing delimiter is typed. There are four - ;; options now: - ;; - we are inside the sexp, at its end - ;; - we are inside the sexp, somewhere in the middle - ;; - we are outside, in front of a sexp - ;; - we are outside, somewhere between sexps - (cond - ((and (sp--looking-at (sp--get-stringlike-regexp)) - (not (sp--skip-match-p (match-string-no-properties 0) - (match-beginning 0) - (match-end 0)))) - ;; if we're looking at the delimiter, and it is valid in - ;; current context, get the sexp. - (get-sexp last)) - ;; here comes the feature when we're somewhere in the - ;; middle of the sexp (or outside), if ever supported. - )) - ((sp--char-is-part-of-closing last) - (cond - ((and (sp--looking-at (sp--get-closing-regexp)) - (not (sp--skip-match-p (match-string-no-properties 0) - (match-beginning 0) - (match-end 0)))) - (get-sexp last)) - ((eq sp-autoskip-closing-pair 'always) - (get-enclosing-sexp last)))))) - (if (and active-sexp - (equal (sp-get active-sexp :cl) last) - (sp--do-action-p (sp-get active-sexp :op) 'autoskip) - ;; if the point is inside string and preceded - ;; by an odd number of `sp-escape-char's, we - ;; should not skip as that would leave the - ;; string broken. - (or (not (sp-point-in-string)) - (not (sp-char-is-escaped-p (1- (point)))))) - (-when-let (re (cond - ((= (point) (sp-get active-sexp :beg)) - ;; we are in front of a string-like sexp - (when sp-autoskip-opening-pair - (if test-only t - (delete-char -1) - (forward-char) - (setq sp-last-operation 'sp-skip-closing-pair)))) - ((= (point) (sp-get active-sexp :end-in)) - (if test-only t - (delete-char 1) - (setq sp-last-operation 'sp-skip-closing-pair))) - ((sp-get active-sexp - (and (> (point) :beg-in) - (< (point) :end-in))) - (if test-only t - (delete-char -1) - (sp-up-sexp nil t))))) - (unless (or test-only - sp-buffer-modified-p) - (set-buffer-modified-p nil)) - (unless test-only - (sp--run-hook-with-args (sp-get active-sexp :op) :post-handlers 'skip-closing-pair)) - re) - ;; if we can't skip and are in strict mode we must not - ;; insert anything if it is a closing character - (sp--inhibit-insertion-of-closing-delim last)) - (sp--inhibit-insertion-of-closing-delim last)))))))) - -(defun sp--inhibit-insertion-of-closing-delim (last) - "Inhibit insertion of closing delimiter in `smartparens-strict-mode'. - -If we are not inserting inside string or a comment, and the LAST -inserted character is closing delimiter for a pair that performs -autoskip, and we can not jump out of its enclosing sexp (i.e. it -does not match), we are not allowed to insert it literally -because it would break the balance; so we delete the -just-inserted character." - (when (and smartparens-strict-mode - (-when-let (pair (sp--char-is-part-of-closing - last (sp--get-allowed-pair-list))) - (memq 'autoskip (sp-get-pair (car pair) :actions))) - (not (sp-point-in-string-or-comment))) - (delete-char -1) - (set-buffer-modified-p sp-buffer-modified-p) - (sp-message :cant-insert-closing-delimiter) - nil)) - -(defun sp-delete-pair (&optional arg) - "Automatically delete opening or closing pair, or both, depending on -position of point. - -If the point is inside an empty pair, automatically delete both. That -is, [(|) turns to [|, [\{|\} turns to [|. Can be disabled by setting -`sp-autodelete-pair' to nil. - -If the point is behind a closing pair or behind an opening pair delete -it as a whole. That is, \{\}| turns to \{|, \{| turns to |. Can be -disabled by setting `sp-autodelete-closing-pair' and -`sp-autodelete-opening-pair' to nil. - -If the last operation was a wrap and `sp-autodelete-wrap' is -enabled, invoking this function will unwrap the expression, that -is remove the just added wrapping." - ;; NOTE: Only use delete-char inside this function, so we - ;; don't activate the advice recursively! - - ;; only activate if argument is 1 (this is 0-th argument of the - ;; delete-backward-char), otherwise the user wants to delete - ;; multiple character, so let him do that - (sp--with-case-sensitive - (when (and (= arg 1) - smartparens-mode) - (if (and sp-autodelete-wrap - (eq sp-last-operation 'sp-wrap-region)) - (let ((p (point)) - (b (sp-get sp-last-wrapped-region :beg)) - (e (sp-get sp-last-wrapped-region :end)) - (o (sp-get sp-last-wrapped-region :op-l)) - (c (sp-get sp-last-wrapped-region :cl-l))) - ;; if the last operation was `sp-wrap-region', and we are at - ;; the position of either opening or closing pair, delete the - ;; just-inserted pair - (when (or (= p (+ b o)) - (= p e)) - (insert "x") ;dummy char to account for the regularly deleted one - (save-excursion - (goto-char e) - (delete-char (- c)) - (goto-char b) - (delete-char o)) - (setq sp-last-operation 'sp-delete-pair-wrap))) - (let ((p (point)) - (inside-pair (--first (and (sp--looking-back (sp--strict-regexp-quote (car it))) - (sp--looking-at (concat "[ \n\t]*" (sp--strict-regexp-quote (cdr it))))) - sp-pair-list)) - (behind-pair (--first (sp--looking-back (sp--strict-regexp-quote (cdr it))) sp-pair-list)) - (opening-pair (--first (sp--looking-back (sp--strict-regexp-quote (car it))) sp-pair-list))) - - (cond - ;; we're just before the closing quote of a string. If there - ;; is an opening or closing pair behind the point, remove - ;; it. This is only really relevant if the pair ends in the - ;; same character as string quote. We almost never want to - ;; delete it as an autopair (it would "open up the string"). - ;; So, word\"|" and should produce word\|" or - ;; word|" (if \" is autopair) instead of word\|. - ((and (sp-point-in-string) - (not (sp-point-in-string (1+ p))) - (sp-point-in-string (1- p))) ;; the string isn't empty - (cond ;; oh, you ugly duplication :/ - ((and behind-pair sp-autodelete-closing-pair) - (delete-char (- (1- (length (car behind-pair))))) - (setq sp-last-operation 'sp-delete-pair-closing)) - ((and opening-pair sp-autodelete-opening-pair) - (delete-char (- (1- (length (car opening-pair))))) - (setq sp-last-operation 'sp-delete-pair-opening)))) - ;; we're inside a pair - ((and inside-pair sp-autodelete-pair) - (let* ((beg (save-excursion - (search-backward (car inside-pair)))) - (end (save-excursion - (search-forward (cdr inside-pair)))) - (cs (sp--get-context p)) - (ce (sp--get-context end)) - (current-sexp (sp-get-sexp))) - (when (and (or (not (eq cs 'comment)) ;; a => b <=> ~a v b - (eq ce 'comment)) - (eq beg (sp-get current-sexp :beg)) - (eq end (sp-get current-sexp :end)) - (equal (sp-get current-sexp :op) (car inside-pair)) - (equal (sp-get current-sexp :cl) (cdr inside-pair))) - (delete-char (- end p)) - (delete-char (- (1- (length (car inside-pair))))) - (setq sp-last-operation 'sp-delete-pair)))) - ;; we're behind a closing pair - ((and behind-pair sp-autodelete-closing-pair) - (delete-char (- (1- (length (cdr behind-pair))))) - (setq sp-last-operation 'sp-delete-pair-closing)) - ;; we're behind an opening pair and there's no closing pair - ((and opening-pair sp-autodelete-opening-pair) - (delete-char (- (1- (length (car opening-pair))))) - (setq sp-last-operation 'sp-delete-pair-opening)))))))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Navigation - -(defun sp--looking-at (regexp) - "Like `looking-at', but always case sensitive." - (sp--with-case-sensitive - (looking-at regexp))) - -(defun sp--looking-at-p (regexp) - "Like `looking-at-p', but always case sensitive." - (sp--with-case-sensitive - (looking-at-p regexp))) - -(defun sp--looking-back (regexp &optional limit not-greedy) - "Return non-nil if text before point matches regular expression REGEXP. - -With optional argument LIMIT search only that many characters -backward. If LIMIT is nil, default to `sp-max-pair-length'. - -If optional argument NON-GREEDY is t search for any matching -sequence, not necessarily the longest possible." - (setq limit (or limit sp-max-pair-length)) - (sp--with-case-sensitive - (let ((from (max 1 (- (point) limit))) - (to (point)) - (greedy (not not-greedy)) - has-match) - (if greedy - (save-excursion - (goto-char from) - (save-match-data - (while (and (not has-match) (< (point) to)) - ;; don't use looking-at because we can't limit that search - (if (and (save-excursion (re-search-forward regexp to t)) - (= (match-end 0) to)) - (setq has-match (match-data)) - (forward-char 1)))) - (when has-match - (set-match-data has-match) - t)) - (save-excursion - (not (null (search-backward-regexp (concat "\\(?:" regexp "\\)\\=") from t)))))))) - -(defun sp--looking-back-p (regexp &optional limit not-greedy) - "Same as `sp--looking-back' but do not change the match data." - (save-match-data - (sp--looking-back regexp limit not-greedy))) - -(defun sp--search-backward-regexp (regexp &optional bound noerror count) - "Works just like `search-backward-regexp', but returns the -longest possible match. That means that searching for -\"defun|fun\" backwards would return \"defun\" instead of -\"fun\", which would be matched first. - -This is an internal function. Only use this for searching for -pairs!" - (setq count (or count 1)) - (setq bound (or (sp--get-backward-bound) bound)) - (sp--with-case-sensitive - (let (r) - (while (> count 0) - (when (search-backward-regexp regexp bound noerror) - (goto-char (match-end 0)) - (if (sp--looking-back regexp) - (setq r (goto-char (match-beginning 0))) - (if noerror nil (error "Search failed: %s" regexp)))) - (setq count (1- count))) - r))) - -(defun sp--search-forward-regexp (regexp &optional bound noerror count) - "Just like `search-forward-regexp', but always case sensitive." - (setq bound (or (sp--get-forward-bound) bound)) - (sp--with-case-sensitive - (search-forward-regexp regexp bound noerror count))) - -(defun sp-get-quoted-string-bounds (&optional point) - "Return the bounds of the string around POINT. - -POINT defaults to `point'. - -If the point is not inside a quoted string, return nil." - (setq point (or point (point))) - (save-excursion - (goto-char point) - (let ((parse-data (syntax-ppss))) - (when (nth 3 parse-data) - (let* ((open (nth 8 parse-data)) - (close (save-excursion - (parse-partial-sexp - (point) (point-max) - nil nil parse-data 'syntax-table) - (point)))) - (cons open close)))))) - -;; TODO: the repeated conditions are ugly, refactor this! -(defun sp-get-comment-bounds () - "If the point is inside a comment, return its bounds." - (when (or (sp-point-in-comment) - (looking-at "[[:space:]]+\\s<")) - (let ((open (save-excursion - (--when-let (nth 8 (sp--syntax-ppss)) - (goto-char it)) - (while (and (not (bobp)) - (or (when (sp-point-in-comment) - (backward-char 1) - t) - (when (save-excursion - (beginning-of-line) - (looking-at "^[[:space:]]+\\s<")) - (when (>= (forward-line -1) 0) - (end-of-line)) - t)))) - ;; this means we got here by `sp-point-in-comment' condition - (unless (and (bobp) (sp-point-in-comment)) - (forward-char)) - (point))) - (close (save-excursion - (while (and (not (eobp)) - (or (sp-point-in-comment) - (looking-at "[[:space:]]+\\s<"))) - (forward-char 1)) - (let ((pp (1- (point)))) - (when (not (or (eobp) - (sp-point-in-comment) - (looking-at "[[:space:]]+\\s<") - (and (eq (char-syntax - (char-after pp)) ?>) - (not (eq (char-after pp) ?\n))) - (/= (logand - (lsh 1 18) - (car (syntax-after pp))) 0) - (/= (logand - (lsh 1 19) - (car (syntax-after pp))) 0))) - (backward-char 1))) - (point)))) - (cons open close)))) - -(defun sp--get-string-or-comment-bounds () - "Get the bounds of string or comment the point is in." - (or (sp-get-quoted-string-bounds) - (sp-get-comment-bounds))) - -(defmacro sp--search-and-save-match (search-fn pattern bound res beg end str) - "Save the last match info." - `(progn - (setq ,res (funcall ,search-fn ,pattern ,bound t)) - (when ,res - (setq ,beg (match-beginning 0)) - (setq ,end (match-end 0)) - (setq ,str (match-string 0))) - ,res)) - -(cl-defun sp--skip-match-p (ms mb me - &key - (global-skip (cdr (--first (memq major-mode (car it)) sp-navigate-skip-match))) - (pair-skip (sp-get-pair ms :skip-match))) - "Return non-nil if this match should be skipped. - -This function uses two tests, one specified in -`sp-navigate-skip-match' (this is global setting for all pairs in -given major mode) and by a function specified in :skip-match -property of the pair. - -If you are calling this function in a heavy loop, you can supply -the test functions as keyword arguments to speed up the lookup." - (save-match-data - (or (when global-skip (funcall global-skip ms mb me)) - (when pair-skip (funcall pair-skip ms mb me))))) - -(defmacro sp--valid-initial-delimiter-p (form) - "Test the last match using `sp--skip-match-p'. The form should -be a function call that sets the match data." - (declare (debug (form))) - (let ((match (make-symbol "match")) - (pair-skip (make-symbol "pair-skip"))) - `(and ,form - (let* ((,match (match-string 0)) - (,pair-skip (or (sp-get-pair ,match :skip-match) - (sp-get-pair (car (--first - (equal (cdr it) ,match) - sp-pair-list)) - :skip-match)))) - (not (sp--skip-match-p - ,match - (match-beginning 0) - (match-end 0) - :pair-skip ,pair-skip)))))) - -(defun sp--elisp-skip-match (ms mb _me) - "Function used to test for escapes in lisp modes. - -Non-nil return value means to skip the result." - (and ms - (> mb 1) - (save-excursion - (goto-char mb) - (save-match-data - (or (and (sp--looking-back "\\\\" 1 t) - ;; it might be a part of ?\\ token - (not (sp--looking-back "\\?\\\\\\\\" 3 t))) - (and (not (sp-point-in-string-or-comment)) - (sp--looking-back "\\?" 1 t) ;;TODO surely we can do better - (not (sp--looking-back "\\\\\\?" 2 t)) - (not (sp--looking-back "\\s_\\?" 2 t)) - (not (sp--looking-back "\\sw\\?" 2 t)))))))) - -(defun sp--backslash-skip-match (ms mb _me) - (and ms - (save-excursion - (goto-char mb) - (sp--looking-back "\\\\" 1 t)))) - -;; TODO: since this function is used for all the navigation, we should -;; optimize it a lot! Get some elisp profiler! Also, we should split -;; this into smaller functions (esp. the "first expression search" -;; business) -(defun sp-get-paired-expression (&optional back) - "Find the nearest balanced pair expression after point. - -The expressions considered are those delimited by pairs on -`sp-pair-list'." - (sp--with-case-sensitive - (save-excursion - (let* ((search-fn (if (not back) 'sp--search-forward-regexp 'sp--search-backward-regexp)) - (global-skip-fn (cdr (--first (memq major-mode (car it)) sp-navigate-skip-match))) - (pair-list (sp--get-allowed-pair-list)) - ;; TODO UGLY HACK!!! When the situation is: - ;; ..)|;; comment - ;; the context the point gets is the comment. But if we - ;; are searching backward, that is incorrect, because in - ;; that case we want the context of the closing pair. - ;; Therefore, if the direction is backward, we need to move - ;; one point backward, then test the comment/string thing, - ;; then compute the correct bounds, and then restore the - ;; point so the search will pick up the ) - - ;; However, we need to distinguish the cases where we are - ;; in comment and trying to get out, and when we are in any - ;; context and we jump into string (in that case, we should - ;; report code context!). For example: - ;; "foo"|;bar - ;; or - ;; "foo"|bar - ;; should both report code context - ;; and "|(foo)" should report string context. - - ;; Beware the case when we have a string inside a comment, like - ;; (foo) ;; bar "baz"| qux - ;; In this case we want to report comment context even when - ;; backing into the "" (which however is commented) - - ;; Yet another case is when we are not in a comment but - ;; directly after one and we search backwards, consider: - ;; /* foo bar */| - ;; in C-like language. In this case, we want to report the - ;; context as comment. - - ;; In some languages, special paren syntax with a prefix - ;; serves to mark strings. This means that regular - ;; delimiters, like () are used to delimit strings. For - ;; example, in ruby the sequence %w(...) signifies a - ;; string. If the point is after such a sequence and we - ;; are searching back, we must use the string context, - ;; because the paren is now a string delimiter. This is - ;; usually implemented with "string fence" syntax, so we - ;; will simply check for that. - - ;; Thanks for being consistent at handling syntax bounds Emacs! - (in-string-or-comment (if back - (let ((in-comment (sp-point-in-comment)) - (in-string (sp-point-in-string))) - (save-excursion - (unless (= (point) (point-min)) - (backward-char) - (cond - ((eq (car (syntax-after (point))) 15) (point)) - (in-comment (when (sp-point-in-comment) (1+ (point)))) - ((and (not in-comment) (sp-point-in-comment)) (1+ (point))) - ((or in-comment in-string) (1+ (point))))))) - (when (sp-point-in-string-or-comment) (point)))) - (string-bounds (and in-string-or-comment - (progn - (goto-char in-string-or-comment) - (sp--get-string-or-comment-bounds)))) - (fw-bound (if in-string-or-comment (cdr string-bounds) (point-max))) - (bw-bound (if in-string-or-comment (car string-bounds) (point-min))) - s e forward mb me ms r done - possible-pairs possible-interfering-pairs possible-ops possible-cls) - (while (and (not done) - (sp--search-and-save-match - search-fn - ;; #556 The regexp we use here might exclude or - ;; include extra pairs in case the next match is in - ;; a different context. There's no way to know - ;; beforehand where we land, so we need to consider - ;; *all* pairs in the search and then re-check with - ;; a regexp based on the context of the found pair - (sp--get-allowed-regexp - ;; use all the pairs! - (sp--get-pair-list)) - (if back bw-bound fw-bound) - r mb me ms)) - ;; search for the first opening pair. Here, only consider tags - ;; that are allowed in the current context. - (unless (or (not (save-excursion - (if back - (progn - (goto-char me) - (sp--looking-back-p (sp--get-allowed-regexp))) - (goto-char mb) - (sp--looking-at-p (sp--get-allowed-regexp))))) - (sp--skip-match-p ms mb me :global-skip global-skip-fn)) - ;; if the point originally wasn't inside of a string or comment - ;; but now is, jump out of the string/comment and only search - ;; the code. This ensures that the comments and strings are - ;; skipped if we search inside code. - (if (and (not in-string-or-comment) - (if back - ;; When searching back, the point lands on the - ;; first character of whatever pair we've found - ;; and it is in the proper context, for example - ;; "|(foo)" - (sp-point-in-string-or-comment) - ;; However, when searching forward, the point - ;; lands after the last char of the pair so to get - ;; its context we must back up one character - (sp-point-in-string-or-comment (1- (point))))) - (-if-let (bounds (sp--get-string-or-comment-bounds)) - (let ((jump-to (if back (car bounds) (cdr bounds)))) - (goto-char jump-to) - ;; Can't move out of comment because eob, #427 - (when (eobp) - (setq done t))) - (setq done t)) - (setq done t)))) - (when r - (setq possible-pairs (--filter (or (equal ms (car it)) - (equal ms (cdr it))) - pair-list)) - (setq possible-ops (-map 'car possible-pairs)) - (setq possible-cls (-map 'cdr possible-pairs)) - (setq pair-list (-difference pair-list possible-pairs)) - (setq possible-interfering-pairs pair-list) - (while possible-interfering-pairs - (setq possible-interfering-pairs - (--filter (or (-contains? possible-ops (car it)) - (-contains? possible-cls (cdr it))) - pair-list)) - (setq pair-list (-difference pair-list possible-interfering-pairs)) - (setq possible-ops (append possible-ops (-map 'car possible-interfering-pairs))) - (setq possible-cls (append possible-cls (-map 'cdr possible-interfering-pairs)))) - (when (--any? (equal ms it) possible-ops) - (setq forward t) - (setq s mb) - (when back - (forward-char (length ms)))) - (when (--any? (equal ms it) possible-cls) - (setq forward nil) - (setq e me) - (when (not back) - (backward-char (length ms)))) - (let* ((opens (if forward possible-ops possible-cls)) - (closes (if forward possible-cls possible-ops)) - (needle (sp--strict-regexp-opt (append possible-ops possible-cls))) - (search-fn (if forward 'sp--search-forward-regexp 'sp--search-backward-regexp)) - (depth 1) - (eof (if forward 'eobp 'bobp)) - (b (if forward fw-bound bw-bound)) - (open (substring-no-properties ms)) - (close (substring-no-properties ms)) - (failure (funcall eof)) - (skip-match-pair-fns (->> possible-ops - (--mapcat (-when-let (smf (sp-get-pair it :skip-match)) - (list (cons it smf) (cons (sp-get-pair it :close) smf))))))) - (while (and (> depth 0) (not (funcall eof))) - (sp--search-and-save-match search-fn needle b r mb me ms) - (if r - (unless (or (and (not in-string-or-comment) - (if forward (save-excursion - (backward-char) - (sp-point-in-string-or-comment)) - (sp-point-in-string-or-comment))) - ;; check the individual pair skipper. We - ;; need to test all the possible-ops, - ;; which makes it a bit ugly :/ - (let ((skip-match-pair-fn - (cdr (--first (equal (car it) ms) skip-match-pair-fns)))) - (sp--skip-match-p ms mb me :global-skip global-skip-fn :pair-skip skip-match-pair-fn))) - (when (--any? (equal ms it) opens) (setq depth (1+ depth))) - (when (--any? (equal ms it) closes) (setq depth (1- depth)))) - (unless (minibufferp) - (sp-message :unmatched-expression)) - (setq depth -1) - (setq failure t))) - (if forward - (setq e me) - (setq s mb)) - (setq close (substring-no-properties ms)) - (if (or failure - (/= depth 0)) - (progn - (unless (minibufferp) - (sp-message :unmatched-expression)) - nil) - (let ((end-in-cos (sp-point-in-string-or-comment (1- e)))) ;; fix the "point on comment" issue - (cond - ((or (and (sp-point-in-string-or-comment s) (not end-in-cos)) - (and (not (sp-point-in-string-or-comment s)) end-in-cos)) - (unless (minibufferp) - (sp-message :delimiter-in-string)) - nil) - (t - (let* ((op (if forward open close))) - (list :beg s - :end e - :op op - :cl (if forward close open) - :prefix (sp--get-prefix s op) - :suffix (sp--get-suffix e op))))))))))))) - -;; TODO: this does not consider unbalanced quotes in comments!!! -(defun sp--find-next-stringlike-delimiter (needle search-fn-f &optional limit skip-fn) - "Find the next string-like delimiter, considering the escapes -and the skip-match predicate." - (let (hit match) - (while (and (not hit) - (funcall search-fn-f needle limit t)) - (save-match-data - (setq match (match-string-no-properties 0)) - (unless (or (save-match-data - (save-excursion - (goto-char (match-beginning 0)) - (or (sp--looking-back-p "\\\\" 2) ;; assumes \ is always the escape... bad? - (and (eq major-mode 'emacs-lisp-mode) - (not (sp-point-in-string)) - (sp--looking-back-p "?" 1))))) - ;; TODO: HACK: global-skip is hack here!!! - (sp--skip-match-p match (match-beginning 0) (match-end 0) - :pair-skip (or skip-fn - (sp-get-pair match :skip-match)) - :global-skip nil)) - (setq hit (match-data))))) - hit)) - -(defun sp-get-stringlike-expression (&optional back) - "Find the nearest string-like expression after point. - -String-like expression is expression enclosed with the same -opening and closing delimiter, such as *...*, \"...\", `...` etc." - (sp--with-case-sensitive - (save-excursion - (let ((needle (sp--get-stringlike-regexp)) - (search-fn-f (if (not back) 'sp--search-forward-regexp 'sp--search-backward-regexp)) - (search-fn-b (if back 'sp--search-forward-regexp 'sp--search-backward-regexp)) - (count 0) - m b e skip-match-fn limit ok) - (when (not (equal needle "")) - (when (sp--find-next-stringlike-delimiter needle search-fn-f) - ;; assumes \ is always the escape... bad? - (setq m (match-string-no-properties 0)) - (setq needle (regexp-quote m)) - (setq skip-match-fn (sp-get-pair m :skip-match)) - (cond - ((sp-point-in-string) - (setq limit (sp-get-quoted-string-bounds))) - ((sp-point-in-comment) - (setq limit (sp-get-comment-bounds)))) - (save-excursion - (while (sp--find-next-stringlike-delimiter needle 'search-backward-regexp (car limit) skip-match-fn) - (setq count (1+ count)))) - (when (= (mod count 2) 0) - (sp--find-next-stringlike-delimiter needle search-fn-b nil)) - (save-excursion - (setq ok (sp--find-next-stringlike-delimiter needle 'sp--search-backward-regexp (car limit))) - (setq e (match-beginning 0))) - (setq ok (and ok (sp--find-next-stringlike-delimiter needle 'search-forward-regexp (cdr limit)))) - (setq b (match-end 0)) - (when ok - (let ((mb b) (me e)) - (setq b (min mb me)) - (setq e (max mb me))) - (list :beg b :end e :op m :cl m :prefix (sp--get-prefix b m) :suffix (sp--get-suffix e m))))))))) - -(defun sp--textmode-stringlike-regexp (delimiters &optional direction) - "Get a regexp matching text-mode string-like DELIMITERS. - -Capture group 1 or 2 has the delimiter itself, depending on the -direction (forward, backward). - -If DIRECTION is :open, create a regexp matching opening only. - -If DIRECTION is :close, create a regexp matching closing only. - -If DIRECTION is nil, create a regexp matching both directions." - (let* ((delims (regexp-opt delimiters)) - (re (concat - (if (or (not direction) - (eq direction :open)) - (concat "\\(?:" "\\(?:\\`\\|[ \t\n\r]\\)" "\\(" delims "\\)" "[^ \t\n\r]\\)") "") - (if (not direction) "\\|" "") - (if (or (not direction) - (eq direction :close)) - (concat "\\(?:[^ \t\n\r]" "\\(" delims "\\)" "\\(?:[ \t\n\r[:punct:]]\\|\\'\\)" "\\)") "")))) - re)) - -(defun sp--find-next-textmode-stringlike-delimiter (needle search-fn-f &optional limit) - "Find the next string-like delimiter, considering the escapes -and the skip-match predicate." - (let (hit) - (while (and (not hit) - (funcall search-fn-f needle limit t)) - (save-match-data - (let* ((group (if (match-string 1) 1 2)) - (match (match-string-no-properties group)) - (mb (match-beginning group)) - (me (match-end group)) - (skip-fn (sp-get-pair match :skip-match))) - (unless (sp--skip-match-p match mb me :pair-skip skip-fn :global-skip nil) - (setq hit (list match (if (= group 1) :open :close))))))) - hit)) - -(defun sp-get-textmode-stringlike-expression (&optional back) - "Find the nearest text-mode string-like expression. - -If BACK is non-nil search in the backwards direction. - -Text-mode string-like expression is one where the delimiters must -be surrounded by whitespace from the outside. For example, - -foo *bar* baz - -is a valid expression enclosed in ** pair, but - -foo*bar*baz OR foo *bar*baz OR foo*bar* baz - -are not. - -This is the case in almost every markup language, and so we will -adjust the parsing to only consider such pairs as delimiters. -This makes the parsing much faster as it transforms the problem -to non-stringlike matching and we can use a simple -counting (stack) algorithm." - (save-excursion - (let ((restart-from (point)) - hit re) - (while (not hit) - (goto-char restart-from) - (save-excursion - (ignore-errors - (if back (forward-char) (backward-char))) - (let* ((delimiters (-map 'car (sp--get-allowed-stringlike-list))) - (needle (sp--textmode-stringlike-regexp delimiters)) - (search-fn-f (if (not back) 'sp--search-forward-regexp 'sp--search-backward-regexp))) - (-if-let ((delim type) (sp--find-next-textmode-stringlike-delimiter needle search-fn-f)) - (let ((search-fn (if (eq type :open) 'sp--search-forward-regexp 'sp--search-backward-regexp)) - (needle (sp--textmode-stringlike-regexp (list delim) (if (eq type :open) :close :open)))) - (setq restart-from (point)) - ;; this adjustments are made because elisp regexp - ;; can't do lookahead assertions... so we match and - ;; then back up. - (ignore-errors - (when (and (not back) (eq type :open)) (backward-char (1+ (length delim)))) - (when (and (not back) (eq type :close) (not (eobp))) (backward-char 1)) - (when (and back (eq type :close)) (forward-char (1+ (length delim)))) - (when (and back (eq type :open) (not (bobp))) (forward-char 1))) - (let ((other-end (point))) - (when (sp--find-next-textmode-stringlike-delimiter needle search-fn) - ;; Beware, we also need to test the beg/end of - ;; buffer, because we have that variant in the - ;; regexp. In that case the match does not - ;; consume anything and we needn't do any - ;; correction. - (let* ((this-end (if (eq type :open) - (max (point-min) (if (eobp) (point) (1- (point)))) - (min (point-max) (if (bobp) (point) (1+ (point)))))) - (b (min this-end other-end)) - (e (max this-end other-end))) - (setq re (list :beg b - :end e - :op delim - :cl delim - :prefix (sp--get-prefix b delim) :suffix (sp--get-suffix e delim))) - (setq hit t) - ;; We ignore matches that contain two - ;; consecutive newlines, as that usually means - ;; there's a new paragraph somewhere inbetween - ;; TODO: make this customizable - (when (sp-get re - (save-excursion - (goto-char :beg) - (re-search-forward "\n\n\\|\r\r" :end t))) - (setq re nil) - (setq hit nil)))))) - (setq hit :no-more))))) - re))) - -(defun sp-use-textmode-stringlike-parser-p () - "Test if we should use textmode stringlike parser or not." - (let ((modes (-filter 'symbolp sp-navigate-use-textmode-stringlike-parser)) - (derived (-map 'cdr (-remove 'symbolp sp-navigate-use-textmode-stringlike-parser)))) - (or (--any? (eq major-mode it) modes) - (apply 'derived-mode-p derived)))) - -(defun sp-get-stringlike-or-textmode-expression (&optional back delimiter) - "Return a stringlike expression using stringlike or textmode parser. - -DELIMITER is a candidate in case we performed a search before -calling this function and we know it's the closest string -delimiter to try. This is purely a performance hack, do not rely -on it when calling directly." - (if (sp-use-textmode-stringlike-parser-p) - (sp-get-textmode-stringlike-expression back) - ;; performance hack. If the delimiter is a character in - ;; syntax class 34, grab the string-like expression using - ;; `sp-get-string' - (if (and delimiter - (= (length delimiter) 1) - ;; TODO: this "smart" behaviour is duplicated in - ;; `sp-get-thing', maybe the whole string parsing could - ;; be extracted to some common function (actually we - ;; should probably use this one from `sp-get-thing') - (eq (char-syntax (string-to-char delimiter)) 34)) - (if (eq t (sp-point-in-string)) - ;; TODO: this is duplicated in `sp-get-thing', move to a function - (save-excursion - (save-restriction - (widen) - (-let (((beg . end) (sp-get-quoted-string-bounds))) - (narrow-to-region beg end)) - (sp-get-stringlike-expression back))) - (sp-get-string back)) - (sp-get-stringlike-expression back)))) - -(defun sp-get-expression (&optional back) - "Find the nearest balanced expression of any kind. - -For markup and text modes a special, more efficient stringlike -parser is available, see `sp-get-textmode-stringlike-expression'. -By default, this is enabled in all modes derived from -`text-mode'. You can change it by customizing -`sp-navigate-use-textmode-stringlike-parser'." - (let ((pre (sp--get-allowed-regexp)) - (sre (sp--get-stringlike-regexp)) - (search-fn (if (not back) 'sp--search-forward-regexp 'sp--search-backward-regexp)) - (ps (if back (1- (point-min)) (1+ (point-max)))) - (ss (if back (1- (point-min)) (1+ (point-max)))) - (string-delim nil)) - (setq ps (if (equal pre "") ps - (or (save-excursion (funcall search-fn pre nil t)) ps))) - (setq ss (if (equal sre "") ss - (or (--when-let (save-excursion - (sp--find-next-stringlike-delimiter sre search-fn)) - (setq string-delim (match-string 0)) - (save-match-data - (set-match-data it) - (if back (match-beginning 0) (match-end 0)))) - ss))) - ;; TODO: simplify this logic somehow... (this really depends - ;; on a rewrite of the core parser logic: separation of "find - ;; the valid opening" and "parse it") - - ;; Here, we sacrifice readability for performance. Because we - ;; only use regexp to look forward for the closest pair, it - ;; might occasionally happen that what we picked in fact - ;; *can't* form a pair and it returns error (for example, it - ;; is an unclosed pair or a quote between words like'so, which - ;; doesn't form a pair). In such a case, or when the pair - ;; found is further than the other possible pair type (for - ;; example, we think we should parse stringlike, but we skip - ;; the first occurrence and the next one is only after a - ;; regular pair, which we should've picked instead), we must - ;; try the other parser as well. - (-let (((type . re) (if (or (and (not back) (< ps ss)) - (and back (> ps ss))) - (cons :regular (sp-get-paired-expression back)) - (cons :string (sp-get-stringlike-or-textmode-expression back string-delim))))) - (when re - (sp-get re - (cond - ;; If the returned sexp is regular, but the - ;; to-be-tried-string-expression is before it, we try - ;; to parse it as well, it might be a complete sexp in - ;; which case it should be returned. - ((and (eq type :regular) - (or (and (not back) (< ss :beg)) - (and back (> ss :end)))) - (or (sp-get-stringlike-or-textmode-expression back string-delim) re)) - ((and (eq type :string) - (or (and (not back) (< ps :beg)) - (and back (> ps :end)))) - (or (sp-get-paired-expression back) re)) - (t re))))))) - -(defun sp-get-sexp (&optional back) - "Find the nearest balanced expression that is after (before) point. - -Search backward if BACK is non-nil. This also means, if the -point is inside an expression, this expression is returned. - -If `major-mode' is member of `sp-navigate-consider-sgml-tags', -sgml tags will also be considered as sexps in current buffer. - -If the search starts outside a comment, all subsequent comments -are skipped. - -If the search starts inside a string or comment, it tries to find -the first balanced expression that is completely contained inside -the string or comment. If no such expression exist, a warning is -raised (for example, when you comment out imbalanced expression). -However, if you start a search from within a string and the next -complete sexp lies completely outside, this is returned. Note -that this only works in modes where strings and comments are -properly defined via the syntax tables. - -The return value is a plist with following keys: - - :beg - point in the buffer before the opening - delimiter (ignoring prefix) - :end - point in the buffer after the closing delimiter - :op - opening delimiter - :cl - closing delimiter - :prefix - expression prefix - :suffix - expression suffix - -However, you should never access this structure directly as it is -subject to change. Instead, use the macro `sp-get' which also -provide shortcuts for many commonly used queries (such as length -of opening/closing delimiter or prefix)." - (sp--maybe-init) - (sp--with-case-sensitive - (cond - (sp-prefix-tag-object - (sp-get-sgml-tag back)) - (sp-prefix-pair-object - (sp-get-paired-expression back)) - ((memq major-mode sp-navigate-consider-sgml-tags) - (let ((paired (sp-get-expression back))) - (if (and paired - (equal "<" (sp-get paired :op))) - ;; if the point is inside the tag delimiter, return the pair. - (if (sp-get paired (and (<= :beg-in (point)) (>= :end-in (point)))) - paired - ;; if the tag can't be completed, we can at least return - ;; the <> pair - (or (sp-get-sgml-tag back) paired)) - ;; we can still try the tag if the first < or > is closer than - ;; the pair. This is a bit too complicated... seems like a - ;; more clever solution would be needed in the future, esp if - ;; we add the python hack. - (cond - ((and (not back) - (< (save-excursion - (or (search-forward "<" nil t) (point-max))) - (or (sp-get paired :beg) (point-max)))) - (or (sp-get-sgml-tag) paired)) - ((and back - (> (save-excursion - (or (search-backward ">" nil t) (point-min))) - (or (sp-get paired :end) (point-max)))) - (or (sp-get-sgml-tag t) paired)) - (t paired))))) - (t (sp-get-expression back))))) - -(defun sp--get-hybrid-sexp-beg () - "Get the beginning of hybrid sexp. -See `sp-get-hybrid-sexp' for definition." - (save-excursion - (cl-labels ((indent-or-beg-of-line - (lb) - (if (sp-point-in-blank-line) - lb - (back-to-indentation) - (point)))) - (let ((p (progn (when (sp-point-in-symbol) (sp-backward-sexp)) (point))) - (lb (line-beginning-position)) - (cur (--if-let (save-excursion (sp-backward-sexp)) it (list :end 0))) ;hack - last) - (if (< (sp-get cur :end) lb) - ;; if the line is not empty, we move the beg to the indent - (indent-or-beg-of-line lb) - (while (sp-get cur - (and cur - (> :end lb) - (<= :end p))) - (setq last cur) - (setq cur (sp-backward-sexp))) - (if last - (sp-get last :beg-prf) - ;; happens when there is no sexp before the opening delim of - ;; the enclosing sexp. In case it is on line above, we take - ;; the maximum wrt lb. - (sp-get cur (max :beg-in (indent-or-beg-of-line lb))))))))) - -(defun sp--narrow-to-line () - "Narrow to the current line." - (narrow-to-region (line-beginning-position) (line-end-position))) - -(defun sp--get-hybrid-sexp-end () - "Get the end of hybrid sexp. -See `sp-get-hybrid-sexp' for definition." - (save-excursion - (cl-labels ((skip-prefix-backward - (p) - (save-excursion - (goto-char p) - (save-restriction - (sp--narrow-to-line) - (skip-syntax-backward " .") - (point))))) - (let ((p (progn (when (sp-point-in-symbol) (sp-backward-sexp)) (point))) - (le (line-end-position)) - (cur (--if-let (save-excursion (sp-forward-sexp)) it (list :beg (1+ (point-max))))) ;hack - last) - (if (> (sp-get cur :beg) le) - (if (sp-point-in-blank-line) le (skip-prefix-backward le)) - (while (sp-get cur - (and cur - (< :beg le) - (>= :beg p))) - (setq last cur) - (setq cur (sp-forward-sexp))) - (let ((r (skip-prefix-backward - (if last - (sp-get last :end) - ;; happens when there is no sexp before the closing delim of - ;; the enclosing sexp. In case it is on line below, we take - ;; the minimum wrt le. - (sp-get cur (min :end-in le)))))) - (goto-char r) - ;; fix the situation when point ends in comment - (cond - ((sp-point-in-comment) - (if (= (line-number-at-pos p) - (line-number-at-pos r)) - (line-end-position) - (goto-char p) - (line-end-position))) - (t r)))))))) - -(defun sp--get-hybrid-suffix (p) - "Get the hybrid sexp suffix, which is any punctuation after -the end, possibly preceded by whitespace." - (save-excursion - (goto-char p) - (buffer-substring-no-properties - p - (save-restriction - (sp--narrow-to-line) - (skip-syntax-forward " ") - (if (not (looking-at "\\s.")) - p - (skip-syntax-forward ".") - (point)))))) - -(defun sp-get-hybrid-sexp () - "Return the hybrid sexp around point. - -A hybrid sexp is defined as the smallest balanced region containing -the point while not expanding further than the current line. That is, -any hanging sexps will be included, but the expansion stops at the -enclosing list boundaries or line boundaries." - (let ((end (sp--get-hybrid-sexp-end))) - (list :beg (sp--get-hybrid-sexp-beg) - :end end - :op "" - :cl "" - :prefix "" - :suffix (sp--get-hybrid-suffix end)))) - -(defun sp-get-enclosing-sexp (&optional arg) - "Return the balanced expression that wraps point at the same level. - -With ARG, ascend that many times. This function expects a positive -argument." - (setq arg (or arg 1)) - (save-excursion - (let ((n arg) - (ok t) - (okr)) - (while (and (> n 0) ok) - (setq ok t) - (setq okr nil) - ;; if we are inside string, get the string bounds and "string - ;; expression" - (when (sp-point-in-string) - (setq okr (sp-get-string))) - ;; get the "normal" expression defined by pairs - (let ((p (point))) - (setq ok (sp-get-sexp)) - (cond - ((and ok (= (sp-get ok :beg) p)) - (goto-char (sp-get ok :end)) - (setq n (1+ n))) - ((and ok (< (sp-get ok :beg) p)) - (goto-char (sp-get ok :end))) - (t - (while (and ok (>= (sp-get ok :beg) p)) - (setq ok (sp-get-sexp)) - (when ok (goto-char (sp-get ok :end))))))) - ;; if the pair expression is enclosed inside a string, return - ;; the pair expression, otherwise return the string expression - (when okr - (unless (and ok - (sp-compare-sexps ok okr >=) - (sp-compare-sexps ok okr <= :end)) - (setq ok okr) - (goto-char (sp-get ok :end)))) - (setq n (1- n))) - (if (not (and (not ok) - sp-navigate-comments-as-sexps)) - ok - (when (sp-point-in-comment) - (let* ((cb (sp-get-comment-bounds)) - (b (save-excursion - (goto-char (car cb)) - (sp-skip-backward-to-symbol t) - (point))) - (e (save-excursion - (goto-char (cdr cb)) - (sp-skip-forward-to-symbol t) - (point)))) - (list :beg b :end e :op "" :cl "" :prefix sp-comment-char))))))) - -(defun sp-get-list-items (&optional lst) - "Return the information about expressions inside LST. - -LST should be a data structure in format as returned by -`sp-get-sexp'. - -The return value is a list of such structures in order as they -occur inside LST describing each expression, with LST itself -prepended to the front. - -If LST is nil, the list at point is used (that is the list -following point after `sp-backward-up-sexp' is called)." - (let ((r nil)) - (save-excursion - (unless lst - (setq lst (sp-backward-up-sexp))) - (when lst - (goto-char (sp-get lst :beg-in)) - (while (< (point) (sp-get lst :end)) - (!cons (sp-forward-sexp) r)) - (cons lst (nreverse (cdr r))))))) - -(cl-defun sp--get-prefix (&optional (p (point)) op) - "Get the prefix of EXPR. - -Prefix is any continuous sequence of characters in \"expression -prefix\" syntax class. You can also specify a set of syntax code -characters or a regexp for a specific major mode. See -`sp-sexp-prefix'. - -The point is expected to be at the opening delimiter of the sexp -and the prefix is searched backwards. - -If the prefix property is defined for OP, the associated regexp -is used to retrieve the prefix instead of the global setting." - (sp--with-case-sensitive - (save-excursion - (goto-char p) - (let* ((pref (sp-get-pair op :prefix)) - (prefix - (if pref - (when (sp--looking-back pref sp-max-prefix-length) - (match-string-no-properties 0)) - (-if-let (mmode-prefix (cdr (assoc major-mode sp-sexp-prefix))) - (cond - ((and (eq (car mmode-prefix) 'regexp) - (sp--looking-back (cadr mmode-prefix))) - (match-string-no-properties 0)) - ((eq (car mmode-prefix) 'syntax) - (skip-syntax-backward (cadr mmode-prefix)) - (buffer-substring-no-properties (point) p)) - (t "")) - (backward-prefix-chars) - (buffer-substring-no-properties (point) p))))) - ;; do not consider it a prefix if it matches some opening or - ;; closing delimiter which is allowed for parsing in current - ;; context - (goto-char p) - (if (and (< 0 (length prefix)) - (or (sp--do-action-p prefix 'navigate) - (sp--do-action-p - (car (--first (equal (cdr it) prefix) - sp-pair-list)) - 'navigate))) - "" - prefix))))) - -(cl-defun sp--get-suffix (&optional (p (point)) op) - "Get the suffix of EXPR. - -Suffix is any continuous sequence of characters in the -\"punctuation suffix\" syntax class. You can also specify a set -of syntax code characters or a regexp for a specific major mode. -See `sp-sexp-suffix'. - -If the suffix property is defined for OP, the associated regexp -is used to retrieve the suffix instead of the global setting." - (sp--with-case-sensitive - (save-excursion - (goto-char p) - (let* ((suff (sp-get-pair op :suffix)) - (suffix - (if suff - (when (sp--looking-at suff) - (match-string-no-properties 0)) - (-if-let (mmode-suffix (cdr (assoc major-mode sp-sexp-suffix))) - (cond - ((and (eq (car mmode-suffix) 'regexp) - (sp--looking-at (cadr mmode-suffix))) - (match-string-no-properties 0)) - ((eq (car mmode-suffix) 'syntax) - (skip-syntax-forward (cadr mmode-suffix)) - (buffer-substring-no-properties p (point))) - (t "")) - (skip-syntax-forward ".") - (buffer-substring-no-properties p (point)))))) - ;; do not consider it a suffix if it matches some opening or - ;; closing delimiter which is allowed for parsing in current - ;; context - (goto-char p) - (if (and (< 0 (length suffix)) - (or (sp--do-action-p suffix 'navigate) - (sp--do-action-p - (car (--first (equal (cdr it) suffix) - sp-pair-list)) - 'navigate))) - "" - suffix))))) - -(defun sp-get-symbol (&optional back) - "Find the nearest symbol that is after point, or before point if BACK is non-nil. - -This also means, if the point is inside a symbol, this symbol is -returned. Symbol is defined as a chunk of text recognized by -`sp-forward-symbol'. - -The return value is a plist with the same format as the value -returned by `sp-get-sexp'." - (sp--maybe-init) - (let (b e last-or-first) - (save-excursion - (if back - (progn - (sp-skip-backward-to-symbol) - (when (= (point) (point-min)) (setq last-or-first t)) - (sp-forward-symbol -1) - (setq b (point)) - (sp-forward-symbol 1) - (setq e (point))) - (sp-skip-forward-to-symbol) - (when (= (point) (point-max)) (setq last-or-first t)) - (sp-forward-symbol 1) - (setq e (point)) - (sp-forward-symbol -1) - (setq b (point)))) - (unless last-or-first - (list :beg b :end e :op "" :cl "" :prefix (sp--get-prefix b) :suffix (sp--get-suffix e))))) - -(defun sp--get-string (bounds) - "Return the `sp-get-sexp' format info about the string. - -This function simply transforms BOUNDS, which is a cons (BEG -. END) into format compatible with `sp-get-sexp'." - (let* ((op (char-to-string (char-after (car bounds)))) - (cl (char-to-string (char-before (cdr bounds))))) - ;; if the closing and opening isn't the same token, we should - ;; return nil - (when (equal op cl) - (list :beg (car bounds) - :end (cdr bounds) - :op cl - :cl cl - :prefix (sp--get-prefix (car bounds) op) - :suffix (sp--get-suffix (cdr bounds) cl))))) - -(defun sp-get-string (&optional back) - "Find the nearest string after point, or before if BACK is non-nil. - -This also means if the point is inside a string, this string is -returned. If there are another symbols between point and the -string, nil is returned. That means that this function only -return non-nil if the string is the very next meaningful -expression. - -The return value is a plist with the same format as the value -returned by `sp-get-sexp'." - (sp--maybe-init) - (if (sp-point-in-comment) - (sp-get-stringlike-expression back) - (if (sp-point-in-string) - (let ((r (sp-get-quoted-string-bounds))) - (sp--get-string r)) - (save-excursion - (sp-skip-into-string back) - (--when-let (sp-get-quoted-string-bounds) - (sp--get-string it)))))) - -(defun sp-get-whitespace () - "Get the whitespace around point. - -Whitespace here is defined as any of the characters: space, tab -and newline." - (list :beg (save-excursion (skip-chars-backward " \t\n") (point)) - :end (save-excursion (skip-chars-forward " \t\n") (point)) - :op "" - :cl "" - :prefix "" - :suffix "")) - -(defun sp--sgml-get-tag-name (match) - (let ((sub (if (equal "/" (substring match 1 2)) - (substring match 2) - (substring match 1)))) - (car (split-string sub "\\( \\|>\\)")))) - -(defun sp--sgml-opening-p (tag) - (not (equal "/" (substring tag 1 2)))) - -(defun sp--sgml-ignore-tag (tag) - "Return non-nil if tag should be ignored in search, nil otherwise." - (member tag '("!--" "!DOCTYPE"))) - -(defun sp-get-sgml-tag (&optional back) - (sp--maybe-init) - (sp--with-case-sensitive - (save-excursion - (let ((search-fn (if (not back) 'sp--search-forward-regexp 'search-backward-regexp)) - tag tag-name needle - open-start open-end - close-start close-end) - (when (and (funcall search-fn "" nil t) - (progn - (setq tag (substring-no-properties (match-string 0))) - (setq tag-name (sp--sgml-get-tag-name tag)) - (not (sp--sgml-ignore-tag tag-name)))) - (setq needle (concat "" nil t) - (setq open-end (point)))) - (cond - ((and (not back) (not forward)) - (goto-char (match-beginning 0))) - ((and back forward) - (goto-char (match-end 0)))) - (while (> depth 0) - (if (funcall search-fn needle nil t) - (if (sp--sgml-opening-p (match-string 0)) - (if forward (setq depth (1+ depth)) (setq depth (1- depth))) - (if forward (setq depth (1- depth)) (setq depth (1+ depth)))) - (setq depth -1))) - (if (eq depth -1) - (progn (sp-message :no-matching-tag) nil) - (save-excursion - (if forward - (progn - (setq close-start (match-beginning 0)) - (search-forward-regexp ">" nil t) - (setq close-end (point))) - (setq close-start (point)) - (search-forward-regexp ">" nil t) - (setq close-end (point)))) - (let ((op (buffer-substring-no-properties open-start open-end)) - (cl (buffer-substring-no-properties close-start close-end))) - (list :beg (if forward open-start close-start) - :end (if forward close-end open-end) - :op (if forward op cl) - :cl (if forward cl op) - :prefix "" - :suffix ""))))))))) - -(defun sp--end-delimiter-closure (pairs pair-list) - "Compute the \"end-delimiter\" closure of set PAIRS. - -PAIRS can be: -- single pair ID -- single cons with opening and closing delimiter -- list of pair IDs -- list of conses of opening and closing delimiters - -For example, if we have pairs (if . end) and (def . end), then -the closure of \"if\" pair are both of these because they share -the closing delimiter. Therefore, in the navigation functions, -both have to be considered by the parser." - (let* ((pairs (-flatten (list pairs))) - (pairs (if (consp (car pairs)) (-map 'car pairs) pairs)) - (pairs (--filter (member (car it) pairs) pair-list)) - (closure (-mapcat - (lambda (x) - (--filter (equal (cdr x) (cdr it)) pair-list)) - pairs))) - closure)) - -(defun sp-restrict-to-pairs (pairs function) - "Call the FUNCTION restricted to PAIRS. - -PAIRS is either an opening delimiter of a list of opening -delimiters. - -FUNCTION is a function symbol. - -For example, you can restrict function `sp-down-sexp' to the -pair (\"{\" . \"}\") for easier navigation of blocks in C-like -languages." - (let* ((pairs (-flatten (list pairs))) - (new-pairs (--filter (member (car it) pairs) sp-pair-list)) - (sp-pair-list (sp--end-delimiter-closure new-pairs sp-pair-list))) - (call-interactively function))) - -(defun sp-restrict-to-object (object function) - "Call the FUNCTION restricted to OBJECT. - -OBJECT is one of following symbols (you have to quote it!): -- `sp-prefix-pair-object' -- `sp-prefix-tag-object' -- `sp-prefix-symbol-object' - -This function will enable this prefix and then call FUNCTION. - -FUNCTION is a function symbol. - -This function is equivalent to doing: - - (let ((sp-prefix-object t)) - (call-interactively function)) - -For example, you can restrict function `sp-forward-sexp' to just -the pairs for easier navigation of blocks in C-like languages." - (cl-letf (((symbol-value object) t)) - (call-interactively function))) - -;; TODO: add shorter alias? -(defun sp-restrict-to-pairs-interactive (pairs function) - "Return an interactive lambda that calls FUNCTION restricted to PAIRS. - -See `sp-restrict-to-pairs'. - -This function implements a \"decorator pattern\", that is, you -can apply another scoping function to the output of this function -and the effects will added together. In particular, you can -combine it with: - -- `sp-restrict-to-object-interactive' - -You can also bind the output of this function directly to a key, like: - - (global-set-key (kbd ...) (sp-restrict-to-pairs-interactive \"{\" 'sp-down-sexp)) - -This will be a function that descends down only into { } pair, -ignoring all others." - (lambda (&optional arg) - (interactive "P") - (sp-restrict-to-pairs pairs function))) - -(defun sp-restrict-to-object-interactive (object function) - "Return an interactive lambda that calls FUNCTION restricted to OBJECT. - -See `sp-restrict-to-object'. - -This function implements a \"decorator pattern\", that is, you -can apply another scoping function to the output of this function -and the effects will added together. In particular, you can -combine it with: - -- `sp-restrict-to-pairs-interactive' - -You can also bind the output of this function directly to a key, like: - - (global-set-key (kbd ...) (sp-restrict-to-object-interactive - 'sp-prefix-pair-object - 'sp-forward-sexp)) - -This will be a function that navigates only by using paired -expressions, ignoring strings and sgml tags." - (lambda (&optional arg) - (interactive "P") - (sp-restrict-to-object object function))) - -(defun sp-prefix-tag-object (&optional arg) - "Read the command and invoke it on the next tag object. - -If you specify a regular emacs prefix argument this is passed to -the executed command. Therefore, executing -\"\\[universal-argument] 2 \\[sp-prefix-tag-object] \\[sp-forward-sexp]\" will move two tag -expressions forward, ignoring possible symbols or paired -expressions inbetween. - -Tag object is anything delimited by sgml tag." - (interactive "P") - (let* ((cmd (read-key-sequence "" t)) - (com (key-binding cmd)) - (sp-prefix-tag-object t)) - (if (commandp com) - (call-interactively com) - (execute-kbd-macro cmd)))) - -(defun sp-prefix-pair-object (&optional arg) - "Read the command and invoke it on the next pair object. - -If you specify a regular emacs prefix argument this is passed to -the executed command. Therefore, executing -\"\\[universal-argument] 2 \\[sp-prefix-pair-object] \\[sp-forward-sexp]\" will move two paired -expressions forward, ignoring possible symbols inbetween. - -Pair object is anything delimited by pairs from `sp-pair-list'." - (interactive "P") - (let* ((cmd (read-key-sequence "" t)) - (com (key-binding cmd)) - (sp-prefix-pair-object t)) - (if (commandp com) - (call-interactively com) - (execute-kbd-macro cmd)))) - -(defun sp-prefix-symbol-object (&optional arg) - "Read the command and invoke it on the next pair object. - -If you specify a regular emacs prefix argument this is passed to -the executed command. Therefore, executing -\"\\[universal-argument] 2 \\[sp-prefix-symbol-object] \\[sp-forward-sexp]\" will move two symbols -forward, ignoring any structure. - -Symbol is defined as a chunk of text recognized by -`sp-forward-symbol'." - (interactive "P") - (let* ((cmd (read-key-sequence "" t)) - (com (key-binding cmd)) - (sp-prefix-symbol-object t)) - (if (commandp com) - (call-interactively com) - (execute-kbd-macro cmd)))) - -(defun sp-prefix-save-excursion (&optional arg) - "Execute the command keeping the point fixed. - -If you specify a regular emacs prefix argument this is passed to -the executed command." - (interactive "P") - (let* ((cmd (read-key-sequence "" t)) - (com (key-binding cmd))) - (sp--keep-indentation - (save-excursion - (if (commandp com) - (call-interactively com) - (execute-kbd-macro cmd)))))) - -(defun sp-get-thing (&optional back) - "Find next thing after point, or before if BACK is non-nil. - -Thing is either symbol (`sp-get-symbol'), -string (`sp-get-string') or balanced expression recognized by -`sp-get-sexp'. - -If `sp-navigate-consider-symbols' is nil, only balanced -expressions are considered." - (sp--maybe-init) - (sp--with-case-sensitive - (cond - (sp-prefix-tag-object (sp-get-sgml-tag back)) - (sp-prefix-pair-object (sp-get-paired-expression back)) - (sp-prefix-symbol-object (sp-get-symbol back)) - (t - (if back - (if (not sp-navigate-consider-symbols) - (sp-get-sexp t) - (save-excursion - (cond - ((sp-point-in-empty-string) - (sp-get-string t)) - (t - (sp-skip-backward-to-symbol t nil t) - (cond - ;; this is an optimization, we do not need to look up - ;; the "pair" expression first. If this fails, follow - ;; up with regular sexps - ((and (memq major-mode sp-navigate-consider-sgml-tags) - (sp--looking-back ">") - (sp-get-sgml-tag t))) - ((sp--valid-initial-delimiter-p (sp--looking-back (sp--get-closing-regexp (sp--get-allowed-pair-list)) nil)) - (sp-get-sexp t)) - ((sp--valid-initial-delimiter-p (sp--looking-back (sp--get-opening-regexp (sp--get-allowed-pair-list)) nil)) - (sp-get-sexp t)) - ((and (eq (syntax-class (syntax-after (1- (point)))) 7) - (not (sp-char-is-escaped-p (1- (point))))) - (if (eq t (sp-point-in-string)) - (save-excursion - (save-restriction - (widen) - (-let (((beg . end) (sp-get-quoted-string-bounds))) - (narrow-to-region beg end)) - (sp-get-stringlike-expression t))) - (sp-get-string t))) - ((sp--valid-initial-delimiter-p (sp--looking-back (sp--get-stringlike-regexp) nil)) - (sp-get-expression t)) - ;; We might be somewhere inside the prefix of the - ;; sexp after the point. Since the prefix can be - ;; specified as regexp and not syntax class, it might - ;; itself by a symbol which would invalidly get - ;; picked here. - (t (-when-let (sym (sp-get-symbol t)) - (save-excursion - (sp-get sym (goto-char :end)) - (if (sp--valid-initial-delimiter-p (sp--looking-at (sp--get-opening-regexp (sp--get-allowed-pair-list)))) - (let* ((ms (match-string 0)) - (pref (sp--get-prefix (point) ms))) - (if (and pref - (not (equal pref ""))) - (sp-get-sexp t) - sym)) - sym))))))))) - (if (not sp-navigate-consider-symbols) - (sp-get-sexp nil) - (save-excursion - (cond - ((sp-point-in-empty-string) - (sp-get-string nil)) - (t - (sp-skip-forward-to-symbol t nil t) - (cond - ((and (memq major-mode sp-navigate-consider-sgml-tags) - (looking-at "<") - (sp-get-sgml-tag))) - ((sp--valid-initial-delimiter-p (sp--looking-at (sp--get-opening-regexp (sp--get-allowed-pair-list)))) - (sp-get-sexp nil)) - ((sp--valid-initial-delimiter-p (sp--looking-at (sp--get-closing-regexp (sp--get-allowed-pair-list)))) - (sp-get-sexp nil)) - ;; TODO: merge the following two conditions and use - ;; `sp-get-stringlike-or-textmode-expression' - ((and (eq (syntax-class (syntax-after (point))) 7) - (not (sp-char-is-escaped-p))) - ;; It might happen that the string delimiter we are - ;; looking at is nested inside another string - ;; delimited by string fences (for example nested " - ;; and ' in python). In this case we can't use - ;; `sp-get-string' parser because it would pick up the - ;; outer string. So if we are inside a string and - ;; `syntax-ppss' returns t as delimiter we need to use - ;; `sp-get-stringlike-expression' - (if (eq t (sp-point-in-string)) - (save-excursion - (save-restriction - (widen) - (-let (((beg . end) (sp-get-quoted-string-bounds))) - (narrow-to-region beg end)) - (sp-get-stringlike-expression nil))) - (sp-get-string nil))) - ((sp--valid-initial-delimiter-p (sp--looking-at (sp--get-stringlike-regexp))) - (sp-get-expression nil)) - ;; it can still be that we are looking at a /prefix/ of a - ;; sexp. We should skip a symbol forward and check if it - ;; is a sexp, and then maybe readjust the output. - (t (let* ((sym (sp-get-symbol nil)) - (sym-string (and sym (sp-get sym (buffer-substring-no-properties :beg :end)))) - (point-before-prefix (point))) - (when sym-string - (if (sp--valid-initial-delimiter-p (sp--search-forward-regexp (sp--get-opening-regexp (sp--get-pair-list-context 'navigate)) nil t)) - (let* ((ms (match-string 0)) - (pref (progn - ;; need to move before the - ;; opening, so (point) evals - ;; there. - (backward-char (length ms)) - (sp--get-prefix (point) ms)))) - ;; We use >= because the first skip to - ;; symbol might have skipped some prefix - ;; chars which make prefix of the symbol - ;; which together make prefix of a sexp. - ;; For example \foo{} in latex, where \ is - ;; prefix of symbol foo and \foo is prefix - ;; of { - (if (and pref - (not (equal pref "")) - (>= point-before-prefix (- (point) (length pref)))) - (sp-get-sexp nil) - sym)) - sym)))))))))))))) - -(defun sp-narrow-to-sexp (arg) - "Make text outside current balanced expression invisible. -A numeric arg specifies to move up by that many enclosing expressions. - -See also `narrow-to-region' and `narrow-to-defun'." - (interactive "p") - (-when-let (enc (sp-get-enclosing-sexp arg)) - (sp-get enc (narrow-to-region :beg-prf :end)))) - -(defun sp-forward-sexp (&optional arg) - "Move forward across one balanced expression. - -With ARG, do it that many times. Negative arg -N means move -backward across N balanced expressions. If there is no forward -expression, jump out of the current one (effectively doing -`sp-up-sexp'). - -With `sp-navigate-consider-symbols' symbols and strings are also -considered balanced expressions. - -Examples: (prefix arg in comment) - - |(foo bar baz) -> (foo bar baz)| - - (|foo bar baz) -> (foo| bar baz) - - (|foo bar baz) -> (foo bar| baz) ;; 2 - - (foo (bar baz|)) -> (foo (bar baz)|)" - (interactive "^p") - (setq arg (or arg 1)) - (if (< arg 0) - (sp-backward-sexp (- arg)) - (let* ((n arg) - (ok t)) - (while (and ok (> n 0)) - (setq ok (sp-get-thing)) - (setq n (1- n)) - (when ok (goto-char (sp-get ok :end)))) - ok))) - -(put 'sp-forward-sexp 'CUA 'move) - -(defun sp-backward-sexp (&optional arg) - "Move backward across one balanced expression (sexp). - -With ARG, do it that many times. Negative arg -N means move -forward across N balanced expressions. If there is no previous -expression, jump out of the current one (effectively doing -`sp-backward-up-sexp'). - -With `sp-navigate-consider-symbols' symbols and strings are also -considered balanced expressions. - -Examples: (prefix arg in comment) - - (foo bar baz)| -> |(foo bar baz) - - (foo| bar baz) -> (|foo bar baz) - - (foo bar| baz) -> (|foo bar baz) ;; 2 - - (|(foo bar) baz) -> ((|foo bar) baz)" - (interactive "^p") - (setq arg (or arg 1)) - (if (< arg 0) - (sp-forward-sexp (- arg)) - (let* ((n arg) - (ok t)) - (while (and ok (> n 0)) - (setq ok (sp-get-thing t)) - (setq n (1- n)) - (when ok (goto-char (sp-get ok :beg)))) - ok))) - -(put 'sp-backward-sexp 'CUA 'move) - -(defun sp-next-sexp (&optional arg) - "Move forward to the beginning of next balanced expression. - -With ARG, do it that many times. If there is no next expression -at current level, jump one level up (effectively doing -`sp-backward-up-sexp'). Negative arg -N means move to the -beginning of N-th previous balanced expression. - -If `sp-navigate-interactive-always-progress-point' is non-nil, -and this is called interactively, the point will move to the -first expression in forward direction where it will end up -greater than the current location. - -With `sp-navigate-consider-symbols' symbols and strings are also -considered balanced expressions. - -Examples: - - ((foo) |bar (baz quux)) -> ((foo) bar |(baz quux)) - - ((foo) bar |(baz quux)) -> |((foo) bar (baz quux)) - -and with non-nil `sp-navigate-interactive-always-progress-point' - - (f|oo bar) -> (foo |bar) - - ((fo|o) (bar)) -> ((foo) |(bar))" - (interactive "^p") - (setq arg (or arg 1)) - (if (<= arg 0) - (sp-backward-sexp (- arg)) - (if (and sp-navigate-interactive-always-progress-point - (called-interactively-p 'any)) - (progn - (while (< 0 arg) - (let ((point-start (point))) - (while (--when-let (sp-forward-sexp) - (<= (sp-get it :beg) point-start)))) - (setq arg (1- arg))) - (goto-char (sp-get (sp-get-thing t) :beg))) - (if (= arg 1) - (-when-let (ok (sp-get-thing)) - (if (= (point) (sp-get ok :beg)) - (progn (sp-forward-sexp 2) - (sp-backward-sexp)) - (goto-char (sp-get ok :beg)) - ok)) - (sp-forward-sexp arg) - (sp-backward-sexp))))) - -(put 'sp-next-sexp 'CUA 'move) - -(defun sp-previous-sexp (&optional arg) - "Move backward to the end of previous balanced expression. - -With ARG, do it that many times. If there is no next -expression at current level, jump one level up (effectively -doing `sp-up-sexp'). Negative arg -N means move to the end of -N-th following balanced expression. - -With `sp-navigate-consider-symbols' symbols and strings are also -considered balanced expressions. - -If `sp-navigate-interactive-always-progress-point' is non-nil, -and this is called interactively, the point will move to the -first expression in backward direction where it will end up -less than the current location. - -Examples: - - ((foo) bar| (baz quux)) -> ((foo)| bar (baz quux)) - - ((foo)| bar (baz quux)) -> ((foo) bar (baz quux))| - -and if `sp-navigate-interactive-always-progress-point' is non-nil - - (foo b|ar baz) -> (foo| bar baz) - - (foo (b|ar baz)) -> (foo| (bar baz))" - (interactive "^p") - (setq arg (or arg 1)) - (if (<= arg 0) - (sp-forward-sexp (- arg)) - (if (and sp-navigate-interactive-always-progress-point - ;; (called-interactively-p 'any) - ) - (progn - (while (< 0 arg) - (let ((point-start (point))) - (while (--when-let (sp-backward-sexp) - (>= (sp-get it :end) point-start)))) - (setq arg (1- arg))) - (goto-char (sp-get (sp-get-thing) :end))) - (if (= arg 1) - (-when-let (ok (sp-get-thing t)) - (if (= (point) (sp-get ok :end)) - (progn (sp-backward-sexp 2) - (sp-forward-sexp)) - (goto-char (sp-get ok :end)) - ok)) - (sp-backward-sexp arg) - (sp-forward-sexp))))) - -(put 'sp-previous-sexp 'CUA 'move) - -(defun sp-forward-parallel-sexp (&optional arg) - "Move forward across one balanced expressions at the same depth. - -If calling `sp-forward-sexp' at point would result in raising a -level up, loop back to the first expression at current level, -that is the first child of the enclosing sexp as defined by -`sp-get-enclosing-sexp'." - (interactive "^p") - (setq arg (or arg 1)) - (if (< arg 0) - (sp-backward-parallel-sexp (- arg)) - (let (re) - (while (> arg 0) - (setq arg (1- arg)) - (let ((next (sp-get-thing)) - (prev (sp-get-thing t))) - (setq - re - (cond - ((eq next nil) - (goto-char (point-min)) - (sp-forward-sexp)) - ((eq prev nil) - (goto-char (sp-get next :end)) - next) - (t (if (> (sp-get next :beg) (sp-get prev :beg)) - (progn - (goto-char (sp-get next :end)) - next) - (goto-char (sp-get next :beg-in)) - (sp-forward-sexp))))))) - re))) - -(defun sp-backward-parallel-sexp (&optional arg) - "Move backward across one balanced expressions at the same depth. - -If calling `sp-backward-sexp' at point would result in raising a -level up, loop back to the last expression at current level, that -is the last child of the enclosing sexp as defined by -`sp-get-enclosing-sexp'." - (interactive "^p") - (setq arg (or arg 1)) - (if (< arg 0) - (sp-forward-parallel-sexp (- arg)) - (let (re) - (while (> arg 0) - (setq arg (1- arg)) - (let ((next (sp-get-thing)) - (prev (sp-get-thing t))) - (setq - re - (cond - ((eq prev nil) - (goto-char (point-max)) - (sp-backward-sexp)) - ((eq next nil) - (goto-char (sp-get prev :beg)) - prev) - (t (if (< (sp-get prev :end) (sp-get next :end)) - (progn - (goto-char (sp-get prev :beg)) - prev) - (goto-char (sp-get prev :end-in)) - (sp-backward-sexp))))))) - re))) - -(defun sp--raw-argument-p (arg) - "Return t if ARG represents raw argument, that is a non-empty list." - (and (listp arg) (car arg))) - -(defun sp--negate-argument (arg) - "Return the argument ARG but negated. - -If the argument is a raw prefix argument (cons num nil) return a -list with its car negated. If the argument is just the - symbol, -return 1. If the argument is nil, return -1. Otherwise negate -the input number." - (cond - ((sp--raw-argument-p arg) (list (- (car arg)))) - ((eq arg '-) 1) - ((not arg) -1) - (t (- arg)))) - -(defun sp-down-sexp (&optional arg) - "Move forward down one level of sexp. - -With ARG, do this that many times. A negative argument -N means -move backward but still go down a level. - -If ARG is raw prefix argument \\[universal-argument], descend forward as much as -possible. - -If ARG is raw prefix argument \\[universal-argument] \\[universal-argument], jump to the beginning of -current list. - -If the point is inside sexp and there is no down expression to -descend to, jump to the beginning of current one. If moving -backwards, jump to end of current one. - -Examples: - - |foo (bar (baz quux)) -> foo (|bar (baz quux)) - - |foo (bar (baz quux)) -> foo (bar (|baz quux)) ;; 2 - - |foo (bar (baz (quux) blab)) -> foo (bar (baz (|quux) blab)) ;; \\[universal-argument] - - (foo (bar baz) |quux) -> (|foo (bar baz) quux) - - (blab foo |(bar baz) quux) -> (|blab foo (bar baz) quux) ;; \\[universal-argument] \\[universal-argument]" - (interactive "^P") - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (n (abs arg)) - (ok t) - (last-point -1)) - (if (and raw (= (abs arg) 16)) - ;; jump to the beginning/end of current list - (-when-let (enc (sp-get-enclosing-sexp)) - (if (> arg 0) - (goto-char (sp-get enc :beg-in)) - (goto-char (sp-get enc :end-in))) - (setq ok enc)) - ;; otherwise descend normally - (while (and ok (> n 0)) - (setq ok (sp-get-sexp (< arg 0))) - ;; if the prefix was C-u, we do not decrease n and instead set - ;; it to -1 when (point) == "last ok" - (if raw - (when (= (point) last-point) - (setq n -1)) - (setq n (1- n))) - (when ok - (setq last-point (point)) - (if (< arg 0) - (goto-char (sp-get ok :end-in)) - (goto-char (sp-get ok :beg-in)))))) - ok)) - -(put 'sp-down-sexp 'CUA 'move) - -(defun sp-backward-down-sexp (&optional arg) - "Move backward down one level of sexp. - -With ARG, do this that many times. A negative argument -N means -move forward but still go down a level. - -If ARG is raw prefix argument \\[universal-argument], descend backward as much as -possible. - -If ARG is raw prefix argument \\[universal-argument] \\[universal-argument], jump to the end of current -list. - -If the point is inside sexp and there is no down expression to -descend to, jump to the end of current one. If moving forward, -jump to beginning of current one. - -Examples: - - foo (bar (baz quux))| -> foo (bar (baz quux)|) - - (bar (baz quux)) foo| -> (bar (baz quux|)) foo ;; 2 - - foo (bar (baz (quux) blab))| -> foo (bar (baz (quux|) blab)) ;; \\[universal-argument] - - (foo| (bar baz) quux) -> (foo (bar baz) quux|) - - (foo (bar baz) |quux blab) -> (foo (bar baz) quux blab|) ;; \\[universal-argument] \\[universal-argument]" - (interactive "^P") - (sp-down-sexp (sp--negate-argument arg))) - -(put 'sp-backward-down-sexp 'CUA 'move) - -(defun sp-beginning-of-sexp (&optional arg) - "Jump to beginning of the sexp the point is in. - -The beginning is the point after the opening delimiter. - -With no argument, this is the same as calling -\\[universal-argument] \\[universal-argument] `sp-down-sexp' - -With ARG positive N > 1, move forward out of the current -expression, move N-2 expressions forward and move down one level -into next expression. - -With ARG negative -N < 1, move backward out of the current -expression, move N-1 expressions backward and move down one level -into next expression. - -With ARG raw prefix argument \\[universal-argument] move out of the current expressions -and then to the beginning of enclosing expression. - -Examples: - - (foo (bar baz) quux| (blab glob)) -> (|foo (bar baz) quux (blab glob)) - - (foo (bar baz|) quux (blab glob)) -> (foo (|bar baz) quux (blab glob)) - - (|foo) (bar) (baz quux) -> (foo) (bar) (|baz quux) ;; 3 - - (foo bar) (baz) (quux|) -> (|foo bar) (baz) (quux) ;; -3 - - ((foo bar) (baz |quux) blab) -> (|(foo bar) (baz quux) blab) ;; \\[universal-argument]" - (interactive "^P") - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (re (cond - ((and raw (= arg 4)) - (sp-up-sexp) - (sp-beginning-of-sexp)) - ((= arg 1) - (sp-down-sexp '(16))) - ((< arg 0) - (sp-backward-up-sexp) - (sp-forward-sexp (1+ arg)) - (sp-down-sexp)) - ((> arg 0) - (sp-up-sexp) - (sp-forward-sexp (- arg 2)) - (sp-down-sexp))))) - (sp--run-hook-with-args (sp-get re :op) :post-handlers 'beginning-of-sexp) - re)) - -(put 'sp-beginning-of-sexp 'CUA 'move) - -(defun sp-end-of-sexp (&optional arg) - "Jump to end of the sexp the point is in. - -The end is the point before the closing delimiter. - -With no argument, this is the same as calling -\\[universal-argument] \\[universal-argument] `sp-backward-down-sexp'. - -With ARG positive N > 1, move forward out of the current -expression, move N-1 expressions forward and move down backward -one level into previous expression. - -With ARG negative -N < 1, move backward out of the current -expression, move N-2 expressions backward and move down backward -one level into previous expression. - -With ARG raw prefix argument \\[universal-argument] move out of the current expressions -and then to the end of enclosing expression. - -Examples: - - (foo |(bar baz) quux (blab glob)) -> (foo (bar baz) quux (blab glob)|) - - (foo (|bar baz) quux (blab glob)) -> (foo (bar baz|) quux (blab glob)) - - (|foo) (bar) (baz quux) -> (foo) (bar) (baz quux|) ;; 3 - - (foo bar) (baz) (quux|) -> (foo bar|) (baz) (quux) ;; -3 - - ((foo |bar) (baz quux) blab) -> ((foo bar) (baz quux) blab|) ;; \\[universal-argument]" - (interactive "^P") - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (re (cond - ((and raw (= arg 4)) - (sp-up-sexp) - (sp-end-of-sexp)) - ((= arg 1) - (sp-down-sexp '(-16))) - ((< arg 0) - (sp-backward-up-sexp) - (sp-forward-sexp (+ 2 arg)) - (sp-backward-down-sexp)) - ((> arg 0) - (sp-up-sexp) - (sp-forward-sexp (1- arg)) - (sp-backward-down-sexp))))) - (sp--run-hook-with-args (sp-get re :op) :post-handlers 'end-of-sexp) - re)) - -(put 'sp-end-of-sexp 'CUA 'move) - -(defun sp-beginning-of-next-sexp (&optional arg) - "Jump to the beginning of next sexp on the same depth. - -Optional argument ARG defaults to 1 and means how many times we -should repeat. - -This acts exactly as `sp-beginning-of-sexp' but adds 1 to the -numeric argument. - -Examples: - - (f|oo) (bar) (baz) -> (foo) (|bar) (baz) - - (f|oo) (bar) (baz) -> (foo) (bar) (|baz) ;; 2" - (interactive "^P") - (if (sp--raw-argument-p arg) - (sp-beginning-of-sexp arg) - (let ((arg (prefix-numeric-value arg))) - (if (> arg 0) - (sp-beginning-of-sexp (1+ arg)) - (sp-beginning-of-sexp (1- arg)))))) - -(put 'sp-beginning-of-next-sexp 'CUA 'move) - -(defun sp-beginning-of-previous-sexp (&optional arg) - "Jump to the beginning of previous sexp on the same depth. - -Optional argument ARG defaults to 1 and means how many times we -should repeat. - -This acts exactly as `sp-beginning-of-sexp' with negative -argument but subtracts 1 from it. - -Examples: - - (foo) (b|ar) (baz) -> (|foo) (bar) (baz) - - (foo) (bar) (b|az) -> (|foo) (bar) (baz) ;; 2" - (interactive "^P") - (if (sp--raw-argument-p arg) - (sp-beginning-of-sexp (sp--negate-argument arg)) - (let ((arg (prefix-numeric-value arg))) - (if (> arg 0) - (sp-beginning-of-sexp (- (1+ arg))) - (sp-beginning-of-sexp (- (1- arg))))))) - -(put 'sp-beginning-of-previous-sexp 'CUA 'move) - -(defun sp-end-of-next-sexp (&optional arg) - "Jump to the end of next sexp on the same depth. - -Optional argument ARG defaults to 1 and means how many times we -should repeat. - -This acts exactly as `sp-end-of-sexp' but adds 1 to the -numeric argument. - -Examples: - - (f|oo) (bar) (baz) -> (foo) (bar|) (baz) - - (f|oo) (bar) (baz) -> (foo) (bar) (baz|) ;; 2" - (interactive "^P") - (if (sp--raw-argument-p arg) - (sp-end-of-sexp arg) - (let ((arg (prefix-numeric-value arg))) - (if (> arg 0) - (sp-end-of-sexp (1+ arg)) - (sp-end-of-sexp (1- arg)))))) - -(put 'sp-end-of-next-sexp 'CUA 'move) - -(defun sp-end-of-previous-sexp (&optional arg) - "Jump to the end of previous sexp on the same depth. - -Optional argument ARG defaults to 1 and means how many times we -should repeat. - -This acts exactly as `sp-end-of-sexp' with negative -argument but subtracts 1 from it. - -Examples: - - (foo) (b|ar) (baz) -> (foo|) (bar) (baz) - - (foo) (bar) (b|az) -> (foo|) (bar) (baz) ;; 2" - (interactive "^P") - (if (sp--raw-argument-p arg) - (sp-end-of-sexp (sp--negate-argument arg)) - (let ((arg (prefix-numeric-value arg))) - (if (> arg 0) - (sp-end-of-sexp (- (1+ arg))) - (sp-end-of-sexp (- (1- arg))))))) - -(put 'sp-end-of-previous-sexp 'CUA 'move) - -;; TODO: split the reindent code so we can call it inside strings on -;; sexps like [foo ]... We can't reindent that by default because it -;; can be a regular expression or something where the whitespace -;; matters. For now, disable reindent in strings if the sexp is not -;; the string quote itself. -(defun sp-up-sexp (&optional arg interactive) - "Move forward out of one level of parentheses. - -With ARG, do this that many times. A negative argument means -move backward but still to a less deep spot. - -The argument INTERACTIVE is for internal use only. - -If called interactively and `sp-navigate-reindent-after-up' is -enabled for current major-mode, remove the whitespace between end -of the expression and the last \"thing\" inside the expression. - -If `sp-navigate-close-if-unbalanced' is non-nil, close the -unbalanced expressions automatically. - -Examples: - - (foo |(bar baz) quux blab) -> (foo (bar baz) quux blab)| - - (foo (bar |baz) quux blab) -> (foo (bar baz) quux blab)| ;; 2 - - (foo bar |baz -> (foo bar baz)| ;; re-indent the expression -​ ) - - (foo |(bar baz) -> (foo)| (bar baz) ;; close unbalanced expr." - (interactive "^p\np") - (setq arg (or arg 1)) - (sp--with-case-sensitive - (let ((ok (sp-get-enclosing-sexp (abs arg)))) - (if ok - (progn - (if (> arg 0) - (goto-char (sp-get ok :end)) - (goto-char (sp-get ok :beg))) - (when (and (= (abs arg) 1) - (not (equal (sp-get ok :prefix) sp-comment-char)) - (or (memq major-mode (assq 'always sp-navigate-reindent-after-up)) - (and (memq major-mode (assq 'interactive sp-navigate-reindent-after-up)) - interactive)) - (or sp-navigate-reindent-after-up-in-string - (sp-get ok (not (sp-point-in-string :end-in)))) - ;; if the sexp to be reindented is not a string - ;; but is inside a string, we should rather do - ;; nothing than break semantics (in e.g. regexp - ;; [...]) - (let ((str (sp-point-in-string))) - (or (not str) - ;; op must be the delimiter of the string we're in - (eq (sp-get ok :op) - (or (eq str t) - (char-to-string str)))))) - ;; TODO: this needs different indent rules for different - ;; modes. Should we concern with such things? Lisp rules are - ;; funny in HTML... :/ - (save-excursion - (if (> arg 0) - (progn - (goto-char (sp-get ok :end-in)) - (let ((prev (sp-get-thing t))) - ;; if the expression is empty remove everything inside - (if (sp-compare-sexps ok prev) - (sp-get ok (delete-region :beg-in :end-in)) - (when (save-excursion - (skip-chars-backward " \t\n") - (= (point) (sp-get prev :end-suf))) - (delete-region (sp-get prev :end-suf) (point)))))) - (goto-char (sp-get ok :beg-in)) - (let ((next (sp-get-thing))) - (if (sp-compare-sexps ok next) - (sp-get ok (delete-region :beg-in :end-in)) - (when (save-excursion - (skip-chars-forward " \t\n") - (= (point) (sp-get next :beg-prf))) - (delete-region (point) (sp-get next :beg-prf))))))))) - ;; on forward up, we can detect that the pair was not closed. - ;; Therefore, jump sexps backwards until we hit the error, then - ;; extract the opening pair and insert it at point. Only works - ;; for pairs defined in `sp-pair-list'. - (when (and (> arg 0) - sp-navigate-close-if-unbalanced) - (let (active-pair) - (save-excursion - ;; add support for SGML tags here - (while (sp-backward-sexp)) - (sp-skip-backward-to-symbol t) - (when (sp--looking-back (sp--get-opening-regexp)) - (let* ((op (match-string 0))) - (setq active-pair (assoc op sp-pair-list))))) - (when active-pair - (sp-backward-sexp) - (sp-forward-sexp) - (insert (cdr active-pair)))))) - ok))) - -(put 'sp-up-sexp 'CUA 'move) - -(defun sp-backward-up-sexp (&optional arg interactive) - "Move backward out of one level of parentheses. - -With ARG, do this that many times. A negative argument means -move forward but still to a less deep spot. - -The argument INTERACTIVE is for internal use only. - -If called interactively and `sp-navigate-reindent-after-up' is -enabled for current major-mode, remove the whitespace between -beginning of the expression and the first \"thing\" inside the -expression. - -Examples: - - (foo (bar baz) quux| blab) -> |(foo (bar baz) quux blab) - - (foo (bar |baz) quux blab) -> |(foo (bar baz) quux blab) ;; 2 - - ( -> |(foo bar baz) -​ foo |bar baz)" - (interactive "^p\np") - (setq arg (or arg 1)) - (sp-up-sexp (- arg) interactive)) - -(put 'sp-backward-up-sexp 'CUA 'move) - -(defvar sp-last-kill-whitespace nil - "Save the whitespace cleaned after the last kill. - -If the next command is `sp-kill-sexp', append the whitespace -between the successive kills.") - -(defun sp--kill-or-copy-region (beg end &optional dont-kill) - "Kill or copy region between BEG and END according to DONT-KILL. -If `evil-mode' is active, copying a region will also add it to the 0 register. -Additionally, if command was prefixed with a register, copy the region -to that register." - (interactive) - (let ((result - (if dont-kill - (copy-region-as-kill beg end) - (kill-region beg end)))) - (when (bound-and-true-p evil-mode) - (when dont-kill - (evil-set-register ?0 (evil-get-register ?1))) - (when evil-this-register - (evil-set-register evil-this-register (evil-get-register ?1)) - (setq evil-this-register nil))) - result)) - -(defun sp-kill-sexp (&optional arg dont-kill) - "Kill the balanced expression following point. - -If point is inside an expression and there is no following -expression, kill the topmost enclosing expression. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction. - -With ARG being raw prefix \\[universal-argument], kill all the expressions from -point up until the end of current list. With raw prefix \\[negative-argument] \\[universal-argument], -kill all the expressions from beginning of current list up until -point. If point is inside a symbol, this is also killed. If -there is no expression after/before the point, just delete the -whitespace up until the closing/opening delimiter. - -With ARG being raw prefix \\[universal-argument] \\[universal-argument], kill current list (the list -point is inside). - -With ARG numeric prefix 0 (zero) kill the insides of the current -list, that is everything from after the opening delimiter to -before the closing delimiter. - -If ARG is nil, default to 1 (kill single expression forward) - -If second optional argument DONT-KILL is non-nil, save the to be -killed region in the kill ring, but do not kill the region from -buffer. - -With `sp-navigate-consider-symbols', symbols and strings are also -considered balanced expressions. - -Examples: - - (foo |(abc) bar) -> (foo | bar) ;; nil, defaults to 1 - - (foo (bar) | baz) -> | ;; 2 - - (foo |(bar) baz) -> | ;; \\[universal-argument] \\[universal-argument] - - (1 |2 3 4 5 6) -> (1|) ;; \\[universal-argument] - - (1 |2 3 4 5 6) -> (1 | 5 6) ;; 3 - - (1 2 3 4 5| 6) -> (1 2 3 | 6) ;; -2 - - (1 2 3 4| 5 6) -> (|5 6) ;; - \\[universal-argument] - - (1 2 | ) -> (1 2|) ;; \\[universal-argument], kill useless whitespace - - (1 2 3 |4 5 6) -> (|) ;; 0 - -Note: prefix argument is shown after the example in -\"comment\". Assumes `sp-navigate-consider-symbols' equal to t." - (interactive "P") - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (n (abs arg)) - (ok t) - (b (point-max)) - (e (point))) - (cond - ;; kill to the end or beginning of list - ((and raw - (= n 4)) - (let ((next (sp-get-thing (< arg 0))) - (enc (sp-get-enclosing-sexp))) - (if (sp-compare-sexps next enc) - (when (not dont-kill) - (let ((del (sp-get-whitespace))) - (sp-get del (delete-region :beg :end)))) - (if (> arg 0) - (sp--kill-or-copy-region - (sp-get next :beg-prf) (sp-get enc :end-in) dont-kill) - (sp--kill-or-copy-region - (sp-get next :end) (sp-get enc :beg-in) dont-kill)) - (when (not dont-kill) - (let ((del (sp-get-whitespace))) - (sp-get del (delete-region :beg :end))))))) - ;; kill the enclosing list - ((and raw - (= n 16)) - (let ((lst (sp-backward-up-sexp))) - (sp-get lst (sp--kill-or-copy-region - :beg-prf :end dont-kill)))) - ;; kill inside of sexp - ((= n 0) - (let ((e (sp-get-enclosing-sexp))) - (when e - (sp-get e (sp--kill-or-copy-region - :beg-in :end-in dont-kill))))) - ;; regular kill - (t - (save-excursion - (while (and (> n 0) ok) - (setq ok (sp-forward-sexp (sp--signum arg))) - (sp-get ok - (when (< :beg-prf b) (setq b :beg-prf)) - (when (> :end e) (setq e :end))) - (setq n (1- n)))) - (when ok - (let ((bm (set-marker (make-marker) b))) - (if (eq last-command 'kill-region) - (progn - (when (member sp-successive-kill-preserve-whitespace '(1 2)) - (kill-append sp-last-kill-whitespace nil)) - (sp--kill-or-copy-region - (if (> b (point)) (point) b) e dont-kill)) - (sp--kill-or-copy-region b e dont-kill)) - ;; kill useless junk whitespace, but only if we're actually - ;; killing the region - (when (not dont-kill) - (sp--cleanup-after-kill) - ;; kill useless newlines - (when (string-match-p "\n" (buffer-substring-no-properties bm (point))) - (setq sp-last-kill-whitespace - (concat sp-last-kill-whitespace - (buffer-substring-no-properties bm (point)))) - (delete-region bm (point))) - (when (= 0 sp-successive-kill-preserve-whitespace) - (kill-append sp-last-kill-whitespace nil))))))))) - -(defun sp--cleanup-after-kill () - (unless (save-match-data (looking-back "^[\t\s]+" (1- (line-beginning-position)))) - (let ((bdel (save-excursion - (when (sp--looking-back-p " " 1) - (skip-chars-backward " \t") - (when (not (sp--looking-back-p (sp--get-opening-regexp))) - (forward-char))) - (point))) - (edel (save-excursion - (when (looking-at " ") - (skip-chars-forward " \t") - (when (not (or (sp--looking-at (sp--get-closing-regexp)) - (looking-at "$"))) - (backward-char))) - (point)))) - (when (eq this-command 'kill-region) - (setq sp-last-kill-whitespace - (if (/= 2 sp-successive-kill-preserve-whitespace) - (buffer-substring-no-properties bdel edel) - ""))) - (delete-region bdel edel))) - (if (memq major-mode sp-lisp-modes) - ;; WARNING: The above white-space killing routine might preserve - ;; less whitespace than there actually is because the indent - ;; might further eat some up - (indent-according-to-mode) - (unless (memq major-mode sp-no-reindent-after-kill-modes) - (save-excursion - (sp--indent-region (line-beginning-position) (line-end-position))) - (when (> (save-excursion - (back-to-indentation) - (current-indentation)) - (current-column)) - (back-to-indentation))))) - -(defun sp-backward-kill-sexp (&optional arg dont-kill) - "Kill the balanced expression preceding point. - -This is exactly like calling `sp-kill-sexp' with minus ARG. -In other words, the direction of all commands is reversed. For -more information, see the documentation of `sp-kill-sexp'. - -Examples: - - (foo (abc)| bar) -> (foo | bar) - - blab (foo (bar baz) quux)| -> blab | - - (1 2 3 |4 5 6) -> (|4 5 6) ;; \\[universal-argument]" - (interactive "P") - (sp-kill-sexp (sp--negate-argument arg) dont-kill)) - -(defun sp-copy-sexp (&optional arg) - "Copy the following ARG expressions to the kill-ring. - -This is exactly like calling `sp-kill-sexp' with second argument -t. All the special prefix arguments work the same way." - (interactive "P") - (save-excursion - (sp-kill-sexp arg t))) - -(defun sp-backward-copy-sexp (&optional arg) - "Copy the previous ARG expressions to the kill-ring. - -This is exactly like calling `sp-backward-kill-sexp' with second argument -t. All the special prefix arguments work the same way." - (interactive "P") - (save-excursion - (sp-kill-sexp (sp--negate-argument arg) t))) - -(defun sp-clone-sexp () - "Clone sexp after or around point. - -If the form immediately after point is a sexp, clone it below the -current one and put the point in front of it. - -Otherwise get the enclosing sexp and clone it below the current -enclosing sexp." - (interactive) - (-when-let (ok (let ((sexp (sp-get-thing))) - (if (not (equal (sp-get sexp :op) "")) - sexp - (sp-get-enclosing-sexp)))) - (sp-get ok - (undo-boundary) - (if (< :beg-prf (point)) - ;; this is the case where point is inside a sexp, we place - ;; the "clone" before the current enclosing sexp and move - ;; the old one below. Note that the "net result" is the - ;; same as the other case, but the implementation must - ;; reflect different relative position of the point wrt - ;; "current" sexp. - (save-excursion - (goto-char :beg-prf) - (insert-buffer-substring-no-properties - (current-buffer) :beg-prf :end-suf) - (newline-and-indent)) - ;; in this case we are in front, so we move after the current - ;; one, place the clone and move it below - (goto-char :end-suf) - (save-excursion - (insert-buffer-substring-no-properties - (current-buffer) :beg-prf :end-suf)) - (newline-and-indent)) - (sp-indent-defun)))) - -(defun sp-kill-hybrid-sexp (arg) - "Kill a line as if with `kill-line', but respecting delimiters. - -With ARG being raw prefix \\[universal-argument] \\[universal-argument], kill the hybrid sexp -the point is in (see `sp-get-hybrid-sexp'). - -With ARG numeric prefix 0 (zero) just call `kill-line'. - -You can customize the behaviour of this command by toggling -`sp-hybrid-kill-excessive-whitespace'. - -Examples: - - foo | bar baz -> foo | ;; nil - - foo (bar | baz) quux -> foo (bar |) quux ;; nil - - foo | bar (baz -> foo | ;; nil - quux) - - foo \"bar |baz quux\" quack -> foo \"bar |\" quack ;; nil - - foo (bar - baz) qu|ux (quack -> foo | hoo ;; \\[universal-argument] \\[universal-argument] - zaq) hoo - - foo | (bar -> foo | ;; C-0 - baz) baz)" - (interactive "P") - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (orig-indent (save-excursion - (back-to-indentation) - (current-column))) - (orig-column (current-column))) - (cond - ((= arg 0) (kill-line)) - ((and raw (= arg 16)) - (let ((hl (sp-get-hybrid-sexp))) - (sp-get hl (kill-region :beg-prf :end-suf)))) - (t - (let ((hl (sp-get-hybrid-sexp))) - (save-excursion - (when (and (or (eq sp-hybrid-kill-entire-symbol t) - (and (functionp sp-hybrid-kill-entire-symbol) - (not (funcall sp-hybrid-kill-entire-symbol)))) - (sp-point-in-symbol)) - (sp-backward-sexp)) - (sp-get hl - (let ((end (min (point-max) (if (looking-at "[ \t]*$") - (1+ :end-suf) - :end-suf)))) - (when sp-hybrid-kill-excessive-whitespace - (save-excursion - (goto-char end) - (skip-chars-forward "\n\t\r\s") - (cond - ((eq 'kill sp-hybrid-kill-excessive-whitespace) - (setq end (point))) - (t (delete-region end (point)))))) - (kill-region (point) end))))) - (sp--cleanup-after-kill) - ;; if we've killed the entire line, do *not* contract the indent - ;; to just one space - (when (sp-point-in-blank-line) - (delete-region (line-beginning-position) (line-end-position)) - (if (and (= 0 orig-column) - kill-whole-line) - (delete-char 1) ;; delete the newline - (let ((need-indent (- orig-indent (current-column)))) - (when (> need-indent 0) - (insert (make-string need-indent ?\ )))))))))) - -(defun sp-kill-whole-line () - "Kill current line in sexp-aware manner. - -First, go to the beginning of current line and then try to kill -as much as possible on the current line but without breaking -balance. - -If there is a hanging sexp at the end of line the it is killed as -well. - -If there is a closing delimiter for a sexp \"up\" current sexp, -the kill is not extended after it. For more details see -`sp-kill-hybrid-sexp'. - -Examples: - - (progn (progn - (some |long sexp)) -> |)" - (interactive) - (beginning-of-line) - (sp-kill-hybrid-sexp nil)) - -(defun sp--transpose-objects (first second) - "Transpose FIRST and SECOND object while preserving the -whitespace between them." - (save-excursion - (goto-char (sp-get second :beg-prf)) - (let ((ins (sp-get second (delete-and-extract-region :beg-prf :end))) - (between (delete-and-extract-region (sp-get first :end) (point)))) - (goto-char (sp-get first :beg-prf)) - (insert ins between)))) - -(defun sp-transpose-sexp (&optional arg) - "Transpose the expressions around point. - -The operation will move the point after the transposed block, so -the next transpose will \"drag\" it forward. - -With arg positive N, apply that many times, dragging the -expression forward. - -With arg negative -N, apply N times backward, pushing the word -before cursor backward. This will therefore not transpose the -expressions before and after point, but push the expression -before point over the one before it. - -Examples: - - foo |bar baz -> bar foo| baz - - foo |bar baz -> bar baz foo| ;; 2 - - (foo) |(bar baz) -> (bar baz) (foo)| - - (foo bar) -> (baz quux) ;; keeps the formatting -​ |(baz quux) |(foo bar) - - foo bar baz| -> foo baz| bar ;; -1" - (interactive "P") - (let* ((arg (prefix-numeric-value arg)) - (n (abs arg))) - ;; if we're inside a symbol, we need to move out of it first - (when (> arg 0) - (when (sp-point-in-symbol) - (sp-forward-symbol))) - (while (> n 0) - (when (< arg 0) (sp-backward-sexp)) - (let* ((next (save-excursion (sp-forward-sexp))) - (prev (save-excursion (goto-char (sp-get next :beg-prf)) (sp-backward-sexp)))) - (sp--transpose-objects prev next) - (when (< arg 0) - (goto-char (+ (sp-get prev :beg-prf) (sp-get next :len)))) - (setq n (1- n)))))) - -(defun sp-transpose-hybrid-sexp (&optional arg) - "Transpose the hybrid sexps around point. - -`sp-backward-sexp' is used to enter the previous hybrid sexp. - -With ARG numeric prefix call `transpose-lines' with this -argument. - -The operation will move the point at the next line after the -transposed block if it is at the end of line already. - -Examples: - - foo bar baz (quux - |baz (quux -> quack) - quack) foo bar\\n| - - - [(foo) (bar) -> [(baz) - |(baz)] (foo) (bar)|] - - foo bar baz -> quux flux - |quux flux foo bar baz\\n|" - (interactive "P") - (if (numberp arg) - (transpose-lines arg) - (let* ((next (save-excursion - (sp-forward-sexp) - (sp-backward-sexp) - (sp-get-hybrid-sexp))) - (prev (save-excursion - (goto-char (sp-get next :beg)) - (sp-backward-sexp) - (sp-get-hybrid-sexp)))) - (if (sp-compare-sexps prev next > :end) - (sp-message :invalid-context-prev) - (sp--transpose-objects prev next)) - (when (looking-at "[\n\t ]+") - (forward-line) - (back-to-indentation))))) - -(defun sp-push-hybrid-sexp () - "Push the hybrid sexp after point over the following one. - -`sp-forward-sexp' is used to enter the following hybrid sexp. - -Examples: - - |x = big_function_call(a, |(a, - b) b) = read_user_input() - -> - (a, x = big_function_call(a, - b) = read_user_input() b)" - (interactive) - (let* ((cur (sp-get-hybrid-sexp)) - (next (save-excursion - (goto-char (sp-get cur :end)) - (sp-forward-sexp) - (sp-get-hybrid-sexp)))) - (if (sp-compare-sexps cur next >) - (sp-message :invalid-context-cur) - (sp--transpose-objects cur next)))) - -;; The following two functions are inspired by "adjust-parens.el" -;; package available at -;; http://elpa.gnu.org/packages/adjust-parens-1.0.el -(defun sp-indent-adjust-sexp () - "Add the hybrid sexp at line into previous sexp. All forms -between the two are also inserted. Specifically, if the point is -on empty line, move the closing delimiter there, so the next -typed text will become the last item of the previous sexp. - -This acts similarly to `sp-add-to-previous-sexp' but with special -handling of empty lines." - (interactive) - (let* ((hsexp (sp-get-hybrid-sexp)) - (prev-sexp (save-excursion - (goto-char (sp-get hsexp :beg)) - (sp-get-sexp t)))) - (if (not (and prev-sexp hsexp - (sp-compare-sexps prev-sexp hsexp < :end :beg))) - (sp-message :no-structure-found) - (save-excursion - (sp-get prev-sexp - (goto-char (sp-get hsexp :end)) - (insert :cl) - (goto-char :end-in) - (delete-char :cl-l))) - (sp-get (sp-get-enclosing-sexp) (sp--indent-region :beg :end)) - (indent-according-to-mode) - (sp--run-hook-with-args (sp-get prev-sexp :op) :post-handlers 'indent-adjust-sexp)))) - -(defun sp-dedent-adjust-sexp () - "Remove the hybrid sexp at line from previous sexp. All -sibling forms after it are also removed (not deleted, just placed -outside of the enclosing list). Specifically, if the point is on -empty line followed by closing delimiter of enclosing list, move -the closing delimiter after the last item in the list. - -This acts similarly to `sp-forward-barf-sexp' but with special -handling of empty lines." - (interactive) - (-when-let (enc (sp-get-enclosing-sexp)) - (save-excursion - ;; if we're looking at whitespace and end of sexp, move the - ;; closing paren over the whitespace but *after* the last item - ;; in the list (barf would also go *before* the last item) - (sp-skip-forward-to-symbol t) - (if (= (point) (sp-get enc :end-in)) - (let ((prev-sexp (sp-get-thing t))) - (sp-get enc - (delete-char :cl-l) - (goto-char (sp-get prev-sexp :end)) - ;; see next TODO - (save-restriction - (sp--narrow-to-line) - (skip-syntax-forward " ") - (skip-syntax-forward ".")) - (insert :cl))) - ;; otherwise just C-u barf - (sp-skip-backward-to-symbol t) - (sp-forward-barf-sexp '(4)) - ;; we need to take special care of any hanging - ;; punctuation. TODO: this should be a sexp suffix? HACK until - ;; we fix barf to get the info. - (save-restriction - (sp-get (sp-backward-down-sexp) - (goto-char :end) - (delete-char (- :cl-l)) - (sp--narrow-to-line) - (skip-syntax-forward " ") - (skip-syntax-forward ".") - (insert :cl))) - (sp-get enc (sp--indent-region :beg :end)))) - (indent-according-to-mode) - (sp--run-hook-with-args (sp-get enc :op) :post-handlers 'dedent-adjust-sexp))) - -;; "When the hook is called point is *after* the just moved closing delimiter." -;; TODO: add hook -(defun sp-slurp-hybrid-sexp () - "Add hybrid sexp following the current list in it by moving the -closing delimiter. - -This is philosophically similar to `sp-forward-slurp-sexp' but -works better in \"line-based\" languages like C or Java. - -Because the structure is much looser in these languages, this -command currently does not support all the prefix argument -triggers that `sp-forward-slurp-sexp' does." - (interactive) - (let (slurped-within-line) - (-if-let* ((enc (sp-get-enclosing-sexp)) - (bsexp (save-excursion - (sp-get enc (goto-char :end)) - (when (sp-compare-sexps (sp-forward-sexp) enc >) - (sp-get-hybrid-sexp))))) - (save-excursion - (sp-get enc - (goto-char :end-suf) - (delete-char (- (+ :cl-l :suffix-l))) - ;; TODO: move to hook - (when (sp-point-in-blank-line) - (delete-region (line-beginning-position) (1+ (line-end-position)))) - (sp-forward-sexp) - - (when (eq (line-number-at-pos :beg) - (line-number-at-pos :end)) - (setq slurped-within-line t)) - ;; If we're slurping over multiple lines, include the suffix on the next line. - ;; I.e. while () {|} -> while () {\n foo(); \n} - (unless slurped-within-line - (sp-get (sp-get-hybrid-sexp) (goto-char :end-suf))) - (insert :cl :suffix)) - ;; TODO: move to hook - (sp-get (sp--next-thing-selection -1) - (save-excursion - (if (save-excursion - (goto-char :beg-in) - (looking-at "[ \t]*$")) - (progn - (goto-char :end-in) - (newline)) - ;; copy the whitespace after opening delim and put it in - ;; front of the closing. This will ensure pretty { foo } - ;; or {foo} - (goto-char :end-in) - (insert (buffer-substring-no-properties - :beg-in - (+ :beg-in (save-excursion - (goto-char :beg-in) - (skip-syntax-forward " "))))))) - (unless (or (looking-at "[ \t]*$") - (looking-at (sp--get-stringlike-regexp)) - (looking-at (sp--get-closing-regexp)) - slurped-within-line) - (newline))) - (sp-get (sp--next-thing-selection -1) (sp--indent-region :beg :end)) - ;; we need to call this again to get the new structure after - ;; indent. - (sp--next-thing-selection -1)) - (sp-message :invalid-structure) - nil))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; "paredit" operations - -(defun sp-forward-slurp-sexp (&optional arg) - "Add sexp following the current list in it by moving the closing delimiter. - -If the current list is the last in a parent list, extend that -list (and possibly apply recursively until we can extend a list -or end of file). - -If ARG is N, apply this function that many times. - -If ARG is negative -N, extend the opening pair instead (that is, -backward). - -If ARG is raw prefix \\[universal-argument], extend all the way to the end of the parent list. - -If both the current expression and the expression to be slurped -are strings, they are joined together. - -See also `sp-slurp-hybrid-sexp' which is similar but handles -C-style syntax better. - -Examples: - - (foo |bar) baz -> (foo |bar baz) - - [(foo |bar)] baz -> [(foo |bar) baz] - - [(foo |bar) baz] -> [(foo |bar baz)] - - ((|foo) bar baz quux) -> ((|foo bar baz quux)) ;; with \\[universal-argument] - - \"foo| bar\" \"baz quux\" -> \"foo| bar baz quux\"" - (interactive "P") - (if (> (prefix-numeric-value arg) 0) - (let ((n (abs (prefix-numeric-value arg))) - (enc (sp-get-enclosing-sexp)) - (in-comment (sp-point-in-comment)) - next-thing ok) - (when enc - (save-excursion - (if (sp--raw-argument-p arg) - (progn - (goto-char (sp-get enc :end-suf)) - (setq next-thing (sp-get-enclosing-sexp)) - (when next-thing - (goto-char (sp-get next-thing :end-in)) - (sp--run-hook-with-args (sp-get enc :op) :pre-handlers 'slurp-forward - (list :arg arg :enc enc :next-thing next-thing)) - (sp-get enc (insert :cl :suffix)) - (goto-char (sp-get enc :end-suf)) - (delete-char (sp-get enc (- (+ :cl-l :suffix-l)))) - (sp--indent-region (sp-get enc :beg-prf) (sp-get next-thing :end)) - (sp--run-hook-with-args (sp-get enc :op) :post-handlers 'slurp-forward - (list :arg arg :enc enc :next-thing next-thing)))) - (while (> n 0) - (goto-char (sp-get enc :end-suf)) - (setq ok enc) - (setq next-thing (sp-get-thing nil)) - (while (sp-compare-sexps next-thing ok <) - (goto-char (sp-get next-thing :end-suf)) - (setq ok next-thing) - (setq next-thing (sp-get-thing nil))) - ;; do not allow slurping into a different context from - ;; inside a comment - (if (and in-comment - (save-excursion - (sp-get next-thing - (goto-char :beg) - (not (sp-point-in-comment))))) - (progn - (sp-message :cant-slurp-context) - (setq n -1)) - (if ok - (progn - (if (and (equal (sp-get next-thing :cl) "\"") - (equal (sp-get ok :cl) "\"")) - (progn - (sp--join-sexp ok next-thing) - (goto-char (- (sp-get next-thing :end) 2)) - (plist-put enc :end (- (sp-get next-thing :end) 2))) - (let ((inner-sexp - (save-excursion - (goto-char (sp-get ok :end-in)) - (sp-get-thing t)))) - (delete-char (sp-get ok (- (+ :cl-l :suffix-l)))) - ;; this calculation corrects the absence - ;; of already deleted cls - (goto-char (- (sp-get next-thing :end-suf) - (sp-get ok (+ :cl-l :suffix-l)))) - ;; only insert space if not inserting it - ;; would merge two sexps together - (when (and (sp-get ok (/= :len-in 0)) - (sp-compare-sexps - inner-sexp - (sp-get-thing t)) - (= (sp-get ok :end-suf) - (sp-get next-thing :beg-prf))) - (save-excursion - (goto-char (sp-get ok :end-in)) - (insert " ")))) - (sp--run-hook-with-args - (sp-get enc :op) :pre-handlers 'slurp-forward - (list :arg arg :enc enc :ok ok :next-thing next-thing)) - (sp-get ok (insert :cl :suffix)) - (sp--indent-region (sp-get ok :beg-prf) (point)) - ;; HACK: update the "enc" data structure if ok==enc - (when (= (sp-get enc :beg) (sp-get ok :beg)) (plist-put enc :end (point))) - (sp--run-hook-with-args - (sp-get enc :op) :post-handlers 'slurp-forward - (list :arg arg :enc enc :ok ok :next-thing next-thing))) - (setq n (1- n))) - (sp-message :cant-slurp) - (setq n -1)))))))) - (sp-backward-slurp-sexp (sp--negate-argument arg)))) - -(defun sp-backward-slurp-sexp (&optional arg) - "Add the sexp preceding the current list in it by moving the opening delimiter. - -If the current list is the first in a parent list, extend that -list (and possibly apply recursively until we can extend a list -or beginning of file). - -If arg is N, apply this function that many times. - -If arg is negative -N, extend the closing pair instead (that is, -forward). - -If ARG is raw prefix \\[universal-argument], extend all the way to the beginning of the parent list. - -If both the current expression and the expression to be slurped -are strings, they are joined together. - -Examples: - - foo (bar| baz) -> (foo bar| baz) - - foo [(bar| baz)] -> [foo (bar| baz)] - - [foo (bar| baz)] -> [(foo bar| baz)] - - (foo bar baz (|quux)) -> ((foo bar baz |quux)) ;; with \\[universal-argument] - - \"foo bar\" \"baz |quux\" -> \"foo bar baz |quux\"" - (interactive "P") - (if (> (prefix-numeric-value arg) 0) - (let ((n (abs (prefix-numeric-value arg))) - (enc (sp-get-enclosing-sexp)) - (in-comment (sp-point-in-comment)) - next-thing ok) - (when enc - (save-excursion - (if (sp--raw-argument-p arg) - (progn - (goto-char (sp-get enc :beg-prf)) - (setq next-thing (sp-get-enclosing-sexp)) - (when next-thing - (delete-char (sp-get enc (+ :op-l :prefix-l))) - (goto-char (sp-get next-thing :beg-in)) - (sp--run-hook-with-args - (sp-get enc :op) :pre-handlers 'slurp-backward - (list :arg arg :enc enc :next-thing next-thing)) - (sp-get enc (insert :prefix :op)) - (sp--indent-region (sp-get next-thing :beg-in) (sp-get enc :end)) - (sp--run-hook-with-args - (sp-get enc :op) :post-handlers 'slurp-backward - (list :arg arg :enc enc :next-thing next-thing)))) - (while (> n 0) - (goto-char (sp-get enc :beg-prf)) - (setq ok enc) - (setq next-thing (sp-get-thing t)) - (while (sp-compare-sexps next-thing ok > :end) - (goto-char (sp-get next-thing :beg-prf)) - (setq ok next-thing) - (setq next-thing (sp-get-thing t))) - ;; do not allow slurping into a different context from - ;; inside a comment - (if (and in-comment - (save-excursion - (sp-get next-thing - (goto-char :beg) - (not (sp-point-in-comment))))) - (progn - (sp-message :cant-slurp-context) - (setq n -1)) - (if ok - (progn - (if (and (equal (sp-get next-thing :cl) "\"") - (equal (sp-get ok :cl) "\"")) - (progn - (sp--join-sexp next-thing ok) - (goto-char (sp-get next-thing :beg-prf)) - (plist-put enc :beg (sp-get next-thing :beg))) - (let ((inner-sexp - (save-excursion - (goto-char (sp-get ok :beg-in)) - (sp-get-thing)))) - (delete-char (sp-get ok (+ :op-l :prefix-l))) - (goto-char (sp-get next-thing :beg-prf)) - ;; only insert space if not inserting it - ;; would merge two sexps together - (when (and (sp-get ok (/= :len-in 0)) - (= (sp-get ok (- (sp-get inner-sexp :end) - :op-l :prefix-l)) - (sp-get (sp-get-thing) :end)) - (= (sp-get ok :beg-prf) - (sp-get next-thing :end-suf))) - (save-excursion - (goto-char (sp-get ok (- :beg-in :op-l :prefix-l))) - (insert " ")))) - (sp--run-hook-with-args - (sp-get enc :op) :pre-handlers 'slurp-backward - (list :arg arg :enc enc :ok ok :next-thing next-thing)) - (sp-get ok (insert :prefix :op)) - (sp--indent-region (point) (sp-get ok :end)) - ;; HACK: update the "enc" data structure if ok==enc - (when (sp-compare-sexps enc ok) (plist-put enc :beg (- (point) (sp-get ok :op-l)))) - (sp--run-hook-with-args - (sp-get enc :op) :post-handlers 'slurp-backward - (list :arg arg :enc enc :ok ok :next-thing next-thing))) - (setq n (1- n))) - (sp-message :cant-slurp) - (setq n -1)))))))) - (sp-forward-slurp-sexp (sp--negate-argument arg)))) - -(defun sp-add-to-previous-sexp (&optional arg) - "Add the expression around point to the first list preceding point. - -With ARG positive N add that many expressions to the preceding -list. - -If ARG is raw prefix argument \\[universal-argument] add all expressions until -the end of enclosing list to the previous list. - -If ARG is raw prefix argument \\[universal-argument] \\[universal-argument] add the current -list into the previous list. - -Examples: - - (foo bar) |baz quux -> (foo bar |baz) quux - - (foo bar) |baz quux -> (foo bar |baz quux) ;; 2 - - (blab (foo bar) |baz quux) -> (blab (foo bar |baz quux)) ;; \\[universal-argument] - - (foo bar) (baz |quux) -> (foo bar (baz |quux)) ;; \\[universal-argument] \\[universal-argument]" - (interactive "P") - (save-excursion - (cond - ((equal arg '(16)) - (sp-backward-up-sexp) - (sp-backward-down-sexp) - (sp-forward-slurp-sexp)) - (t - (sp-backward-down-sexp) - (sp-forward-slurp-sexp arg)))) - (indent-according-to-mode)) - -(defun sp-add-to-next-sexp (&optional arg) - "Add the expressions around point to the first list following point. - -With ARG positive N add that many expressions to the following -list. - -If ARG is raw prefix argument \\[universal-argument] add all expressions until -the beginning of enclosing list to the following list. - -If ARG is raw prefix argument \\[universal-argument] \\[universal-argument] add the current -list into the following list. - -Examples: - - foo bar| (baz quux) -> foo (bar| baz quux) - - foo bar| (baz quux) -> (foo bar| baz quux) ;; 2 - - (foo bar |(bar quux) blab) -> ((foo bar |bar quux) blab) ;; \\[universal-argument] - - (foo |bar) (baz quux) -> ((foo |bar) baz quux) ;; \\[universal-argument] \\[universal-argument]" - (interactive "P") - (save-excursion - (cond - ((equal arg '(16)) - (sp-up-sexp) - (sp-down-sexp) - (sp-backward-slurp-sexp)) - (t - (sp-down-sexp) - (sp-backward-slurp-sexp arg))))) - -(defun sp-forward-barf-sexp (&optional arg) - "Remove the last sexp in the current list by moving the closing delimiter. - -If ARG is positive number N, barf that many expressions. - -If ARG is negative number -N, contract the opening pair instead. - -If ARG is raw prefix \\[universal-argument], barf all expressions from the one after -point to the end of current list and place the point before the -closing delimiter of the list. - -If the current list is empty, do nothing. - -Examples: (prefix arg in comment) - - (foo bar| baz) -> (foo bar|) baz ;; nil (defaults to 1) - - (foo| [bar baz]) -> (foo|) [bar baz] ;; 1 - - (1 2 3| 4 5 6) -> (1 2 3|) 4 5 6 ;; \\[universal-argument] (or numeric prefix 3) - - (foo bar| baz) -> foo (bar| baz) ;; -1" - (interactive "P") - (let* ((raw (sp--raw-argument-p arg)) - (old-arg arg) - (arg (prefix-numeric-value arg))) - (if (> arg 0) - (if (sp-point-in-blank-sexp) - (sp-message :blank-sexp) - (save-excursion - (let ((enc (sp-get-enclosing-sexp))) - (sp-get enc - (cond - ((and raw (= arg 4)) - (sp-get (sp-get-thing t) - (goto-char :end-suf))) - (t - (goto-char :end-in) - (sp-backward-sexp arg) - (when (<= (point) :beg) - (goto-char :beg-in)))) - ;; we know for sure there is at least one thing in the list - (let ((back (sp-get-thing t))) - (if (sp-compare-sexps back enc) - (goto-char :beg-in) - (goto-char (sp-get back :end-suf)))) - (sp--run-hook-with-args :op :pre-handlers 'barf-forward - (list :arg arg :enc enc))) - (sp-get (sp-get-enclosing-sexp) - (sp-do-move-cl (point)) - (sp--indent-region :beg :end) - (sp--run-hook-with-args :op :post-handlers 'barf-forward - (list :arg arg :enc enc)))))) - (sp-backward-barf-sexp (sp--negate-argument old-arg))))) - -(defun sp-backward-barf-sexp (&optional arg) - "This is exactly like calling `sp-forward-barf-sexp' with minus ARG. -In other words, instead of contracting the closing pair, the -opening pair is contracted. For more information, see the -documentation of `sp-forward-barf-sexp'. - -Examples: - - (foo bar| baz) -> foo (bar| baz) - - ([foo bar] |baz) -> [foo bar] (|baz) - - (1 2 3 |4 5 6) -> 1 2 3 (|4 5 6) ;; \\[universal-argument] (or 3)" - (interactive "P") - (let* ((raw (sp--raw-argument-p arg)) - (old-arg arg) - (arg (prefix-numeric-value arg))) - (if (> arg 0) - (if (sp-point-in-blank-sexp) - (sp-message :blank-sexp) - (save-excursion - (let ((enc (sp-get-enclosing-sexp))) - (sp-get enc - (cond - ((and raw (= arg 4)) - (sp-get (sp-get-thing) - (goto-char :beg-prf))) - (t - (goto-char :beg-in) - (sp-forward-sexp arg) - (when (>= (point) :end) - (goto-char :end-in)))) - ;; we know for sure there is at least one thing in the list - (let ((next (sp-get-thing))) - (if (sp-compare-sexps next enc) - (goto-char :end-in) - (goto-char (sp-get next :beg-prf)))) - (sp--run-hook-with-args :op :pre-handlers 'barf-backward - (list :arg arg :enc enc))) - (sp-get (sp-get-enclosing-sexp) - (sp-do-move-op (point)) - (sp--indent-region :beg :end) - (sp--run-hook-with-args :op :post-handlers 'barf-backward - (list :arg arg :enc enc)))))) - (sp-forward-barf-sexp (sp--negate-argument old-arg))))) - -;; TODO: get rid of the macro anyway, it's stupid! -(defmacro sp--skip-to-symbol-1 (forward) - "Generate `sp-skip-forward-to-symbol' or `sp-skip-backward-to-symbol'." - (let ((inc (if forward '1+ '1-)) - (dec (if forward '1- '1+)) - (forward-fn (if forward 'forward-char 'backward-char)) - (next-char-fn (if forward 'following-char 'preceding-char)) - (looking (if forward 'sp--looking-at 'sp--looking-back)) - (prefix-fn (if forward 'sp--get-suffix 'sp--get-prefix)) - (eob-test (if forward '(eobp) '(bobp))) - (comment-bound (if forward 'cdr 'car))) - `(let ((in-comment (sp-point-in-comment)) - ;; HACK: if we run out of current context this might skip a - ;; pair that was not allowed before. However, such a call is - ;; never made in SP, so it's OK for now - (allowed-pairs (sp--get-allowed-regexp)) - (allowed-open (sp--get-opening-regexp (sp--get-allowed-pair-list))) - (allowed-close (sp--get-closing-regexp (sp--get-allowed-pair-list))) - (allowed-strings (sp--get-stringlike-regexp)) - (prefix nil)) - (while (and (not (or ,eob-test - (and stop-after-string - (not (sp-point-in-string)) - (sp-point-in-string (,dec (point)))) - (and stop-at-string - (not (sp-point-in-string)) - (sp-point-in-string (,inc (point)))) - (and stop-inside-string - (sp-point-in-string) - (not (sp-point-in-string (,inc (point))))) - (and (,looking allowed-pairs) - (or in-comment (not (sp-point-in-comment)))) - (and (,looking allowed-strings) - (or in-comment (not (sp-point-in-comment)))))) - (or (member (char-syntax (,next-char-fn)) '(?< ?> ?! ?| ?\ ?\\ ?\" ?' ?.)) - (/= 0 (logand (lsh 1 20) (car (syntax-after - ,(if forward - '(point) - '(1- (point))))))) - (unless in-comment (sp-point-in-comment)) - ;; This is the case where we are starting at - ;; pair (looking at it) and there is some - ;; prefix which is not recognized by syntax, - ;; i.e. defined by regexp. This should only be - ;; tested once in principle before the next - ;; time we land on a delimiter this whole loop - ;; stops based on the first branch of the `and' - ;; condition in `while' so using expensive - ;; functions here is not a bg deal. - (and (or (,(if forward 'sp--looking-back 'sp--looking-at) - ,(if forward 'allowed-close 'allowed-open)) - (,(if forward 'sp--looking-back 'sp--looking-at) allowed-strings)) - (progn - (setq prefix (,prefix-fn)) - (> (length prefix) 0))))) - (if (and (not in-comment) - (sp-point-in-comment)) - (progn - (goto-char (,comment-bound (sp-get-comment-bounds))) - (unless ,eob-test (,forward-fn 1))) - (unless ,eob-test - (,forward-fn (max (length prefix) 1)))))))) - -(defun sp-skip-forward-to-symbol (&optional stop-at-string stop-after-string stop-inside-string) - "Skip whitespace and comments moving forward. - -If STOP-AT-STRING is non-nil, stop before entering a string (if -not already in a string). - -If STOP-AFTER-STRING is non-nil, stop after exiting a string. - -If STOP-INSIDE-STRING is non-nil, stop before exiting a string. - -Examples: - - foo| bar -> foo |bar - - foo| [bar baz] -> foo |[bar baz]" - (interactive "^") - (sp--skip-to-symbol-1 t)) - -(put 'sp-skip-forward-to-symbol 'CUA 'move) - -(defun sp-skip-backward-to-symbol (&optional stop-at-string stop-after-string stop-inside-string) - "Skip whitespace and comments moving backward. -If STOP-AT-STRING is non-nil, stop before entering a string (if -not already in a string). - -If STOP-AFTER-STRING is non-nil, stop after exiting a string. - -If STOP-INSIDE-STRING is non-nil, stop before exiting a string. - -Examples: - - foo |bar -> foo| bar - - [bar baz] |foo -> [bar baz]| foo" - (interactive "^") - (sp--skip-to-symbol-1 nil)) - -(put 'sp-skip-backward-to-symbol 'CUA 'move) - -(defun sp-skip-into-string (&optional back) - "Move the point into the next string. - -With BACK non-nil, move backwards." - (if back - (while (not (sp-point-in-string)) - (backward-char)) - (while (not (sp-point-in-string)) - (forward-char)))) - -;; TODO: in ruby, "foo |if bar" now moves correctly, but there's a -;; noticable lag before it jumps over "if". This is probably caused -;; by :skip-match handlers. Investigate! -(defun sp-forward-symbol (&optional arg) - "Move point to the next position that is the end of a symbol. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction. - -A symbol is any sequence of characters that are in either the -word constituent or symbol constituent syntax class. Current -symbol only extend to the possible opening or closing delimiter -as defined by `sp-add-pair' even if part of this delimiter -would match \"symbol\" syntax classes. - -Examples: - - |foo bar baz -> foo| bar baz - - |foo (bar (baz)) -> foo (bar| (baz)) ;; 2 - - |foo (bar (baz) quux) -> foo (bar (baz) quux|) ;; 4" - (interactive "^p") - (setq arg (or arg 1)) - (sp--with-case-sensitive - (let* ((n (abs arg)) - (fw (> arg 0)) - (allowed (sp--get-allowed-pair-list)) - (open (sp--get-opening-regexp allowed)) - (close (sp--get-closing-regexp allowed))) - (if fw - (while (> n 0) - ;; First we need to get to the beginning of a symbol. This means - ;; skipping all whitespace and pair delimiters until we hit - ;; something in \sw or \s_ - (while (cond - ((eobp) nil) - ((not (memq (char-syntax (following-char)) '(?w ?_))) - (forward-char) - t) - ;; if allowed is empty, the regexp matches anything - ;; and we go into infinite loop, cf. Issue #400 - ((and allowed (sp--valid-initial-delimiter-p (sp--looking-at open))) - (goto-char (match-end 0))) - ((and allowed (sp--valid-initial-delimiter-p (sp--looking-at close))) - (goto-char (match-end 0))))) - (while (and (not (eobp)) - (or (not allowed) - (not (or (sp--valid-initial-delimiter-p (sp--looking-at open)) - (sp--valid-initial-delimiter-p (sp--looking-at close))))) - (memq (char-syntax (following-char)) '(?w ?_))) - (forward-char)) - (setq n (1- n))) - (sp-backward-symbol n))))) - -(put 'sp-forward-symbol 'CUA 'move) - -(defun sp-backward-symbol (&optional arg) - "Move point to the next position that is the beginning of a symbol. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -forward direction. - -A symbol is any sequence of characters that are in either the word -constituent or symbol constituent syntax class. Current symbol only -extend to the possible opening or closing delimiter as defined by -`sp-add-pair' even if part of this delimiter would match \"symbol\" -syntax classes. - -Examples: - - foo bar| baz -> foo |bar baz - - ((foo bar) baz)| -> ((foo |bar) baz) ;; 2 - - (quux ((foo) bar) baz)| -> (|quux ((foo) bar) baz) ;; 4" - (interactive "^p") - (setq arg (or arg 1)) - (sp--with-case-sensitive - (let ((n (abs arg)) - (fw (> arg 0)) - (open (sp--get-opening-regexp (sp--get-allowed-pair-list))) - (close (sp--get-closing-regexp (sp--get-allowed-pair-list)))) - (if fw - (while (> n 0) - (while (cond - ((bobp) nil) - ((not (memq (char-syntax (preceding-char)) '(?w ?_))) - (backward-char) - t) - ((sp--valid-initial-delimiter-p (sp--looking-back open)) - (goto-char (match-beginning 0))) - ((sp--valid-initial-delimiter-p (sp--looking-back close)) - (goto-char (match-beginning 0))))) - (while (and (not (bobp)) - (not (or (sp--valid-initial-delimiter-p (sp--looking-back open)) - (sp--valid-initial-delimiter-p (sp--looking-back close)))) - (memq (char-syntax (preceding-char)) '(?w ?_))) - (backward-char)) - ;; skip characters which are symbols with prefix flag - (while (and (not (eobp)) - (/= 0 (logand (lsh 1 20) (car (syntax-after (point)))))) - (forward-char 1)) - (setq n (1- n))) - (sp-forward-symbol n))))) - -(put 'sp-backward-symbol 'CUA 'move) - -(defun sp-rewrap-sexp (pair &optional keep-old) - "Rewrap the enclosing expression with a different pair. - -PAIR is the new enclosing pair. - -If optional argument KEEP-OLD is set, keep old delimiter and wrap -with PAIR on the outside of the current expression. - -When used interactively, the new pair is specified in minibuffer -by typing the *opening* delimiter, same way as with pair -wrapping. - -When used interactively with raw prefix argument \\[universal-argument], KEEP-OLD -is set to non-nil. - -Examples: - - (foo |bar baz) -> [foo |bar baz] ;; [ - - (foo |bar baz) -> [(foo |bar baz)] ;; \\[universal-argument] [" - (interactive (list - (let ((available-pairs (sp--get-pair-list-context 'wrap)) - ev ac (pair-prefix "")) - (while (not ac) - (setq ev (read-event (format "Rewrap with: %s" pair-prefix) t)) - (setq pair-prefix (concat pair-prefix (format-kbd-macro (vector ev)))) - (unless (--any? (string-prefix-p pair-prefix (car it)) available-pairs) - (user-error "Impossible pair prefix selected: %s" pair-prefix)) - (setq ac (--first (equal pair-prefix (car it)) available-pairs))) - ac) - current-prefix-arg)) - (-when-let (enc (sp-get-enclosing-sexp)) - (save-excursion - (sp-get enc - (goto-char :end) - (unless keep-old - (delete-char (- :cl-l))) - (insert (cdr pair)) - (goto-char :beg) - (insert (car pair)) - (unless keep-old - (delete-char :op-l)) - (setq sp-last-wrapped-region - (sp--get-last-wraped-region - :beg (+ :end - (length (car pair)) - (length (cdr pair)) - (- :op-l) - (- :cl-l)) - (car pair) (cdr pair))))) - (sp--run-hook-with-args (car pair) :post-handlers 'rewrap-sexp - (list :parent (sp-get enc :op))))) - -(defun sp-swap-enclosing-sexp (&optional arg) - "Swap the enclosing delimiters of this and the parent expression. - -With N > 0 numeric argument, ascend that many levels before -swapping. - -Examples: - - (foo [|bar] baz) -> [foo (|bar) baz] ;; 1 - - (foo {bar [|baz] quux} quack) -> [foo {bar (|baz) quux} quack] ;; 2" - (interactive "p") - (let ((enc (sp-get-enclosing-sexp)) - (encp (sp-get-enclosing-sexp (1+ arg)))) - (if (and enc encp) - (save-excursion - (sp-get encp - (goto-char :end) - (delete-char (- :cl-l))) - (sp-get enc - (insert :cl) - (goto-char :end) - (delete-char (- :cl-l))) - (sp-get encp (insert :cl)) - (sp-get enc (goto-char :beg-prf)) - (sp-get encp (insert :prefix :op)) - (sp-get enc (delete-char (+ :op-l :prefix-l))) - (sp-get encp (goto-char :beg-prf)) - (sp-get enc (insert :prefix :op)) - (sp-get encp (delete-char (+ :op-l :prefix-l)))) - (sp-message :point-not-deep-enough)))) - -(defun sp--unwrap-sexp (sexp &optional no-cleanup) - "Unwrap expression defined by SEXP. - -Warning: this function remove possible empty lines and reindents -the unwrapped sexp, so the SEXP structure will no longer -represent a valid object in a buffer!" - (sp-get sexp - (delete-region :end-in :end) - (delete-region :beg-prf :beg-in)) - ;; if the delimiters were the only thing on the line, we should also - ;; get rid of the (possible) empty line that will be the result of - ;; their removal. This is especially nice in HTML mode or - ;; long-running tags like \[\] in latex. - (unless no-cleanup - (let ((new-start (sp-get sexp :beg-prf)) - (new-end (sp-get sexp (- :end-in :op-l :prefix-l))) - indent-from indent-to) - (save-excursion - (goto-char new-end) - (when (string-match-p "^[\n\t ]+\\'" (thing-at-point 'line)) - (let ((b (bounds-of-thing-at-point 'line))) - (delete-region (car b) (cdr b)))) - (setq indent-to (point)) - (goto-char new-start) - (when (string-match-p "^[\n\t ]+\\'" (thing-at-point 'line)) - (let ((b (bounds-of-thing-at-point 'line))) - (delete-region (car b) (cdr b)))) - (setq indent-from (point))) - (unless (memq major-mode sp-no-reindent-after-kill-modes) - (sp--keep-indentation - (sp--indent-region indent-from indent-to)))))) - -(defun sp-change-inner () - "Change the inside of the next expression. - -First, kill the inside of the next balanced expression, then move -point just after the opening delimiter. - -Examples: - - (f|oo [bar] baz) -> (foo [|] baz) - - {|'foo': 'bar'} -> {'|': 'bar'}" - (interactive) - (-when-let (ok (sp-get-sexp)) - (sp-get ok - (kill-region :beg-in :end-in) - (goto-char :beg-in)))) - -(defun sp-unwrap-sexp (&optional arg) - "Unwrap the following expression. - -With ARG N, unwrap Nth expression as returned by -`sp-forward-sexp'. If ARG is negative -N, unwrap Nth expression -backwards as returned by `sp-backward-sexp'. - -Return the information about the just unwrapped expression. Note -that this structure does not represent a valid expression in the -buffer. - -Examples: - - |(foo bar baz) -> |foo bar baz - - (foo bar| baz) -> foo bar| baz - - |(foo) (bar) (baz) -> |(foo) bar (baz) ;; 2" - (interactive "p") - (setq arg (or arg 1)) - (let ((sp-navigate-consider-symbols nil)) - (let ((ok (save-excursion (sp-forward-sexp arg)))) - (when ok (sp--unwrap-sexp ok)) - ok))) - -(defun sp-backward-unwrap-sexp (&optional arg) - "Unwrap the previous expression. - -With ARG N, unwrap Nth expression as returned by -`sp-backward-sexp'. If ARG is negative -N, unwrap Nth expression -forward as returned by `sp-forward-sexp'. - -Examples: - - (foo bar baz)| -> foo bar baz| - - (foo bar)| (baz) -> foo bar| (baz) - - (foo) (bar) (baz)| -> foo (bar) (baz) ;; 3" - (interactive "p") - (sp-unwrap-sexp (- (or arg 1)))) - -(defun sp-splice-sexp (&optional arg) - "Unwrap the current list. - -With ARG N, unwrap Nth list as returned by applying `sp-up-sexp' -N times. This function expect positive arg. - -Examples: - - (foo (bar| baz) quux) -> (foo bar| baz quux) - - (foo |(bar baz) quux) -> foo |(bar baz) quux - - (foo (bar| baz) quux) -> foo (bar| baz) quux ;; 2" - (interactive "p") - (setq arg (or arg 1)) - (-when-let (ok (sp-get-enclosing-sexp arg)) - (if (equal ";" (sp-get ok :prefix)) - (sp-get ok - (save-excursion - (goto-char :beg) - (-when-let (enc (sp-get-enclosing-sexp arg)) - (sp--unwrap-sexp enc)))) - (sp--unwrap-sexp ok)))) - -(defun sp--splice-sexp-do-killing (beg end expr &optional jump-end) - "Save the text in the region between BEG and END inside EXPR, -then delete EXPR and insert the saved text. - -If optional argument JUPM-END is equal to the symbol 'end move -the point after the re-inserted text." - (let (str p) - (setq str (buffer-substring-no-properties beg end)) - (delete-region (sp-get expr :beg-prf) (sp-get expr :end)) - (save-excursion - (insert str) - (sp--indent-region (sp-get expr :beg-prf) (point)) - (setq p (point))) - (when (eq jump-end 'end) (goto-char p)))) - -(defun sp-splice-sexp-killing-backward (&optional arg) - "Unwrap the current list and kill all the expressions -between start of this list and the point. - -With the optional argument ARG, repeat that many times. This -argument should be positive number. - -Examples: - - (foo (let ((x 5)) |(sqrt n)) bar) -> (foo |(sqrt n) bar) - -​ (when ok| |(perform-operation-1) -​ (perform-operation-1) -> (perform-operation-2) -​ (perform-operation-2)) - -​ (save-excursion -> |(awesome-stuff-happens) ;; 2 -​ (unless (test) -​ |(awesome-stuff-happens))) - -Note that to kill only the content and not the enclosing -delimiters you can use \\[universal-argument] \\[sp-backward-kill-sexp]. -See `sp-backward-kill-sexp' for more information." - (interactive "p") - (while (> arg 0) - (sp-splice-sexp-killing-around '(4)) - (setq arg (1- arg)))) - -;; TODO: write in terms of `sp-splice-sexp-killing-around'. -(defun sp-splice-sexp-killing-forward (&optional arg) - "Unwrap the current list and kill all the expressions between -the point and the end of this list. - -With the optional argument ARG, repeat that many times. This -argument should be positive number. - -Examples: - - (a (b c| d e) f) -> (a b c| f) - - (+ (x |y z) w) -> (+ x| w) - -Note that to kill only the content and not the enclosing -delimiters you can use \\[universal-argument] \\[sp-kill-sexp]. -See `sp-kill-sexp' for more information." - (interactive "p") - (while (> arg 0) - (let ((ok (sp-get-enclosing-sexp 1))) - (if ok - (let ((next (sp-get-thing t))) - (if (sp-compare-sexps next ok) - (sp-kill-sexp '(16)) - (sp--splice-sexp-do-killing - (sp-get next :end) ;search backward - (sp-get ok :beg-in) - ok 'end))) - (setq arg -1))) - (setq arg (1- arg)))) - -(defun sp-splice-sexp-killing-around (&optional arg) - "Unwrap the current list and kill everything inside except next expression. - -With ARG save that many next expressions. With ARG negative -N, -save that many expressions backward. - -If ARG is raw prefix argument \\[universal-argument] this function behaves exactly -the same as `sp-splice-sexp-killing-backward'. - -If ARG is negative raw prefix argument \\[negative-argument] \\[universal-argument] this function -behaves exactly the same as `sp-splice-sexp-killing-forward'. - -Note that the behaviour with the prefix argument seems to be -reversed. This is because the backward variant is much more -common and hence deserve shorter binding. - -If ARG is raw prefix argument \\[universal-argument] \\[universal-argument] raise the expression the point -is inside of. This is the same as `sp-backward-up-sexp' followed by -`sp-splice-sexp-killing-around'. - -Examples: - - (a b |(c d) e f) -> |(c d) ;; with arg = 1 - - (a b |c d e f) -> |c d ;; with arg = 2 - - (- (car x) |a 3) -> (car x)| ;; with arg = -1 - - (foo (bar |baz) quux) -> |(bar baz) ;; with arg = \\[universal-argument] \\[universal-argument]" - (interactive "P") - (cond - ((equal arg '(-4)) - (sp-splice-sexp-killing-forward 1)) - (t - (if (equal arg '(16)) - (progn - (sp-backward-up-sexp) - (setq arg 1))) - (let* (inside-comment-inside-sexp - (num-arg (prefix-numeric-value arg)) - (ok ;; (sp-get-enclosing-sexp 1) - (save-excursion - (sp-skip-backward-to-symbol) - ;; if the point is inside a comment, we want to - ;; operate on the sexp that contains it. however, - ;; if we are inside a sexp inside a comment, we - ;; should operate on that instead. - (if (sp-point-in-comment) - (let ((enc (sp-get-enclosing-sexp 1)) - (cb (sp-get-comment-bounds))) - (if (> (sp-get enc :beg) (car cb)) - (progn - (setq inside-comment-inside-sexp t) - enc) - (goto-char (cdr cb)) - ;; todo: replace with something more - ;; abstract - (skip-chars-forward "\t\n ") - (sp-get-enclosing-sexp 1))) - (sp-get-enclosing-sexp 1))))) - (when ok - (when (and (sp-point-in-comment) - (not inside-comment-inside-sexp)) - (let ((cb (sp-get-comment-bounds))) - (goto-char (if (> num-arg 0) (car cb) (cdr cb))))) - (sp-skip-backward-to-symbol) - (-let* ((next (sp--next-thing-selection arg)) - ((from . to) - (cond - ((and (sp-point-in-comment) - (not inside-comment-inside-sexp)) - (if (> num-arg 0) - ;; only extends to keep the comment if raising - ;; towards the end. - (cons (car (sp-get-comment-bounds)) - (sp-get next :end-suf)) - (sp-get next (cons :beg-prf :end-suf)))) - ((and (sp-point-in-comment) - inside-comment-inside-sexp) - (sp-get next (cons :beg-prf :end-suf))) - ;; If we are splicing before a comment, the - ;; comment might be connected to the sexp - ;; after it, so we better don't kill it. Only - ;; do that if the comment is on its own line - ;; though, otherwise it is connected to the - ;; sexp before it. - ((save-excursion - (skip-chars-forward "\t\n ") - (when (and (> num-arg 0) - (sp-point-in-comment) - (save-excursion - (skip-chars-backward "\t ") - (bolp))) - (cons (point) (sp-get next :end-suf))))) - ;; similarly, if there is a comment before - ;; this sexp, keep it. - ((save-excursion - (sp-backward-symbol) - (when (and (> num-arg 0) - (sp-point-in-comment) - (goto-char (car (sp-get-comment-bounds))) - (> (point) (sp-get ok :beg)) - (save-excursion - (skip-chars-backward "\t ") - (bolp))) - (cons (point) (sp-get next :end-suf))))) - (t (sp-get next (cons :beg-prf :end-suf)))))) - (sp--splice-sexp-do-killing from to - ok (if (> num-arg 0) nil 'end)))))))) - -(defalias 'sp-raise-sexp 'sp-splice-sexp-killing-around) - -(defun sp-convolute-sexp (&optional arg) - "Convolute balanced expressions. - -Save the expressions preceding point and delete them. Then -splice the resulting expression. Wrap the current enclosing list -with the delimiters of the spliced list and insert the saved -expressions. - -If point is in a symbol, move to end of symbol before convolving. - -With ARG positive N, move up N lists before wrapping. - -Examples: - -We want to move the `while' before the `let'. - -​ (let ((stuff 1) (while (we-are-good) -​ (other 2)) (let ((stuff 1) -​ (while (we-are-good) -> (other 2)) -​ |(do-thing 1) |(do-thing 1) -​ (do-thing 2) (do-thing 2) -​ (do-thing 3))) (do-thing 3))) - - (forward-char (sp-get env |:op-l)) -> (sp-get env (forward-char |:op-l))" - (interactive "p") - (save-excursion - (when (sp-point-in-symbol) - (sp-forward-symbol)) - (when (looking-at-p " ") - (just-one-space)) - (let* ((old-buffer-size (buffer-size)) - (enc (sp-get-enclosing-sexp)) - (inner-close (sp-get enc (delete-and-extract-region - (save-excursion - (goto-char :end-in) - (sp-backward-whitespace)) - :end))) - (inner-raise (sp-get enc (delete-and-extract-region - :beg-prf - (save-excursion - (sp-forward-whitespace))))) - (whitespace (sp-get enc - ;; this happens when the entire inside sexp was removed. - (when (= old-buffer-size (+ (buffer-size) :len)) - (delete-and-extract-region - (save-excursion - (goto-char :beg-prf) - (max (line-beginning-position) (sp-backward-whitespace))) - :beg-prf)))) - (encp (sp-get-enclosing-sexp arg))) - (sp-get encp - (goto-char :end) - (insert inner-close) - (goto-char :beg-prf) - (insert inner-raise (if whitespace whitespace "")) - (sp-get (sp-get-enclosing-sexp) - (sp--indent-region :beg :end))))) - (indent-according-to-mode)) - -(defun sp-absorb-sexp (&optional arg) - "Absorb previous expression. - -Save the expressions preceding point and delete them. Then slurp -an expression backward and insert the saved expressions. - -With ARG positive N, absorb that many expressions. - -Examples: - -​ (do-stuff 1) (save-excursion -​ (save-excursion -> |(do-stuff 1) -​ |(do-stuff 2)) (do-stuff 2)) - - foo bar (concat |baz quux) -> (concat |foo bar baz quux) ;; 2" - (interactive "p") - (sp-forward-whitespace) - (let* ((old (point)) - (raise (progn - (sp-beginning-of-sexp) - (buffer-substring (point) old)))) - (delete-region (point) old) - (sp-backward-slurp-sexp arg) - (sp-forward-whitespace) - (sp-beginning-of-sexp) - (insert raise) - (save-excursion - (sp-backward-up-sexp) - (indent-sexp))) - (sp-forward-whitespace)) - -(defun sp-emit-sexp (&optional arg) - "Move all expression preceding point except the first one out of the current list. - -With ARG positive N, keep that many expressions from the start of -the current list. - -This is similar as `sp-backward-barf-sexp' but it also drags the -first N expressions with the delimiter. - -Examples: - -​ (save-excursion ​(do-stuff 1) -​ (do-stuff 1) (do-stuff 2) -​ (do-stuff 2) -> (save-excursion -​ |(do-stuff 3)) |(do-stuff 3)) - -​ (while not-done-yet (execute-only-once) -​ (execute-only-once) -> (while not-done-yet ;; arg = 2 -​ |(execute-in-loop)) |(execute-in-loop))" - (interactive "p") - (let (save-text) - (save-excursion - (sp-beginning-of-sexp) - (let* ((start (point))) - (sp-forward-sexp arg) - (sp-skip-forward-to-symbol t) - (setq save-text (buffer-substring start (point))) - (delete-region start (point)))) - (save-excursion (sp-backward-barf-sexp '(4))) - (sp-down-sexp) - (insert save-text) - (save-excursion - (sp-backward-up-sexp) - (indent-sexp)))) - -(defun sp-extract-before-sexp (&optional arg) - "Move the expression after point before the enclosing balanced expression. - -The point moves with the extracted expression. - -With ARG positive N, extract N expressions after point. - -With ARG negative -N, extract N expressions before point. - -With ARG being raw prefix argument \\[universal-argument], extract all the expressions -up until the end of enclosing list. - -If the raw prefix is negative, this behaves as \\[universal-argument] `sp-backward-barf-sexp'." - (interactive "P") - (if (equal arg '(-4)) - (sp-backward-barf-sexp '(4)) - (sp-select-next-thing arg) - (let ((enc (sp-get-enclosing-sexp)) - save-text b e nl) - (save-excursion - ;; TODO: extract this use pattern into general "get X things - ;; with or without surrounding whitespace." - (setq b (region-beginning)) - (setq e (region-end)) - (goto-char (sp-get enc :end-in)) - (if (save-excursion - (skip-chars-backward "\t ") - (bolp)) - (let ((whitespace (sp-get-whitespace))) - (sp-get whitespace (when (= :beg e) - (delete-region :beg :end)))) - (setq nl t)) - (setq save-text (delete-and-extract-region b e)) - (when nl - (let ((whitespace (sp-get-whitespace))) - (sp-get whitespace (delete-region :beg :end)))) - (goto-char (sp-get enc :beg-prf)) - (insert save-text "\n") - (sp-get enc (sp--indent-region :beg-prf :end))) - ;; if we're at an empty line, remove it - (when (string-match-p "^[\n\t ]+\\'" (thing-at-point 'line)) - (let ((b (bounds-of-thing-at-point 'line))) - (delete-region (car b) (cdr b)))) - (goto-char (sp-get enc :beg-prf))))) - -(defun sp-extract-after-sexp (&optional arg) - "Move the expression after point after the enclosing balanced expression. - -The point moves with the extracted expression. - -With ARG positive N, extract N expressions after point. - -With ARG negative -N, extract N expressions before point. - -With ARG being raw prefix argument \\[universal-argument], extract all the -expressions up until the end of enclosing list. - -With ARG being negative raw prefix argument \\[negative-argument] \\[universal-argument], extract all the -expressions up until the start of enclosing list." - ;; this is uch uglier than the "before" version, since the - ;; calculations forward have to account for the deleted text. Figure - ;; out a way to make it smoother. - (interactive "P") - (sp-select-next-thing arg) - (sp--with-case-sensitive - (let ((enc (sp-get-enclosing-sexp)) - (dws 0) ;length of deleted whitespace - save-text b e nl) - (save-excursion - (setq b (region-beginning)) - (setq e (region-end)) - (goto-char (sp-get enc :end-in)) - (if (save-excursion - (skip-chars-backward "\t ") - (bolp)) - (let ((whitespace (sp-get-whitespace))) - (sp-get whitespace - (when (= :beg e) - (delete-region :beg :end) - (setq dws (- :end :beg))))) - (setq nl t)) - (setq save-text (delete-and-extract-region b e)) - (when nl - (let ((whitespace (sp-get-whitespace))) - (sp-get whitespace (delete-region :beg :end)) - (sp-get whitespace (setq dws (+ dws (- :end :beg)))))) - (sp-get enc (goto-char (- :end (length save-text) dws))) - (insert "\n" save-text) - (sp-get enc (sp--indent-region :beg-prf :end)) - (setq e (point))) - ;; if we're at an empty line, remove it - (setq dws 0) ; variable reuse, ugly :/ - (when (string-match-p "^[\n\t ]+\\'" (thing-at-point 'line)) - (let ((b (bounds-of-thing-at-point 'line))) - (delete-region (car b) (cdr b)) - (setq dws (- (cdr b) (car b))))) - (when (sp--looking-back (sp--get-opening-regexp) nil t) - (let ((whitespace (sp-get-whitespace))) - (sp-get whitespace - (delete-region :beg :end) - (setq dws (- :end :beg))))) - (goto-char (- e dws))))) - -(defun sp-forward-whitespace (&optional arg) - "Skip forward past the whitespace characters. -With non-nil ARG return number of characters skipped." - (interactive "^P") - (let ((rel-move (skip-chars-forward " \t\n"))) - (if arg rel-move (point)))) - -(put 'sp-forward-whitespace 'CUA 'move) - -(defun sp-backward-whitespace (&optional arg) - "Skip backward past the whitespace characters. -With non-nil ARG return number of characters skipped." - (interactive "^P") - (let ((rel-move (skip-chars-backward " \t\n"))) - (if arg rel-move (point)))) - -(put 'sp-backward-whitespace 'CUA 'move) - -(defun sp-split-sexp (arg) - "Split the list or string the point is on into two. - -If ARG is a raw prefix \\[universal-argument] split all the sexps in current expression -in separate lists enclosed with delimiters of the current -expression. - -See also setting `sp-split-sexp-always-split-as-string' which -determines how sexps inside strings are treated and also for a -discussion of how to automatically add concatenation operators to -string splitting. - -Examples: - - (foo bar |baz quux) -> (foo bar) |(baz quux) - - \"foo bar |baz quux\" -> \"foo bar\" |\"baz quux\" - - ([foo |bar baz] quux) -> ([foo] |[bar baz] quux) - - (foo bar| baz quux) -> (foo) (bar|) (baz) (quux) ;; \\[universal-argument]" - (interactive "P") - (cond - ((equal arg '(4)) - (-when-let (items (sp-get-list-items)) - (let ((op (sp-get (car items) :op)) - (cl (sp-get (car items) :cl)) - (beg (sp-get (car items) :beg)) - (end (sp-get (car items) :end))) - (!cdr items) - (setq items (nreverse items)) - (save-excursion - (goto-char end) - (delete-char (- (length cl))) - (while items - (sp-get (car items) - (goto-char :end) - (insert cl) - (goto-char :beg) - (insert op)) - (!cdr items)) - (goto-char beg) - (delete-char (length op)))))) - (t - (let ((should-split-as-string - (and sp-split-sexp-always-split-as-string - (sp-point-in-string)))) - (-when-let (ok (if should-split-as-string - (save-excursion - (goto-char (1- (cdr (sp-get-quoted-string-bounds)))) - (sp-get-enclosing-sexp 1)) - (sp-get-enclosing-sexp 1))) - (sp-get ok - (sp--run-hook-with-args :op :pre-handlers 'split-sexp) - (if should-split-as-string - (progn - (insert :cl) - (save-excursion (insert :op))) - (forward-char (- (prog1 (sp-backward-whitespace t) (insert :cl)))) - (save-excursion (sp-forward-whitespace) (insert :op))) - (sp--run-hook-with-args :op :post-handlers 'split-sexp))))))) - -(defun sp--join-sexp (prev next) - "Join the expressions PREV and NEXT if they are of the same type. - -The expression with smaller :beg is considered the previous one, -so the input order does not actually matter. - -Return the information about resulting expression." - (if (and (sp-compare-sexps prev next equal :op) - (sp-compare-sexps prev next equal :cl)) - ;; if there's some prefix on the second expression, remove it. - ;; We do not move it to the first expression, it is assumed - ;; there's one already - (progn - (if (sp-compare-sexps prev next >) - (let ((tmp prev)) - (setq prev next) - (setq next tmp))) - (sp-get next (delete-region :beg-prf :beg-in)) - (sp-get prev (delete-region :end-in :end)) - (list :beg (sp-get prev :beg) - :end (- (sp-get next (- :end :op-l :prefix-l)) (sp-get prev :cl-l)) - :op (sp-get prev :op) - :cl (sp-get prev :cl) - :prefix (sp-get prev :prefix))) - (sp-message :different-type))) - -(defun sp-join-sexp (&optional arg) - "Join the sexp before and after point if they are of the same type. - -If ARG is positive N, join N expressions after the point with the -one before the point. - -If ARG is negative -N, join N expressions before the point with -the one after the point. - -If ARG is a raw prefix \\[universal-argument] join all the things up until the end -of current expression. - -The joining stops at the first expression of different type. - -Examples: - - (foo bar) |(baz) -> (foo bar |baz) - - (foo) |(bar) (baz) -> (foo |bar baz) ;; 2 - - [foo] [bar] |[baz] -> [foo bar |baz] ;; -2 - - (foo bar (baz)| (quux) (blob bluq)) -> (foo bar (baz| quux blob bluq)) ;; \\[universal-argument]" - (interactive "P") - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (n (abs arg)) - (prev (save-excursion (sp-backward-sexp (sp--signum arg)))) - next) - (save-excursion - (cond - ((and raw (= n 4)) - (setq next (sp-forward-sexp (sp--signum arg))) - (while (cond - ((> arg 0) - (sp-compare-sexps next prev > :beg :end)) - ((< arg 0) - (sp-compare-sexps next prev < :end :beg))) - (setq prev (sp--join-sexp prev next)) - (setq next (sp-forward-sexp (sp--signum arg))))) - (t (while (> n 0) - (setq next (sp-forward-sexp (sp--signum arg))) - (setq prev (sp--join-sexp prev next)) - (setq n (1- n))))) - prev))) - -(defun sp--next-thing-selection (&optional arg point) - "Return the bounds of selection over next thing. - -See `sp-select-next-thing' for the meaning of ARG. - -If POINT is non-nil, it is assumed it's a point inside the buffer -from which the selection extends, either forward or backward, -depending on the value of ARG. - -The return value has the same format as `sp-get-sexp'. This does -not necessarily represent a valid balanced expression!" - (save-excursion - (let* ((raw (sp--raw-argument-p arg)) - (arg (prefix-numeric-value arg)) - (beg point) (end point) - (op "") (cl "") - (prefix "") - (suffix "")) - (cond - ;; select up until end of list - ((and raw (= arg 4)) - (let ((enc (sp-get-enclosing-sexp))) - (if (not enc) - (error "No enclosing expression") - (save-excursion - (goto-char (sp-get enc :end-in)) - (-when-let (ok (sp-get-thing t)) - (sp-get ok - (setq end :end) - (setq cl :cl) - (setq suffix :suffix))))) - (unless point - (-when-let (ok (sp-get-thing)) - (if (sp-compare-sexps ok enc) - (progn - (setq beg end) - (setq end (sp-get enc :end-in))) - (sp-get ok - (setq beg :beg) - (setq op :op) - (setq prefix :prefix))))))) - ;; select up until beg of list - ((and raw (= arg -4)) - (let ((enc (sp-get-enclosing-sexp))) - (if (not enc) - (error "No enclosing expression") - (save-excursion - (goto-char (sp-get enc :beg-in)) - (-when-let (ok (sp-get-thing)) - (sp-get ok - (setq beg :beg) - (setq op :op) - (setq prefix :prefix)))))) - (unless point - (-when-let (ok (sp-get-thing t)) - (sp-get ok - (setq end :end) - (setq cl :cl) - (setq suffix :suffix))))) - ;; select the enclosing expression - ((and raw (= (abs arg) 16)) - (let ((enc (sp-get-enclosing-sexp))) - (if (not enc) - (error "No enclosing expression") - (sp-get enc (setq beg :beg) (setq end :end) - (setq op :op) (setq cl :cl) - (setq prefix :prefix) - (setq suffix :suffix))))) - ;; normal selection, select N expressions - ((> arg 0) - (let* ((first (sp-forward-sexp)) - (last first)) - (setq arg (1- arg)) - (setq beg (or point (sp-get first :beg))) - (while (and (> arg 0) last) - (setq last (sp-forward-sexp)) - (let ((nb (sp-get last :beg))) (when (< nb beg) - (setq first last) - (setq beg nb))) - (setq arg (1- arg))) - (unless (and point (= point beg)) - (sp-get first - (setq beg :beg) - (setq op :op) - (setq prefix :prefix))) - (sp-get last - (setq end :end) - (setq cl :cl) - (setq suffix :suffix)))) - ;; normal select, select -N expressions - ((< arg 0) - (let* ((first (sp-backward-sexp)) - (last first)) - (setq arg (1+ arg)) - (setq end (or point (sp-get first :end))) - (while (and (< arg 0) last) - (setq last (sp-backward-sexp)) - (let ((ne (sp-get last :end))) (when (> ne end) - (setq first last) - (setq end ne))) - (setq arg (1+ arg))) - (sp-get last - (setq beg :beg) - (setq op :op) - (setq prefix :prefix)) - (unless (and point (= point end)) - (sp-get first - (setq end :end) - (setq cl :cl) - (setq suffix :suffix))))) - ;; N = 0, select insides - ((= arg 0) - (let ((enc (sp-get-enclosing-sexp))) - (if (not enc) - (error "No enclosing expression") - (save-excursion - (goto-char (sp-get enc :beg-in)) - (-when-let (ok (sp-get-thing)) - (sp-get ok - (setq beg :beg) - (setq op :op) - (setq prefix :prefix)))) - (save-excursion - (goto-char (sp-get enc :end-in)) - (-when-let (ok (sp-get-thing t)) - (sp-get ok - (setq end :end) - (setq cl :cl) - (setq suffix :suffix)))))))) - (list :beg beg :end end :op op :cl cl :prefix prefix :suffix suffix)))) - -(defun sp-select-next-thing (&optional arg point) - "Set active region over next thing as recognized by `sp-get-thing'. - -If ARG is positive N, select N expressions forward. - -If ARG is negative -N, select N expressions backward. - -If ARG is a raw prefix \\[universal-argument] select all the things up until the -end of current expression. - -If ARG is a raw prefix \\[universal-argument] \\[universal-argument] select the current expression (as -if doing `sp-backward-up-sexp' followed by -`sp-select-next-thing'). - -If ARG is number 0 (zero), select all the things inside the -current expression. - -If POINT is non-nil, it is assumed it's a point inside the buffer -from which the selection extends, either forward or backward, -depending on the value of ARG. - -If the currently active region contains a balanced expression, -following invocation of `sp-select-next-thing' will select the -inside of this expression . Therefore calling this function -twice with no active region will select the inside of the next -expression. - -If the point is right in front of the expression any potential -prefix is ignored. For example, '|(foo) would only select (foo) -and not include ' in the selection. If you wish to also select -the prefix, you have to move the point backwards. - -With `sp-navigate-consider-symbols' symbols and strings are also -considered balanced expressions." - (interactive "P") - (let* ((selection (sp--next-thing-selection arg point)) - (p (point)) - (b (sp-get selection :beg)) - (e (sp-get selection :end)) - contracted) - ;; Show a helpful error if we're trying to move beyond the - ;; beginning or end of the buffer. - (when (or (null b) (null e)) - (user-error (if (bobp) "At beginning of buffer" "At end of buffer"))) - ;; if region is active and ready to use, check if this selection - ;; == old selection. If so, reselect the insides - (when (region-active-p) - (let ((rb (region-beginning)) - (re (region-end))) - (when (and (sp-get selection - (or (= rb :beg) - (= rb :beg-prf))) - (= re (sp-get selection :end))) - (sp-get selection - (setq b :beg-in) - (setq e :end-in)) - (setq contracted t)))) - ;; if we moved forward check if the old-point was in front of an - ;; expression and after a prefix. If so, remove the prefix from - ;; the selection - (unless (and (> (prefix-numeric-value arg) 0) - (not (sp--raw-argument-p arg)) - (= b p)) - (unless contracted (setq b (sp-get selection :beg-prf)))) - (push-mark b t t) - (goto-char e) - selection)) - -(defun sp-select-previous-thing (&optional arg point) - "Set active region over ARG previous things as recognized by `sp-get-thing'. - -If ARG is negative -N, select that many expressions forward. - -With `sp-navigate-consider-symbols' symbols and strings are also -considered balanced expressions." - (interactive "P") - (sp-select-next-thing (sp--negate-argument arg) point)) - -(defun sp-select-next-thing-exchange (&optional arg point) - "Just like `sp-select-next-thing' but run `exchange-point-and-mark' afterwards." - (interactive "P") - (prog1 - (sp-select-next-thing arg point) - (exchange-point-and-mark))) - -(defun sp-select-previous-thing-exchange (&optional arg point) - "Just like `sp-select-previous-thing' but run `exchange-point-and-mark' afterwards." - (interactive "P") - (prog1 - (sp-select-previous-thing arg point) - (exchange-point-and-mark))) - -(defun sp-mark-sexp (&optional arg allow-extend) - "Set mark ARG balanced expressions from point. -The place mark goes is the same place \\[sp-forward-sexp] would -move to with the same argument. -Interactively, if this command is repeated -or (in Transient Mark mode) if the mark is active, -it marks the next ARG sexps after the ones already marked. -This command assumes point is not in a string or comment." - (interactive "P\np") - (cond ((and allow-extend - (or (and (eq last-command this-command) (mark t)) - (and transient-mark-mode mark-active))) - (setq arg (if arg (prefix-numeric-value arg) - (if (< (mark) (point)) -1 1))) - (set-mark - (save-excursion - (let ((p (point))) - (goto-char (mark)) - (sp-forward-sexp arg) - (unless (sp-region-ok-p p (point)) - (user-error "Can not extend selection: region invalid")) - (point))))) - (t - (push-mark - (save-excursion - (sp-forward-sexp (prefix-numeric-value arg)) - (point)) - nil t)))) - -(defun sp-delete-char (&optional arg) - "Delete a character forward or move forward over a delimiter. - -If on an opening delimiter, move forward into balanced expression. - -If on a closing delimiter, refuse to delete unless the balanced -expression is empty, in which case delete the entire expression. - -If the delimiter does not form a balanced expression, it will be -deleted normally. - -With a numeric prefix argument N > 0, delete N characters forward. - -With a numeric prefix argument N < 0, delete N characters backward. - -With a numeric prefix argument N = 0, simply delete a character -forward, without regard for delimiter balancing. - -If ARG is raw prefix argument \\[universal-argument], delete -characters forward until a closing delimiter whose deletion would -break the proper pairing is hit. - -Examples: - - (quu|x \"zot\") -> (quu| \"zot\") - - (quux |\"zot\") -> (quux \"|zot\") -> (quux \"|ot\") - - (foo (|) bar) -> (foo | bar) - - |(foo bar) -> (|foo bar)" - (interactive "P") - (sp--with-case-sensitive - (let* ((raw (sp--raw-argument-p arg)) - ;; if you edit 10 gigabyte files in Emacs, you're gonna have - ;; a bad time. - (n (if raw 100000000 - (prefix-numeric-value arg)))) - (cond - ((> n 0) - (while (> n 0) - (cond - ((let ((ok (sp-point-in-empty-sexp))) - (when ok - (backward-char (length (car ok))) - (delete-char (+ (length (car ok)) (length (cdr ok))))) - ok) - ;; make this customizable - (setq n (1- n))) - ((and (sp-point-in-string) - (save-excursion (forward-char) (not (sp-point-in-string)))) - (setq n 0)) - ((sp--looking-at (sp--get-opening-regexp (sp--get-pair-list-context 'navigate))) - (-if-let (thing (save-match-data (sp-get-thing))) - (cond - ((= (sp-get thing :end-in) (point)) - (setq n 0)) - ((= (sp-get thing :beg) (point)) - (goto-char (sp-get thing :beg-in))) - (t - (delete-char (length (match-string 0))))) - (delete-char (length (match-string 0)))) - ;; make this customizable - (setq n (1- n))) - ((and (not (sp-point-in-string)) - (save-excursion (forward-char) (sp-point-in-string))) - (forward-char) - ;; make this customizable - (setq n (1- n))) - ((sp--looking-at (sp--get-closing-regexp (sp--get-pair-list-context 'navigate))) - (if (save-match-data (sp-get-thing)) - ;; make this customizable -- maybe we want to skip and - ;; continue deleting - (setq n 0) - (delete-char (length (match-string 0))) - (setq n (1- n)))) - ((bound-and-true-p hungry-delete-mode) - (hungry-delete-forward 1) - (setq n (1- n))) - (t - (delete-char 1) - (setq n (1- n)))))) - ((= n 0) (delete-char 1)) - (t (sp-backward-delete-char (sp--negate-argument arg))))))) - -(defun sp-backward-delete-char (&optional arg) - "Delete a character backward or move backward over a delimiter. - -If on a closing delimiter, move backward into balanced expression. - -If on a opening delimiter, refuse to delete unless the balanced -expression is empty, in which case delete the entire expression. - -If the delimiter does not form a balanced expression, it will be -deleted normally. - -With a numeric prefix argument N > 0, delete N characters backward. - -With a numeric prefix argument N < 0, delete N characters forward. - -With a numeric prefix argument N = 0, simply delete a character -backward, without regard for delimiter balancing. - -If ARG is raw prefix argument \\[universal-argument], delete -characters backward until a opening delimiter whose deletion would -break the proper pairing is hit. - -Examples: - - (\"zot\" q|uux) -> (\"zot\" |uux) - - (\"zot\"| quux) -> (\"zot|\" quux) -> (\"zo|\" quux) - - (foo (|) bar) -> (foo | bar) - - (foo bar)| -> (foo bar|)" - (interactive "P") - (if (and sp-autodelete-wrap - (eq sp-last-operation 'sp-wrap-region)) - (sp-backward-unwrap-sexp) - (sp--with-case-sensitive - (let* ((raw (sp--raw-argument-p arg)) - ;; if you edit 10 gigabyte files in Emacs, you're gonna have - ;; a bad time. - (n (if raw 100000000 - (prefix-numeric-value arg)))) - (cond - ((> n 0) - (while (> n 0) - (cond - ((let ((ok (sp-point-in-empty-sexp))) - (when ok - (backward-char (length (car ok))) - (delete-char (+ (length (car ok)) (length (cdr ok))))) - ok) - ;; make this customizable - (setq n (1- n))) - ((and (sp-point-in-string) - (save-excursion (backward-char) (not (sp-point-in-string)))) - (setq n 0)) - ((sp--looking-back (sp--get-closing-regexp (sp--get-pair-list-context 'navigate))) - (-if-let (thing (save-match-data (sp-get-thing t))) - (cond - ((= (sp-get thing :end) (point)) - (goto-char (sp-get thing :end-in))) - ((= (sp-get thing :beg-in) (point)) - (setq n 0)) - (t - (delete-char (- (length (match-string 0)))))) - (delete-char (- (length (match-string 0))))) - ;; make this customizable - (setq n (1- n))) - ((and (not (sp-point-in-string)) - (save-excursion (backward-char) (sp-point-in-string))) - (backward-char) - ;; make this customizable - (setq n (1- n))) - ((sp--looking-back (sp--get-opening-regexp (sp--get-pair-list-context 'navigate))) - (if (save-match-data (sp-get-thing t)) - ;; make this customizable -- maybe we want to skip and - ;; continue deleting - (setq n 0) - (delete-char (- (length (match-string 0)))) - (setq n (1- n)))) - ((bound-and-true-p hungry-delete-mode) - (hungry-delete-backward 1) - (setq n (1- n))) - (t - (delete-char -1) - (setq n (1- n)))))) - ((= n 0) (delete-char -1)) - (t (sp-delete-char (sp--negate-argument arg)))))))) - -(put 'sp-backward-delete-char 'delete-selection 'supersede) -(put 'sp-delete-char 'delete-selection 'supersede) - -(defun sp-point-in-empty-sexp (&optional pos) - "Return non-nil if point is in empty sexp or string. - -The return value is active cons pair of opening and closing sexp -delimiter enclosing this sexp." - (setq pos (or pos (point))) - (let (op act) - (cond - ((sp--looking-back (sp--get-opening-regexp (sp--get-pair-list-context 'navigate))) - (setq op (match-string 0)) - (setq act (--first (equal (car it) op) sp-pair-list)) - (when (sp--looking-at (regexp-quote (cdr act))) act)) - ((sp-point-in-empty-string pos))))) - -(defun sp-point-in-empty-string (&optional pos) - "Return non-nil if point is in empty string. - -The return value is actually cons pair of opening and closing -string delimiter enclosing this string." - (setq pos (or pos (point))) - (when (and (sp-point-in-string) - (save-excursion (if (= (point-max) (point)) - t - (forward-char) (not (sp-point-in-string)))) - (save-excursion (backward-char) (not (sp-point-in-string)))) - (save-excursion - (let* ((syntax (nth 3 (syntax-ppss pos))) - (c (char-to-string (if (eq syntax t) (following-char) syntax)))) - (cons c c))))) - -(defun sp--use-subword () - "Return non-nil if word killing commands should kill subwords. -This is the case if `subword-mode' is enabled and -`sp-use-subword' is non-nil." - (and sp-use-subword (bound-and-true-p subword-mode))) - -(defun sp--kill-word (&optional n) - "Kill N words or subwords." - (let ((n (or n 1))) - (if (sp--use-subword) - (subword-kill n) - (kill-word n)))) - -(defun sp--forward-word (&optional n) - "Move forward N words or subwords." - (let ((n (or n 1))) - (if (sp--use-subword) - (subword-forward n) - (forward-word n)))) - -(defun sp--backward-word (&optional n) - "Move backward N words or subwords." - (let ((n (or n 1))) - (if (sp--use-subword) - (subword-backward n) - (backward-word n)))) - -(defun sp-kill-symbol (&optional arg word) - "Kill a symbol forward, skipping over any intervening delimiters. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction. - -See `sp-forward-symbol' for what constitutes a symbol." - (interactive "p") - (sp--with-case-sensitive - (if (> arg 0) - (while (> arg 0) - (if (and word (sp-point-in-symbol)) - (sp--kill-word 1) - (let ((s (sp-get-symbol)) - (p (point))) - (when s - (sp-get s - (let ((delims (buffer-substring :beg-prf p))) - (if (string-match-p "\\`\\(\\s.\\|\\s-\\)*\\'" delims) - (if word - (kill-region p (save-excursion (sp--forward-word) (point))) - (kill-region p :end)) - (let ((kill-from (if (> p :beg-prf) :beg :beg-prf))) - (goto-char kill-from) - (if word - (kill-region kill-from (save-excursion (sp--forward-word) (point))) - (kill-region kill-from :end))))))))) - (sp--cleanup-after-kill) - (setq arg (1- arg))) - (sp-backward-kill-symbol (sp--negate-argument arg) word)))) - -(defun sp-kill-word (&optional arg) - "Kill a word forward, skipping over intervening delimiters. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction." - (interactive "p") - (sp-kill-symbol arg t)) - -(defun sp-delete-symbol (&optional arg word) - "Delete a symbol forward, skipping over any intervening delimiters. - -Deleted symbol does not go to the clipboard or kill ring. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction. - -See `sp-forward-symbol' for what constitutes a symbol." - (interactive "p") - (let* ((kill-ring kill-ring) - (select-enable-clipboard nil)) - (sp-kill-symbol arg word))) - -(defun sp-delete-word (&optional arg) - "Delete a word forward, skipping over intervening delimiters. - -Deleted word does not go to the clipboard or kill ring. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction." - (interactive "p") - (sp-delete-symbol arg t)) - -(defun sp-backward-kill-symbol (&optional arg word) - "Kill a symbol backward, skipping over any intervening delimiters. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -forward direction. - -See `sp-backward-symbol' for what constitutes a symbol." - (interactive "p") - (sp--with-case-sensitive - (if (> arg 0) - (while (> arg 0) - (if (and word (sp-point-in-symbol)) - (sp--kill-word -1) - (let ((s (sp-get-symbol t)) - (p (point))) - (when s - (sp-get s - (let ((delims (buffer-substring :end p))) - (if (string-match-p "\\`\\(\\s.\\|\\s-\\)*\\'" delims) - ;; Note: the arguments to kill-region are - ;; "reversed" (end before beg) so that the - ;; successive kills are prepended in the kill - ;; ring. See the implementation of - ;; `kill-region' for more info - (if word - (kill-region p (save-excursion (sp--backward-word) (point))) - (kill-region p :beg-prf)) - (goto-char :end) - (if word - (kill-region :end (save-excursion (sp--backward-word) (point))) - (kill-region :end :beg-prf)))))))) - (sp--cleanup-after-kill) - (setq arg (1- arg))) - (sp-kill-symbol (sp--negate-argument arg) word)))) - -(defun sp-backward-kill-word (&optional arg) - "Kill a word backward, skipping over intervening delimiters. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction." - (interactive "p") - (sp-backward-kill-symbol arg t)) - -(defun sp-backward-delete-symbol (&optional arg word) - "Delete a symbol backward, skipping over any intervening delimiters. - -Deleted symbol does not go to the clipboard or kill ring. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -forward direction. - -See `sp-backward-symbol' for what constitutes a symbol." - (interactive "p") - (let* ((kill-ring kill-ring) - (select-enable-clipboard nil)) - (sp-backward-kill-symbol arg word))) - -(defun sp-backward-delete-word (&optional arg) - "Delete a word backward, skipping over intervening delimiters. - -Deleted word does not go to the clipboard or kill ring. - -With ARG being positive number N, repeat that many times. - -With ARG being Negative number -N, repeat that many times in -backward direction." - (interactive "p") - (sp-backward-delete-symbol arg t)) - -(defun sp-delete-region (beg end) - "Delete the text between point and mark, like `delete-region'. - -BEG and END are the bounds of region to be deleted. - -If that text is unbalanced, signal an error instead. -With a prefix argument, skip the balance check." - (interactive "r") - (when (or current-prefix-arg - (sp-region-ok-p beg end) - (user-error (sp-message :unbalanced-region :return))) - (setq this-command 'delete-region) - (delete-region beg end))) - -(defun sp-kill-region (beg end) - "Kill the text between point and mark, like `kill-region'. - -BEG and END are the bounds of region to be killed. - -If that text is unbalanced, signal an error instead. -With a prefix argument, skip the balance check." - (interactive "r") - (when (or current-prefix-arg - (sp-region-ok-p beg end) - (user-error (sp-message :unbalanced-region :return))) - (setq this-command 'kill-region) - (kill-region beg end))) - -(defun sp-indent-defun (&optional arg) - "Reindent the current defun. - -If point is inside a string or comment, fill the current -paragraph instead, and with ARG, justify as well. - -Otherwise, reindent the current defun, and adjust the position -of the point." - (interactive "P") - (if (sp-point-in-string-or-comment) - (fill-paragraph arg) - (let ((column (current-column)) - (indentation (sp--current-indentation))) - (save-excursion - (end-of-defun) - (beginning-of-defun) - (indent-sexp)) - (sp--back-to-indentation column indentation)))) - -(cl-defun sp-region-ok-p (start end) - "Test if region between START and END is balanced. - -A balanced region is one where all opening delimiters are matched -by closing delimiters. - -This function does *not* check that the delimiters are correctly -ordered, that is [(]) is correct even though it is not logically -properly balanced." - (interactive "r") - (save-excursion - (save-restriction - (when (eq (sp-point-in-string start) (sp-point-in-string end)) - (narrow-to-region start end) - (let ((regex (sp--get-allowed-regexp (-difference sp-pair-list (sp--get-allowed-pair-list))))) - (goto-char (point-min)) - (while (or (prog1 (sp-forward-sexp) - (sp-skip-forward-to-symbol)) - ;; skip impossible delimiters - (when (looking-at-p regex) - (goto-char (match-end 0))))) - (looking-at-p "[[:blank:]\n]*\\'")))))) - -(defun sp-newline () - "Insert a newline and indent it. - -This is like `newline-and-indent', but it not only indents the -line that the point is on but also the S-expression following the -point, if there is one. - -If in a string, just insert a literal newline. - -If in a comment and if followed by invalid structure, call -`indent-new-comment-line' to keep the invalid structure in a -comment." - (interactive) - (cond - ((sp-point-in-string) - (newline)) - ((sp-point-in-comment) - (if (sp-region-ok-p (point) (point-at-eol)) - (progn (newline-and-indent) (ignore-errors (indent-sexp))) - (indent-new-comment-line))) - (t - (newline-and-indent) - (ignore-errors (indent-sexp))))) - -(defun sp-comment () - "Insert the comment character and adjust hanging sexps such - that it doesn't break structure." - (interactive) - (if (sp-point-in-string-or-comment) - (if (= 1 (length (single-key-description last-command-event))) ;; pretty hacky - (insert (single-key-description last-command-event)) - (insert comment-start)) - (sp--with-case-sensitive - (let ((old-point (point)) - (column (current-column)) - (indentation (sp--current-indentation)) - (old-line (line-number-at-pos)) - (hsexp (sp-get-hybrid-sexp)) - (newline-inserted 0)) - (goto-char (sp-get hsexp :end)) - (if (and (sp--looking-at-p (concat "\\s-*" (sp--get-closing-regexp))) - (= old-line (line-number-at-pos))) - (progn - (setq old-point (point)) - (newline) - (setq newline-inserted (1+ (- (line-end-position) (point))))) - (when (/= old-line (line-number-at-pos)) - (sp-backward-sexp) - (setq old-point (+ old-point (skip-syntax-backward " "))) - (newline) - (setq newline-inserted (- (line-end-position) (point))))) - ;; @{ indenting madness - (goto-char old-point) - (sp-get hsexp (sp--indent-region :beg (+ :end newline-inserted))) - (sp--back-to-indentation column indentation) - ;; @} - (let ((comment-delim (or (cdr (--first (memq major-mode (car it)) sp-comment-string)) - comment-start))) - (when (and (/= 0 (current-column)) - (not (sp--looking-back-p "\\s-"))) - (insert " ")) - (insert comment-delim) - (when (/= newline-inserted 0) - (save-excursion - (forward-line 1) - (indent-according-to-mode)))))))) - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; show-smartparens-mode - -(defgroup show-smartparens nil - "Show smartparens minor mode." - :group 'smartparens) - -(defcustom sp-show-pair-delay 0.125 - "Time in seconds to delay before showing a matching pair." - :type '(number :tag "seconds") - :group 'show-smartparens) - -(defcustom sp-show-enclosing-pair-commands '( - sp-show-enclosing-pair - sp-forward-slurp-sexp - sp-backward-slurp-sexp - sp-forward-barf-sexp - sp-backward-barf-sexp - ) - "List of commands after which the enclosing pair is highlighted. - -After the next command the pair will automatically disappear." - :type '(repeat symbol) - :group 'show-smartparens) - -(defcustom sp-show-pair-from-inside nil - "If non-nil, highlight the enclosing pair if immediately after -the opening delimiter or before the closing delimiter." - :type 'boolean - :group 'show-smartparens) - -(defface sp-show-pair-match-face - '((t (:inherit show-paren-match))) - "`show-smartparens-mode' face used for a matching pair." - :group 'show-smartparens) - -(defface sp-show-pair-mismatch-face - '((t (:inherit show-paren-mismatch))) - "`show-smartparens-mode' face used for a mismatching pair." - :group 'show-smartparens) - -(defface sp-show-pair-enclosing - '((t (:inherit highlight))) - "The face used to highlight pair overlays." - :group 'show-smartparens) - -(defvar sp-show-pair-idle-timer nil) - -(defvar sp-show-pair-overlays nil) - -(defvar sp-show-pair-previous-match-positions nil) - -(defvar sp-show-pair-previous-point nil) - -(defvar sp-show-pair-enc-overlays nil) - -;;;###autoload -(define-minor-mode show-smartparens-mode - "Toggle visualization of matching pairs. When enabled, any -matching pair is highlighted after `sp-show-pair-delay' seconds -of Emacs idle time if the point is immediately in front or after -a pair. This mode works similarly to `show-paren-mode', but -support custom pairs." - :init-value nil - :group 'show-smartparens - (if show-smartparens-mode - (unless sp-show-pair-idle-timer - (setq sp-show-pair-idle-timer - (run-with-idle-timer sp-show-pair-delay t - 'sp-show--pair-function))) - (when sp-show-pair-overlays - (sp-show--pair-delete-overlays)))) - -;;;###autoload -(define-globalized-minor-mode show-smartparens-global-mode - show-smartparens-mode - turn-on-show-smartparens-mode) - -;;;###autoload -(defun turn-on-show-smartparens-mode () - "Turn on `show-smartparens-mode'." - (interactive) - (unless (or (member major-mode sp-ignore-modes-list) - (and (not (derived-mode-p 'comint-mode)) - (eq (get major-mode 'mode-class) 'special))) - (show-smartparens-mode t))) - -;;;###autoload -(defun turn-off-show-smartparens-mode () - "Turn off `show-smartparens-mode'." - (interactive) - (show-smartparens-mode -1)) - -(defun sp-show-enclosing-pair () - "Highlight the enclosing pair around point." - (interactive)) - -(defun sp-highlight-current-sexp (arg) - "Highlight the expression returned by the next command, preserving point position." - (interactive "P") - (let* ((cmd (read-key-sequence "" t)) - (com (key-binding cmd))) - (if (commandp com) - (save-excursion - (let ((ok (call-interactively com))) - (sp-show--pair-enc-function ok))) - (execute-kbd-macro cmd)))) - -(defun sp-show--pair-function () - "Display the show pair overlays and print the line of the -matching paren in the echo area if not visible on screen." - (when show-smartparens-mode - (sp--with-case-sensitive - (save-match-data - (cl-labels ((scan-and-place-overlays - (match &optional back) - ;; we can use `sp-get-thing' here because we *are* at some - ;; pair opening, and so only the tag or the sexp can trigger. - (-if-let (ok (sp-get-thing back)) - (sp-get ok - (when (or (and back - (or (= :end (point)) - (= :beg-in (point)))) - (and (not back) - (or (= :beg (point)) - (= :end-in (point))))) - (sp-show--pair-create-overlays :beg :end :op-l :cl-l) - (when (and sp-echo-match-when-invisible - (not (or (active-minibuffer-window) cursor-in-echo-area))) - (sp-show--pair-echo-match :beg :end :op-l :cl-l)))) - (if back - (sp-show--pair-create-mismatch-overlay (- (point) (length match)) - (length match)) - (sp-show--pair-create-mismatch-overlay (point) (length match))) - (setq sp-show-pair-previous-match-positions nil) - (setq sp-show-pair-previous-point nil)))) - (let* ((pair-list (sp--get-allowed-pair-list)) - (opening (sp--get-opening-regexp pair-list)) - (closing (sp--get-closing-regexp pair-list)) - (allowed (and sp-show-pair-from-inside (sp--get-allowed-regexp)))) - (cond - ;; if we are in a situation "()|", we should highlight the - ;; regular pair and not the string pair "from inside" - ((and (not (sp--evil-normal-state-p)) - (not (sp--evil-motion-state-p)) - (not (sp--evil-visual-state-p)) - (sp--looking-back (if sp-show-pair-from-inside allowed closing))) - (scan-and-place-overlays (match-string 0) :back)) - ((or (and (or (sp--evil-normal-state-p) - (sp--evil-motion-state-p) - (sp--evil-visual-state-p)) - (sp--looking-at (sp--get-allowed-regexp))) - (sp--looking-at (if sp-show-pair-from-inside allowed opening)) - (looking-at (sp--get-stringlike-regexp)) - (and (memq major-mode sp-navigate-consider-sgml-tags) - (looking-at "<"))) - (scan-and-place-overlays (match-string 0))) - ((or (sp--looking-back (if sp-show-pair-from-inside allowed closing)) - (sp--looking-back (sp--get-stringlike-regexp)) - (and (memq major-mode sp-navigate-consider-sgml-tags) - (sp--looking-back ">"))) - (scan-and-place-overlays (match-string 0) :back)) - (sp-show-pair-overlays - (sp-show--pair-delete-overlays) - (setq sp-show-pair-previous-match-positions nil) - (setq sp-show-pair-previous-point nil))))))))) - -(defun sp-show--pair-enc-function (&optional thing) - "Display the show pair overlays for enclosing expression." - (when show-smartparens-mode - (-when-let (enc (or thing (sp-get-enclosing-sexp))) - (sp-get enc (sp-show--pair-create-enc-overlays :beg :end :op-l :cl-l))))) - -(defun sp-show--pair-create-overlays (start end olen clen) - "Create the show pair overlays." - (when sp-show-pair-overlays - (sp-show--pair-delete-overlays)) - (let* ((oleft (make-overlay start (+ start olen) nil t nil)) - (oright (make-overlay (- end clen) end nil t nil))) - (setq sp-show-pair-overlays (cons oleft oright)) - (overlay-put oleft 'face 'sp-show-pair-match-face) - (overlay-put oright 'face 'sp-show-pair-match-face) - (overlay-put oleft 'priority 1000) - (overlay-put oright 'priority 1000) - (overlay-put oleft 'type 'show-pair))) - -(defun sp-show--pair-echo-match (start end olen clen) - "Print the line of the matching paren in the echo area if not -visible on screen. Needs to be called after the show-pair overlay -has been created." - (let ((match-positions (list start end olen clen))) - (when (not (and (equal sp-show-pair-previous-match-positions match-positions) - (equal sp-show-pair-previous-point (point)))) - (setq sp-show-pair-previous-match-positions match-positions) - (setq sp-show-pair-previous-point (point)) - (let* ((visible-start (pos-visible-in-window-p start)) - (visible-end (pos-visible-in-window-p end)) - (where (cond - ((not visible-start) start) - ((not visible-end) end) - nil))) - (when where - (save-excursion - (let* ((from (progn (goto-char where) (beginning-of-line) (point))) - (to (progn (end-of-line) (point))) - (line (buffer-substring from to)) - (message-log-max)) ;; don't log in messages - ;; Add smartparens overlay for opening parens - (let* ((i1 (- start from)) - (i2 (+ i1 olen))) - (when (and (< i1 (length line)) (>= i2 0)) - (add-face-text-property (max i1 0) (min i2 (length line)) - 'sp-show-pair-match-face nil line))) - ;; Add smartparens overlay for closing parens - (let* ((i1 (- end from 1)) - (i2 (+ i1 clen))) - (when (and (< i1 (length line)) (>= i2 0)) - (add-face-text-property (max i1 0) (min i2 (length line)) - 'sp-show-pair-match-face nil line))) - ;; echo line of match - (message "Matches: %s" (string-trim line))))))))) - -(defun sp-show--pair-create-enc-overlays (start end olen clen) - "Create the show pair enclosing overlays" - (when sp-show-pair-enc-overlays - (sp-show--pair-delete-enc-overlays)) - (let* ((oleft (make-overlay start (+ start olen) nil t nil)) - (oright (make-overlay (- end clen) end nil t nil))) - (setq sp-show-pair-enc-overlays (cons oleft oright)) - (overlay-put oleft 'face 'sp-show-pair-enclosing) - (overlay-put oright 'face 'sp-show-pair-enclosing) - (overlay-put oleft 'priority 1000) - (overlay-put oright 'priority 1000) - (overlay-put oleft 'type 'show-pair-enc))) - -(defun sp-show--pair-create-mismatch-overlay (start len) - "Create the mismatch pair overlay." - (when sp-show-pair-overlays - (sp-show--pair-delete-overlays)) - (let ((o (make-overlay start (+ start len) nil t nil))) - (setq sp-show-pair-overlays (cons o nil)) - (overlay-put o 'face 'sp-show-pair-mismatch-face) - (overlay-put o 'priority 1000) - (overlay-put o 'type 'show-pair))) - -(defun sp-show--pair-delete-overlays () - "Remove both show pair overlays." - (when sp-show-pair-overlays - (when (car sp-show-pair-overlays) - (delete-overlay (car sp-show-pair-overlays))) - (when (cdr sp-show-pair-overlays) - (delete-overlay (cdr sp-show-pair-overlays))) - (setq sp-show-pair-overlays nil))) - -(defun sp-show--pair-delete-enc-overlays () - "Remove both show pair enclosing overlays." - (when sp-show-pair-enc-overlays - (when (car sp-show-pair-enc-overlays) - (delete-overlay (car sp-show-pair-enc-overlays))) - (when (cdr sp-show-pair-enc-overlays) - (delete-overlay (cdr sp-show-pair-enc-overlays))) - (setq sp-show-pair-enc-overlays nil))) - - -;; global initialization -(defadvice delete-backward-char (before sp-delete-pair-advice activate) - (save-match-data - (sp-delete-pair (ad-get-arg 0)))) -(defadvice haskell-indentation-delete-backward-char (before sp-delete-pair-advice activate) - (save-match-data - (sp-delete-pair (ad-get-arg 0)))) -(add-hook 'post-command-hook 'sp--post-command-hook-handler) -(sp--set-base-key-bindings) -(sp--update-override-key-bindings) - -(defadvice company--insert-candidate (after sp-company--insert-candidate activate) - "If `smartparens-mode' is active, we check if the completed string -has a pair definition. If so, we insert the closing pair." - (when smartparens-mode - (sp-insert-pair)) - ad-return-value) - -(defadvice hippie-expand (after sp-auto-complete-advice activate) - (when smartparens-mode - (sp-insert-pair))) - -(defvar sp--mc/cursor-specific-vars - '( - sp-wrap-point - sp-wrap-mark - sp-last-wrapped-region - sp-pair-overlay-list - sp-wrap-overlays - sp-wrap-tag-overlays - sp-last-operation - sp-previous-point - ) - "A list of vars that need to be tracked on a per-cursor basis.") - -(defvar mc/cursor-specific-vars) -(eval-after-load 'multiple-cursors - '(dolist (it sp--mc/cursor-specific-vars) - (add-to-list 'mc/cursor-specific-vars it))) - -(provide 'smartparens) - -;; Local Variables: -;; coding: utf-8 -;; eval: (font-lock-add-keywords nil `((,(concat "(" (regexp-opt '("sp-do-move-op" "sp-do-move-cl" "sp-do-put-op" "sp-do-put-cl" "sp-do-del-op" "sp-do-del-cl") t) "\\_>") 1 'font-lock-variable-name-face))) -;; End: - -;;; smartparens.el ends here diff --git a/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.elc b/emacs/.emacs.d/elpa/smartparens-20171201.242/smartparens.elc deleted file mode 100644 index 5fd1098a486e9500c1218c276634d626ab2d6fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328692 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 -;; Maintainer: myuhe -;; Copyright (C) :2011,2012 myuhe all rights reserved. -;; Created: :2011-12-19 -;; Version: 1.0.0 -;; Package-Version: 20150508.1930 -;; Keywords: convenience -;; URL: https://github.com/myuhe/smartrep.el - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. - -;; This file is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 0:110-1301, USA. - -;;; Commentary: - -;; Installation: -;; Put the smartrep.el to your load-path. -;; And add to .emacs: (require 'smartrep) - -;;; Changelog: - -;; 2012-01-06 Remove unnecessary cord. -;; 2012-01-06 read-key is replaced read-event for compatibility. thanks @tomy_kaira !! -;; 2012-01-11 Support function calling form. (buzztaiki) -;; Call interactively when command. (buzztaiki) -;; Support unquoted function. (buzztaiki) -;; 2012-01-11 new command `smartrep-restore-original-position' `smartrep-quit' (rubikitch) -;; add mode line notification (rubikitch) -;; 2012-01-12 add mode-line-color notification -;; - -;;; Code: -(eval-when-compile - (require 'cl)) - -(defgroup smartrep nil - "Support sequential operation which omitted prefix keys" - :group 'keyboard) - -(defcustom smartrep-mode-line-string-activated "========== SMARTREP ==========" - "Lighter when smartrep-mode is activated" - :type 'string - :group 'smartrep) - -(defcustom smartrep-mode-line-active-bg (face-background 'highlight) - "Background color when smartrep-mode is activated" - :type 'string - :group 'smartrep) - -(defvar smartrep-key-string nil) - -(defvar smartrep-read-event - (if (fboundp 'read-event) 'read-event 'read-key) - "Function to be used for reading keyboard events.") - -(defvar smartrep-mode-line-string nil - "Mode line indicator for smartrep.") - -(defvar smartrep-global-alist-hash (make-hash-table :test 'equal)) - -(defvar smartrep-original-position nil - "A cons holding the point and window-start when smartrep is invoked.") - -(let ((cell (or (memq 'mode-line-position mode-line-format) - (memq 'mode-line-buffer-identification mode-line-format))) - (newcdr 'smartrep-mode-line-string)) - (when cell - (unless (member newcdr mode-line-format) - (setcdr cell (cons newcdr (cdr cell)))))) - -(defun smartrep-define-key (keymap prefix alist) - (when (eq keymap global-map) - (puthash prefix alist smartrep-global-alist-hash)) - (setq alist - (if (eq keymap global-map) - alist - (append alist (gethash prefix smartrep-global-alist-hash)))) - (let ((oa (make-vector 13 nil))) - (mapc (lambda(x) - (let ((obj (intern (prin1-to-string - (smartrep-unquote (cdr x))) - oa))) - (fset obj (smartrep-map alist)) - (define-key keymap - (read-kbd-macro - (concat prefix " " (car x))) obj))) - alist))) -(put 'smartrep-define-key 'lisp-indent-function 2) - -(defun smartrep-map (alist) - (lexical-let ((lst alist)) - (lambda () (interactive) (smartrep-map-internal lst)))) - -(defun smartrep-restore-original-position () - (interactive) - (destructuring-bind (pt . wstart) smartrep-original-position - (goto-char pt) - (set-window-start (selected-window) wstart))) - -(defun smartrep-quit () - (interactive) - (setq smartrep-mode-line-string "") - (smartrep-restore-original-position) - (keyboard-quit)) - -(defun smartrep-map-internal (lst) - (interactive) - (setq smartrep-mode-line-string smartrep-mode-line-string-activated) - (let ((ml-original-bg (face-background 'mode-line))) - (when smartrep-mode-line-active-bg - (set-face-background 'mode-line smartrep-mode-line-active-bg) - (force-mode-line-update)) - (setq smartrep-original-position (cons (point) (window-start))) - (unwind-protect - (let ((repeat-repeat-char last-command-event)) - (smartrep-do-fun repeat-repeat-char lst) - (when repeat-repeat-char - (smartrep-read-event-loop lst))) - (setq smartrep-mode-line-string "") - (when smartrep-mode-line-active-bg - (set-face-background 'mode-line ml-original-bg) - (force-mode-line-update))))) - -(defun smartrep-read-event-loop (lst) - (lexical-let ((undo-inhibit-record-point t)) - (unwind-protect - (while - (lexical-let ((evt (funcall smartrep-read-event))) - ;; (eq (or (car-safe evt) evt) - ;; (or (car-safe repeat-repeat-char) - ;; repeat-repeat-char)) - (setq smartrep-key-string evt) - (smartrep-extract-char evt lst)) - (smartrep-do-fun smartrep-key-string lst))) - (setq unread-command-events (list last-input-event)))) - -(defun smartrep-extract-char (char alist) - (car (smartrep-filter char alist))) - -(defun smartrep-extract-fun (char alist) - (let* ((rawform (cdr (smartrep-filter char alist))) - (form (smartrep-unquote rawform))) - (cond - ((commandp form) - (setq this-command form) - (unwind-protect - (call-interactively form) - (setq last-command form))) - ((functionp form) (funcall form)) - ((and (listp form) (symbolp (car form))) (eval form)) - (t (error "Unsupported form %c %s" char rawform))))) - -(defun smartrep-do-fun (char alist) - (condition-case err - (progn - (run-hooks 'pre-command-hook) - (smartrep-extract-fun char alist) - (run-hooks 'post-command-hook)) - (error - (ding) - (message "%s" (cdr err))))) - - -(defun smartrep-unquote (form) - (if (and (listp form) (memq (car form) '(quote function))) - (eval form) - form)) - -(defun smartrep-filter (char alist) - (loop for (key . form) in alist - for rkm = (read-kbd-macro key) - for number = (if (vectorp rkm) - (aref rkm 0) - (string-to-char rkm)) - if (eq char number) - return (cons number form))) - -(provide 'smartrep) - -;;; smartrep.el ends here diff --git a/emacs/.emacs.d/elpa/smartrep-20150508.1930/smartrep.elc b/emacs/.emacs.d/elpa/smartrep-20150508.1930/smartrep.elc deleted file mode 100644 index 8915c933a81ec4d66f8ac86739974ac14e04ea3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4878 zcmbtYVQNKaq*5xowD zo6=GysjnikhDY|1sh?f=*_=cWkcu-u^#3O^Oh}LR^uyoheo9lULyJ_VS zH-nK+^!6h1C{^T&h$fN(B{nuGoJmQFB=BWI*&GusJKq-|{HZ@S;LrZ;?d=^-E;DJk z%9GS_?0z4IiNnHS;~3x=K5{IR9~|R2acmx&m}Fv-Sxzz^|FxQB;x%)K18;24>YsGz zqq|5m6&jv&1CdB$mZ(KcX(*B`kugPnK%EbZI95qUsrb5fz7 zWe9AX$f^IC&gEs=p=bGGxR@xBcywi}rAT}+0cFbFj1b-%fgedDXN`dv`%A$KcV4Xi z=)?QbZ@>Tc`WIT=deNcIJAXC@BVdq>HkTxDbF~u8$}VGUs(HCNG2dHHmBwU7hg0EV zAl!5I1ROhQU!qb>CHix_Rd@J?-rsdU6WStBnCq;Vz@y+v}bU`}AfJ!F42H zrkK%4DvzevB9X#FIx)aGrgDjhq(}eUUYDmD`Z4X|R@<@qcD)8BnHYghpc;O`i0OoV zjrCr|0(vd%IVP(|huv@Kh)!*@$Hv-2de5ZgupzHK-xV1QWn;^@?y~M`s5R5_l})oh zz|vbl%>p$Mfgu7v&5XH7=X4l~bE$_$rkV6ClhBw0@Kglay5mzCv5KTLSAj+@n@ft7 zA3=%`&W*a(F&;dqIZ?xjMlT&}fY_M*?=aUcf>YrJghP>0BrjYq zAy-0~tA{JAs#}xAbSe|W_c(>8946*h8KbS-8`B_<0q_ zSP;mMP&f+utY>(?pgKzenQOSp&l!J_85*(G_66FDNZYZ&%9P`>TTVCD0+4#mwc2CV zA%|y$CDp^qYkY`8!f)PynXqI1A+JB;NTGFU-{;^pb-R4O)?`rt2>OExwV%Uceb1q@ z@+psNO=dmrHNVHNeNtM)w(Ik|@zUE0HF1Wp8Mu+%X_0uw=uliVB zmt8^uGS};>^q|`0tv#=|t`NG$x%jHjt6rXasGDU&5R+V@j>sfIXVm#4O7l;_{A(nn zM=m`|(QXW`iDVJ~9T?jt>u)X@+(zh9$G8_`){>L9rW*ob_O&o$kT-|XsOksTV1t=- zsBP_0vWSeiQs*i6rX_s(PK8-XH0A+1=1MpDMbe)Op-fXT!#BD1^E$?s;KNZ48J8O! z{adyA85}XW^S5uY!&Y7Q9cT!ufE<))Yp^*ayYnKa^%i66cd_m<>%=|gsvi9Vopb-> zA=Csn9_}}uu>rr-8ps;c{E|;2oClT`qGp>}Z8}p;@}nBRWm-Ss70YC5qmOTY-D>UY zp8j=h--%w{L6@8FbO*CB@eMl%jnlh~cmw8~b-UKuKf*sGw6l5hTQz<742D)|jzfbe zIS(msRkYS-`3LCvs$UBI{3P6)XJ8xsC&J&Yo1hyL7b>1zJRKhxVQIz DnicOq diff --git a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-autoloads.el b/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-autoloads.el deleted file mode 100644 index da2996a..0000000 --- a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-autoloads.el +++ /dev/null @@ -1,32 +0,0 @@ -;;; swiper-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "swiper" "swiper.el" (23124 14377 85550 917000)) -;;; Generated autoloads from swiper.el - -(autoload 'swiper-avy "swiper" "\ -Jump to one of the current swiper candidates. - -\(fn)" t nil) - -(autoload 'swiper "swiper" "\ -`isearch' with an overview. -When non-nil, INITIAL-INPUT is the initial search pattern. - -\(fn &optional INITIAL-INPUT)" t nil) - -(autoload 'swiper-all "swiper" "\ -Run `swiper' for all open buffers. - -\(fn &optional INITIAL-INPUT)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; swiper-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-pkg.el b/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-pkg.el deleted file mode 100644 index 4768740..0000000 --- a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "swiper" "20180102.1035" "Isearch with an overview. Oh, man!" '((emacs "24.1") (ivy "0.9.0")) :commit "71476ff62b6c42f8a5cd7776f37ef8db0c1d8945" :url "https://github.com/abo-abo/swiper" :keywords '("matching")) diff --git a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.el b/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.el deleted file mode 100644 index 0bcc44f..0000000 --- a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.el +++ /dev/null @@ -1,988 +0,0 @@ -;;; swiper.el --- Isearch with an overview. Oh, man! -*- lexical-binding: t -*- - -;; Copyright (C) 2015-2017 Free Software Foundation, Inc. - -;; Author: Oleh Krehel -;; URL: https://github.com/abo-abo/swiper -;; Package-Version: 20180102.1035 -;; Version: 0.10.0 -;; Package-Requires: ((emacs "24.1") (ivy "0.9.0")) -;; Keywords: matching - -;; 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: -;; -;; This package gives an overview of the current regex search -;; candidates. The search regex can be split into groups with a -;; space. Each group is highlighted with a different face. -;; -;; It can double as a quick `regex-builder', although only single -;; lines will be matched. - -;;; Code: -(require 'ivy) - -(defgroup swiper nil - "`isearch' with an overview." - :group 'matching - :prefix "swiper-") - -(defface swiper-match-face-1 - '((t (:inherit isearch-lazy-highlight-face))) - "The background face for `swiper' matches.") - -(defface swiper-match-face-2 - '((t (:inherit isearch))) - "Face for `swiper' matches modulo 1.") - -(defface swiper-match-face-3 - '((t (:inherit match))) - "Face for `swiper' matches modulo 2.") - -(defface swiper-match-face-4 - '((t (:inherit isearch-fail))) - "Face for `swiper' matches modulo 3.") - -(defface swiper-line-face - '((t (:inherit highlight))) - "Face for current `swiper' line.") - -(defcustom swiper-faces '(swiper-match-face-1 - swiper-match-face-2 - swiper-match-face-3 - swiper-match-face-4) - "List of `swiper' faces for group matches." - :group 'ivy-faces - :type 'list) - -(defcustom swiper-min-highlight 2 - "Only highlight matches for regexps at least this long." - :type 'integer) - -(defcustom swiper-include-line-number-in-search nil - "Include line number in text of search candidates." - :type 'boolean - :group 'swiper) - -(defcustom swiper-goto-start-of-match nil - "When non-nil, go to the start of the match, not its end." - :type 'boolean - :group 'swiper) - -(defvar swiper-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "M-q") 'swiper-query-replace) - (define-key map (kbd "C-l") 'swiper-recenter-top-bottom) - (define-key map (kbd "C-'") 'swiper-avy) - (define-key map (kbd "C-7") 'swiper-mc) - (define-key map (kbd "C-c C-f") 'swiper-toggle-face-matching) - map) - "Keymap for swiper.") - -(defun swiper-query-replace () - "Start `query-replace' with string to replace from last search string." - (interactive) - (if (null (window-minibuffer-p)) - (user-error "Should only be called in the minibuffer through `swiper-map'") - (let* ((enable-recursive-minibuffers t) - (from (ivy--regex ivy-text)) - (to (minibuffer-with-setup-hook - (lambda () - (setq minibuffer-default - (if (string-match "\\`\\\\_<\\(.*\\)\\\\_>\\'" ivy-text) - (match-string 1 ivy-text) - ivy-text))) - (read-from-minibuffer (format "Query replace %s with: " from))))) - (swiper--cleanup) - (ivy-exit-with-action - (lambda (_) - (with-ivy-window - (move-beginning-of-line 1) - (let ((inhibit-read-only t)) - (perform-replace from to - t t nil)))))))) - -(defun swiper-all-query-replace () - "Start `query-replace' with string to replace from last search string." - (interactive) - (if (null (window-minibuffer-p)) - (user-error - "Should only be called in the minibuffer through `swiper-all-map'") - (let* ((enable-recursive-minibuffers t) - (from (ivy--regex ivy-text)) - (to (query-replace-read-to from "Query replace" t))) - (swiper--cleanup) - (ivy-exit-with-action - (lambda (_) - (let ((wnd-conf (current-window-configuration)) - (inhibit-message t)) - (unwind-protect - (dolist (cand ivy--old-cands) - (let ((buffer (get-text-property 0 'buffer cand))) - (switch-to-buffer buffer) - (goto-char (point-min)) - (perform-replace from to t t nil))) - (set-window-configuration wnd-conf)))))))) - -(defvar avy-background) -(defvar avy-all-windows) -(defvar avy-style) -(defvar avy-keys) -(declare-function avy--regex-candidates "ext:avy") -(declare-function avy--process "ext:avy") -(declare-function avy--overlay-post "ext:avy") -(declare-function avy-action-goto "ext:avy") -(declare-function avy-candidate-beg "ext:avy") -(declare-function avy--done "ext:avy") -(declare-function avy--make-backgrounds "ext:avy") -(declare-function avy-window-list "ext:avy") -(declare-function avy-read "ext:avy") -(declare-function avy-read-de-bruijn "ext:avy") -(declare-function avy-tree "ext:avy") -(declare-function avy-push-mark "ext:avy") -(declare-function avy--remove-leading-chars "ext:avy") - -;;;###autoload -(defun swiper-avy () - "Jump to one of the current swiper candidates." - (interactive) - (unless (require 'avy nil 'noerror) - (error "Package avy isn't installed")) - (unless (string= ivy-text "") - (let* ((avy-all-windows nil) - ;; We'll have overlapping overlays, so we sort all the - ;; overlays in the visible region by their start, and then - ;; throw out non-Swiper overlays or overlapping Swiper - ;; overlays. - (visible-overlays (cl-sort (with-ivy-window - (overlays-in (window-start) - (window-end))) - #'< :key #'overlay-start)) - (min-overlay-start 0) - (overlays-for-avy (cl-remove-if-not - (lambda (ov) - (when (and (>= (overlay-start ov) - min-overlay-start) - (memq (overlay-get ov 'face) - swiper-faces)) - (setq min-overlay-start (overlay-start ov)))) - visible-overlays)) - (candidates (append - (mapcar (lambda (ov) - (cons (overlay-start ov) - (overlay-get ov 'window))) - overlays-for-avy) - (save-excursion - (save-restriction - (narrow-to-region (window-start) (window-end)) - (goto-char (point-min)) - (forward-line) - (let ((cands)) - (while (< (point) (point-max)) - (push (cons (1+ (point)) - (selected-window)) - cands) - (forward-line)) - cands))))) - (candidate (unwind-protect - (prog2 - (avy--make-backgrounds - (append (avy-window-list) - (list (ivy-state-window ivy-last)))) - (if (eq avy-style 'de-bruijn) - (avy-read-de-bruijn - candidates avy-keys) - (avy-read (avy-tree candidates avy-keys) - #'avy--overlay-post - #'avy--remove-leading-chars)) - (avy-push-mark)) - (avy--done)))) - (if (window-minibuffer-p (cdr candidate)) - (progn - (ivy-set-index (- (line-number-at-pos (car candidate)) 2)) - (ivy--exhibit) - (ivy-done) - (ivy-call)) - (ivy-quit-and-run - (avy-action-goto (avy-candidate-beg candidate))))))) - -(declare-function mc/create-fake-cursor-at-point "ext:multiple-cursors-core") -(declare-function multiple-cursors-mode "ext:multiple-cursors-core") - -(defun swiper-mc () - "Create a fake cursor for each `swiper' candidate." - (interactive) - (unless (require 'multiple-cursors nil t) - (error "Multiple-cursors isn't installed")) - (unless (window-minibuffer-p) - (error "Call me only from `swiper'")) - (let ((cands (nreverse ivy--old-cands))) - (unless (string= ivy-text "") - (ivy-exit-with-action - (lambda (_) - (let (cand) - (while (setq cand (pop cands)) - (swiper--action cand) - (when cands - (mc/create-fake-cursor-at-point)))) - (multiple-cursors-mode 1)))))) - -(defun swiper-recenter-top-bottom (&optional arg) - "Call (`recenter-top-bottom' ARG)." - (interactive "P") - (with-ivy-window - (recenter-top-bottom arg))) - -(defvar swiper-font-lock-exclude - '(bbdb-mode - bookmark-bmenu-mode - package-menu-mode - gnus-summary-mode - gnus-article-mode - gnus-group-mode - emms-playlist-mode - emms-stream-mode - erc-mode - forth-mode - forth-block-mode - nix-mode - org-agenda-mode - dired-mode - jabber-chat-mode - elfeed-search-mode - elfeed-show-mode - fundamental-mode - Man-mode - woman-mode - mu4e-view-mode - mu4e-headers-mode - notmuch-tree-mode - notmuch-search-mode - help-mode - debbugs-gnu-mode - occur-mode - occur-edit-mode - bongo-mode - bongo-library-mode - magit-popup-mode - adoc-mode - bongo-playlist-mode - eww-mode - treemacs-mode - twittering-mode - vc-dir-mode - rcirc-mode - circe-channel-mode - circe-server-mode - circe-query-mode - sauron-mode - w3m-mode) - "List of major-modes that are incompatible with `font-lock-ensure'.") - -(defun swiper-font-lock-ensure-p () - "Return non-nil if we should `font-lock-ensure'." - (or (derived-mode-p 'magit-mode) - (bound-and-true-p magit-blame-mode) - (memq major-mode swiper-font-lock-exclude))) - -(defun swiper-font-lock-ensure () - "Ensure the entired buffer is highlighted." - (unless (swiper-font-lock-ensure-p) - (unless (or (> (buffer-size) 100000) (null font-lock-mode)) - (if (fboundp 'font-lock-ensure) - (font-lock-ensure) - (with-no-warnings (font-lock-fontify-buffer)))))) - -(defvar swiper--format-spec "" - "Store the current candidates format spec.") - -(defvar swiper--width nil - "Store the number of digits needed for the longest line nubmer.") - -(defvar swiper-use-visual-line nil - "When non-nil, use `line-move' instead of `forward-line'.") - -(declare-function outline-show-all "outline") - -(defun swiper--candidates (&optional numbers-width) - "Return a list of this buffer lines. - -NUMBERS-WIDTH, when specified, is used for width spec of line -numbers; replaces calculating the width from buffer line count." - (if (and visual-line-mode - ;; super-slow otherwise - (< (buffer-size) 20000)) - (progn - (when (eq major-mode 'org-mode) - (require 'outline) - (if (fboundp 'outline-show-all) - (outline-show-all) - (with-no-warnings - (show-all)))) - (setq swiper-use-visual-line t)) - (setq swiper-use-visual-line nil)) - (let ((n-lines (count-lines (point-min) (point-max)))) - (unless (zerop n-lines) - (setq swiper--width (or numbers-width - (1+ (floor (log n-lines 10))))) - (setq swiper--format-spec - (format "%%-%dd " swiper--width)) - (let ((line-number 0) - (advancer (if swiper-use-visual-line - (lambda (arg) (line-move arg t)) - #'forward-line)) - candidates) - (save-excursion - (goto-char (point-min)) - (swiper-font-lock-ensure) - (while (< (point) (point-max)) - (let ((str (concat - " " - (replace-regexp-in-string - "\t" " " - (if swiper-use-visual-line - (buffer-substring - (save-excursion - (beginning-of-visual-line) - (point)) - (save-excursion - (end-of-visual-line) - (point))) - (buffer-substring - (point) - (line-end-position))))))) - (setq str (ivy-cleanup-string str)) - (let ((line-number-str - (format swiper--format-spec (cl-incf line-number)))) - (if swiper-include-line-number-in-search - (setq str (concat line-number-str str)) - (put-text-property - 0 1 'display line-number-str str)) - (put-text-property - 0 1 'swiper-line-number line-number-str str)) - (push str candidates)) - (funcall advancer 1)) - (nreverse candidates)))))) - -(defvar swiper--opoint 1 - "The point when `swiper' starts.") - -;;;###autoload -(defun swiper (&optional initial-input) - "`isearch' with an overview. -When non-nil, INITIAL-INPUT is the initial search pattern." - (interactive) - (swiper--ivy (swiper--candidates) initial-input)) - -(declare-function string-trim-right "subr-x") -(defvar swiper--current-window-start nil) - -(defun swiper-occur (&optional revert) - "Generate a custom occur buffer for `swiper'. -When REVERT is non-nil, regenerate the current *ivy-occur* buffer." - (require 'subr-x) - (let* ((buffer (ivy-state-buffer ivy-last)) - (fname (propertize - (with-ivy-window - (if (buffer-file-name buffer) - (file-name-nondirectory - (buffer-file-name buffer)) - (buffer-name buffer))) - 'face - 'compilation-info)) - (cands (mapcar - (lambda (s) - (format "%s:%s:%s" - fname - (propertize - (string-trim-right - (get-text-property 0 'swiper-line-number s)) - 'face 'compilation-line-number) - (substring s 1))) - (if (null revert) - ivy--old-cands - (setq ivy--old-re nil) - (let ((ivy--regex-function 'swiper--re-builder)) - (ivy--filter - (progn (string-match "\"\\(.*\\)\"" (buffer-name)) - (match-string 1 (buffer-name))) - (with-current-buffer buffer - (swiper--candidates)))))))) - (unless (eq major-mode 'ivy-occur-grep-mode) - (ivy-occur-grep-mode) - (font-lock-mode -1)) - (setq swiper--current-window-start nil) - (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n" - default-directory)) - (insert (format "%d candidates:\n" (length cands))) - (ivy--occur-insert-lines - (mapcar - (lambda (cand) (concat "./" cand)) - cands)) - (goto-char (point-min)) - (forward-line 4))) - -(ivy-set-occur 'swiper 'swiper-occur) - -(declare-function evil-set-jump "ext:evil-jumps") - -(defvar swiper--current-line nil) -(defvar swiper--current-match-start nil) -(defvar swiper--point-min nil) -(defvar swiper--point-max nil) -(defvar swiper--reveal-mode nil) - -(defun swiper--init () - "Perform initialization common to both completion methods." - (setq swiper--current-line nil) - (setq swiper--current-match-start nil) - (setq swiper--current-window-start nil) - (setq swiper--opoint (point)) - (setq swiper--point-min (point-min)) - (setq swiper--point-max (point-max)) - (when (setq swiper--reveal-mode - (bound-and-true-p reveal-mode)) - (reveal-mode -1)) - (when (bound-and-true-p evil-mode) - (evil-set-jump))) - -(declare-function char-fold-to-regexp "char-fold") - -(defun swiper--re-builder (str) - "Transform STR into a swiper regex. -This is the regex used in the minibuffer where candidates have -line numbers. For the buffer, use `ivy--regex' instead." - (let* ((re-builder - (or (cdr (assoc 'swiper ivy-re-builders-alist)) - (cdr (assoc t ivy-re-builders-alist)))) - (re (cond - ((equal str "") - "") - ((equal str "^") - (setq ivy--subexps 0) - ".") - ((string-match "^\\^" str) - (let ((re (funcall re-builder (substring str 1)))) - (if (zerop ivy--subexps) - (prog1 (format "^ ?\\(%s\\)" re) - (setq ivy--subexps 1)) - (format "^ %s" re)))) - ((eq (bound-and-true-p search-default-mode) 'char-fold-to-regexp) - (mapconcat #'char-fold-to-regexp (ivy--split str) ".*")) - (t - (funcall re-builder str))))) - re)) - -(defvar swiper-history nil - "History for `swiper'.") - -(defvar swiper-invocation-face nil - "The face at the point of invocation of `swiper'.") - -(defcustom swiper-stay-on-quit nil - "When non-nil don't go back to search start on abort." - :type 'boolean) - -(defun swiper--ivy (candidates &optional initial-input) - "Select one of CANDIDATES and move there. -When non-nil, INITIAL-INPUT is the initial search pattern." - (swiper--init) - (setq swiper-invocation-face - (plist-get (text-properties-at (point)) 'face)) - (let ((preselect - (if swiper-use-visual-line - (count-screen-lines - (point-min) - (save-excursion (beginning-of-visual-line) (point))) - (1- (line-number-at-pos)))) - (minibuffer-allow-text-properties t) - res) - (unwind-protect - (and - (setq res - (ivy-read - "Swiper: " - candidates - :initial-input initial-input - :keymap swiper-map - :preselect preselect - :require-match t - :update-fn #'swiper--update-input-ivy - :unwind #'swiper--cleanup - :action #'swiper--action - :re-builder #'swiper--re-builder - :history 'swiper-history - :caller 'swiper)) - (point)) - (unless (or res swiper-stay-on-quit) - (goto-char swiper--opoint)) - (when (and (null res) (> (length ivy-text) 0)) - (cl-pushnew ivy-text swiper-history)) - (when swiper--reveal-mode - (reveal-mode 1))))) - -(defun swiper-toggle-face-matching () - "Toggle matching only the candidates with `swiper-invocation-face'." - (interactive) - (setf (ivy-state-matcher ivy-last) - (if (ivy-state-matcher ivy-last) - nil - #'swiper--face-matcher)) - (setq ivy--old-re nil)) - -(defun swiper--face-matcher (regexp candidates) - "Return REGEXP matching CANDIDATES. -Matched candidates should have `swiper-invocation-face'." - (cl-remove-if-not - (lambda (x) - (and - (string-match regexp x) - (let ((s (match-string 0 x)) - (i 0)) - (while (and (< i (length s)) - (text-property-any - i (1+ i) - 'face swiper-invocation-face - s)) - (cl-incf i)) - (eq i (length s))))) - candidates)) - -(defun swiper--ensure-visible () - "Remove overlays hiding point." - (let ((overlays (overlays-at (1- (point)))) - ov expose) - (while (setq ov (pop overlays)) - (if (and (invisible-p (overlay-get ov 'invisible)) - (setq expose (overlay-get ov 'isearch-open-invisible))) - (funcall expose ov))))) - -(defvar swiper--overlays nil - "Store overlays.") - -(defun swiper--cleanup () - "Clean up the overlays." - (while swiper--overlays - (delete-overlay (pop swiper--overlays))) - (save-excursion - (goto-char (point-min)) - (isearch-clean-overlays))) - -(defun swiper--update-input-ivy () - "Called when `ivy' input is updated." - (with-ivy-window - (swiper--cleanup) - (when (> (length (ivy-state-current ivy-last)) 0) - (let* ((re (funcall ivy--regex-function ivy-text)) - (re (if (stringp re) re (caar re))) - (re (replace-regexp-in-string - " " "\t" - re)) - (str (get-text-property 0 'swiper-line-number (ivy-state-current ivy-last))) - (num (if (string-match "^[0-9]+" str) - (string-to-number (match-string 0 str)) - 0))) - (unless (eq this-command 'ivy-yank-word) - (when (cl-plusp num) - (unless (if swiper--current-line - (eq swiper--current-line num) - (eq (line-number-at-pos) num)) - (goto-char swiper--point-min) - (if swiper-use-visual-line - (line-move (1- num)) - (forward-line (1- num)))) - (if (and (equal ivy-text "") - (>= swiper--opoint (line-beginning-position)) - (<= swiper--opoint (line-end-position))) - (goto-char swiper--opoint) - (if (eq swiper--current-line num) - (when swiper--current-match-start - (goto-char swiper--current-match-start)) - (setq swiper--current-line num)) - (when (re-search-forward re (line-end-position) t) - (setq swiper--current-match-start (match-beginning 0)))) - (isearch-range-invisible (line-beginning-position) - (line-end-position)) - (unless (and (>= (point) (window-start)) - (<= (point) (window-end (ivy-state-window ivy-last) t))) - (recenter)) - (setq swiper--current-window-start (window-start)))) - (swiper--add-overlays - re - (max (window-start) swiper--point-min) - (min (window-end (selected-window) t) swiper--point-max)))))) - -(defun swiper--add-overlays (re &optional beg end wnd) - "Add overlays for RE regexp in visible part of the current buffer. -BEG and END, when specified, are the point bounds. -WND, when specified is the window." - (setq wnd (or wnd (ivy-state-window ivy-last))) - (let ((ov (if visual-line-mode - (make-overlay - (save-excursion - (beginning-of-visual-line) - (point)) - (save-excursion - (end-of-visual-line) - (point))) - (make-overlay - (line-beginning-position) - (1+ (line-end-position)))))) - (overlay-put ov 'face 'swiper-line-face) - (overlay-put ov 'window wnd) - (push ov swiper--overlays) - (let* ((wh (window-height)) - (beg (or beg (save-excursion - (forward-line (- wh)) - (point)))) - (end (or end (save-excursion - (forward-line wh) - (point)))) - (case-fold-search (and ivy-case-fold-search - (string= re (downcase re))))) - (when (>= (length re) swiper-min-highlight) - (save-excursion - (goto-char beg) - ;; RE can become an invalid regexp - (while (and (ignore-errors (re-search-forward re end t)) - (> (- (match-end 0) (match-beginning 0)) 0)) - (let ((mb (match-beginning 0)) - (me (match-end 0))) - (unless (> (- me mb) 2017) - (swiper--add-overlay mb me - (if (zerop ivy--subexps) - (cadr swiper-faces) - (car swiper-faces)) - wnd 0))) - (let ((i 1) - (j 0)) - (while (<= (cl-incf j) ivy--subexps) - (let ((bm (match-beginning j)) - (em (match-end j))) - (when (and (integerp em) - (integerp bm)) - (while (and (< j ivy--subexps) - (integerp (match-beginning (+ j 1))) - (= em (match-beginning (+ j 1)))) - (setq em (match-end (cl-incf j)))) - (swiper--add-overlay - bm em - (nth (1+ (mod (+ i 2) (1- (length swiper-faces)))) - swiper-faces) - wnd i) - (cl-incf i))))))))))) - -(defun swiper--add-overlay (beg end face wnd priority) - "Add overlay bound by BEG and END to `swiper--overlays'. -FACE, WND and PRIORITY are properties corresponding to -the face, window and priority of the overlay." - (let ((overlay (make-overlay beg end))) - (push overlay swiper--overlays) - (overlay-put overlay 'face face) - (overlay-put overlay 'window wnd) - (overlay-put overlay 'priority priority))) - -(defcustom swiper-action-recenter nil - "When non-nil, recenter after exiting `swiper'." - :type 'boolean) -(defvar evil-search-module) -(defvar evil-ex-search-pattern) -(defvar evil-ex-search-persistent-highlight) -(defvar evil-ex-search-direction) -(declare-function evil-ex-search-activate-highlight "evil-ex") - - -(defun swiper--action (x) - "Goto line X." - (let ((ln (1- (read (or (get-text-property 0 'swiper-line-number x) - (and (string-match ":\\([0-9]+\\):.*\\'" x) - (match-string-no-properties 1 x)))))) - (re (ivy--regex ivy-text))) - (if (null x) - (user-error "No candidates") - (with-ivy-window - (unless (equal (current-buffer) - (ivy-state-buffer ivy-last)) - (switch-to-buffer (ivy-state-buffer ivy-last))) - (goto-char swiper--point-min) - (funcall (if swiper-use-visual-line - #'line-move - #'forward-line) - ln) - (when (and (re-search-forward re (line-end-position) t) swiper-goto-start-of-match) - (goto-char (match-beginning 0))) - (swiper--ensure-visible) - (cond (swiper-action-recenter - (recenter)) - (swiper--current-window-start - (set-window-start (selected-window) swiper--current-window-start))) - (when (/= (point) swiper--opoint) - (unless (and transient-mark-mode mark-active) - (when (eq ivy-exit 'done) - (push-mark swiper--opoint t) - (message "Mark saved where search started")))) - (add-to-history - 'regexp-search-ring - re - regexp-search-ring-max) - (when (and (bound-and-true-p evil-mode) - (eq evil-search-module 'evil-search)) - (add-to-history 'evil-ex-search-history re) - (setq evil-ex-search-pattern (list re t t)) - (setq evil-ex-search-direction 'forward) - (when evil-ex-search-persistent-highlight - (evil-ex-search-activate-highlight evil-ex-search-pattern))))))) - -(defun swiper-from-isearch () - "Invoke `swiper' from isearch." - (interactive) - (let ((query (if isearch-regexp - isearch-string - (regexp-quote isearch-string)))) - (isearch-exit) - (swiper query))) - -(defvar swiper-multi-buffers nil - "Store the current list of buffers.") - -(defvar swiper-multi-candidates nil - "Store the list of candidates for `swiper-multi'.") - -(defun swiper-multi-prompt () - "Return prompt for `swiper-multi'." - (format "Buffers (%s): " - (mapconcat #'identity swiper-multi-buffers ", "))) - -(defun swiper-multi () - "Select one or more buffers. -Run `swiper' for those buffers." - (interactive) - (setq swiper-multi-buffers nil) - (let ((ivy-use-virtual-buffers nil)) - (ivy-read (swiper-multi-prompt) - 'internal-complete-buffer - :action 'swiper-multi-action-1)) - (ivy-read "Swiper: " swiper-multi-candidates - :action 'swiper-multi-action-2 - :unwind #'swiper--cleanup - :caller 'swiper-multi)) - -(defun swiper-multi-action-1 (x) - "Add X to list of selected buffers `swiper-multi-buffers'. -If X is already part of the list, remove it instead. Quit the selection if -X is selected by either `ivy-done', `ivy-alt-done' or `ivy-immediate-done', -otherwise continue prompting for buffers." - (if (member x swiper-multi-buffers) - (progn - (setq swiper-multi-buffers (delete x swiper-multi-buffers))) - (unless (equal x "") - (setq swiper-multi-buffers (append swiper-multi-buffers (list x))))) - (let ((prompt (swiper-multi-prompt))) - (setf (ivy-state-prompt ivy-last) prompt) - (setq ivy--prompt (concat "%-4d " prompt))) - (cond ((memq this-command '(ivy-done - ivy-alt-done - ivy-immediate-done)) - (setq swiper-multi-candidates - (swiper--multi-candidates - (mapcar #'get-buffer swiper-multi-buffers)))) - ((eq this-command 'ivy-call) - (with-selected-window (active-minibuffer-window) - (delete-minibuffer-contents))))) - -(defun swiper-multi-action-2 (x) - "Move to candidate X from `swiper-multi'." - (when (> (length x) 0) - (let ((buffer-name (get-text-property 0 'buffer x))) - (when buffer-name - (with-ivy-window - (switch-to-buffer buffer-name) - (goto-char (point-min)) - (forward-line (1- (read (get-text-property 0 'swiper-line-number x)))) - (re-search-forward - (ivy--regex ivy-text) - (line-end-position) t) - (isearch-range-invisible (line-beginning-position) - (line-end-position)) - (unless (eq ivy-exit 'done) - (swiper--cleanup) - (swiper--add-overlays (ivy--regex ivy-text)))))))) - -(defun swiper-all-buffer-p (buffer) - "Return non-nil if BUFFER should be considered by `swiper-all'." - (let ((mode (buffer-local-value 'major-mode (get-buffer buffer)))) - (cond - ;; Ignore TAGS buffers, they tend to add duplicate results. - ((eq mode #'tags-table-mode) nil) - ;; Always consider dired buffers, even though they're not backed - ;; by a file. - ((eq mode #'dired-mode) t) - ;; Always consider stash buffers too, as they may have - ;; interesting content not present in any buffers. We don't #' - ;; quote to satisfy the byte-compiler. - ((eq mode 'magit-stash-mode) t) - ;; Email buffers have no file, but are useful to search - ((eq mode 'gnus-article-mode) t) - ;; Otherwise, only consider the file if it's backed by a file. - (t (buffer-file-name buffer))))) - -;;* `swiper-all' -(defun swiper-all-function (str) - "Search in all open buffers for STR." - (if (and (< (length str) 3)) - (list "" (format "%d chars more" (- 3 (length ivy-text)))) - (let* ((buffers (cl-remove-if-not #'swiper-all-buffer-p (buffer-list))) - (re-full (funcall ivy--regex-function str)) - re re-tail - cands match - (case-fold-search - (and ivy-case-fold-search - (string= str (downcase str))))) - (if (stringp re-full) - (setq re re-full) - (setq re (caar re-full)) - (setq re-tail (cdr re-full))) - (dolist (buffer buffers) - (with-current-buffer buffer - (save-excursion - (goto-char (point-min)) - (while (re-search-forward re nil t) - (setq match (if (memq major-mode '(org-mode dired-mode)) - (buffer-substring-no-properties - (line-beginning-position) - (line-end-position)) - (buffer-substring - (line-beginning-position) - (line-end-position)))) - (put-text-property - 0 1 'buffer - (buffer-name) - match) - (put-text-property 0 1 'point (point) match) - (when (or (null re-tail) (ivy-re-match re-tail match)) - (push match cands)))))) - (setq ivy--old-re re-full) - (if (null cands) - (list "") - (setq ivy--old-cands (nreverse cands)))))) - -(defvar swiper-window-width 80) - -(defun swiper--all-format-function (cands) - "Format CANDS for `swiper-all'. -See `ivy-format-function' for further information." - (let* ((ww swiper-window-width) - (col2 1) - (cands-with-buffer - (mapcar (lambda (s) - (let ((buffer (get-text-property 0 'buffer s))) - (setq col2 (max col2 (length buffer))) - (cons s buffer))) cands)) - (col1 (- ww 4 col2))) - (setq cands - (mapcar (lambda (x) - (if (cdr x) - (let ((s (ivy--truncate-string (car x) col1))) - (concat - s - (make-string - (max 0 - (- ww (string-width s) (length (cdr x)))) - ?\ ) - (cdr x))) - (car x))) - cands-with-buffer)) - (ivy--format-function-generic - (lambda (str) - (ivy--add-face str 'ivy-current-match)) - (lambda (str) - str) - cands - "\n"))) - -(defvar swiper-all-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "M-q") 'swiper-all-query-replace) - map) - "Keymap for `swiper-all'.") - -;;;###autoload -(defun swiper-all (&optional initial-input) - "Run `swiper' for all open buffers." - (interactive) - (let* ((swiper-window-width (- (frame-width) (if (display-graphic-p) 0 1))) - (ivy-format-function #'swiper--all-format-function)) - (ivy-read "swiper-all: " 'swiper-all-function - :action 'swiper-all-action - :unwind #'swiper--cleanup - :update-fn (lambda () - (swiper-all-action (ivy-state-current ivy-last))) - :dynamic-collection t - :keymap swiper-all-map - :initial-input initial-input - :caller 'swiper-multi))) - -(defun swiper-all-action (x) - "Move to candidate X from `swiper-all'." - (when (> (length x) 0) - (let ((buffer-name (get-text-property 0 'buffer x))) - (when buffer-name - (with-ivy-window - (switch-to-buffer buffer-name) - (goto-char (get-text-property 0 'point x)) - (isearch-range-invisible (line-beginning-position) - (line-end-position)) - (unless (eq ivy-exit 'done) - (swiper--cleanup) - (swiper--add-overlays (ivy--regex ivy-text)))))))) - -(defun swiper--multi-candidates (buffers) - "Extract candidates from BUFFERS." - (let* ((ww (window-width)) - (res nil) - (column-2 (apply #'max - (mapcar - (lambda (b) - (length (buffer-name b))) - buffers))) - (column-1 (- ww 4 column-2 1))) - (dolist (buf buffers) - (with-current-buffer buf - (setq res - (append - (mapcar - (lambda (s) - (setq s (concat (ivy--truncate-string s column-1) " ")) - (let ((len (length s))) - (put-text-property - (1- len) len 'display - (concat - (make-string - (max 0 - (- ww (string-width s) (length (buffer-name)) 3)) - ?\ ) - (buffer-name)) - s) - s)) - (swiper--candidates 4)) - res)) - nil)) - res)) - -(provide 'swiper) - -;;; swiper.el ends here diff --git a/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.elc b/emacs/.emacs.d/elpa/swiper-20180102.1035/swiper.elc deleted file mode 100644 index 65a7e9fd380fcd5032ecac7c039689a4b345d123..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28477 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 diff --git a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el b/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el deleted file mode 100644 index 51bf98c..0000000 --- a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el +++ /dev/null @@ -1,59 +0,0 @@ -;;; undo-tree-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "undo-tree" "undo-tree.el" (23124 14372 62193 -;;;;;; 457000)) -;;; Generated autoloads from undo-tree.el - -(autoload 'undo-tree-mode "undo-tree" "\ -Toggle undo-tree mode. -With no argument, this command toggles the mode. -A positive prefix argument turns the mode on. -A negative prefix argument turns it off. - -Undo-tree-mode replaces Emacs' standard undo feature with a more -powerful yet easier to use version, that treats the undo history -as what it is: a tree. - -The following keys are available in `undo-tree-mode': - - \\{undo-tree-map} - -Within the undo-tree visualizer, the following keys are available: - - \\{undo-tree-visualizer-mode-map} - -\(fn &optional ARG)" t nil) - -(defvar global-undo-tree-mode nil "\ -Non-nil if Global Undo-Tree mode is enabled. -See the `global-undo-tree-mode' command -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-undo-tree-mode'.") - -(custom-autoload 'global-undo-tree-mode "undo-tree" nil) - -(autoload 'global-undo-tree-mode "undo-tree" "\ -Toggle Undo-Tree mode in all buffers. -With prefix ARG, enable Global Undo-Tree mode if ARG is positive; -otherwise, disable it. If called from Lisp, enable the mode if -ARG is omitted or nil. - -Undo-Tree mode is enabled in all buffers where -`turn-on-undo-tree-mode' would do it. -See `undo-tree-mode' for more information on Undo-Tree mode. - -\(fn &optional ARG)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; undo-tree-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el b/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el deleted file mode 100644 index 378b712..0000000 --- a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "undo-tree" "20170706.246" "Treat undo history as a tree" 'nil :commit "e9a9102f515acd7523158f20e83f300600374989" :url "http://www.dr-qubit.org/emacs.php" :keywords '("convenience" "files" "undo" "redo" "history" "tree")) diff --git a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el b/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el deleted file mode 100644 index 063c2df..0000000 --- a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el +++ /dev/null @@ -1,4433 +0,0 @@ -;;; undo-tree.el --- Treat undo history as a tree -*- lexical-binding: t; -*- - -;; Copyright (C) 2009-2014 Free Software Foundation, Inc - -;; Author: Toby Cubitt -;; Maintainer: Toby Cubitt -;; Version: 0.6.6 -;; Package-Version: 20170706.246 -;; Keywords: convenience, files, undo, redo, history, tree -;; URL: http://www.dr-qubit.org/emacs.php -;; Repository: http://www.dr-qubit.org/git/undo-tree.git - -;; This file is part of 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 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 GNU Emacs. If not, see . - - -;;; Commentary: -;; -;; Emacs has a powerful undo system. Unlike the standard undo/redo system in -;; most software, it allows you to recover *any* past state of a buffer -;; (whereas the standard undo/redo system can lose past states as soon as you -;; redo). However, this power comes at a price: many people find Emacs' undo -;; system confusing and difficult to use, spawning a number of packages that -;; replace it with the less powerful but more intuitive undo/redo system. -;; -;; Both the loss of data with standard undo/redo, and the confusion of Emacs' -;; undo, stem from trying to treat undo history as a linear sequence of -;; changes. It's not. The `undo-tree-mode' provided by this package replaces -;; Emacs' undo system with a system that treats undo history as what it is: a -;; branching tree of changes. This simple idea allows the more intuitive -;; behaviour of the standard undo/redo system to be combined with the power of -;; never losing any history. An added side bonus is that undo history can in -;; some cases be stored more efficiently, allowing more changes to accumulate -;; before Emacs starts discarding history. -;; -;; The only downside to this more advanced yet simpler undo system is that it -;; was inspired by Vim. But, after all, most successful religions steal the -;; best ideas from their competitors! -;; -;; -;; Installation -;; ============ -;; -;; This package has only been tested with Emacs versions 24 and CVS. It should -;; work in Emacs versions 22 and 23 too, but will not work without -;; modifications in earlier versions of Emacs. -;; -;; To install `undo-tree-mode', make sure this file is saved in a directory in -;; your `load-path', and add the line: -;; -;; (require 'undo-tree) -;; -;; to your .emacs file. Byte-compiling undo-tree.el is recommended (e.g. using -;; "M-x byte-compile-file" from within emacs). -;; -;; If you want to replace the standard Emacs' undo system with the -;; `undo-tree-mode' system in all buffers, you can enable it globally by -;; adding: -;; -;; (global-undo-tree-mode) -;; -;; to your .emacs file. -;; -;; -;; Quick-Start -;; =========== -;; -;; If you're the kind of person who likes to jump in the car and drive, -;; without bothering to first figure out whether the button on the left dips -;; the headlights or operates the ejector seat (after all, you'll soon figure -;; it out when you push it), then here's the minimum you need to know: -;; -;; `undo-tree-mode' and `global-undo-tree-mode' -;; Enable undo-tree mode (either in the current buffer or globally). -;; -;; C-_ C-/ (`undo-tree-undo') -;; Undo changes. -;; -;; M-_ C-? (`undo-tree-redo') -;; Redo changes. -;; -;; `undo-tree-switch-branch' -;; Switch undo-tree branch. -;; (What does this mean? Better press the button and see!) -;; -;; C-x u (`undo-tree-visualize') -;; Visualize the undo tree. -;; (Better try pressing this button too!) -;; -;; C-x r u (`undo-tree-save-state-to-register') -;; Save current buffer state to register. -;; -;; C-x r U (`undo-tree-restore-state-from-register') -;; Restore buffer state from register. -;; -;; -;; -;; In the undo-tree visualizer: -;; -;; p C-p (`undo-tree-visualize-undo') -;; Undo changes. -;; -;; n C-n (`undo-tree-visualize-redo') -;; Redo changes. -;; -;; b C-b (`undo-tree-visualize-switch-branch-left') -;; Switch to previous undo-tree branch. -;; -;; f C-f (`undo-tree-visualize-switch-branch-right') -;; Switch to next undo-tree branch. -;; -;; C- M-{ (`undo-tree-visualize-undo-to-x') -;; Undo changes up to last branch point. -;; -;; C- M-} (`undo-tree-visualize-redo-to-x') -;; Redo changes down to next branch point. -;; -;; n C-n (`undo-tree-visualize-redo') -;; Redo changes. -;; -;; (`undo-tree-visualizer-mouse-set') -;; Set state to node at mouse click. -;; -;; t (`undo-tree-visualizer-toggle-timestamps') -;; Toggle display of time-stamps. -;; -;; d (`undo-tree-visualizer-toggle-diff') -;; Toggle diff display. -;; -;; s (`undo-tree-visualizer-selection-mode') -;; Toggle keyboard selection mode. -;; -;; q (`undo-tree-visualizer-quit') -;; Quit undo-tree-visualizer. -;; -;; C-q (`undo-tree-visualizer-abort') -;; Abort undo-tree-visualizer. -;; -;; , < -;; Scroll left. -;; -;; . > -;; Scroll right. -;; -;; M-v -;; Scroll up. -;; -;; C-v -;; Scroll down. -;; -;; -;; -;; In visualizer selection mode: -;; -;; p C-p (`undo-tree-visualizer-select-previous') -;; Select previous node. -;; -;; n C-n (`undo-tree-visualizer-select-next') -;; Select next node. -;; -;; b C-b (`undo-tree-visualizer-select-left') -;; Select left sibling node. -;; -;; f C-f (`undo-tree-visualizer-select-right') -;; Select right sibling node. -;; -;; M-v -;; Select node 10 above. -;; -;; C-v -;; Select node 10 below. -;; -;; (`undo-tree-visualizer-set') -;; Set state to selected node and exit selection mode. -;; -;; s (`undo-tree-visualizer-mode') -;; Exit selection mode. -;; -;; t (`undo-tree-visualizer-toggle-timestamps') -;; Toggle display of time-stamps. -;; -;; d (`undo-tree-visualizer-toggle-diff') -;; Toggle diff display. -;; -;; q (`undo-tree-visualizer-quit') -;; Quit undo-tree-visualizer. -;; -;; C-q (`undo-tree-visualizer-abort') -;; Abort undo-tree-visualizer. -;; -;; , < -;; Scroll left. -;; -;; . > -;; Scroll right. -;; -;; -;; -;; Persistent undo history: -;; -;; Note: Requires Emacs version 24.3 or higher. -;; -;; `undo-tree-auto-save-history' (variable) -;; automatically save and restore undo-tree history along with buffer -;; (disabled by default) -;; -;; `undo-tree-save-history' (command) -;; manually save undo history to file -;; -;; `undo-tree-load-history' (command) -;; manually load undo history from file -;; -;; -;; -;; Compressing undo history: -;; -;; Undo history files cannot grow beyond the maximum undo tree size, which -;; is limited by `undo-limit', `undo-strong-limit' and -;; `undo-outer-limit'. Nevertheless, undo history files can grow quite -;; large. If you want to automatically compress undo history, add the -;; following advice to your .emacs file (replacing ".gz" with the filename -;; extension of your favourite compression algorithm): -;; -;; (defadvice undo-tree-make-history-save-file-name -;; (after undo-tree activate) -;; (setq ad-return-value (concat ad-return-value ".gz"))) -;; -;; -;; -;; -;; Undo Systems -;; ============ -;; -;; To understand the different undo systems, it's easiest to consider an -;; example. Imagine you make a few edits in a buffer. As you edit, you -;; accumulate a history of changes, which we might visualize as a string of -;; past buffer states, growing downwards: -;; -;; o (initial buffer state) -;; | -;; | -;; o (first edit) -;; | -;; | -;; o (second edit) -;; | -;; | -;; x (current buffer state) -;; -;; -;; Now imagine that you undo the last two changes. We can visualize this as -;; rewinding the current state back two steps: -;; -;; o (initial buffer state) -;; | -;; | -;; x (current buffer state) -;; | -;; | -;; o -;; | -;; | -;; o -;; -;; -;; However, this isn't a good representation of what Emacs' undo system -;; does. Instead, it treats the undos as *new* changes to the buffer, and adds -;; them to the history: -;; -;; o (initial buffer state) -;; | -;; | -;; o (first edit) -;; | -;; | -;; o (second edit) -;; | -;; | -;; x (buffer state before undo) -;; | -;; | -;; o (first undo) -;; | -;; | -;; x (second undo) -;; -;; -;; Actually, since the buffer returns to a previous state after an undo, -;; perhaps a better way to visualize it is to imagine the string of changes -;; turning back on itself: -;; -;; (initial buffer state) o -;; | -;; | -;; (first edit) o x (second undo) -;; | | -;; | | -;; (second edit) o o (first undo) -;; | / -;; |/ -;; o (buffer state before undo) -;; -;; Treating undos as new changes might seem a strange thing to do. But the -;; advantage becomes clear as soon as we imagine what happens when you edit -;; the buffer again. Since you've undone a couple of changes, new edits will -;; branch off from the buffer state that you've rewound to. Conceptually, it -;; looks like this: -;; -;; o (initial buffer state) -;; | -;; | -;; o -;; |\ -;; | \ -;; o x (new edit) -;; | -;; | -;; o -;; -;; The standard undo/redo system only lets you go backwards and forwards -;; linearly. So as soon as you make that new edit, it discards the old -;; branch. Emacs' undo just keeps adding changes to the end of the string. So -;; the undo history in the two systems now looks like this: -;; -;; Undo/Redo: Emacs' undo -;; -;; o o -;; | | -;; | | -;; o o o -;; .\ | |\ -;; . \ | | \ -;; . x (new edit) o o | -;; (discarded . | / | -;; branch) . |/ | -;; . o | -;; | -;; | -;; x (new edit) -;; -;; Now, what if you change your mind about those undos, and decide you did -;; like those other changes you'd made after all? With the standard undo/redo -;; system, you're lost. There's no way to recover them, because that branch -;; was discarded when you made the new edit. -;; -;; However, in Emacs' undo system, those old buffer states are still there in -;; the undo history. You just have to rewind back through the new edit, and -;; back through the changes made by the undos, until you reach them. Of -;; course, since Emacs treats undos (even undos of undos!) as new changes, -;; you're really weaving backwards and forwards through the history, all the -;; time adding new changes to the end of the string as you go: -;; -;; o -;; | -;; | -;; o o o (undo new edit) -;; | |\ |\ -;; | | \ | \ -;; o o | | o (undo the undo) -;; | / | | | -;; |/ | | | -;; (trying to get o | | x (undo the undo) -;; to this state) | / -;; |/ -;; o -;; -;; So far, this is still reasonably intuitive to use. It doesn't behave so -;; differently to standard undo/redo, except that by going back far enough you -;; can access changes that would be lost in standard undo/redo. -;; -;; However, imagine that after undoing as just described, you decide you -;; actually want to rewind right back to the initial state. If you're lucky, -;; and haven't invoked any command since the last undo, you can just keep on -;; undoing until you get back to the start: -;; -;; (trying to get o x (got there!) -;; to this state) | | -;; | | -;; o o o o (keep undoing) -;; | |\ |\ | -;; | | \ | \ | -;; o o | | o o (keep undoing) -;; | / | | | / -;; |/ | | |/ -;; (already undid o | | o (got this far) -;; to this state) | / -;; |/ -;; o -;; -;; But if you're unlucky, and you happen to have moved the point (say) after -;; getting to the state labelled "got this far", then you've "broken the undo -;; chain". Hold on to something solid, because things are about to get -;; hairy. If you try to undo now, Emacs thinks you're trying to undo the -;; undos! So to get back to the initial state you now have to rewind through -;; *all* the changes, including the undos you just did: -;; -;; (trying to get o x (finally got there!) -;; to this state) | | -;; | | -;; o o o o o o -;; | |\ |\ |\ |\ | -;; | | \ | \ | \ | \ | -;; o o | | o o | | o o -;; | / | | | / | | | / -;; |/ | | |/ | | |/ -;; (already undid o | | o<. | | o -;; to this state) | / : | / -;; |/ : |/ -;; o : o -;; : -;; (got this far, but -;; broke the undo chain) -;; -;; Confused? -;; -;; In practice you can just hold down the undo key until you reach the buffer -;; state that you want. But whatever you do, don't move around in the buffer -;; to *check* that you've got back to where you want! Because you'll break the -;; undo chain, and then you'll have to traverse the entire string of undos -;; again, just to get back to the point at which you broke the -;; chain. Undo-in-region and commands such as `undo-only' help to make using -;; Emacs' undo a little easier, but nonetheless it remains confusing for many -;; people. -;; -;; -;; So what does `undo-tree-mode' do? Remember the diagram we drew to represent -;; the history we've been discussing (make a few edits, undo a couple of them, -;; and edit again)? The diagram that conceptually represented our undo -;; history, before we started discussing specific undo systems? It looked like -;; this: -;; -;; o (initial buffer state) -;; | -;; | -;; o -;; |\ -;; | \ -;; o x (current state) -;; | -;; | -;; o -;; -;; Well, that's *exactly* what the undo history looks like to -;; `undo-tree-mode'. It doesn't discard the old branch (as standard undo/redo -;; does), nor does it treat undos as new changes to be added to the end of a -;; linear string of buffer states (as Emacs' undo does). It just keeps track -;; of the tree of branching changes that make up the entire undo history. -;; -;; If you undo from this point, you'll rewind back up the tree to the previous -;; state: -;; -;; o -;; | -;; | -;; x (undo) -;; |\ -;; | \ -;; o o -;; | -;; | -;; o -;; -;; If you were to undo again, you'd rewind back to the initial state. If on -;; the other hand you redo the change, you'll end up back at the bottom of the -;; most recent branch: -;; -;; o (undo takes you here) -;; | -;; | -;; o (start here) -;; |\ -;; | \ -;; o x (redo takes you here) -;; | -;; | -;; o -;; -;; So far, this is just like the standard undo/redo system. But what if you -;; want to return to a buffer state located on a previous branch of the -;; history? Since `undo-tree-mode' keeps the entire history, you simply need -;; to tell it to switch to a different branch, and then redo the changes you -;; want: -;; -;; o -;; | -;; | -;; o (start here, but switch -;; |\ to the other branch) -;; | \ -;; (redo) o o -;; | -;; | -;; (redo) x -;; -;; Now you're on the other branch, if you undo and redo changes you'll stay on -;; that branch, moving up and down through the buffer states located on that -;; branch. Until you decide to switch branches again, of course. -;; -;; Real undo trees might have multiple branches and sub-branches: -;; -;; o -;; ____|______ -;; / \ -;; o o -;; ____|__ __| -;; / | \ / \ -;; o o o o x -;; | | -;; / \ / \ -;; o o o o -;; -;; Trying to imagine what Emacs' undo would do as you move about such a tree -;; will likely frazzle your brain circuits! But in `undo-tree-mode', you're -;; just moving around this undo history tree. Most of the time, you'll -;; probably only need to stay on the most recent branch, in which case it -;; behaves like standard undo/redo, and is just as simple to understand. But -;; if you ever need to recover a buffer state on a different branch, the -;; possibility of switching between branches and accessing the full undo -;; history is still there. -;; -;; -;; -;; The Undo-Tree Visualizer -;; ======================== -;; -;; Actually, it gets better. You don't have to imagine all these tree -;; diagrams, because `undo-tree-mode' includes an undo-tree visualizer which -;; draws them for you! In fact, it draws even better diagrams: it highlights -;; the node representing the current buffer state, it highlights the current -;; branch, and you can toggle the display of time-stamps (by hitting "t") and -;; a diff of the undo changes (by hitting "d"). (There's one other tiny -;; difference: the visualizer puts the most recent branch on the left rather -;; than the right.) -;; -;; Bring up the undo tree visualizer whenever you want by hitting "C-x u". -;; -;; In the visualizer, the usual keys for moving up and down a buffer instead -;; move up and down the undo history tree (e.g. the up and down arrow keys, or -;; "C-n" and "C-p"). The state of the "parent" buffer (the buffer whose undo -;; history you are visualizing) is updated as you move around the undo tree in -;; the visualizer. If you reach a branch point in the visualizer, the usual -;; keys for moving forward and backward in a buffer instead switch branch -;; (e.g. the left and right arrow keys, or "C-f" and "C-b"). -;; -;; Clicking with the mouse on any node in the visualizer will take you -;; directly to that node, resetting the state of the parent buffer to the -;; state represented by that node. -;; -;; You can also select nodes directly using the keyboard, by hitting "s" to -;; toggle selection mode. The usual motion keys now allow you to move around -;; the tree without changing the parent buffer. Hitting will reset the -;; state of the parent buffer to the state represented by the currently -;; selected node. -;; -;; It can be useful to see how long ago the parent buffer was in the state -;; represented by a particular node in the visualizer. Hitting "t" in the -;; visualizer toggles the display of time-stamps for all the nodes. (Note -;; that, because of the way `undo-tree-mode' works, these time-stamps may be -;; somewhat later than the true times, especially if it's been a long time -;; since you last undid any changes.) -;; -;; To get some idea of what changes are represented by a given node in the -;; tree, it can be useful to see a diff of the changes. Hit "d" in the -;; visualizer to toggle a diff display. This normally displays a diff between -;; the current state and the previous one, i.e. it shows you the changes that -;; will be applied if you undo (move up the tree). However, the diff display -;; really comes into its own in the visualizer's selection mode (see above), -;; where it instead shows a diff between the current state and the currently -;; selected state, i.e. it shows you the changes that will be applied if you -;; reset to the selected state. -;; -;; (Note that the diff is generated by the Emacs `diff' command, and is -;; displayed using `diff-mode'. See the corresponding customization groups if -;; you want to customize the diff display.) -;; -;; Finally, hitting "q" will quit the visualizer, leaving the parent buffer in -;; whatever state you ended at. Hitting "C-q" will abort the visualizer, -;; returning the parent buffer to whatever state it was originally in when the -;; visualizer was invoked. -;; -;; -;; -;; Undo-in-Region -;; ============== -;; -;; Emacs allows a very useful and powerful method of undoing only selected -;; changes: when a region is active, only changes that affect the text within -;; that region will be undone. With the standard Emacs undo system, changes -;; produced by undoing-in-region naturally get added onto the end of the -;; linear undo history: -;; -;; o -;; | -;; | x (second undo-in-region) -;; o | -;; | | -;; | o (first undo-in-region) -;; o | -;; | / -;; |/ -;; o -;; -;; You can of course redo these undos-in-region as usual, by undoing the -;; undos: -;; -;; o -;; | -;; | o_ -;; o | \ -;; | | | -;; | o o (undo the undo-in-region) -;; o | | -;; | / | -;; |/ | -;; o x (undo the undo-in-region) -;; -;; -;; In `undo-tree-mode', undo-in-region works much the same way: when there's -;; an active region, undoing only undoes changes that affect that region. In -;; `undo-tree-mode', redoing when there's an active region similarly only -;; redoes changes that affect that region. -;; -;; However, the way these undo- and redo-in-region changes are recorded in the -;; undo history is quite different. The good news is, you don't need to -;; understand this to use undo- and redo-in-region in `undo-tree-mode' - just -;; go ahead and use them! They'll probably work as you expect. But if you're -;; masochistic enough to want to understand conceptually what's happening to -;; the undo tree as you undo- and redo-in-region, then read on... -;; -;; -;; Undo-in-region creates a new branch in the undo history. The new branch -;; consists of an undo step that undoes some of the changes that affect the -;; current region, and another step that undoes the remaining changes needed -;; to rejoin the previous undo history. -;; -;; Previous undo history Undo-in-region -;; -;; o o -;; | | -;; | | -;; | | -;; o o -;; | | -;; | | -;; | | -;; o o_ -;; | | \ -;; | | x (undo-in-region) -;; | | | -;; x o o -;; -;; As long as you don't change the active region after undoing-in-region, -;; continuing to undo-in-region extends the new branch, pulling more changes -;; that affect the current region into an undo step immediately above your -;; current location in the undo tree, and pushing the point at which the new -;; branch is attached further up the tree: -;; -;; First undo-in-region Second undo-in-region -;; -;; o o -;; | | -;; | | -;; | | -;; o o_ -;; | | \ -;; | | x (undo-in-region) -;; | | | -;; o_ o | -;; | \ | | -;; | x | o -;; | | | | -;; o o o o -;; -;; Redoing takes you back down the undo tree, as usual (as long as you haven't -;; changed the active region after undoing-in-region, it doesn't matter if it -;; is still active): -;; -;; o -;; | -;; | -;; | -;; o_ -;; | \ -;; | o -;; | | -;; o | -;; | | -;; | o (redo) -;; | | -;; o x (redo) -;; -;; -;; What about redo-in-region? Obviously, redo-in-region only makes sense if -;; you have already undone some changes, so that there are some changes to -;; redo! Redoing-in-region splits off a new branch of the undo history below -;; your current location in the undo tree. This time, the new branch consists -;; of a first redo step that redoes some of the redo changes that affect the -;; current region, followed by *all* the remaining redo changes. -;; -;; Previous undo history Redo-in-region -;; -;; o o -;; | | -;; | | -;; | | -;; x o_ -;; | | \ -;; | | x (redo-in-region) -;; | | | -;; o o | -;; | | | -;; | | | -;; | | | -;; o o o -;; -;; As long as you don't change the active region after redoing-in-region, -;; continuing to redo-in-region extends the new branch, pulling more redo -;; changes into a redo step immediately below your current location in the -;; undo tree. -;; -;; First redo-in-region Second redo-in-region -;; -;; o o -;; | | -;; | | -;; | | -;; o_ o_ -;; | \ | \ -;; | x | o -;; | | | | -;; o | o | -;; | | | | -;; | | | x (redo-in-region) -;; | | | | -;; o o o o -;; -;; Note that undo-in-region and redo-in-region only ever add new changes to -;; the undo tree, they *never* modify existing undo history. So you can always -;; return to previous buffer states by switching to a previous branch of the -;; tree. - - - -;;; Code: - -(eval-when-compile (require 'cl)) -(require 'diff) - - - -;;; ===================================================================== -;;; Compatibility hacks for older Emacsen - -;; `characterp' isn't defined in Emacs versions < 23 -(unless (fboundp 'characterp) - (defalias 'characterp 'char-valid-p)) - -;; `region-active-p' isn't defined in Emacs versions < 23 -(unless (fboundp 'region-active-p) - (defun region-active-p () (and transient-mark-mode mark-active))) - - -;; `registerv' defstruct isn't defined in Emacs versions < 24 -(unless (fboundp 'registerv-make) - (defmacro registerv-make (data &rest _dummy) data)) - -(unless (fboundp 'registerv-data) - (defmacro registerv-data (data) data)) - - -;; `diff-no-select' and `diff-file-local-copy' aren't defined in Emacs -;; versions < 24 (copied and adapted from Emacs 24) -(unless (fboundp 'diff-no-select) - (defun diff-no-select (old new &optional switches no-async buf) - ;; Noninteractive helper for creating and reverting diff buffers - (unless (bufferp new) (setq new (expand-file-name new))) - (unless (bufferp old) (setq old (expand-file-name old))) - (or switches (setq switches diff-switches)) ; If not specified, use default. - (unless (listp switches) (setq switches (list switches))) - (or buf (setq buf (get-buffer-create "*Diff*"))) - (let* ((old-alt (diff-file-local-copy old)) - (new-alt (diff-file-local-copy new)) - (command - (mapconcat 'identity - `(,diff-command - ;; Use explicitly specified switches - ,@switches - ,@(mapcar #'shell-quote-argument - (nconc - (when (or old-alt new-alt) - (list "-L" (if (stringp old) - old (prin1-to-string old)) - "-L" (if (stringp new) - new (prin1-to-string new)))) - (list (or old-alt old) - (or new-alt new))))) - " ")) - (thisdir default-directory)) - (with-current-buffer buf - (setq buffer-read-only t) - (buffer-disable-undo (current-buffer)) - (let ((inhibit-read-only t)) - (erase-buffer)) - (buffer-enable-undo (current-buffer)) - (diff-mode) - (set (make-local-variable 'revert-buffer-function) - (lambda (_ignore-auto _noconfirm) - (diff-no-select old new switches no-async (current-buffer)))) - (setq default-directory thisdir) - (let ((inhibit-read-only t)) - (insert command "\n")) - (if (and (not no-async) (fboundp 'start-process)) - (let ((proc (start-process "Diff" buf shell-file-name - shell-command-switch command))) - (set-process-filter proc 'diff-process-filter) - (set-process-sentinel - proc (lambda (proc _msg) - (with-current-buffer (process-buffer proc) - (diff-sentinel (process-exit-status proc)) - (if old-alt (delete-file old-alt)) - (if new-alt (delete-file new-alt)))))) - ;; Async processes aren't available. - (let ((inhibit-read-only t)) - (diff-sentinel - (call-process shell-file-name nil buf nil - shell-command-switch command)) - (if old-alt (delete-file old-alt)) - (if new-alt (delete-file new-alt))))) - buf))) - -(unless (fboundp 'diff-file-local-copy) - (defun diff-file-local-copy (file-or-buf) - (if (bufferp file-or-buf) - (with-current-buffer file-or-buf - (let ((tempfile (make-temp-file "buffer-content-"))) - (write-region nil nil tempfile nil 'nomessage) - tempfile)) - (file-local-copy file-or-buf)))) - - -;; `user-error' isn't defined in Emacs < 24.3 -(unless (fboundp 'user-error) - (defalias 'user-error 'error) - ;; prevent debugger being called on user errors - (add-to-list 'debug-ignored-errors "^No further undo information") - (add-to-list 'debug-ignored-errors "^No further redo information") - (add-to-list 'debug-ignored-errors "^No further redo information for region")) - - - - - -;;; ===================================================================== -;;; Global variables and customization options - -(defvar buffer-undo-tree nil - "Tree of undo entries in current buffer.") -(put 'buffer-undo-tree 'permanent-local t) -(make-variable-buffer-local 'buffer-undo-tree) - - -(defgroup undo-tree nil - "Tree undo/redo." - :group 'undo) - -(defcustom undo-tree-mode-lighter " Undo-Tree" - "Lighter displayed in mode line -when `undo-tree-mode' is enabled." - :group 'undo-tree - :type 'string) - - -(defcustom undo-tree-incompatible-major-modes '(term-mode) - "List of major-modes in which `undo-tree-mode' should not be enabled. -\(See `turn-on-undo-tree-mode'.\)" - :group 'undo-tree - :type '(repeat symbol)) - - -(defcustom undo-tree-enable-undo-in-region t - "When non-nil, enable undo-in-region. - -When undo-in-region is enabled, undoing or redoing when the -region is active (in `transient-mark-mode') or with a prefix -argument (not in `transient-mark-mode') only undoes changes -within the current region." - :group 'undo-tree - :type 'boolean) - - -(defcustom undo-tree-auto-save-history nil - "When non-nil, `undo-tree-mode' will save undo history to file -when a buffer is saved to file. - -It will automatically load undo history when a buffer is loaded -from file, if an undo save file exists. - -By default, undo-tree history is saved to a file called -\"..~undo-tree~\" in the same directory as the -file itself. To save under a different directory, customize -`undo-tree-history-directory-alist' (see the documentation for -that variable for details). - -WARNING! `undo-tree-auto-save-history' will not work properly in -Emacs versions prior to 24.3, so it cannot be enabled via -the customization interface in versions earlier than that one. To -ignore this warning and enable it regardless, set -`undo-tree-auto-save-history' to a non-nil value outside of -customize." - :group 'undo-tree - :type (if (version-list-< (version-to-list emacs-version) '(24 3)) - '(choice (const :tag "" nil)) - 'boolean)) - - -(defcustom undo-tree-history-directory-alist nil - "Alist of filename patterns and undo history directory names. -Each element looks like (REGEXP . DIRECTORY). Undo history for -files with names matching REGEXP will be saved in DIRECTORY. -DIRECTORY may be relative or absolute. If it is absolute, so -that all matching files are backed up into the same directory, -the file names in this directory will be the full name of the -file backed up with all directory separators changed to `!' to -prevent clashes. This will not work correctly if your filesystem -truncates the resulting name. - -For the common case of all backups going into one directory, the -alist should contain a single element pairing \".\" with the -appropriate directory name. - -If this variable is nil, or it fails to match a filename, the -backup is made in the original file's directory. - -On MS-DOS filesystems without long names this variable is always -ignored." - :group 'undo-tree - :type '(repeat (cons (regexp :tag "Regexp matching filename") - (directory :tag "Undo history directory name")))) - - - -(defcustom undo-tree-visualizer-relative-timestamps t - "When non-nil, display times relative to current time -when displaying time stamps in visualizer. - -Otherwise, display absolute times." - :group 'undo-tree - :type 'boolean) - - -(defcustom undo-tree-visualizer-timestamps nil - "When non-nil, display time-stamps by default -in undo-tree visualizer. - -\\You can always toggle time-stamps on and off \ -using \\[undo-tree-visualizer-toggle-timestamps], regardless of the -setting of this variable." - :group 'undo-tree - :type 'boolean) - - -(defcustom undo-tree-visualizer-diff nil - "When non-nil, display diff by default in undo-tree visualizer. - -\\You can always toggle the diff display \ -using \\[undo-tree-visualizer-toggle-diff], regardless of the -setting of this variable." - :group 'undo-tree - :type 'boolean) - - -(defcustom undo-tree-visualizer-lazy-drawing 100 - "When non-nil, use lazy undo-tree drawing in visualizer. - -Setting this to a number causes the visualizer to switch to lazy -drawing when the number of nodes in the tree is larger than this -value. - -Lazy drawing means that only the visible portion of the tree will -be drawn initially, and the tree will be extended later as -needed. For the most part, the only visible effect of this is to -significantly speed up displaying the visualizer for very large -trees. - -There is one potential negative effect of lazy drawing. Other -branches of the tree will only be drawn once the node from which -they branch off becomes visible. So it can happen that certain -portions of the tree that would be shown with lazy drawing -disabled, will not be drawn immediately when it is -enabled. However, this effect is quite rare in practice." - :group 'undo-tree - :type '(choice (const :tag "never" nil) - (const :tag "always" t) - (integer :tag "> size"))) - - -(defface undo-tree-visualizer-default-face - '((((class color)) :foreground "gray")) - "Face used to draw undo-tree in visualizer." - :group 'undo-tree) - -(defface undo-tree-visualizer-current-face - '((((class color)) :foreground "red")) - "Face used to highlight current undo-tree node in visualizer." - :group 'undo-tree) - -(defface undo-tree-visualizer-active-branch-face - '((((class color) (background dark)) - (:foreground "white" :weight bold)) - (((class color) (background light)) - (:foreground "black" :weight bold))) - "Face used to highlight active undo-tree branch in visualizer." - :group 'undo-tree) - -(defface undo-tree-visualizer-register-face - '((((class color)) :foreground "yellow")) - "Face used to highlight undo-tree nodes saved to a register -in visualizer." - :group 'undo-tree) - -(defface undo-tree-visualizer-unmodified-face - '((((class color)) :foreground "cyan")) - "Face used to highlight nodes corresponding to unmodified buffers -in visualizer." - :group 'undo-tree) - - -(defvar undo-tree-visualizer-parent-buffer nil - "Parent buffer in visualizer.") -(put 'undo-tree-visualizer-parent-buffer 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-parent-buffer) - -;; stores modification time of parent buffer's file, if any -(defvar undo-tree-visualizer-parent-mtime nil) -(put 'undo-tree-visualizer-parent-mtime 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-parent-mtime) - -;; stores current horizontal spacing needed for drawing undo-tree -(defvar undo-tree-visualizer-spacing nil) -(put 'undo-tree-visualizer-spacing 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-spacing) - -;; calculate horizontal spacing required for drawing tree with current -;; settings -(defsubst undo-tree-visualizer-calculate-spacing () - (if undo-tree-visualizer-timestamps - (if undo-tree-visualizer-relative-timestamps 9 13) - 3)) - -;; holds node that was current when visualizer was invoked -(defvar undo-tree-visualizer-initial-node nil) -(put 'undo-tree-visualizer-initial-node 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-initial-node) - -;; holds currently selected node in visualizer selection mode -(defvar undo-tree-visualizer-selected-node nil) -(put 'undo-tree-visualizer-selected-node 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-selected) - -;; used to store nodes at edge of currently drawn portion of tree -(defvar undo-tree-visualizer-needs-extending-down nil) -(put 'undo-tree-visualizer-needs-extending-down 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-needs-extending-down) -(defvar undo-tree-visualizer-needs-extending-up nil) -(put 'undo-tree-visualizer-needs-extending-up 'permanent-local t) -(make-variable-buffer-local 'undo-tree-visualizer-needs-extending-up) - -;; dynamically bound to t when undoing from visualizer, to inhibit -;; `undo-tree-kill-visualizer' hook function in parent buffer -(defvar undo-tree-inhibit-kill-visualizer nil) - -;; can be let-bound to a face name, used in drawing functions -(defvar undo-tree-insert-face nil) - -;; visualizer buffer names -(defconst undo-tree-visualizer-buffer-name " *undo-tree*") -(defconst undo-tree-diff-buffer-name "*undo-tree Diff*") - -;; install history-auto-save hooks -(add-hook 'write-file-functions 'undo-tree-save-history-hook) -(add-hook 'find-file-hook 'undo-tree-load-history-hook) - - - - -;;; ================================================================= -;;; Default keymaps - -(defvar undo-tree-map nil - "Keymap used in undo-tree-mode.") - -(unless undo-tree-map - (let ((map (make-sparse-keymap))) - ;; remap `undo' and `undo-only' to `undo-tree-undo' - (define-key map [remap undo] 'undo-tree-undo) - (define-key map [remap undo-only] 'undo-tree-undo) - ;; bind standard undo bindings (since these match redo counterparts) - (define-key map (kbd "C-/") 'undo-tree-undo) - (define-key map "\C-_" 'undo-tree-undo) - ;; redo doesn't exist normally, so define our own keybindings - (define-key map (kbd "C-?") 'undo-tree-redo) - (define-key map (kbd "M-_") 'undo-tree-redo) - ;; just in case something has defined `redo'... - (define-key map [remap redo] 'undo-tree-redo) - ;; we use "C-x u" for the undo-tree visualizer - (define-key map (kbd "\C-x u") 'undo-tree-visualize) - ;; bind register commands - (define-key map (kbd "C-x r u") 'undo-tree-save-state-to-register) - (define-key map (kbd "C-x r U") 'undo-tree-restore-state-from-register) - ;; set keymap - (setq undo-tree-map map))) - - -(defvar undo-tree-visualizer-mode-map nil - "Keymap used in undo-tree visualizer.") - -(unless undo-tree-visualizer-mode-map - (let ((map (make-sparse-keymap))) - ;; vertical motion keys undo/redo - (define-key map [remap previous-line] 'undo-tree-visualize-undo) - (define-key map [remap next-line] 'undo-tree-visualize-redo) - (define-key map [up] 'undo-tree-visualize-undo) - (define-key map "p" 'undo-tree-visualize-undo) - (define-key map "\C-p" 'undo-tree-visualize-undo) - (define-key map [down] 'undo-tree-visualize-redo) - (define-key map "n" 'undo-tree-visualize-redo) - (define-key map "\C-n" 'undo-tree-visualize-redo) - ;; horizontal motion keys switch branch - (define-key map [remap forward-char] - 'undo-tree-visualize-switch-branch-right) - (define-key map [remap backward-char] - 'undo-tree-visualize-switch-branch-left) - (define-key map [right] 'undo-tree-visualize-switch-branch-right) - (define-key map "f" 'undo-tree-visualize-switch-branch-right) - (define-key map "\C-f" 'undo-tree-visualize-switch-branch-right) - (define-key map [left] 'undo-tree-visualize-switch-branch-left) - (define-key map "b" 'undo-tree-visualize-switch-branch-left) - (define-key map "\C-b" 'undo-tree-visualize-switch-branch-left) - ;; paragraph motion keys undo/redo to significant points in tree - (define-key map [remap backward-paragraph] 'undo-tree-visualize-undo-to-x) - (define-key map [remap forward-paragraph] 'undo-tree-visualize-redo-to-x) - (define-key map "\M-{" 'undo-tree-visualize-undo-to-x) - (define-key map "\M-}" 'undo-tree-visualize-redo-to-x) - (define-key map [C-up] 'undo-tree-visualize-undo-to-x) - (define-key map [C-down] 'undo-tree-visualize-redo-to-x) - ;; mouse sets buffer state to node at click - (define-key map [mouse-1] 'undo-tree-visualizer-mouse-set) - ;; toggle timestamps - (define-key map "t" 'undo-tree-visualizer-toggle-timestamps) - ;; toggle diff - (define-key map "d" 'undo-tree-visualizer-toggle-diff) - ;; toggle selection mode - (define-key map "s" 'undo-tree-visualizer-selection-mode) - ;; horizontal scrolling may be needed if the tree is very wide - (define-key map "," 'undo-tree-visualizer-scroll-left) - (define-key map "." 'undo-tree-visualizer-scroll-right) - (define-key map "<" 'undo-tree-visualizer-scroll-left) - (define-key map ">" 'undo-tree-visualizer-scroll-right) - ;; vertical scrolling may be needed if the tree is very tall - (define-key map [next] 'undo-tree-visualizer-scroll-up) - (define-key map [prior] 'undo-tree-visualizer-scroll-down) - ;; quit/abort visualizer - (define-key map "q" 'undo-tree-visualizer-quit) - (define-key map "\C-q" 'undo-tree-visualizer-abort) - ;; set keymap - (setq undo-tree-visualizer-mode-map map))) - - -(defvar undo-tree-visualizer-selection-mode-map nil - "Keymap used in undo-tree visualizer selection mode.") - -(unless undo-tree-visualizer-selection-mode-map - (let ((map (make-sparse-keymap))) - ;; vertical motion keys move up and down tree - (define-key map [remap previous-line] - 'undo-tree-visualizer-select-previous) - (define-key map [remap next-line] - 'undo-tree-visualizer-select-next) - (define-key map [up] 'undo-tree-visualizer-select-previous) - (define-key map "p" 'undo-tree-visualizer-select-previous) - (define-key map "\C-p" 'undo-tree-visualizer-select-previous) - (define-key map [down] 'undo-tree-visualizer-select-next) - (define-key map "n" 'undo-tree-visualizer-select-next) - (define-key map "\C-n" 'undo-tree-visualizer-select-next) - ;; vertical scroll keys move up and down quickly - (define-key map [next] - (lambda () (interactive) (undo-tree-visualizer-select-next 10))) - (define-key map [prior] - (lambda () (interactive) (undo-tree-visualizer-select-previous 10))) - ;; horizontal motion keys move to left and right siblings - (define-key map [remap forward-char] 'undo-tree-visualizer-select-right) - (define-key map [remap backward-char] 'undo-tree-visualizer-select-left) - (define-key map [right] 'undo-tree-visualizer-select-right) - (define-key map "f" 'undo-tree-visualizer-select-right) - (define-key map "\C-f" 'undo-tree-visualizer-select-right) - (define-key map [left] 'undo-tree-visualizer-select-left) - (define-key map "b" 'undo-tree-visualizer-select-left) - (define-key map "\C-b" 'undo-tree-visualizer-select-left) - ;; horizontal scroll keys move left or right quickly - (define-key map "," - (lambda () (interactive) (undo-tree-visualizer-select-left 10))) - (define-key map "." - (lambda () (interactive) (undo-tree-visualizer-select-right 10))) - (define-key map "<" - (lambda () (interactive) (undo-tree-visualizer-select-left 10))) - (define-key map ">" - (lambda () (interactive) (undo-tree-visualizer-select-right 10))) - ;; sets buffer state to node at point - (define-key map "\r" 'undo-tree-visualizer-set) - ;; mouse selects node at click - (define-key map [mouse-1] 'undo-tree-visualizer-mouse-select) - ;; toggle diff - (define-key map "d" 'undo-tree-visualizer-selection-toggle-diff) - ;; set keymap - (setq undo-tree-visualizer-selection-mode-map map))) - - -(defvar undo-tree-old-undo-menu-item nil) - -(defun undo-tree-update-menu-bar () - "Update `undo-tree-mode' Edit menu items." - (if undo-tree-mode - (progn - ;; save old undo menu item, and install undo/redo menu items - (setq undo-tree-old-undo-menu-item - (cdr (assq 'undo (lookup-key global-map [menu-bar edit])))) - (define-key (lookup-key global-map [menu-bar edit]) - [undo] '(menu-item "Undo" undo-tree-undo - :enable (and undo-tree-mode - (not buffer-read-only) - (not (eq t buffer-undo-list)) - (not (eq nil buffer-undo-tree)) - (undo-tree-node-previous - (undo-tree-current buffer-undo-tree))) - :help "Undo last operation")) - (define-key-after (lookup-key global-map [menu-bar edit]) - [redo] '(menu-item "Redo" undo-tree-redo - :enable (and undo-tree-mode - (not buffer-read-only) - (not (eq t buffer-undo-list)) - (not (eq nil buffer-undo-tree)) - (undo-tree-node-next - (undo-tree-current buffer-undo-tree))) - :help "Redo last operation") - 'undo)) - ;; uninstall undo/redo menu items - (define-key (lookup-key global-map [menu-bar edit]) - [undo] undo-tree-old-undo-menu-item) - (define-key (lookup-key global-map [menu-bar edit]) - [redo] nil))) - -(add-hook 'menu-bar-update-hook 'undo-tree-update-menu-bar) - - - - - -;;; ===================================================================== -;;; Undo-tree data structure - -(defstruct - (undo-tree - :named - (:constructor nil) - (:constructor make-undo-tree - (&aux - (root (undo-tree-make-node nil nil)) - (current root) - (size 0) - (count 0) - (object-pool (make-hash-table :test 'eq :weakness 'value)))) - ;;(:copier nil) - ) - root current size count object-pool) - - - -(defstruct - (undo-tree-node - (:type vector) ; create unnamed struct - (:constructor nil) - (:constructor undo-tree-make-node - (previous undo - &optional redo - &aux - (timestamp (current-time)) - (branch 0))) - (:constructor undo-tree-make-node-backwards - (next-node undo - &optional redo - &aux - (next (list next-node)) - (timestamp (current-time)) - (branch 0))) - (:copier nil)) - previous next undo redo timestamp branch meta-data) - - -(defmacro undo-tree-node-p (n) - (let ((len (length (undo-tree-make-node nil nil)))) - `(and (vectorp ,n) (= (length ,n) ,len)))) - - - -(defstruct - (undo-tree-region-data - (:type vector) ; create unnamed struct - (:constructor nil) - (:constructor undo-tree-make-region-data - (&optional undo-beginning undo-end - redo-beginning redo-end)) - (:constructor undo-tree-make-undo-region-data - (undo-beginning undo-end)) - (:constructor undo-tree-make-redo-region-data - (redo-beginning redo-end)) - (:copier nil)) - undo-beginning undo-end redo-beginning redo-end) - - -(defmacro undo-tree-region-data-p (r) - (let ((len (length (undo-tree-make-region-data)))) - `(and (vectorp ,r) (= (length ,r) ,len)))) - -(defmacro undo-tree-node-clear-region-data (node) - `(setf (undo-tree-node-meta-data ,node) - (delq nil - (delq :region - (plist-put (undo-tree-node-meta-data ,node) - :region nil))))) - - -(defmacro undo-tree-node-undo-beginning (node) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (when (undo-tree-region-data-p r) - (undo-tree-region-data-undo-beginning r)))) - -(defmacro undo-tree-node-undo-end (node) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (when (undo-tree-region-data-p r) - (undo-tree-region-data-undo-end r)))) - -(defmacro undo-tree-node-redo-beginning (node) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (when (undo-tree-region-data-p r) - (undo-tree-region-data-redo-beginning r)))) - -(defmacro undo-tree-node-redo-end (node) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (when (undo-tree-region-data-p r) - (undo-tree-region-data-redo-end r)))) - - -(defsetf undo-tree-node-undo-beginning (node) (val) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (unless (undo-tree-region-data-p r) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :region - (setq r (undo-tree-make-region-data))))) - (setf (undo-tree-region-data-undo-beginning r) ,val))) - -(defsetf undo-tree-node-undo-end (node) (val) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (unless (undo-tree-region-data-p r) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :region - (setq r (undo-tree-make-region-data))))) - (setf (undo-tree-region-data-undo-end r) ,val))) - -(defsetf undo-tree-node-redo-beginning (node) (val) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (unless (undo-tree-region-data-p r) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :region - (setq r (undo-tree-make-region-data))))) - (setf (undo-tree-region-data-redo-beginning r) ,val))) - -(defsetf undo-tree-node-redo-end (node) (val) - `(let ((r (plist-get (undo-tree-node-meta-data ,node) :region))) - (unless (undo-tree-region-data-p r) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :region - (setq r (undo-tree-make-region-data))))) - (setf (undo-tree-region-data-redo-end r) ,val))) - - - -(defstruct - (undo-tree-visualizer-data - (:type vector) ; create unnamed struct - (:constructor nil) - (:constructor undo-tree-make-visualizer-data - (&optional lwidth cwidth rwidth marker)) - (:copier nil)) - lwidth cwidth rwidth marker) - - -(defmacro undo-tree-visualizer-data-p (v) - (let ((len (length (undo-tree-make-visualizer-data)))) - `(and (vectorp ,v) (= (length ,v) ,len)))) - -(defun undo-tree-node-clear-visualizer-data (node) - (let ((plist (undo-tree-node-meta-data node))) - (if (eq (car plist) :visualizer) - (setf (undo-tree-node-meta-data node) (nthcdr 2 plist)) - (while (and plist (not (eq (cadr plist) :visualizer))) - (setq plist (cdr plist))) - (if plist (setcdr plist (nthcdr 3 plist)))))) - -(defmacro undo-tree-node-lwidth (node) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (when (undo-tree-visualizer-data-p v) - (undo-tree-visualizer-data-lwidth v)))) - -(defmacro undo-tree-node-cwidth (node) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (when (undo-tree-visualizer-data-p v) - (undo-tree-visualizer-data-cwidth v)))) - -(defmacro undo-tree-node-rwidth (node) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (when (undo-tree-visualizer-data-p v) - (undo-tree-visualizer-data-rwidth v)))) - -(defmacro undo-tree-node-marker (node) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (when (undo-tree-visualizer-data-p v) - (undo-tree-visualizer-data-marker v)))) - - -(defsetf undo-tree-node-lwidth (node) (val) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (unless (undo-tree-visualizer-data-p v) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :visualizer - (setq v (undo-tree-make-visualizer-data))))) - (setf (undo-tree-visualizer-data-lwidth v) ,val))) - -(defsetf undo-tree-node-cwidth (node) (val) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (unless (undo-tree-visualizer-data-p v) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :visualizer - (setq v (undo-tree-make-visualizer-data))))) - (setf (undo-tree-visualizer-data-cwidth v) ,val))) - -(defsetf undo-tree-node-rwidth (node) (val) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (unless (undo-tree-visualizer-data-p v) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :visualizer - (setq v (undo-tree-make-visualizer-data))))) - (setf (undo-tree-visualizer-data-rwidth v) ,val))) - -(defsetf undo-tree-node-marker (node) (val) - `(let ((v (plist-get (undo-tree-node-meta-data ,node) :visualizer))) - (unless (undo-tree-visualizer-data-p v) - (setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :visualizer - (setq v (undo-tree-make-visualizer-data))))) - (setf (undo-tree-visualizer-data-marker v) ,val))) - - - -(defstruct - (undo-tree-register-data - (:type vector) - (:constructor nil) - (:constructor undo-tree-make-register-data (buffer node))) - buffer node) - -(defun undo-tree-register-data-p (data) - (and (vectorp data) - (= (length data) 2) - (undo-tree-node-p (undo-tree-register-data-node data)))) - -(defun undo-tree-register-data-print-func (data) - (princ (format "an undo-tree state for buffer %s" - (undo-tree-register-data-buffer data)))) - -(defmacro undo-tree-node-register (node) - `(plist-get (undo-tree-node-meta-data ,node) :register)) - -(defsetf undo-tree-node-register (node) (val) - `(setf (undo-tree-node-meta-data ,node) - (plist-put (undo-tree-node-meta-data ,node) :register ,val))) - - - - -;;; ===================================================================== -;;; Basic undo-tree data structure functions - -(defun undo-tree-grow (undo) - "Add an UNDO node to current branch of `buffer-undo-tree'." - (let* ((current (undo-tree-current buffer-undo-tree)) - (new (undo-tree-make-node current undo))) - (push new (undo-tree-node-next current)) - (setf (undo-tree-current buffer-undo-tree) new))) - - -(defun undo-tree-grow-backwards (node undo &optional redo) - "Add new node *above* undo-tree NODE, and return new node. -Note that this will overwrite NODE's \"previous\" link, so should -only be used on a detached NODE, never on nodes that are already -part of `buffer-undo-tree'." - (let ((new (undo-tree-make-node-backwards node undo redo))) - (setf (undo-tree-node-previous node) new) - new)) - - -(defun undo-tree-splice-node (node splice) - "Splice NODE into undo tree, below node SPLICE. -Note that this will overwrite NODE's \"next\" and \"previous\" -links, so should only be used on a detached NODE, never on nodes -that are already part of `buffer-undo-tree'." - (setf (undo-tree-node-next node) (undo-tree-node-next splice) - (undo-tree-node-branch node) (undo-tree-node-branch splice) - (undo-tree-node-previous node) splice - (undo-tree-node-next splice) (list node) - (undo-tree-node-branch splice) 0) - (dolist (n (undo-tree-node-next node)) - (setf (undo-tree-node-previous n) node))) - - -(defun undo-tree-snip-node (node) - "Snip NODE out of undo tree." - (let* ((parent (undo-tree-node-previous node)) - position p) - ;; if NODE is only child, replace parent's next links with NODE's - (if (= (length (undo-tree-node-next parent)) 0) - (setf (undo-tree-node-next parent) (undo-tree-node-next node) - (undo-tree-node-branch parent) (undo-tree-node-branch node)) - ;; otherwise... - (setq position (undo-tree-position node (undo-tree-node-next parent))) - (cond - ;; if active branch used do go via NODE, set parent's branch to active - ;; branch of NODE - ((= (undo-tree-node-branch parent) position) - (setf (undo-tree-node-branch parent) - (+ position (undo-tree-node-branch node)))) - ;; if active branch didn't go via NODE, update parent's branch to point - ;; to same node as before - ((> (undo-tree-node-branch parent) position) - (incf (undo-tree-node-branch parent) - (1- (length (undo-tree-node-next node)))))) - ;; replace NODE in parent's next list with NODE's entire next list - (if (= position 0) - (setf (undo-tree-node-next parent) - (nconc (undo-tree-node-next node) - (cdr (undo-tree-node-next parent)))) - (setq p (nthcdr (1- position) (undo-tree-node-next parent))) - (setcdr p (nconc (undo-tree-node-next node) (cddr p))))) - ;; update previous links of NODE's children - (dolist (n (undo-tree-node-next node)) - (setf (undo-tree-node-previous n) parent)))) - - -(defun undo-tree-mapc (--undo-tree-mapc-function-- node) - ;; Apply FUNCTION to NODE and to each node below it. - (let ((stack (list node)) - n) - (while stack - (setq n (pop stack)) - (funcall --undo-tree-mapc-function-- n) - (setq stack (append (undo-tree-node-next n) stack))))) - - -(defmacro undo-tree-num-branches () - "Return number of branches at current undo tree node." - '(length (undo-tree-node-next (undo-tree-current buffer-undo-tree)))) - - -(defun undo-tree-position (node list) - "Find the first occurrence of NODE in LIST. -Return the index of the matching item, or nil of not found. -Comparison is done with `eq'." - (let ((i 0)) - (catch 'found - (while (progn - (when (eq node (car list)) (throw 'found i)) - (incf i) - (setq list (cdr list)))) - nil))) - - -(defvar *undo-tree-id-counter* 0) -(make-variable-buffer-local '*undo-tree-id-counter*) - -(defmacro undo-tree-generate-id () - ;; Generate a new, unique id (uninterned symbol). - ;; The name is made by appending a number to "undo-tree-id". - ;; (Copied from CL package `gensym'.) - `(let ((num (prog1 *undo-tree-id-counter* (incf *undo-tree-id-counter*)))) - (make-symbol (format "undo-tree-id%d" num)))) - - -(defun undo-tree-decircle (undo-tree) - ;; Nullify PREVIOUS links of UNDO-TREE nodes, to make UNDO-TREE data - ;; structure non-circular. - (undo-tree-mapc - (lambda (node) - (dolist (n (undo-tree-node-next node)) - (setf (undo-tree-node-previous n) nil))) - (undo-tree-root undo-tree))) - - -(defun undo-tree-recircle (undo-tree) - ;; Recreate PREVIOUS links of UNDO-TREE nodes, to restore circular UNDO-TREE - ;; data structure. - (undo-tree-mapc - (lambda (node) - (dolist (n (undo-tree-node-next node)) - (setf (undo-tree-node-previous n) node))) - (undo-tree-root undo-tree))) - - - - -;;; ===================================================================== -;;; Undo list and undo changeset utility functions - -(defmacro undo-list-marker-elt-p (elt) - `(markerp (car-safe ,elt))) - -(defmacro undo-list-GCd-marker-elt-p (elt) - ;; Return t if ELT is a marker element whose marker has been moved to the - ;; object-pool, so may potentially have been garbage-collected. - ;; Note: Valid marker undo elements should be uniquely identified as cons - ;; cells with a symbol in the car (replacing the marker), and a number in - ;; the cdr. However, to guard against future changes to undo element - ;; formats, we perform an additional redundant check on the symbol name. - `(and (car-safe ,elt) - (symbolp (car ,elt)) - (let ((str (symbol-name (car ,elt)))) - (and (> (length str) 12) - (string= (substring str 0 12) "undo-tree-id"))) - (numberp (cdr-safe ,elt)))) - - -(defun undo-tree-move-GC-elts-to-pool (elt) - ;; Move elements that can be garbage-collected into `buffer-undo-tree' - ;; object pool, substituting a unique id that can be used to retrieve them - ;; later. (Only markers require this treatment currently.) - (when (undo-list-marker-elt-p elt) - (let ((id (undo-tree-generate-id))) - (puthash id (car elt) (undo-tree-object-pool buffer-undo-tree)) - (setcar elt id)))) - - -(defun undo-tree-restore-GC-elts-from-pool (elt) - ;; Replace object id's in ELT with corresponding objects from - ;; `buffer-undo-tree' object pool and return modified ELT, or return nil if - ;; any object in ELT has been garbage-collected. - (if (undo-list-GCd-marker-elt-p elt) - (when (setcar elt (gethash (car elt) - (undo-tree-object-pool buffer-undo-tree))) - elt) - elt)) - - -(defun undo-list-clean-GCd-elts (undo-list) - ;; Remove object id's from UNDO-LIST that refer to elements that have been - ;; garbage-collected. UNDO-LIST is modified by side-effect. - (while (undo-list-GCd-marker-elt-p (car undo-list)) - (unless (gethash (caar undo-list) - (undo-tree-object-pool buffer-undo-tree)) - (setq undo-list (cdr undo-list)))) - (let ((p undo-list)) - (while (cdr p) - (when (and (undo-list-GCd-marker-elt-p (cadr p)) - (null (gethash (car (cadr p)) - (undo-tree-object-pool buffer-undo-tree)))) - (setcdr p (cddr p))) - (setq p (cdr p)))) - undo-list) - - -(defun undo-list-pop-changeset (&optional discard-pos) - ;; Pop changeset from `buffer-undo-list'. If DISCARD-POS is non-nil, discard - ;; any position entries from changeset. - - ;; discard undo boundaries and (if DISCARD-POS is non-nil) position entries - ;; at head of undo list - (while (or (null (car buffer-undo-list)) - (and discard-pos (integerp (car buffer-undo-list)))) - (setq buffer-undo-list (cdr buffer-undo-list))) - ;; pop elements up to next undo boundary, discarding position entries if - ;; DISCARD-POS is non-nil - (if (eq (car buffer-undo-list) 'undo-tree-canary) - (push nil buffer-undo-list) - (let* ((changeset (list (pop buffer-undo-list))) - (p changeset)) - (while (progn - (undo-tree-move-GC-elts-to-pool (car p)) - (while (and discard-pos (integerp (car buffer-undo-list))) - (setq buffer-undo-list (cdr buffer-undo-list))) - (and (car buffer-undo-list) - (not (eq (car buffer-undo-list) 'undo-tree-canary)))) - (setcdr p (list (pop buffer-undo-list))) - (setq p (cdr p))) - changeset))) - - -(defun undo-tree-copy-list (undo-list) - ;; Return a deep copy of first changeset in `undo-list'. Object id's are - ;; replaced by corresponding objects from `buffer-undo-tree' object-pool. - (let (copy p) - ;; if first element contains an object id, replace it with object from - ;; pool, discarding element entirely if it's been GC'd - (while (and undo-list (null copy)) - (setq copy - (undo-tree-restore-GC-elts-from-pool (pop undo-list)))) - (when copy - (setq copy (list copy) - p copy) - ;; copy remaining elements, replacing object id's with objects from - ;; pool, or discarding them entirely if they've been GC'd - (while undo-list - (when (setcdr p (undo-tree-restore-GC-elts-from-pool - (undo-copy-list-1 (pop undo-list)))) - (setcdr p (list (cdr p))) - (setq p (cdr p)))) - copy))) - - - -(defun undo-list-transfer-to-tree () - ;; Transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree'. - - ;; `undo-list-transfer-to-tree' should never be called when undo is disabled - ;; (i.e. `buffer-undo-tree' is t) - (assert (not (eq buffer-undo-tree t))) - - ;; if `buffer-undo-tree' is empty, create initial undo-tree - (when (null buffer-undo-tree) (setq buffer-undo-tree (make-undo-tree))) - ;; make sure there's a canary at end of `buffer-undo-list' - (when (null buffer-undo-list) - (setq buffer-undo-list '(nil undo-tree-canary))) - - (unless (or (eq (cadr buffer-undo-list) 'undo-tree-canary) - (eq (car buffer-undo-list) 'undo-tree-canary)) - ;; create new node from first changeset in `buffer-undo-list', save old - ;; `buffer-undo-tree' current node, and make new node the current node - (let* ((node (undo-tree-make-node nil (undo-list-pop-changeset))) - (splice (undo-tree-current buffer-undo-tree)) - (size (undo-list-byte-size (undo-tree-node-undo node))) - (count 1)) - (setf (undo-tree-current buffer-undo-tree) node) - ;; grow tree fragment backwards using `buffer-undo-list' changesets - (while (and buffer-undo-list - (not (eq (cadr buffer-undo-list) 'undo-tree-canary))) - (setq node - (undo-tree-grow-backwards node (undo-list-pop-changeset))) - (incf size (undo-list-byte-size (undo-tree-node-undo node))) - (incf count)) - ;; if no undo history has been discarded from `buffer-undo-list' since - ;; last transfer, splice new tree fragment onto end of old - ;; `buffer-undo-tree' current node - (if (or (eq (cadr buffer-undo-list) 'undo-tree-canary) - (eq (car buffer-undo-list) 'undo-tree-canary)) - (progn - (setf (undo-tree-node-previous node) splice) - (push node (undo-tree-node-next splice)) - (setf (undo-tree-node-branch splice) 0) - (incf (undo-tree-size buffer-undo-tree) size) - (incf (undo-tree-count buffer-undo-tree) count)) - ;; if undo history has been discarded, replace entire - ;; `buffer-undo-tree' with new tree fragment - (setq node (undo-tree-grow-backwards node nil)) - (setf (undo-tree-root buffer-undo-tree) node) - (setq buffer-undo-list '(nil undo-tree-canary)) - (setf (undo-tree-size buffer-undo-tree) size) - (setf (undo-tree-count buffer-undo-tree) count) - (setq buffer-undo-list '(nil undo-tree-canary)))) - ;; discard undo history if necessary - (undo-tree-discard-history))) - - -(defun undo-list-byte-size (undo-list) - ;; Return size (in bytes) of UNDO-LIST - (let ((size 0) (p undo-list)) - (while p - (incf size 8) ; cons cells use up 8 bytes - (when (and (consp (car p)) (stringp (caar p))) - (incf size (string-bytes (caar p)))) - (setq p (cdr p))) - size)) - - - -(defun undo-list-rebuild-from-tree () - "Rebuild `buffer-undo-list' from information in `buffer-undo-tree'." - (unless (eq buffer-undo-list t) - (undo-list-transfer-to-tree) - (setq buffer-undo-list nil) - (when buffer-undo-tree - (let ((stack (list (list (undo-tree-root buffer-undo-tree))))) - (push (sort (mapcar 'identity (undo-tree-node-next (caar stack))) - (lambda (a b) - (time-less-p (undo-tree-node-timestamp a) - (undo-tree-node-timestamp b)))) - stack) - ;; Traverse tree in depth-and-oldest-first order, but add undo records - ;; on the way down, and redo records on the way up. - (while (or (car stack) - (not (eq (car (nth 1 stack)) - (undo-tree-current buffer-undo-tree)))) - (if (car stack) - (progn - (setq buffer-undo-list - (append (undo-tree-node-undo (caar stack)) - buffer-undo-list)) - (undo-boundary) - (push (sort (mapcar 'identity - (undo-tree-node-next (caar stack))) - (lambda (a b) - (time-less-p (undo-tree-node-timestamp a) - (undo-tree-node-timestamp b)))) - stack)) - (pop stack) - (setq buffer-undo-list - (append (undo-tree-node-redo (caar stack)) - buffer-undo-list)) - (undo-boundary) - (pop (car stack)))))))) - - - - -;;; ===================================================================== -;;; History discarding utility functions - -(defun undo-tree-oldest-leaf (node) - ;; Return oldest leaf node below NODE. - (while (undo-tree-node-next node) - (setq node - (car (sort (mapcar 'identity (undo-tree-node-next node)) - (lambda (a b) - (time-less-p (undo-tree-node-timestamp a) - (undo-tree-node-timestamp b))))))) - node) - - -(defun undo-tree-discard-node (node) - ;; Discard NODE from `buffer-undo-tree', and return next in line for - ;; discarding. - - ;; don't discard current node - (unless (eq node (undo-tree-current buffer-undo-tree)) - - ;; discarding root node... - (if (eq node (undo-tree-root buffer-undo-tree)) - (cond - ;; should always discard branches before root - ((> (length (undo-tree-node-next node)) 1) - (error "Trying to discard undo-tree root which still\ - has multiple branches")) - ;; don't discard root if current node is only child - ((eq (car (undo-tree-node-next node)) - (undo-tree-current buffer-undo-tree)) - nil) - ;; discard root - (t - ;; clear any register referring to root - (let ((r (undo-tree-node-register node))) - (when (and r (eq (get-register r) node)) - (set-register r nil))) - ;; make child of root into new root - (setq node (setf (undo-tree-root buffer-undo-tree) - (car (undo-tree-node-next node)))) - ;; update undo-tree size - (decf (undo-tree-size buffer-undo-tree) - (+ (undo-list-byte-size (undo-tree-node-undo node)) - (undo-list-byte-size (undo-tree-node-redo node)))) - (decf (undo-tree-count buffer-undo-tree)) - ;; discard new root's undo data and PREVIOUS link - (setf (undo-tree-node-undo node) nil - (undo-tree-node-redo node) nil - (undo-tree-node-previous node) nil) - ;; if new root has branches, or new root is current node, next node - ;; to discard is oldest leaf, otherwise it's new root - (if (or (> (length (undo-tree-node-next node)) 1) - (eq (car (undo-tree-node-next node)) - (undo-tree-current buffer-undo-tree))) - (undo-tree-oldest-leaf node) - node))) - - ;; discarding leaf node... - (let* ((parent (undo-tree-node-previous node)) - (current (nth (undo-tree-node-branch parent) - (undo-tree-node-next parent)))) - ;; clear any register referring to the discarded node - (let ((r (undo-tree-node-register node))) - (when (and r (eq (get-register r) node)) - (set-register r nil))) - ;; update undo-tree size - (decf (undo-tree-size buffer-undo-tree) - (+ (undo-list-byte-size (undo-tree-node-undo node)) - (undo-list-byte-size (undo-tree-node-redo node)))) - (decf (undo-tree-count buffer-undo-tree)) - ;; discard leaf - (setf (undo-tree-node-next parent) - (delq node (undo-tree-node-next parent)) - (undo-tree-node-branch parent) - (undo-tree-position current (undo-tree-node-next parent))) - ;; if parent has branches, or parent is current node, next node to - ;; discard is oldest leaf, otherwise it's the parent itself - (if (or (eq parent (undo-tree-current buffer-undo-tree)) - (and (undo-tree-node-next parent) - (or (not (eq parent (undo-tree-root buffer-undo-tree))) - (> (length (undo-tree-node-next parent)) 1)))) - (undo-tree-oldest-leaf parent) - parent))))) - - - -(defun undo-tree-discard-history () - "Discard undo history until we're within memory usage limits -set by `undo-limit', `undo-strong-limit' and `undo-outer-limit'." - - (when (> (undo-tree-size buffer-undo-tree) undo-limit) - ;; if there are no branches off root, first node to discard is root; - ;; otherwise it's leaf node at botom of oldest branch - (let ((node (if (> (length (undo-tree-node-next - (undo-tree-root buffer-undo-tree))) 1) - (undo-tree-oldest-leaf (undo-tree-root buffer-undo-tree)) - (undo-tree-root buffer-undo-tree)))) - - ;; discard nodes until memory use is within `undo-strong-limit' - (while (and node - (> (undo-tree-size buffer-undo-tree) undo-strong-limit)) - (setq node (undo-tree-discard-node node))) - - ;; discard nodes until next node to discard would bring memory use - ;; within `undo-limit' - (while (and node - ;; check first if last discard has brought us within - ;; `undo-limit', in case we can avoid more expensive - ;; `undo-strong-limit' calculation - ;; Note: this assumes undo-strong-limit > undo-limit; - ;; if not, effectively undo-strong-limit = undo-limit - (> (undo-tree-size buffer-undo-tree) undo-limit) - (> (- (undo-tree-size buffer-undo-tree) - ;; if next node to discard is root, the memory we - ;; free-up comes from discarding changesets from its - ;; only child... - (if (eq node (undo-tree-root buffer-undo-tree)) - (+ (undo-list-byte-size - (undo-tree-node-undo - (car (undo-tree-node-next node)))) - (undo-list-byte-size - (undo-tree-node-redo - (car (undo-tree-node-next node))))) - ;; ...otherwise, it comes from discarding changesets - ;; from along with the node itself - (+ (undo-list-byte-size (undo-tree-node-undo node)) - (undo-list-byte-size (undo-tree-node-redo node))) - )) - undo-limit)) - (setq node (undo-tree-discard-node node))) - - ;; if we're still over the `undo-outer-limit', discard entire history - (when (> (undo-tree-size buffer-undo-tree) undo-outer-limit) - ;; query first if `undo-ask-before-discard' is set - (if undo-ask-before-discard - (when (yes-or-no-p - (format - "Buffer `%s' undo info is %d bytes long; discard it? " - (buffer-name) (undo-tree-size buffer-undo-tree))) - (setq buffer-undo-tree nil)) - ;; otherwise, discard and display warning - (display-warning - '(undo discard-info) - (concat - (format "Buffer `%s' undo info was %d bytes long.\n" - (buffer-name) (undo-tree-size buffer-undo-tree)) - "The undo info was discarded because it exceeded\ - `undo-outer-limit'. - -This is normal if you executed a command that made a huge change -to the buffer. In that case, to prevent similar problems in the -future, set `undo-outer-limit' to a value that is large enough to -cover the maximum size of normal changes you expect a single -command to make, but not so large that it might exceed the -maximum memory allotted to Emacs. - -If you did not execute any such command, the situation is -probably due to a bug and you should report it. - -You can disable the popping up of this buffer by adding the entry -\(undo discard-info) to the user option `warning-suppress-types', -which is defined in the `warnings' library.\n") - :warning) - (setq buffer-undo-tree nil))) - ))) - - - - -;;; ===================================================================== -;;; Visualizer utility functions - -(defun undo-tree-compute-widths (node) - "Recursively compute widths for nodes below NODE." - (let ((stack (list node)) - res) - (while stack - ;; try to compute widths for node at top of stack - (if (undo-tree-node-p - (setq res (undo-tree-node-compute-widths (car stack)))) - ;; if computation fails, it returns a node whose widths still need - ;; computing, which we push onto the stack - (push res stack) - ;; otherwise, store widths and remove it from stack - (setf (undo-tree-node-lwidth (car stack)) (aref res 0) - (undo-tree-node-cwidth (car stack)) (aref res 1) - (undo-tree-node-rwidth (car stack)) (aref res 2)) - (pop stack))))) - - -(defun undo-tree-node-compute-widths (node) - ;; Compute NODE's left-, centre-, and right-subtree widths. Returns widths - ;; (in a vector) if successful. Otherwise, returns a node whose widths need - ;; calculating before NODE's can be calculated. - (let ((num-children (length (undo-tree-node-next node))) - (lwidth 0) (cwidth 0) (rwidth 0) p) - (catch 'need-widths - (cond - ;; leaf nodes have 0 width - ((= 0 num-children) - (setf cwidth 1 - (undo-tree-node-lwidth node) 0 - (undo-tree-node-cwidth node) 1 - (undo-tree-node-rwidth node) 0)) - - ;; odd number of children - ((= (mod num-children 2) 1) - (setq p (undo-tree-node-next node)) - ;; compute left-width - (dotimes (i (/ num-children 2)) - (if (undo-tree-node-lwidth (car p)) - (incf lwidth (+ (undo-tree-node-lwidth (car p)) - (undo-tree-node-cwidth (car p)) - (undo-tree-node-rwidth (car p)))) - ;; if child's widths haven't been computed, return that child - (throw 'need-widths (car p))) - (setq p (cdr p))) - (if (undo-tree-node-lwidth (car p)) - (incf lwidth (undo-tree-node-lwidth (car p))) - (throw 'need-widths (car p))) - ;; centre-width is inherited from middle child - (setf cwidth (undo-tree-node-cwidth (car p))) - ;; compute right-width - (incf rwidth (undo-tree-node-rwidth (car p))) - (setq p (cdr p)) - (dotimes (i (/ num-children 2)) - (if (undo-tree-node-lwidth (car p)) - (incf rwidth (+ (undo-tree-node-lwidth (car p)) - (undo-tree-node-cwidth (car p)) - (undo-tree-node-rwidth (car p)))) - (throw 'need-widths (car p))) - (setq p (cdr p)))) - - ;; even number of children - (t - (setq p (undo-tree-node-next node)) - ;; compute left-width - (dotimes (i (/ num-children 2)) - (if (undo-tree-node-lwidth (car p)) - (incf lwidth (+ (undo-tree-node-lwidth (car p)) - (undo-tree-node-cwidth (car p)) - (undo-tree-node-rwidth (car p)))) - (throw 'need-widths (car p))) - (setq p (cdr p))) - ;; centre-width is 0 when number of children is even - (setq cwidth 0) - ;; compute right-width - (dotimes (i (/ num-children 2)) - (if (undo-tree-node-lwidth (car p)) - (incf rwidth (+ (undo-tree-node-lwidth (car p)) - (undo-tree-node-cwidth (car p)) - (undo-tree-node-rwidth (car p)))) - (throw 'need-widths (car p))) - (setq p (cdr p))))) - - ;; return left-, centre- and right-widths - (vector lwidth cwidth rwidth)))) - - -(defun undo-tree-clear-visualizer-data (tree) - ;; Clear visualizer data below NODE. - (undo-tree-mapc - (lambda (n) (undo-tree-node-clear-visualizer-data n)) - (undo-tree-root tree))) - - -(defun undo-tree-node-unmodified-p (node &optional mtime) - ;; Return non-nil if NODE corresponds to a buffer state that once upon a - ;; time was unmodified. If a file modification time MTIME is specified, - ;; return non-nil if the corresponding buffer state really is unmodified. - (let (changeset ntime) - (setq changeset - (or (undo-tree-node-redo node) - (and (setq changeset (car (undo-tree-node-next node))) - (undo-tree-node-undo changeset))) - ntime - (catch 'found - (dolist (elt changeset) - (when (and (consp elt) (eq (car elt) t) (consp (cdr elt)) - (throw 'found (cdr elt))))))) - (and ntime - (or (null mtime) - ;; high-precision timestamps - (if (listp (cdr ntime)) - (equal ntime mtime) - ;; old-style timestamps - (and (= (car ntime) (car mtime)) - (= (cdr ntime) (cadr mtime)))))))) - - - - -;;; ===================================================================== -;;; Undo-in-region utility functions - -;; `undo-elt-in-region' uses this as a dynamically-scoped variable -(defvar undo-adjusted-markers nil) - - -(defun undo-tree-pull-undo-in-region-branch (start end) - ;; Pull out entries from undo changesets to create a new undo-in-region - ;; branch, which undoes changeset entries lying between START and END first, - ;; followed by remaining entries from the changesets, before rejoining the - ;; existing undo tree history. Repeated calls will, if appropriate, extend - ;; the current undo-in-region branch rather than creating a new one. - - ;; if we're just reverting the last redo-in-region, we don't need to - ;; manipulate the undo tree at all - (if (undo-tree-reverting-redo-in-region-p start end) - t ; return t to indicate success - - ;; We build the `region-changeset' and `delta-list' lists forwards, using - ;; pointers `r' and `d' to the penultimate element of the list. So that we - ;; don't have to treat the first element differently, we prepend a dummy - ;; leading nil to the lists, and have the pointers point to that - ;; initially. - ;; Note: using '(nil) instead of (list nil) in the `let*' results in - ;; bizarre errors when the code is byte-compiled, where parts of the - ;; lists appear to survive across different calls to this function. - ;; An obscure byte-compiler bug, perhaps? - (let* ((region-changeset (list nil)) - (r region-changeset) - (delta-list (list nil)) - (d delta-list) - (node (undo-tree-current buffer-undo-tree)) - (repeated-undo-in-region - (undo-tree-repeated-undo-in-region-p start end)) - undo-adjusted-markers ; `undo-elt-in-region' expects this - fragment splice original-fragment original-splice original-current - got-visible-elt undo-list elt) - - ;; --- initialisation --- - (cond - ;; if this is a repeated undo in the same region, start pulling changes - ;; from NODE at which undo-in-region branch iss attached, and detatch - ;; the branch, using it as initial FRAGMENT of branch being constructed - (repeated-undo-in-region - (setq original-current node - fragment (car (undo-tree-node-next node)) - splice node) - ;; undo up to node at which undo-in-region branch is attached - ;; (recognizable as first node with more than one branch) - (let ((mark-active nil)) - (while (= (length (undo-tree-node-next node)) 1) - (undo-tree-undo-1) - (setq fragment node - node (undo-tree-current buffer-undo-tree)))) - (when (eq splice node) (setq splice nil)) - ;; detatch undo-in-region branch - (setf (undo-tree-node-next node) - (delq fragment (undo-tree-node-next node)) - (undo-tree-node-previous fragment) nil - original-fragment fragment - original-splice node)) - - ;; if this is a new undo-in-region, initial FRAGMENT is a copy of all - ;; nodes below the current one in the active branch - ((undo-tree-node-next node) - (setq fragment (undo-tree-make-node nil nil) - splice fragment) - (while (setq node (nth (undo-tree-node-branch node) - (undo-tree-node-next node))) - (push (undo-tree-make-node - splice - (undo-copy-list (undo-tree-node-undo node)) - (undo-copy-list (undo-tree-node-redo node))) - (undo-tree-node-next splice)) - (setq splice (car (undo-tree-node-next splice)))) - (setq fragment (car (undo-tree-node-next fragment)) - splice nil - node (undo-tree-current buffer-undo-tree)))) - - - ;; --- pull undo-in-region elements into branch --- - ;; work backwards up tree, pulling out undo elements within region until - ;; we've got one that undoes a visible change (insertion or deletion) - (catch 'abort - (while (and (not got-visible-elt) node (undo-tree-node-undo node)) - ;; we cons a dummy nil element on the front of the changeset so that - ;; we can conveniently remove the first (real) element from the - ;; changeset if we need to; the leading nil is removed once we're - ;; done with this changeset - (setq undo-list (cons nil (undo-copy-list (undo-tree-node-undo node))) - elt (cadr undo-list)) - (if fragment - (progn - (setq fragment (undo-tree-grow-backwards fragment undo-list)) - (unless splice (setq splice fragment))) - (setq fragment (undo-tree-make-node nil undo-list)) - (setq splice fragment)) - - (while elt - (cond - ;; keep elements within region - ((undo-elt-in-region elt start end) - ;; set flag if kept element is visible (insertion or deletion) - (when (and (consp elt) - (or (stringp (car elt)) (integerp (car elt)))) - (setq got-visible-elt t)) - ;; adjust buffer positions in elements previously undone before - ;; kept element, as kept element will now be undone first - (undo-tree-adjust-elements-to-elt splice elt) - ;; move kept element to undo-in-region changeset, adjusting its - ;; buffer position as it will now be undone first - (setcdr r (list (undo-tree-apply-deltas elt (cdr delta-list)))) - (setq r (cdr r)) - (setcdr undo-list (cddr undo-list))) - - ;; discard "was unmodified" elements - ;; FIXME: deal properly with these - ((and (consp elt) (eq (car elt) t)) - (setcdr undo-list (cddr undo-list))) - - ;; if element crosses region, we can't pull any more elements - ((undo-elt-crosses-region elt start end) - ;; if we've found a visible element, it must be earlier in - ;; current node's changeset; stop pulling elements (null - ;; `undo-list' and non-nil `got-visible-elt' cause loop to exit) - (if got-visible-elt - (setq undo-list nil) - ;; if we haven't found a visible element yet, pulling - ;; undo-in-region branch has failed - (setq region-changeset nil) - (throw 'abort t))) - - ;; if rejecting element, add its delta (if any) to the list - (t - (let ((delta (undo-delta elt))) - (when (/= 0 (cdr delta)) - (setcdr d (list delta)) - (setq d (cdr d)))) - (setq undo-list (cdr undo-list)))) - - ;; process next element of current changeset - (setq elt (cadr undo-list))) - - ;; if there are remaining elements in changeset, remove dummy nil - ;; from front - (if (cadr (undo-tree-node-undo fragment)) - (pop (undo-tree-node-undo fragment)) - ;; otherwise, if we've kept all elements in changeset, discard - ;; empty changeset - (when (eq splice fragment) (setq splice nil)) - (setq fragment (car (undo-tree-node-next fragment)))) - ;; process changeset from next node up the tree - (setq node (undo-tree-node-previous node)))) - - ;; pop dummy nil from front of `region-changeset' - (setq region-changeset (cdr region-changeset)) - - - ;; --- integrate branch into tree --- - ;; if no undo-in-region elements were found, restore undo tree - (if (null region-changeset) - (when original-current - (push original-fragment (undo-tree-node-next original-splice)) - (setf (undo-tree-node-branch original-splice) 0 - (undo-tree-node-previous original-fragment) original-splice) - (let ((mark-active nil)) - (while (not (eq (undo-tree-current buffer-undo-tree) - original-current)) - (undo-tree-redo-1))) - nil) ; return nil to indicate failure - - ;; otherwise... - ;; need to undo up to node where new branch will be attached, to - ;; ensure redo entries are populated, and then redo back to where we - ;; started - (let ((mark-active nil) - (current (undo-tree-current buffer-undo-tree))) - (while (not (eq (undo-tree-current buffer-undo-tree) node)) - (undo-tree-undo-1)) - (while (not (eq (undo-tree-current buffer-undo-tree) current)) - (undo-tree-redo-1))) - - (cond - ;; if there's no remaining fragment, just create undo-in-region node - ;; and attach it to parent of last node from which elements were - ;; pulled - ((null fragment) - (setq fragment (undo-tree-make-node node region-changeset)) - (push fragment (undo-tree-node-next node)) - (setf (undo-tree-node-branch node) 0) - ;; set current node to undo-in-region node - (setf (undo-tree-current buffer-undo-tree) fragment)) - - ;; if no splice point has been set, add undo-in-region node to top of - ;; fragment and attach it to parent of last node from which elements - ;; were pulled - ((null splice) - (setq fragment (undo-tree-grow-backwards fragment region-changeset)) - (push fragment (undo-tree-node-next node)) - (setf (undo-tree-node-branch node) 0 - (undo-tree-node-previous fragment) node) - ;; set current node to undo-in-region node - (setf (undo-tree-current buffer-undo-tree) fragment)) - - ;; if fragment contains nodes, attach fragment to parent of last node - ;; from which elements were pulled, and splice in undo-in-region node - (t - (setf (undo-tree-node-previous fragment) node) - (push fragment (undo-tree-node-next node)) - (setf (undo-tree-node-branch node) 0) - ;; if this is a repeated undo-in-region, then we've left the current - ;; node at the original splice-point; we need to set the current - ;; node to the equivalent node on the undo-in-region branch and redo - ;; back to where we started - (when repeated-undo-in-region - (setf (undo-tree-current buffer-undo-tree) - (undo-tree-node-previous original-fragment)) - (let ((mark-active nil)) - (while (not (eq (undo-tree-current buffer-undo-tree) splice)) - (undo-tree-redo-1 nil 'preserve-undo)))) - ;; splice new undo-in-region node into fragment - (setq node (undo-tree-make-node nil region-changeset)) - (undo-tree-splice-node node splice) - ;; set current node to undo-in-region node - (setf (undo-tree-current buffer-undo-tree) node))) - - ;; update undo-tree size - (setq node (undo-tree-node-previous fragment)) - (while (progn - (and (setq node (car (undo-tree-node-next node))) - (not (eq node original-fragment)) - (incf (undo-tree-count buffer-undo-tree)) - (incf (undo-tree-size buffer-undo-tree) - (+ (undo-list-byte-size (undo-tree-node-undo node)) - (undo-list-byte-size (undo-tree-node-redo node))))))) - t) ; indicate undo-in-region branch was successfully pulled - ))) - - - -(defun undo-tree-pull-redo-in-region-branch (start end) - ;; Pull out entries from redo changesets to create a new redo-in-region - ;; branch, which redoes changeset entries lying between START and END first, - ;; followed by remaining entries from the changesets. Repeated calls will, - ;; if appropriate, extend the current redo-in-region branch rather than - ;; creating a new one. - - ;; if we're just reverting the last undo-in-region, we don't need to - ;; manipulate the undo tree at all - (if (undo-tree-reverting-undo-in-region-p start end) - t ; return t to indicate success - - ;; We build the `region-changeset' and `delta-list' lists forwards, using - ;; pointers `r' and `d' to the penultimate element of the list. So that we - ;; don't have to treat the first element differently, we prepend a dummy - ;; leading nil to the lists, and have the pointers point to that - ;; initially. - ;; Note: using '(nil) instead of (list nil) in the `let*' causes bizarre - ;; errors when the code is byte-compiled, where parts of the lists - ;; appear to survive across different calls to this function. An - ;; obscure byte-compiler bug, perhaps? - (let* ((region-changeset (list nil)) - (r region-changeset) - (delta-list (list nil)) - (d delta-list) - (node (undo-tree-current buffer-undo-tree)) - (repeated-redo-in-region - (undo-tree-repeated-redo-in-region-p start end)) - undo-adjusted-markers ; `undo-elt-in-region' expects this - fragment splice got-visible-elt redo-list elt) - - ;; --- inisitalisation --- - (cond - ;; if this is a repeated redo-in-region, detach fragment below current - ;; node - (repeated-redo-in-region - (when (setq fragment (car (undo-tree-node-next node))) - (setf (undo-tree-node-previous fragment) nil - (undo-tree-node-next node) - (delq fragment (undo-tree-node-next node))))) - ;; if this is a new redo-in-region, initial fragment is a copy of all - ;; nodes below the current one in the active branch - ((undo-tree-node-next node) - (setq fragment (undo-tree-make-node nil nil) - splice fragment) - (while (setq node (nth (undo-tree-node-branch node) - (undo-tree-node-next node))) - (push (undo-tree-make-node - splice nil - (undo-copy-list (undo-tree-node-redo node))) - (undo-tree-node-next splice)) - (setq splice (car (undo-tree-node-next splice)))) - (setq fragment (car (undo-tree-node-next fragment))))) - - - ;; --- pull redo-in-region elements into branch --- - ;; work down fragment, pulling out redo elements within region until - ;; we've got one that redoes a visible change (insertion or deletion) - (setq node fragment) - (catch 'abort - (while (and (not got-visible-elt) node (undo-tree-node-redo node)) - ;; we cons a dummy nil element on the front of the changeset so that - ;; we can conveniently remove the first (real) element from the - ;; changeset if we need to; the leading nil is removed once we're - ;; done with this changeset - (setq redo-list (push nil (undo-tree-node-redo node)) - elt (cadr redo-list)) - (while elt - (cond - ;; keep elements within region - ((undo-elt-in-region elt start end) - ;; set flag if kept element is visible (insertion or deletion) - (when (and (consp elt) - (or (stringp (car elt)) (integerp (car elt)))) - (setq got-visible-elt t)) - ;; adjust buffer positions in elements previously redone before - ;; kept element, as kept element will now be redone first - (undo-tree-adjust-elements-to-elt fragment elt t) - ;; move kept element to redo-in-region changeset, adjusting its - ;; buffer position as it will now be redone first - (setcdr r (list (undo-tree-apply-deltas elt (cdr delta-list) -1))) - (setq r (cdr r)) - (setcdr redo-list (cddr redo-list))) - - ;; discard "was unmodified" elements - ;; FIXME: deal properly with these - ((and (consp elt) (eq (car elt) t)) - (setcdr redo-list (cddr redo-list))) - - ;; if element crosses region, we can't pull any more elements - ((undo-elt-crosses-region elt start end) - ;; if we've found a visible element, it must be earlier in - ;; current node's changeset; stop pulling elements (null - ;; `redo-list' and non-nil `got-visible-elt' cause loop to exit) - (if got-visible-elt - (setq redo-list nil) - ;; if we haven't found a visible element yet, pulling - ;; redo-in-region branch has failed - (setq region-changeset nil) - (throw 'abort t))) - - ;; if rejecting element, add its delta (if any) to the list - (t - (let ((delta (undo-delta elt))) - (when (/= 0 (cdr delta)) - (setcdr d (list delta)) - (setq d (cdr d)))) - (setq redo-list (cdr redo-list)))) - - ;; process next element of current changeset - (setq elt (cadr redo-list))) - - ;; if there are remaining elements in changeset, remove dummy nil - ;; from front - (if (cadr (undo-tree-node-redo node)) - (pop (undo-tree-node-undo node)) - ;; otherwise, if we've kept all elements in changeset, discard - ;; empty changeset - (if (eq fragment node) - (setq fragment (car (undo-tree-node-next fragment))) - (undo-tree-snip-node node))) - ;; process changeset from next node in fragment - (setq node (car (undo-tree-node-next node))))) - - ;; pop dummy nil from front of `region-changeset' - (setq region-changeset (cdr region-changeset)) - - - ;; --- integrate branch into tree --- - (setq node (undo-tree-current buffer-undo-tree)) - ;; if no redo-in-region elements were found, restore undo tree - (if (null (car region-changeset)) - (when (and repeated-redo-in-region fragment) - (push fragment (undo-tree-node-next node)) - (setf (undo-tree-node-branch node) 0 - (undo-tree-node-previous fragment) node) - nil) ; return nil to indicate failure - - ;; otherwise, add redo-in-region node to top of fragment, and attach - ;; it below current node - (setq fragment - (if fragment - (undo-tree-grow-backwards fragment nil region-changeset) - (undo-tree-make-node nil nil region-changeset))) - (push fragment (undo-tree-node-next node)) - (setf (undo-tree-node-branch node) 0 - (undo-tree-node-previous fragment) node) - ;; update undo-tree size - (unless repeated-redo-in-region - (setq node fragment) - (while (and (setq node (car (undo-tree-node-next node))) - (incf (undo-tree-count buffer-undo-tree)) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size - (undo-tree-node-redo node)))))) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo fragment))) - t) ; indicate redo-in-region branch was successfully pulled - ))) - - - -(defun undo-tree-adjust-elements-to-elt (node undo-elt &optional below) - "Adjust buffer positions of undo elements, starting at NODE's -and going up the tree (or down the active branch if BELOW is -non-nil) and through the nodes' undo elements until we reach -UNDO-ELT. UNDO-ELT must appear somewhere in the undo changeset -of either NODE itself or some node above it in the tree." - (let ((delta (list (undo-delta undo-elt))) - (undo-list (undo-tree-node-undo node))) - ;; adjust elements until we reach UNDO-ELT - (while (and (car undo-list) - (not (eq (car undo-list) undo-elt))) - (setcar undo-list - (undo-tree-apply-deltas (car undo-list) delta -1)) - ;; move to next undo element in list, or to next node if we've run out - ;; of elements - (unless (car (setq undo-list (cdr undo-list))) - (if below - (setq node (nth (undo-tree-node-branch node) - (undo-tree-node-next node))) - (setq node (undo-tree-node-previous node))) - (setq undo-list (undo-tree-node-undo node)))))) - - - -(defun undo-tree-apply-deltas (undo-elt deltas &optional sgn) - ;; Apply DELTAS in order to UNDO-ELT, multiplying deltas by SGN - ;; (only useful value for SGN is -1). - (let (position offset) - (dolist (delta deltas) - (setq position (car delta) - offset (* (cdr delta) (or sgn 1))) - (cond - ;; POSITION - ((integerp undo-elt) - (when (>= undo-elt position) - (setq undo-elt (- undo-elt offset)))) - ;; nil (or any other atom) - ((atom undo-elt)) - ;; (TEXT . POSITION) - ((stringp (car undo-elt)) - (let ((text-pos (abs (cdr undo-elt))) - (point-at-end (< (cdr undo-elt) 0))) - (if (>= text-pos position) - (setcdr undo-elt (* (if point-at-end -1 1) - (- text-pos offset)))))) - ;; (BEGIN . END) - ((integerp (car undo-elt)) - (when (>= (car undo-elt) position) - (setcar undo-elt (- (car undo-elt) offset)) - (setcdr undo-elt (- (cdr undo-elt) offset)))) - ;; (nil PROPERTY VALUE BEG . END) - ((null (car undo-elt)) - (let ((tail (nthcdr 3 undo-elt))) - (when (>= (car tail) position) - (setcar tail (- (car tail) offset)) - (setcdr tail (- (cdr tail) offset))))) - )) - undo-elt)) - - - -(defun undo-tree-repeated-undo-in-region-p (start end) - ;; Return non-nil if undo-in-region between START and END is a repeated - ;; undo-in-region - (let ((node (undo-tree-current buffer-undo-tree))) - (and (setq node - (nth (undo-tree-node-branch node) (undo-tree-node-next node))) - (eq (undo-tree-node-undo-beginning node) start) - (eq (undo-tree-node-undo-end node) end)))) - - -(defun undo-tree-repeated-redo-in-region-p (start end) - ;; Return non-nil if undo-in-region between START and END is a repeated - ;; undo-in-region - (let ((node (undo-tree-current buffer-undo-tree))) - (and (eq (undo-tree-node-redo-beginning node) start) - (eq (undo-tree-node-redo-end node) end)))) - - -;; Return non-nil if undo-in-region between START and END is simply -;; reverting the last redo-in-region -(defalias 'undo-tree-reverting-undo-in-region-p - 'undo-tree-repeated-undo-in-region-p) - - -;; Return non-nil if redo-in-region between START and END is simply -;; reverting the last undo-in-region -(defalias 'undo-tree-reverting-redo-in-region-p - 'undo-tree-repeated-redo-in-region-p) - - - - -;;; ===================================================================== -;;; Undo-tree commands - -;;;###autoload -(define-minor-mode undo-tree-mode - "Toggle undo-tree mode. -With no argument, this command toggles the mode. -A positive prefix argument turns the mode on. -A negative prefix argument turns it off. - -Undo-tree-mode replaces Emacs' standard undo feature with a more -powerful yet easier to use version, that treats the undo history -as what it is: a tree. - -The following keys are available in `undo-tree-mode': - - \\{undo-tree-map} - -Within the undo-tree visualizer, the following keys are available: - - \\{undo-tree-visualizer-mode-map}" - - nil ; init value - undo-tree-mode-lighter ; lighter - undo-tree-map ; keymap - - ;; if disabling `undo-tree-mode', rebuild `buffer-undo-list' from tree so - ;; Emacs undo can work - (when (not undo-tree-mode) - (undo-list-rebuild-from-tree) - (setq buffer-undo-tree nil))) - - -(defun turn-on-undo-tree-mode (&optional print-message) - "Enable `undo-tree-mode' in the current buffer, when appropriate. -Some major modes implement their own undo system, which should -not normally be overridden by `undo-tree-mode'. This command does -not enable `undo-tree-mode' in such buffers. If you want to force -`undo-tree-mode' to be enabled regardless, use (undo-tree-mode 1) -instead. - -The heuristic used to detect major modes in which -`undo-tree-mode' should not be used is to check whether either -the `undo' command has been remapped, or the default undo -keybindings (C-/ and C-_) have been overridden somewhere other -than in the global map. In addition, `undo-tree-mode' will not be -enabled if the buffer's `major-mode' appears in -`undo-tree-incompatible-major-modes'." - (interactive "p") - (if (or (key-binding [remap undo]) - (undo-tree-overridden-undo-bindings-p) - (memq major-mode undo-tree-incompatible-major-modes)) - (when print-message - (message "Buffer does not support undo-tree-mode;\ - undo-tree-mode NOT enabled")) - (undo-tree-mode 1))) - - -(defun undo-tree-overridden-undo-bindings-p () - "Returns t if default undo bindings are overridden, nil otherwise. -Checks if either of the default undo key bindings (\"C-/\" or -\"C-_\") are overridden in the current buffer by any keymap other -than the global one. (So global redefinitions of the default undo -key bindings do not count.)" - (let ((binding1 (lookup-key (current-global-map) [?\C-/])) - (binding2 (lookup-key (current-global-map) [?\C-_]))) - (global-set-key [?\C-/] 'undo) - (global-set-key [?\C-_] 'undo) - (unwind-protect - (or (and (key-binding [?\C-/]) - (not (eq (key-binding [?\C-/]) 'undo))) - (and (key-binding [?\C-_]) - (not (eq (key-binding [?\C-_]) 'undo)))) - (global-set-key [?\C-/] binding1) - (global-set-key [?\C-_] binding2)))) - - -;;;###autoload -(define-globalized-minor-mode global-undo-tree-mode - undo-tree-mode turn-on-undo-tree-mode) - - - -(defun undo-tree-undo (&optional arg) - "Undo changes. -Repeat this command to undo more changes. -A numeric ARG serves as a repeat count. - -In Transient Mark mode when the mark is active, only undo changes -within the current region. Similarly, when not in Transient Mark -mode, just \\[universal-argument] as an argument limits undo to -changes within the current region." - (interactive "*P") - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - ;; throw error if undo is disabled in buffer - (when (eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - (undo-tree-undo-1 arg) - ;; inform user if at branch point - (when (> (undo-tree-num-branches) 1) (message "Undo branch point!"))) - - -(defun undo-tree-undo-1 (&optional arg preserve-redo preserve-timestamps) - ;; Internal undo function. An active mark in `transient-mark-mode', or - ;; non-nil ARG otherwise, enables undo-in-region. Non-nil PRESERVE-REDO - ;; causes the existing redo record to be preserved, rather than replacing it - ;; with the new one generated by undoing. Non-nil PRESERVE-TIMESTAMPS - ;; disables updating of timestamps in visited undo-tree nodes. (This latter - ;; should *only* be used when temporarily visiting another undo state and - ;; immediately returning to the original state afterwards. Otherwise, it - ;; could cause history-discarding errors.) - (let ((undo-in-progress t) - (undo-in-region (and undo-tree-enable-undo-in-region - (or (region-active-p) - (and arg (not (numberp arg)))))) - pos current) - ;; transfer entries accumulated in `buffer-undo-list' to - ;; `buffer-undo-tree' - (undo-list-transfer-to-tree) - - (dotimes (i (or (and (numberp arg) (prefix-numeric-value arg)) 1)) - ;; check if at top of undo tree - (unless (undo-tree-node-previous (undo-tree-current buffer-undo-tree)) - (user-error "No further undo information")) - - ;; if region is active, or a non-numeric prefix argument was supplied, - ;; try to pull out a new branch of changes affecting the region - (when (and undo-in-region - (not (undo-tree-pull-undo-in-region-branch - (region-beginning) (region-end)))) - (user-error "No further undo information for region")) - - ;; remove any GC'd elements from node's undo list - (setq current (undo-tree-current buffer-undo-tree)) - (decf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-undo current))) - (setf (undo-tree-node-undo current) - (undo-list-clean-GCd-elts (undo-tree-node-undo current))) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-undo current))) - ;; undo one record from undo tree - (when undo-in-region - (setq pos (set-marker (make-marker) (point))) - (set-marker-insertion-type pos t)) - (primitive-undo 1 (undo-tree-copy-list (undo-tree-node-undo current))) - (undo-boundary) - - ;; if preserving old redo record, discard new redo entries that - ;; `primitive-undo' has added to `buffer-undo-list', and remove any GC'd - ;; elements from node's redo list - (if preserve-redo - (progn - (undo-list-pop-changeset) - (decf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo current))) - (setf (undo-tree-node-redo current) - (undo-list-clean-GCd-elts (undo-tree-node-redo current))) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo current)))) - ;; otherwise, record redo entries that `primitive-undo' has added to - ;; `buffer-undo-list' in current node's redo record, replacing - ;; existing entry if one already exists - (decf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo current))) - (setf (undo-tree-node-redo current) - (undo-list-pop-changeset 'discard-pos)) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo current)))) - - ;; rewind current node and update timestamp - (setf (undo-tree-current buffer-undo-tree) - (undo-tree-node-previous (undo-tree-current buffer-undo-tree))) - (unless preserve-timestamps - (setf (undo-tree-node-timestamp (undo-tree-current buffer-undo-tree)) - (current-time))) - - ;; if undoing-in-region, record current node, region and direction so we - ;; can tell if undo-in-region is repeated, and re-activate mark if in - ;; `transient-mark-mode'; if not, erase any leftover data - (if (not undo-in-region) - (undo-tree-node-clear-region-data current) - (goto-char pos) - ;; note: we deliberately want to store the region information in the - ;; node *below* the now current one - (setf (undo-tree-node-undo-beginning current) (region-beginning) - (undo-tree-node-undo-end current) (region-end)) - (set-marker pos nil))) - - ;; undo deactivates mark unless undoing-in-region - (setq deactivate-mark (not undo-in-region)))) - - - -(defun undo-tree-redo (&optional arg) - "Redo changes. A numeric ARG serves as a repeat count. - -In Transient Mark mode when the mark is active, only redo changes -within the current region. Similarly, when not in Transient Mark -mode, just \\[universal-argument] as an argument limits redo to -changes within the current region." - (interactive "*P") - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - ;; throw error if undo is disabled in buffer - (when (eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - (undo-tree-redo-1 arg) - ;; inform user if at branch point - (when (> (undo-tree-num-branches) 1) (message "Undo branch point!"))) - - -(defun undo-tree-redo-1 (&optional arg preserve-undo preserve-timestamps) - ;; Internal redo function. An active mark in `transient-mark-mode', or - ;; non-nil ARG otherwise, enables undo-in-region. Non-nil PRESERVE-UNDO - ;; causes the existing redo record to be preserved, rather than replacing it - ;; with the new one generated by undoing. Non-nil PRESERVE-TIMESTAMPS - ;; disables updating of timestamps in visited undo-tree nodes. (This latter - ;; should *only* be used when temporarily visiting another undo state and - ;; immediately returning to the original state afterwards. Otherwise, it - ;; could cause history-discarding errors.) - (let ((undo-in-progress t) - (redo-in-region (and undo-tree-enable-undo-in-region - (or (region-active-p) - (and arg (not (numberp arg)))))) - pos current) - ;; transfer entries accumulated in `buffer-undo-list' to - ;; `buffer-undo-tree' - (undo-list-transfer-to-tree) - - (dotimes (i (or (and (numberp arg) (prefix-numeric-value arg)) 1)) - ;; check if at bottom of undo tree - (when (null (undo-tree-node-next (undo-tree-current buffer-undo-tree))) - (user-error "No further redo information")) - - ;; if region is active, or a non-numeric prefix argument was supplied, - ;; try to pull out a new branch of changes affecting the region - (when (and redo-in-region - (not (undo-tree-pull-redo-in-region-branch - (region-beginning) (region-end)))) - (user-error "No further redo information for region")) - - ;; get next node (but DON'T advance current node in tree yet, in case - ;; redoing fails) - (setq current (undo-tree-current buffer-undo-tree) - current (nth (undo-tree-node-branch current) - (undo-tree-node-next current))) - ;; remove any GC'd elements from node's redo list - (decf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo current))) - (setf (undo-tree-node-redo current) - (undo-list-clean-GCd-elts (undo-tree-node-redo current))) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-redo current))) - ;; redo one record from undo tree - (when redo-in-region - (setq pos (set-marker (make-marker) (point))) - (set-marker-insertion-type pos t)) - (primitive-undo 1 (undo-tree-copy-list (undo-tree-node-redo current))) - (undo-boundary) - ;; advance current node in tree - (setf (undo-tree-current buffer-undo-tree) current) - - ;; if preserving old undo record, discard new undo entries that - ;; `primitive-undo' has added to `buffer-undo-list', and remove any GC'd - ;; elements from node's redo list - (if preserve-undo - (progn - (undo-list-pop-changeset) - (decf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-undo current))) - (setf (undo-tree-node-undo current) - (undo-list-clean-GCd-elts (undo-tree-node-undo current))) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-undo current)))) - ;; otherwise, record undo entries that `primitive-undo' has added to - ;; `buffer-undo-list' in current node's undo record, replacing - ;; existing entry if one already exists - (decf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-undo current))) - (setf (undo-tree-node-undo current) - (undo-list-pop-changeset 'discard-pos)) - (incf (undo-tree-size buffer-undo-tree) - (undo-list-byte-size (undo-tree-node-undo current)))) - - ;; update timestamp - (unless preserve-timestamps - (setf (undo-tree-node-timestamp current) (current-time))) - - ;; if redoing-in-region, record current node, region and direction so we - ;; can tell if redo-in-region is repeated, and re-activate mark if in - ;; `transient-mark-mode' - (if (not redo-in-region) - (undo-tree-node-clear-region-data current) - (goto-char pos) - (setf (undo-tree-node-redo-beginning current) (region-beginning) - (undo-tree-node-redo-end current) (region-end)) - (set-marker pos nil))) - - ;; redo deactivates the mark unless redoing-in-region - (setq deactivate-mark (not redo-in-region)))) - - - -(defun undo-tree-switch-branch (branch) - "Switch to a different BRANCH of the undo tree. -This will affect which branch to descend when *redoing* changes -using `undo-tree-redo'." - (interactive (list (or (and prefix-arg (prefix-numeric-value prefix-arg)) - (and (not (eq buffer-undo-list t)) - (or (undo-list-transfer-to-tree) t) - (let ((b (undo-tree-node-branch - (undo-tree-current - buffer-undo-tree)))) - (cond - ;; switch to other branch if only 2 - ((= (undo-tree-num-branches) 2) (- 1 b)) - ;; prompt if more than 2 - ((> (undo-tree-num-branches) 2) - (read-number - (format "Branch (0-%d, on %d): " - (1- (undo-tree-num-branches)) b))) - )))))) - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - ;; throw error if undo is disabled in buffer - (when (eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - ;; sanity check branch number - (when (<= (undo-tree-num-branches) 1) - (user-error "Not at undo branch point")) - (when (or (< branch 0) (> branch (1- (undo-tree-num-branches)))) - (user-error "Invalid branch number")) - ;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree' - (undo-list-transfer-to-tree) - ;; switch branch - (setf (undo-tree-node-branch (undo-tree-current buffer-undo-tree)) - branch) - (message "Switched to branch %d" branch)) - - -(defun undo-tree-set (node &optional preserve-timestamps) - ;; Set buffer to state corresponding to NODE. Returns intersection point - ;; between path back from current node and path back from selected NODE. - ;; Non-nil PRESERVE-TIMESTAMPS disables updating of timestamps in visited - ;; undo-tree nodes. (This should *only* be used when temporarily visiting - ;; another undo state and immediately returning to the original state - ;; afterwards. Otherwise, it could cause history-discarding errors.) - (let ((path (make-hash-table :test 'eq)) - (n node)) - (puthash (undo-tree-root buffer-undo-tree) t path) - ;; build list of nodes leading back from selected node to root, updating - ;; branches as we go to point down to selected node - (while (progn - (puthash n t path) - (when (undo-tree-node-previous n) - (setf (undo-tree-node-branch (undo-tree-node-previous n)) - (undo-tree-position - n (undo-tree-node-next (undo-tree-node-previous n)))) - (setq n (undo-tree-node-previous n))))) - ;; work backwards from current node until we intersect path back from - ;; selected node - (setq n (undo-tree-current buffer-undo-tree)) - (while (not (gethash n path)) - (setq n (undo-tree-node-previous n))) - ;; ascend tree until intersection node - (while (not (eq (undo-tree-current buffer-undo-tree) n)) - (undo-tree-undo-1 nil nil preserve-timestamps)) - ;; descend tree until selected node - (while (not (eq (undo-tree-current buffer-undo-tree) node)) - (undo-tree-redo-1 nil nil preserve-timestamps)) - n)) ; return intersection node - - - -(defun undo-tree-save-state-to-register (register) - "Store current undo-tree state to REGISTER. -The saved state can be restored using -`undo-tree-restore-state-from-register'. -Argument is a character, naming the register." - (interactive "cUndo-tree state to register: ") - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - ;; throw error if undo is disabled in buffer - (when (eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - ;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree' - (undo-list-transfer-to-tree) - ;; save current node to REGISTER - (set-register - register (registerv-make - (undo-tree-make-register-data - (current-buffer) (undo-tree-current buffer-undo-tree)) - :print-func 'undo-tree-register-data-print-func)) - ;; record REGISTER in current node, for visualizer - (setf (undo-tree-node-register (undo-tree-current buffer-undo-tree)) - register)) - - - -(defun undo-tree-restore-state-from-register (register) - "Restore undo-tree state from REGISTER. -The state must be saved using `undo-tree-save-state-to-register'. -Argument is a character, naming the register." - (interactive "*cRestore undo-tree state from register: ") - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - ;; throw error if undo is disabled in buffer, or if register doesn't contain - ;; an undo-tree node - (let ((data (registerv-data (get-register register)))) - (cond - ((eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - ((not (undo-tree-register-data-p data)) - (user-error "Register doesn't contain undo-tree state")) - ((not (eq (current-buffer) (undo-tree-register-data-buffer data))) - (user-error "Register contains undo-tree state for a different buffer"))) - ;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree' - (undo-list-transfer-to-tree) - ;; restore buffer state corresponding to saved node - (undo-tree-set (undo-tree-register-data-node data)))) - - - - -;;; ===================================================================== -;;; Persistent storage commands - -(defun undo-tree-make-history-save-file-name (file) - "Create the undo history file name for FILE. -Normally this is the file's name with \".\" prepended and -\".~undo-tree~\" appended. - -A match for FILE is sought in `undo-tree-history-directory-alist' -\(see the documentation of that variable for details\). If the -directory for the backup doesn't exist, it is created." - (let* ((backup-directory-alist undo-tree-history-directory-alist) - (name (make-backup-file-name-1 file))) - (concat (file-name-directory name) "." (file-name-nondirectory name) - ".~undo-tree~"))) - - -(defun undo-tree-save-history (&optional filename overwrite) - "Store undo-tree history to file. - -If optional argument FILENAME is omitted, default save file is -\"..~undo-tree\" if buffer is visiting a file. -Otherwise, prompt for one. - -If OVERWRITE is non-nil, any existing file will be overwritten -without asking for confirmation." - (interactive) - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - (when (eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - (undo-list-transfer-to-tree) - (when (and buffer-undo-tree (not (eq buffer-undo-tree t))) - (condition-case nil - (undo-tree-kill-visualizer) - (error (undo-tree-clear-visualizer-data buffer-undo-tree))) - (let ((buff (current-buffer)) - tree) - ;; get filename - (unless filename - (setq filename - (if buffer-file-name - (undo-tree-make-history-save-file-name buffer-file-name) - (expand-file-name (read-file-name "File to save in: ") nil)))) - (when (or (not (file-exists-p filename)) - overwrite - (yes-or-no-p (format "Overwrite \"%s\"? " filename))) - (unwind-protect - (progn - ;; transform undo-tree into non-circular structure, and make - ;; temporary copy - (undo-tree-decircle buffer-undo-tree) - (setq tree (copy-undo-tree buffer-undo-tree)) - ;; discard undo-tree object pool before saving - (setf (undo-tree-object-pool tree) nil) - ;; print undo-tree to file - ;; NOTE: We use `with-temp-buffer' instead of `with-temp-file' - ;; to allow `auto-compression-mode' to take effect, in - ;; case user has overridden or advised the default - ;; `undo-tree-make-history-save-file-name' to add a - ;; compressed file extension. - (with-auto-compression-mode - (with-temp-buffer - (prin1 (sha1 buff) (current-buffer)) - (terpri (current-buffer)) - (let ((print-circle t)) (prin1 tree (current-buffer))) - (write-region nil nil filename)))) - ;; restore circular undo-tree data structure - (undo-tree-recircle buffer-undo-tree)) - )))) - - - -(defun undo-tree-load-history (&optional filename noerror) - "Load undo-tree history from file. - -If optional argument FILENAME is null, default load file is -\"..~undo-tree\" if buffer is visiting a file. -Otherwise, prompt for one. - -If optional argument NOERROR is non-nil, return nil instead of -signaling an error if file is not found." - (interactive) - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - ;; get filename - (unless filename - (setq filename - (if buffer-file-name - (undo-tree-make-history-save-file-name buffer-file-name) - (expand-file-name (read-file-name "File to load from: ") nil)))) - - ;; attempt to read undo-tree from FILENAME - (catch 'load-error - (unless (file-exists-p filename) - (if noerror - (throw 'load-error nil) - (error "File \"%s\" does not exist; could not load undo-tree history" - filename))) - (let (buff hash tree) - (setq buff (current-buffer)) - (with-auto-compression-mode - (with-temp-buffer - (insert-file-contents filename) - (goto-char (point-min)) - (condition-case nil - (setq hash (read (current-buffer))) - (error - (kill-buffer nil) - (funcall (if noerror 'message 'user-error) - "Error reading undo-tree history from \"%s\"" filename) - (throw 'load-error nil))) - (unless (string= (sha1 buff) hash) - (kill-buffer nil) - (funcall (if noerror 'message 'user-error) - "Buffer has been modified; could not load undo-tree history") - (throw 'load-error nil)) - (condition-case nil - (setq tree (read (current-buffer))) - (error - (kill-buffer nil) - (funcall (if noerror 'message 'error) - "Error reading undo-tree history from \"%s\"" filename) - (throw 'load-error nil))) - (kill-buffer nil))) - ;; initialise empty undo-tree object pool - (setf (undo-tree-object-pool tree) - (make-hash-table :test 'eq :weakness 'value)) - ;; restore circular undo-tree data structure - (undo-tree-recircle tree) - (setq buffer-undo-tree tree)))) - - - -;; Versions of save/load functions for use in hooks -(defun undo-tree-save-history-hook () - (when (and undo-tree-mode undo-tree-auto-save-history - (not (eq buffer-undo-list t))) - (undo-tree-save-history nil t) nil)) - -(defun undo-tree-load-history-hook () - (when (and undo-tree-mode undo-tree-auto-save-history - (not (eq buffer-undo-list t)) - (not revert-buffer-in-progress-p)) - (undo-tree-load-history nil t))) - - - - -;;; ===================================================================== -;;; Visualizer drawing functions - -(defun undo-tree-visualize () - "Visualize the current buffer's undo tree." - (interactive "*") - (unless undo-tree-mode - (user-error "Undo-tree mode not enabled in buffer")) - (deactivate-mark) - ;; throw error if undo is disabled in buffer - (when (eq buffer-undo-list t) - (user-error "No undo information in this buffer")) - ;; transfer entries accumulated in `buffer-undo-list' to `buffer-undo-tree' - (undo-list-transfer-to-tree) - ;; add hook to kill visualizer buffer if original buffer is changed - (add-hook 'before-change-functions 'undo-tree-kill-visualizer nil t) - ;; prepare *undo-tree* buffer, then draw tree in it - (let ((undo-tree buffer-undo-tree) - (buff (current-buffer)) - (display-buffer-mark-dedicated 'soft)) - (switch-to-buffer-other-window - (get-buffer-create undo-tree-visualizer-buffer-name)) - (setq undo-tree-visualizer-parent-buffer buff) - (setq undo-tree-visualizer-parent-mtime - (and (buffer-file-name buff) - (nth 5 (file-attributes (buffer-file-name buff))))) - (setq undo-tree-visualizer-initial-node (undo-tree-current undo-tree)) - (setq undo-tree-visualizer-spacing - (undo-tree-visualizer-calculate-spacing)) - (make-local-variable 'undo-tree-visualizer-timestamps) - (make-local-variable 'undo-tree-visualizer-diff) - (setq buffer-undo-tree undo-tree) - (undo-tree-visualizer-mode) - ;; FIXME; don't know why `undo-tree-visualizer-mode' clears this - (setq buffer-undo-tree undo-tree) - (set (make-local-variable 'undo-tree-visualizer-lazy-drawing) - (or (eq undo-tree-visualizer-lazy-drawing t) - (and (numberp undo-tree-visualizer-lazy-drawing) - (>= (undo-tree-count undo-tree) - undo-tree-visualizer-lazy-drawing)))) - (when undo-tree-visualizer-diff (undo-tree-visualizer-show-diff)) - (let ((inhibit-read-only t)) (undo-tree-draw-tree undo-tree)))) - - -(defun undo-tree-kill-visualizer (&rest _dummy) - ;; Kill visualizer. Added to `before-change-functions' hook of original - ;; buffer when visualizer is invoked. - (unless (or undo-tree-inhibit-kill-visualizer - (null (get-buffer undo-tree-visualizer-buffer-name))) - (with-current-buffer undo-tree-visualizer-buffer-name - (undo-tree-visualizer-quit)))) - - - -(defun undo-tree-draw-tree (undo-tree) - ;; Draw undo-tree in current buffer starting from NODE (or root if nil). - (let ((node (if undo-tree-visualizer-lazy-drawing - (undo-tree-current undo-tree) - (undo-tree-root undo-tree)))) - (erase-buffer) - (setq undo-tree-visualizer-needs-extending-down nil - undo-tree-visualizer-needs-extending-up nil) - (undo-tree-clear-visualizer-data undo-tree) - (undo-tree-compute-widths node) - ;; lazy drawing starts vertically centred and displaced horizontally to - ;; the left (window-width/4), since trees will typically grow right - (if undo-tree-visualizer-lazy-drawing - (progn - (undo-tree-move-down (/ (window-height) 2)) - (undo-tree-move-forward (max 2 (/ (window-width) 4)))) ; left margin - ;; non-lazy drawing starts in centre at top of buffer - (undo-tree-move-down 1) ; top margin - (undo-tree-move-forward - (max (/ (window-width) 2) - (+ (undo-tree-node-char-lwidth node) - ;; add space for left part of left-most time-stamp - (if undo-tree-visualizer-timestamps - (/ (- undo-tree-visualizer-spacing 4) 2) - 0) - 2)))) ; left margin - ;; link starting node to its representation in visualizer - (setf (undo-tree-node-marker node) (make-marker)) - (set-marker-insertion-type (undo-tree-node-marker node) nil) - (move-marker (undo-tree-node-marker node) (point)) - ;; draw undo-tree - (let ((undo-tree-insert-face 'undo-tree-visualizer-default-face) - node-list) - (if (not undo-tree-visualizer-lazy-drawing) - (undo-tree-extend-down node t) - (undo-tree-extend-down node) - (undo-tree-extend-up node) - (setq node-list undo-tree-visualizer-needs-extending-down - undo-tree-visualizer-needs-extending-down nil) - (while node-list (undo-tree-extend-down (pop node-list))))) - ;; highlight active branch - (let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face)) - (undo-tree-highlight-active-branch - (or undo-tree-visualizer-needs-extending-up - (undo-tree-root undo-tree)))) - ;; highlight current node - (undo-tree-draw-node (undo-tree-current undo-tree) 'current))) - - -(defun undo-tree-extend-down (node &optional bottom) - ;; Extend tree downwards starting from NODE and point. If BOTTOM is t, - ;; extend all the way down to the leaves. If BOTTOM is a node, extend down - ;; as far as that node. If BOTTOM is an integer, extend down as far as that - ;; line. Otherwise, only extend visible portion of tree. NODE is assumed to - ;; already have a node marker. Returns non-nil if anything was actually - ;; extended. - (let ((extended nil) - (cur-stack (list node)) - next-stack) - ;; don't bother extending if BOTTOM specifies an already-drawn node - (unless (and (undo-tree-node-p bottom) (undo-tree-node-marker bottom)) - ;; draw nodes layer by layer - (while (or cur-stack - (prog1 (setq cur-stack next-stack) - (setq next-stack nil))) - (setq node (pop cur-stack)) - ;; if node is within range being drawn... - (if (or (eq bottom t) - (and (undo-tree-node-p bottom) - (not (eq (undo-tree-node-previous node) bottom))) - (and (integerp bottom) - (>= bottom (line-number-at-pos - (undo-tree-node-marker node)))) - (and (null bottom) - (pos-visible-in-window-p (undo-tree-node-marker node) - nil t))) - ;; ...draw one layer of node's subtree (if not already drawn) - (progn - (unless (and (undo-tree-node-next node) - (undo-tree-node-marker - (nth (undo-tree-node-branch node) - (undo-tree-node-next node)))) - (goto-char (undo-tree-node-marker node)) - (undo-tree-draw-subtree node) - (setq extended t)) - (setq next-stack - (append (undo-tree-node-next node) next-stack))) - ;; ...otherwise, postpone drawing until later - (push node undo-tree-visualizer-needs-extending-down)))) - extended)) - - -(defun undo-tree-extend-up (node &optional top) - ;; Extend tree upwards starting from NODE. If TOP is t, extend all the way - ;; to root. If TOP is a node, extend up as far as that node. If TOP is an - ;; integer, extend up as far as that line. Otherwise, only extend visible - ;; portion of tree. NODE is assumed to already have a node marker. Returns - ;; non-nil if anything was actually extended. - (let ((extended nil) parent) - ;; don't bother extending if TOP specifies an already-drawn node - (unless (and (undo-tree-node-p top) (undo-tree-node-marker top)) - (while node - (setq parent (undo-tree-node-previous node)) - ;; if we haven't reached root... - (if parent - ;; ...and node is within range being drawn... - (if (or (eq top t) - (and (undo-tree-node-p top) (not (eq node top))) - (and (integerp top) - (< top (line-number-at-pos - (undo-tree-node-marker node)))) - (and (null top) - ;; NOTE: we check point in case window-start is outdated - (< (min (line-number-at-pos (point)) - (line-number-at-pos (window-start))) - (line-number-at-pos - (undo-tree-node-marker node))))) - ;; ...and it hasn't already been drawn - (when (not (undo-tree-node-marker parent)) - ;; link parent node to its representation in visualizer - (undo-tree-compute-widths parent) - (undo-tree-move-to-parent node) - (setf (undo-tree-node-marker parent) (make-marker)) - (set-marker-insertion-type - (undo-tree-node-marker parent) nil) - (move-marker (undo-tree-node-marker parent) (point)) - ;; draw subtree beneath parent - (setq undo-tree-visualizer-needs-extending-down - (nconc (delq node (undo-tree-draw-subtree parent)) - undo-tree-visualizer-needs-extending-down)) - (setq extended t)) - ;; ...otherwise, postpone drawing for later and exit - (setq undo-tree-visualizer-needs-extending-up (when parent node) - parent nil)) - - ;; if we've reached root, stop extending and add top margin - (setq undo-tree-visualizer-needs-extending-up nil) - (goto-char (undo-tree-node-marker node)) - (undo-tree-move-up 1) ; top margin - (delete-region (point-min) (line-beginning-position))) - ;; next iteration - (setq node parent))) - extended)) - - -(defun undo-tree-expand-down (from &optional to) - ;; Expand tree downwards. FROM is the node to start expanding from. Stop - ;; expanding at TO if specified. Otherwise, just expand visible portion of - ;; tree and highlight active branch from FROM. - (when undo-tree-visualizer-needs-extending-down - (let ((inhibit-read-only t) - node-list extended) - ;; extend down as far as TO node - (when to - (setq extended (undo-tree-extend-down from to)) - (goto-char (undo-tree-node-marker to)) - (redisplay t)) ; force redisplay to scroll buffer if necessary - ;; extend visible portion of tree downwards - (setq node-list undo-tree-visualizer-needs-extending-down - undo-tree-visualizer-needs-extending-down nil) - (when node-list - (dolist (n node-list) - (when (undo-tree-extend-down n) (setq extended t))) - ;; highlight active branch in newly-extended-down portion, if any - (when extended - (let ((undo-tree-insert-face - 'undo-tree-visualizer-active-branch-face)) - (undo-tree-highlight-active-branch from))))))) - - -(defun undo-tree-expand-up (from &optional to) - ;; Expand tree upwards. FROM is the node to start expanding from, TO is the - ;; node to stop expanding at. If TO node isn't specified, just expand visible - ;; portion of tree and highlight active branch down to FROM. - (when undo-tree-visualizer-needs-extending-up - (let ((inhibit-read-only t) - extended node-list) - ;; extend up as far as TO node - (when to - (setq extended (undo-tree-extend-up from to)) - (goto-char (undo-tree-node-marker to)) - ;; simulate auto-scrolling if close to top of buffer - (when (<= (line-number-at-pos (point)) scroll-margin) - (undo-tree-move-up (if (= scroll-conservatively 0) - (/ (window-height) 2) 3)) - (when (undo-tree-extend-up to) (setq extended t)) - (goto-char (undo-tree-node-marker to)) - (unless (= scroll-conservatively 0) (recenter scroll-margin)))) - ;; extend visible portion of tree upwards - (and undo-tree-visualizer-needs-extending-up - (undo-tree-extend-up undo-tree-visualizer-needs-extending-up) - (setq extended t)) - ;; extend visible portion of tree downwards - (setq node-list undo-tree-visualizer-needs-extending-down - undo-tree-visualizer-needs-extending-down nil) - (dolist (n node-list) (undo-tree-extend-down n)) - ;; highlight active branch in newly-extended-up portion, if any - (when extended - (let ((undo-tree-insert-face - 'undo-tree-visualizer-active-branch-face)) - (undo-tree-highlight-active-branch - (or undo-tree-visualizer-needs-extending-up - (undo-tree-root buffer-undo-tree)) - from)))))) - - - -(defun undo-tree-highlight-active-branch (node &optional end) - ;; Draw highlighted active branch below NODE in current buffer. Stop - ;; highlighting at END node if specified. - (let ((stack (list node))) - ;; draw active branch - (while stack - (setq node (pop stack)) - (unless (or (eq node end) - (memq node undo-tree-visualizer-needs-extending-down)) - (goto-char (undo-tree-node-marker node)) - (setq node (undo-tree-draw-subtree node 'active) - stack (nconc stack node)))))) - - -(defun undo-tree-draw-node (node &optional current) - ;; Draw symbol representing NODE in visualizer. If CURRENT is non-nil, node - ;; is current node. - (goto-char (undo-tree-node-marker node)) - (when undo-tree-visualizer-timestamps - (undo-tree-move-backward (/ undo-tree-visualizer-spacing 2))) - - (let* ((undo-tree-insert-face (and undo-tree-insert-face - (or (and (consp undo-tree-insert-face) - undo-tree-insert-face) - (list undo-tree-insert-face)))) - (register (undo-tree-node-register node)) - (unmodified (if undo-tree-visualizer-parent-mtime - (undo-tree-node-unmodified-p - node undo-tree-visualizer-parent-mtime) - (undo-tree-node-unmodified-p node))) - node-string) - ;; check node's register (if any) still stores appropriate undo-tree state - (unless (and register - (undo-tree-register-data-p - (registerv-data (get-register register))) - (eq node (undo-tree-register-data-node - (registerv-data (get-register register))))) - (setq register nil)) - ;; represent node by different symbols, depending on whether it's the - ;; current node, is saved in a register, or corresponds to an unmodified - ;; buffer - (setq node-string - (cond - (undo-tree-visualizer-timestamps - (undo-tree-timestamp-to-string - (undo-tree-node-timestamp node) - undo-tree-visualizer-relative-timestamps - current register)) - (register (char-to-string register)) - (unmodified "s") - (current "x") - (t "o")) - undo-tree-insert-face - (nconc - (cond - (current '(undo-tree-visualizer-current-face)) - (unmodified '(undo-tree-visualizer-unmodified-face)) - (register '(undo-tree-visualizer-register-face))) - undo-tree-insert-face)) - ;; draw node and link it to its representation in visualizer - (undo-tree-insert node-string) - (undo-tree-move-backward (if undo-tree-visualizer-timestamps - (1+ (/ undo-tree-visualizer-spacing 2)) - 1)) - (move-marker (undo-tree-node-marker node) (point)) - (put-text-property (point) (1+ (point)) 'undo-tree-node node))) - - -(defun undo-tree-draw-subtree (node &optional active-branch) - ;; Draw subtree rooted at NODE. The subtree will start from point. - ;; If ACTIVE-BRANCH is non-nil, just draw active branch below NODE. Returns - ;; list of nodes below NODE. - (let ((num-children (length (undo-tree-node-next node))) - node-list pos trunk-pos n) - ;; draw node itself - (undo-tree-draw-node node) - - (cond - ;; if we're at a leaf node, we're done - ((= num-children 0)) - - ;; if node has only one child, draw it (not strictly necessary to deal - ;; with this case separately, but as it's by far the most common case - ;; this makes the code clearer and more efficient) - ((= num-children 1) - (undo-tree-move-down 1) - (undo-tree-insert ?|) - (undo-tree-move-backward 1) - (undo-tree-move-down 1) - (undo-tree-insert ?|) - (undo-tree-move-backward 1) - (undo-tree-move-down 1) - (setq n (car (undo-tree-node-next node))) - ;; link next node to its representation in visualizer - (unless (markerp (undo-tree-node-marker n)) - (setf (undo-tree-node-marker n) (make-marker)) - (set-marker-insertion-type (undo-tree-node-marker n) nil)) - (move-marker (undo-tree-node-marker n) (point)) - ;; add next node to list of nodes to draw next - (push n node-list)) - - ;; if node has multiple children, draw branches - (t - (undo-tree-move-down 1) - (undo-tree-insert ?|) - (undo-tree-move-backward 1) - (move-marker (setq trunk-pos (make-marker)) (point)) - ;; left subtrees - (undo-tree-move-backward - (- (undo-tree-node-char-lwidth node) - (undo-tree-node-char-lwidth - (car (undo-tree-node-next node))))) - (move-marker (setq pos (make-marker)) (point)) - (setq n (cons nil (undo-tree-node-next node))) - (dotimes (i (/ num-children 2)) - (setq n (cdr n)) - (when (or (null active-branch) - (eq (car n) - (nth (undo-tree-node-branch node) - (undo-tree-node-next node)))) - (undo-tree-move-forward 2) - (undo-tree-insert ?_ (- trunk-pos pos 2)) - (goto-char pos) - (undo-tree-move-forward 1) - (undo-tree-move-down 1) - (undo-tree-insert ?/) - (undo-tree-move-backward 2) - (undo-tree-move-down 1) - ;; link node to its representation in visualizer - (unless (markerp (undo-tree-node-marker (car n))) - (setf (undo-tree-node-marker (car n)) (make-marker)) - (set-marker-insertion-type (undo-tree-node-marker (car n)) nil)) - (move-marker (undo-tree-node-marker (car n)) (point)) - ;; add node to list of nodes to draw next - (push (car n) node-list)) - (goto-char pos) - (undo-tree-move-forward - (+ (undo-tree-node-char-rwidth (car n)) - (undo-tree-node-char-lwidth (cadr n)) - undo-tree-visualizer-spacing 1)) - (move-marker pos (point))) - ;; middle subtree (only when number of children is odd) - (when (= (mod num-children 2) 1) - (setq n (cdr n)) - (when (or (null active-branch) - (eq (car n) - (nth (undo-tree-node-branch node) - (undo-tree-node-next node)))) - (undo-tree-move-down 1) - (undo-tree-insert ?|) - (undo-tree-move-backward 1) - (undo-tree-move-down 1) - ;; link node to its representation in visualizer - (unless (markerp (undo-tree-node-marker (car n))) - (setf (undo-tree-node-marker (car n)) (make-marker)) - (set-marker-insertion-type (undo-tree-node-marker (car n)) nil)) - (move-marker (undo-tree-node-marker (car n)) (point)) - ;; add node to list of nodes to draw next - (push (car n) node-list)) - (goto-char pos) - (undo-tree-move-forward - (+ (undo-tree-node-char-rwidth (car n)) - (if (cadr n) (undo-tree-node-char-lwidth (cadr n)) 0) - undo-tree-visualizer-spacing 1)) - (move-marker pos (point))) - ;; right subtrees - (move-marker trunk-pos (1+ trunk-pos)) - (dotimes (i (/ num-children 2)) - (setq n (cdr n)) - (when (or (null active-branch) - (eq (car n) - (nth (undo-tree-node-branch node) - (undo-tree-node-next node)))) - (goto-char trunk-pos) - (undo-tree-insert ?_ (- pos trunk-pos 1)) - (goto-char pos) - (undo-tree-move-backward 1) - (undo-tree-move-down 1) - (undo-tree-insert ?\\) - (undo-tree-move-down 1) - ;; link node to its representation in visualizer - (unless (markerp (undo-tree-node-marker (car n))) - (setf (undo-tree-node-marker (car n)) (make-marker)) - (set-marker-insertion-type (undo-tree-node-marker (car n)) nil)) - (move-marker (undo-tree-node-marker (car n)) (point)) - ;; add node to list of nodes to draw next - (push (car n) node-list)) - (when (cdr n) - (goto-char pos) - (undo-tree-move-forward - (+ (undo-tree-node-char-rwidth (car n)) - (if (cadr n) (undo-tree-node-char-lwidth (cadr n)) 0) - undo-tree-visualizer-spacing 1)) - (move-marker pos (point)))) - )) - ;; return list of nodes to draw next - (nreverse node-list))) - - -(defun undo-tree-node-char-lwidth (node) - ;; Return left-width of NODE measured in characters. - (if (= (length (undo-tree-node-next node)) 0) 0 - (- (* (+ undo-tree-visualizer-spacing 1) (undo-tree-node-lwidth node)) - (if (= (undo-tree-node-cwidth node) 0) - (1+ (/ undo-tree-visualizer-spacing 2)) 0)))) - - -(defun undo-tree-node-char-rwidth (node) - ;; Return right-width of NODE measured in characters. - (if (= (length (undo-tree-node-next node)) 0) 0 - (- (* (+ undo-tree-visualizer-spacing 1) (undo-tree-node-rwidth node)) - (if (= (undo-tree-node-cwidth node) 0) - (1+ (/ undo-tree-visualizer-spacing 2)) 0)))) - - -(defun undo-tree-insert (str &optional arg) - ;; Insert character or string STR ARG times, overwriting, and using - ;; `undo-tree-insert-face'. - (unless arg (setq arg 1)) - (when (characterp str) - (setq str (make-string arg str)) - (setq arg 1)) - (dotimes (i arg) (insert str)) - (setq arg (* arg (length str))) - (undo-tree-move-forward arg) - ;; make sure mark isn't active, otherwise `backward-delete-char' might - ;; delete region instead of single char if transient-mark-mode is enabled - (setq mark-active nil) - (backward-delete-char arg) - (when undo-tree-insert-face - (put-text-property (- (point) arg) (point) 'face undo-tree-insert-face))) - - -(defun undo-tree-move-down (&optional arg) - ;; Move down, extending buffer if necessary. - (let ((row (line-number-at-pos)) - (col (current-column)) - line) - (unless arg (setq arg 1)) - (forward-line arg) - (setq line (line-number-at-pos)) - ;; if buffer doesn't have enough lines, add some - (when (/= line (+ row arg)) - (cond - ((< arg 0) - (insert (make-string (- line row arg) ?\n)) - (forward-line (+ arg (- row line)))) - (t (insert (make-string (- arg (- line row)) ?\n))))) - (undo-tree-move-forward col))) - - -(defun undo-tree-move-up (&optional arg) - ;; Move up, extending buffer if necessary. - (unless arg (setq arg 1)) - (undo-tree-move-down (- arg))) - - -(defun undo-tree-move-forward (&optional arg) - ;; Move forward, extending buffer if necessary. - (unless arg (setq arg 1)) - (let (n) - (cond - ((>= arg 0) - (setq n (- (line-end-position) (point))) - (if (> n arg) - (forward-char arg) - (end-of-line) - (insert (make-string (- arg n) ? )))) - ((< arg 0) - (setq arg (- arg)) - (setq n (- (point) (line-beginning-position))) - (when (< (- n 2) arg) ; -2 to create left-margin - ;; no space left - shift entire buffer contents right! - (let ((pos (move-marker (make-marker) (point)))) - (set-marker-insertion-type pos t) - (goto-char (point-min)) - (while (not (eobp)) - (insert-before-markers (make-string (- arg -2 n) ? )) - (forward-line 1)) - (goto-char pos))) - (backward-char arg))))) - - -(defun undo-tree-move-backward (&optional arg) - ;; Move backward, extending buffer if necessary. - (unless arg (setq arg 1)) - (undo-tree-move-forward (- arg))) - - -(defun undo-tree-move-to-parent (node) - ;; Move to position of parent of NODE, extending buffer if necessary. - (let* ((parent (undo-tree-node-previous node)) - (n (undo-tree-node-next parent)) - (l (length n)) p) - (goto-char (undo-tree-node-marker node)) - (unless (= l 1) - ;; move horizontally - (setq p (undo-tree-position node n)) - (cond - ;; node in centre subtree: no horizontal movement - ((and (= (mod l 2) 1) (= p (/ l 2)))) - ;; node in left subtree: move right - ((< p (/ l 2)) - (setq n (nthcdr p n)) - (undo-tree-move-forward - (+ (undo-tree-node-char-rwidth (car n)) - (/ undo-tree-visualizer-spacing 2) 1)) - (dotimes (i (- (/ l 2) p 1)) - (setq n (cdr n)) - (undo-tree-move-forward - (+ (undo-tree-node-char-lwidth (car n)) - (undo-tree-node-char-rwidth (car n)) - undo-tree-visualizer-spacing 1))) - (when (= (mod l 2) 1) - (setq n (cdr n)) - (undo-tree-move-forward - (+ (undo-tree-node-char-lwidth (car n)) - (/ undo-tree-visualizer-spacing 2) 1)))) - (t ;; node in right subtree: move left - (setq n (nthcdr (/ l 2) n)) - (when (= (mod l 2) 1) - (undo-tree-move-backward - (+ (undo-tree-node-char-rwidth (car n)) - (/ undo-tree-visualizer-spacing 2) 1)) - (setq n (cdr n))) - (dotimes (i (- p (/ l 2) (mod l 2))) - (undo-tree-move-backward - (+ (undo-tree-node-char-lwidth (car n)) - (undo-tree-node-char-rwidth (car n)) - undo-tree-visualizer-spacing 1)) - (setq n (cdr n))) - (undo-tree-move-backward - (+ (undo-tree-node-char-lwidth (car n)) - (/ undo-tree-visualizer-spacing 2) 1))))) - ;; move vertically - (undo-tree-move-up 3))) - - -(defun undo-tree-timestamp-to-string - (timestamp &optional relative current register) - ;; Convert TIMESTAMP to string (either absolute or RELATVE time), indicating - ;; if it's the CURRENT node and/or has an associated REGISTER. - (if relative - ;; relative time - (let ((time (floor (float-time - (subtract-time (current-time) timestamp)))) - n) - (setq time - ;; years - (if (> (setq n (/ time 315360000)) 0) - (if (> n 999) "-ages" (format "-%dy" n)) - (setq time (% time 315360000)) - ;; days - (if (> (setq n (/ time 86400)) 0) - (format "-%dd" n) - (setq time (% time 86400)) - ;; hours - (if (> (setq n (/ time 3600)) 0) - (format "-%dh" n) - (setq time (% time 3600)) - ;; mins - (if (> (setq n (/ time 60)) 0) - (format "-%dm" n) - ;; secs - (format "-%ds" (% time 60))))))) - (setq time (concat - (if current "*" " ") - time - (if register (concat "[" (char-to-string register) "]") - " "))) - (setq n (length time)) - (if (< n 9) - (concat (make-string (- 9 n) ? ) time) - time)) - ;; absolute time - (concat (if current " *" " ") - (format-time-string "%H:%M:%S" timestamp) - (if register - (concat "[" (char-to-string register) "]") - " ")))) - - - - -;;; ===================================================================== -;;; Visualizer commands - -(define-derived-mode - undo-tree-visualizer-mode special-mode "undo-tree-visualizer" - "Major mode used in undo-tree visualizer. - -The undo-tree visualizer can only be invoked from a buffer in -which `undo-tree-mode' is enabled. The visualizer displays the -undo history tree graphically, and allows you to browse around -the undo history, undoing or redoing the corresponding changes in -the parent buffer. - -Within the undo-tree visualizer, the following keys are available: - - \\{undo-tree-visualizer-mode-map}" - :syntax-table nil - :abbrev-table nil - (setq truncate-lines t) - (setq cursor-type nil) - (setq undo-tree-visualizer-selected-node nil)) - - - -(defun undo-tree-visualize-undo (&optional arg) - "Undo changes. A numeric ARG serves as a repeat count." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((old (undo-tree-current buffer-undo-tree)) - current) - ;; unhighlight old current node - (let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face) - (inhibit-read-only t)) - (undo-tree-draw-node old)) - ;; undo in parent buffer - (switch-to-buffer-other-window undo-tree-visualizer-parent-buffer) - (deactivate-mark) - (unwind-protect - (let ((undo-tree-inhibit-kill-visualizer t)) (undo-tree-undo-1 arg)) - (setq current (undo-tree-current buffer-undo-tree)) - (switch-to-buffer-other-window undo-tree-visualizer-buffer-name) - ;; when using lazy drawing, extend tree upwards as required - (when undo-tree-visualizer-lazy-drawing - (undo-tree-expand-up old current)) - ;; highlight new current node - (let ((inhibit-read-only t)) (undo-tree-draw-node current 'current)) - ;; update diff display, if any - (when undo-tree-visualizer-diff (undo-tree-visualizer-update-diff))))) - - -(defun undo-tree-visualize-redo (&optional arg) - "Redo changes. A numeric ARG serves as a repeat count." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((old (undo-tree-current buffer-undo-tree)) - current) - ;; unhighlight old current node - (let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face) - (inhibit-read-only t)) - (undo-tree-draw-node (undo-tree-current buffer-undo-tree))) - ;; redo in parent buffer - (switch-to-buffer-other-window undo-tree-visualizer-parent-buffer) - (deactivate-mark) - (unwind-protect - (let ((undo-tree-inhibit-kill-visualizer t)) (undo-tree-redo-1 arg)) - (setq current (undo-tree-current buffer-undo-tree)) - (switch-to-buffer-other-window undo-tree-visualizer-buffer-name) - ;; when using lazy drawing, extend tree downwards as required - (when undo-tree-visualizer-lazy-drawing - (undo-tree-expand-down old current)) - ;; highlight new current node - (let ((inhibit-read-only t)) (undo-tree-draw-node current 'current)) - ;; update diff display, if any - (when undo-tree-visualizer-diff (undo-tree-visualizer-update-diff))))) - - -(defun undo-tree-visualize-switch-branch-right (arg) - "Switch to next branch of the undo tree. -This will affect which branch to descend when *redoing* changes -using `undo-tree-redo' or `undo-tree-visualizer-redo'." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - ;; un-highlight old active branch below current node - (goto-char (undo-tree-node-marker (undo-tree-current buffer-undo-tree))) - (let ((undo-tree-insert-face 'undo-tree-visualizer-default-face) - (inhibit-read-only t)) - (undo-tree-highlight-active-branch (undo-tree-current buffer-undo-tree))) - ;; increment branch - (let ((branch (undo-tree-node-branch (undo-tree-current buffer-undo-tree)))) - (setf (undo-tree-node-branch (undo-tree-current buffer-undo-tree)) - (cond - ((>= (+ branch arg) (undo-tree-num-branches)) - (1- (undo-tree-num-branches))) - ((<= (+ branch arg) 0) 0) - (t (+ branch arg)))) - (let ((inhibit-read-only t)) - ;; highlight new active branch below current node - (goto-char (undo-tree-node-marker (undo-tree-current buffer-undo-tree))) - (let ((undo-tree-insert-face 'undo-tree-visualizer-active-branch-face)) - (undo-tree-highlight-active-branch (undo-tree-current buffer-undo-tree))) - ;; re-highlight current node - (undo-tree-draw-node (undo-tree-current buffer-undo-tree) 'current)))) - - -(defun undo-tree-visualize-switch-branch-left (arg) - "Switch to previous branch of the undo tree. -This will affect which branch to descend when *redoing* changes -using `undo-tree-redo' or `undo-tree-visualizer-redo'." - (interactive "p") - (undo-tree-visualize-switch-branch-right (- arg))) - - -(defun undo-tree-visualizer-quit () - "Quit the undo-tree visualizer." - (interactive) - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (undo-tree-clear-visualizer-data buffer-undo-tree) - ;; remove kill visualizer hook from parent buffer - (unwind-protect - (with-current-buffer undo-tree-visualizer-parent-buffer - (remove-hook 'before-change-functions 'undo-tree-kill-visualizer t)) - ;; kill diff buffer, if any - (when undo-tree-visualizer-diff (undo-tree-visualizer-hide-diff)) - (let ((parent undo-tree-visualizer-parent-buffer) - window) - ;; kill visualizer buffer - (kill-buffer nil) - ;; switch back to parent buffer - (unwind-protect - (if (setq window (get-buffer-window parent)) - (select-window window) - (switch-to-buffer parent)))))) - - -(defun undo-tree-visualizer-abort () - "Quit the undo-tree visualizer and return buffer to original state." - (interactive) - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((node undo-tree-visualizer-initial-node)) - (undo-tree-visualizer-quit) - (undo-tree-set node))) - - -(defun undo-tree-visualizer-set (&optional pos) - "Set buffer to state corresponding to undo tree node -at POS, or point if POS is nil." - (interactive) - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (unless pos (setq pos (point))) - (let ((node (get-text-property pos 'undo-tree-node))) - (when node - ;; set parent buffer to state corresponding to node at POS - (switch-to-buffer-other-window undo-tree-visualizer-parent-buffer) - (let ((undo-tree-inhibit-kill-visualizer t)) (undo-tree-set node)) - (switch-to-buffer-other-window undo-tree-visualizer-buffer-name) - ;; re-draw undo tree - (let ((inhibit-read-only t)) (undo-tree-draw-tree buffer-undo-tree)) - (when undo-tree-visualizer-diff (undo-tree-visualizer-update-diff))))) - - -(defun undo-tree-visualizer-mouse-set (pos) - "Set buffer to state corresponding to undo tree node -at mouse event POS." - (interactive "@e") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (undo-tree-visualizer-set (event-start (nth 1 pos)))) - - -(defun undo-tree-visualize-undo-to-x (&optional x) - "Undo to last branch point, register, or saved state. -If X is the symbol `branch', undo to last branch point. If X is -the symbol `register', undo to last register. If X is the sumbol -`saved', undo to last saved state. If X is null, undo to first of -these that's encountered. - -Interactively, a single \\[universal-argument] specifies -`branch', a double \\[universal-argument] \\[universal-argument] -specifies `saved', and a negative prefix argument specifies -`register'." - (interactive "P") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (when (and (called-interactively-p 'any) x) - (setq x (prefix-numeric-value x) - x (cond - ((< x 0) 'register) - ((<= x 4) 'branch) - (t 'saved)))) - (let ((current (if undo-tree-visualizer-selection-mode - undo-tree-visualizer-selected-node - (undo-tree-current buffer-undo-tree))) - (diff undo-tree-visualizer-diff) - r) - (undo-tree-visualizer-hide-diff) - (while (and (undo-tree-node-previous current) - (or (if undo-tree-visualizer-selection-mode - (progn - (undo-tree-visualizer-select-previous) - (setq current undo-tree-visualizer-selected-node)) - (undo-tree-visualize-undo) - (setq current (undo-tree-current buffer-undo-tree))) - t) - ;; branch point - (not (or (and (or (null x) (eq x 'branch)) - (> (undo-tree-num-branches) 1)) - ;; register - (and (or (null x) (eq x 'register)) - (setq r (undo-tree-node-register current)) - (undo-tree-register-data-p - (setq r (registerv-data (get-register r)))) - (eq current (undo-tree-register-data-node r))) - ;; saved state - (and (or (null x) (eq x 'saved)) - (undo-tree-node-unmodified-p current)) - )))) - ;; update diff display, if any - (when diff - (undo-tree-visualizer-show-diff - (when undo-tree-visualizer-selection-mode - undo-tree-visualizer-selected-node))))) - - -(defun undo-tree-visualize-redo-to-x (&optional x) - "Redo to last branch point, register, or saved state. -If X is the symbol `branch', redo to last branch point. If X is -the symbol `register', redo to last register. If X is the sumbol -`saved', redo to last saved state. If X is null, redo to first of -these that's encountered. - -Interactively, a single \\[universal-argument] specifies -`branch', a double \\[universal-argument] \\[universal-argument] -specifies `saved', and a negative prefix argument specifies -`register'." - (interactive "P") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (when (and (called-interactively-p 'any) x) - (setq x (prefix-numeric-value x) - x (cond - ((< x 0) 'register) - ((<= x 4) 'branch) - (t 'saved)))) - (let ((current (if undo-tree-visualizer-selection-mode - undo-tree-visualizer-selected-node - (undo-tree-current buffer-undo-tree))) - (diff undo-tree-visualizer-diff) - r) - (undo-tree-visualizer-hide-diff) - (while (and (undo-tree-node-next current) - (or (if undo-tree-visualizer-selection-mode - (progn - (undo-tree-visualizer-select-next) - (setq current undo-tree-visualizer-selected-node)) - (undo-tree-visualize-redo) - (setq current (undo-tree-current buffer-undo-tree))) - t) - ;; branch point - (not (or (and (or (null x) (eq x 'branch)) - (> (undo-tree-num-branches) 1)) - ;; register - (and (or (null x) (eq x 'register)) - (setq r (undo-tree-node-register current)) - (undo-tree-register-data-p - (setq r (registerv-data (get-register r)))) - (eq current (undo-tree-register-data-node r))) - ;; saved state - (and (or (null x) (eq x 'saved)) - (undo-tree-node-unmodified-p current)) - )))) - ;; update diff display, if any - (when diff - (undo-tree-visualizer-show-diff - (when undo-tree-visualizer-selection-mode - undo-tree-visualizer-selected-node))))) - - -(defun undo-tree-visualizer-toggle-timestamps () - "Toggle display of time-stamps." - (interactive) - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (setq undo-tree-visualizer-timestamps (not undo-tree-visualizer-timestamps)) - (setq undo-tree-visualizer-spacing (undo-tree-visualizer-calculate-spacing)) - ;; redraw tree - (let ((inhibit-read-only t)) (undo-tree-draw-tree buffer-undo-tree))) - - -(defun undo-tree-visualizer-scroll-left (&optional arg) - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (scroll-left (or arg 1) t)) - - -(defun undo-tree-visualizer-scroll-right (&optional arg) - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (scroll-right (or arg 1) t)) - - -(defun undo-tree-visualizer-scroll-up (&optional arg) - (interactive "P") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (if (or (and (numberp arg) (< arg 0)) (eq arg '-)) - (undo-tree-visualizer-scroll-down arg) - ;; scroll up and expand newly-visible portion of tree - (unwind-protect - (scroll-up-command arg) - (undo-tree-expand-down - (nth (undo-tree-node-branch (undo-tree-current buffer-undo-tree)) - (undo-tree-node-next (undo-tree-current buffer-undo-tree))))) - ;; signal error if at eob - (when (and (not undo-tree-visualizer-needs-extending-down) (eobp)) - (scroll-up)))) - - -(defun undo-tree-visualizer-scroll-down (&optional arg) - (interactive "P") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (if (or (and (numberp arg) (< arg 0)) (eq arg '-)) - (undo-tree-visualizer-scroll-up arg) - ;; ensure there's enough room at top of buffer to scroll - (let ((scroll-lines - (or arg (- (window-height) next-screen-context-lines))) - (window-line (1- (line-number-at-pos (window-start))))) - (when (and undo-tree-visualizer-needs-extending-up - (< window-line scroll-lines)) - (let ((inhibit-read-only t)) - (goto-char (point-min)) - (undo-tree-move-up (- scroll-lines window-line))))) - ;; scroll down and expand newly-visible portion of tree - (unwind-protect - (scroll-down-command arg) - (undo-tree-expand-up - (undo-tree-node-previous (undo-tree-current buffer-undo-tree)))) - ;; signal error if at bob - (when (and (not undo-tree-visualizer-needs-extending-down) (bobp)) - (scroll-down)))) - - - - -;;; ===================================================================== -;;; Visualizer selection mode - -(define-minor-mode undo-tree-visualizer-selection-mode - "Toggle mode to select nodes in undo-tree visualizer." - :lighter "Select" - :keymap undo-tree-visualizer-selection-mode-map - :group undo-tree - (cond - ;; enable selection mode - (undo-tree-visualizer-selection-mode - (setq cursor-type 'box) - (setq undo-tree-visualizer-selected-node - (undo-tree-current buffer-undo-tree)) - ;; erase diff (if any), as initially selected node is identical to current - (when undo-tree-visualizer-diff - (let ((buff (get-buffer undo-tree-diff-buffer-name)) - (inhibit-read-only t)) - (when buff (with-current-buffer buff (erase-buffer)))))) - (t ;; disable selection mode - (setq cursor-type nil) - (setq undo-tree-visualizer-selected-node nil) - (goto-char (undo-tree-node-marker (undo-tree-current buffer-undo-tree))) - (when undo-tree-visualizer-diff (undo-tree-visualizer-update-diff))) - )) - - -(defun undo-tree-visualizer-select-previous (&optional arg) - "Move to previous node." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((node undo-tree-visualizer-selected-node)) - (catch 'top - (dotimes (i (or arg 1)) - (unless (undo-tree-node-previous node) (throw 'top t)) - (setq node (undo-tree-node-previous node)))) - ;; when using lazy drawing, extend tree upwards as required - (when undo-tree-visualizer-lazy-drawing - (undo-tree-expand-up undo-tree-visualizer-selected-node node)) - ;; update diff display, if any - (when (and undo-tree-visualizer-diff - (not (eq node undo-tree-visualizer-selected-node))) - (undo-tree-visualizer-update-diff node)) - ;; move to selected node - (goto-char (undo-tree-node-marker node)) - (setq undo-tree-visualizer-selected-node node))) - - -(defun undo-tree-visualizer-select-next (&optional arg) - "Move to next node." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((node undo-tree-visualizer-selected-node)) - (catch 'bottom - (dotimes (i (or arg 1)) - (unless (nth (undo-tree-node-branch node) (undo-tree-node-next node)) - (throw 'bottom t)) - (setq node - (nth (undo-tree-node-branch node) (undo-tree-node-next node))))) - ;; when using lazy drawing, extend tree downwards as required - (when undo-tree-visualizer-lazy-drawing - (undo-tree-expand-down undo-tree-visualizer-selected-node node)) - ;; update diff display, if any - (when (and undo-tree-visualizer-diff - (not (eq node undo-tree-visualizer-selected-node))) - (undo-tree-visualizer-update-diff node)) - ;; move to selected node - (goto-char (undo-tree-node-marker node)) - (setq undo-tree-visualizer-selected-node node))) - - -(defun undo-tree-visualizer-select-right (&optional arg) - "Move right to a sibling node." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((node undo-tree-visualizer-selected-node) - end) - (goto-char (undo-tree-node-marker undo-tree-visualizer-selected-node)) - (setq end (line-end-position)) - (catch 'end - (dotimes (i arg) - (while (or (null node) (eq node undo-tree-visualizer-selected-node)) - (forward-char) - (setq node (get-text-property (point) 'undo-tree-node)) - (when (= (point) end) (throw 'end t))))) - (goto-char (undo-tree-node-marker - (or node undo-tree-visualizer-selected-node))) - (when (and undo-tree-visualizer-diff node - (not (eq node undo-tree-visualizer-selected-node))) - (undo-tree-visualizer-update-diff node)) - (when node (setq undo-tree-visualizer-selected-node node)))) - - -(defun undo-tree-visualizer-select-left (&optional arg) - "Move left to a sibling node." - (interactive "p") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (let ((node (get-text-property (point) 'undo-tree-node)) - beg) - (goto-char (undo-tree-node-marker undo-tree-visualizer-selected-node)) - (setq beg (line-beginning-position)) - (catch 'beg - (dotimes (i arg) - (while (or (null node) (eq node undo-tree-visualizer-selected-node)) - (backward-char) - (setq node (get-text-property (point) 'undo-tree-node)) - (when (= (point) beg) (throw 'beg t))))) - (goto-char (undo-tree-node-marker - (or node undo-tree-visualizer-selected-node))) - (when (and undo-tree-visualizer-diff node - (not (eq node undo-tree-visualizer-selected-node))) - (undo-tree-visualizer-update-diff node)) - (when node (setq undo-tree-visualizer-selected-node node)))) - - -(defun undo-tree-visualizer-select (pos) - (let ((node (get-text-property pos 'undo-tree-node))) - (when node - ;; select node at POS - (goto-char (undo-tree-node-marker node)) - ;; when using lazy drawing, extend tree up and down as required - (when undo-tree-visualizer-lazy-drawing - (undo-tree-expand-up undo-tree-visualizer-selected-node node) - (undo-tree-expand-down undo-tree-visualizer-selected-node node)) - ;; update diff display, if any - (when (and undo-tree-visualizer-diff - (not (eq node undo-tree-visualizer-selected-node))) - (undo-tree-visualizer-update-diff node)) - ;; update selected node - (setq undo-tree-visualizer-selected-node node) - ))) - - -(defun undo-tree-visualizer-mouse-select (pos) - "Select undo tree node at mouse event POS." - (interactive "@e") - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (undo-tree-visualizer-select (event-start (nth 1 pos)))) - - - - -;;; ===================================================================== -;;; Visualizer diff display - -(defun undo-tree-visualizer-toggle-diff () - "Toggle diff display in undo-tree visualizer." - (interactive) - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (if undo-tree-visualizer-diff - (undo-tree-visualizer-hide-diff) - (undo-tree-visualizer-show-diff))) - - -(defun undo-tree-visualizer-selection-toggle-diff () - "Toggle diff display in undo-tree visualizer selection mode." - (interactive) - (unless (eq major-mode 'undo-tree-visualizer-mode) - (user-error "Undo-tree mode not enabled in buffer")) - (if undo-tree-visualizer-diff - (undo-tree-visualizer-hide-diff) - (let ((node (get-text-property (point) 'undo-tree-node))) - (when node (undo-tree-visualizer-show-diff node))))) - - -(defun undo-tree-visualizer-show-diff (&optional node) - ;; show visualizer diff display - (setq undo-tree-visualizer-diff t) - (let ((buff (with-current-buffer undo-tree-visualizer-parent-buffer - (undo-tree-diff node))) - (display-buffer-mark-dedicated 'soft) - win) - (setq win (split-window)) - (set-window-buffer win buff) - (shrink-window-if-larger-than-buffer win))) - - -(defun undo-tree-visualizer-hide-diff () - ;; hide visualizer diff display - (setq undo-tree-visualizer-diff nil) - (let ((win (get-buffer-window undo-tree-diff-buffer-name))) - (when win (with-selected-window win (kill-buffer-and-window))))) - - -(defun undo-tree-diff (&optional node) - ;; Create diff between NODE and current state (or previous state and current - ;; state, if NODE is null). Returns buffer containing diff. - (let (tmpfile buff) - ;; generate diff - (let ((undo-tree-inhibit-kill-visualizer t) - (current (undo-tree-current buffer-undo-tree))) - (undo-tree-set (or node (undo-tree-node-previous current) current) - 'preserve-timestamps) - (setq tmpfile (diff-file-local-copy (current-buffer))) - (undo-tree-set current 'preserve-timestamps)) - (setq buff (diff-no-select - tmpfile (current-buffer) nil 'noasync - (get-buffer-create undo-tree-diff-buffer-name))) - ;; delete process messages and useless headers from diff buffer - (let ((inhibit-read-only t)) - (with-current-buffer buff - (goto-char (point-min)) - (delete-region (point) (1+ (line-end-position 3))) - (goto-char (point-max)) - (forward-line -2) - (delete-region (point) (point-max)) - (setq cursor-type nil) - (setq buffer-read-only t))) - buff)) - - -(defun undo-tree-visualizer-update-diff (&optional node) - ;; update visualizer diff display to show diff between current state and - ;; NODE (or previous state, if NODE is null) - (with-current-buffer undo-tree-visualizer-parent-buffer - (undo-tree-diff node)) - (let ((win (get-buffer-window undo-tree-diff-buffer-name))) - (when win - (balance-windows) - (shrink-window-if-larger-than-buffer win)))) - - - -(provide 'undo-tree) - -;;; undo-tree.el ends here diff --git a/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elc b/emacs/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elc deleted file mode 100644 index 1aee42f27da4b0c99074bef6cb7bf419f4a5426d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123766 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 diff --git a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-autoloads.el b/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-autoloads.el deleted file mode 100644 index 08fdfe5..0000000 --- a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-autoloads.el +++ /dev/null @@ -1,32 +0,0 @@ -;;; volatile-highlights-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "volatile-highlights" "volatile-highlights.el" -;;;;;; (23124 14372 692196 483000)) -;;; Generated autoloads from volatile-highlights.el - -(defvar volatile-highlights-mode nil "\ -Non-nil if Volatile-Highlights mode is enabled. -See the `volatile-highlights-mode' command -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 `volatile-highlights-mode'.") - -(custom-autoload 'volatile-highlights-mode "volatile-highlights" nil) - -(autoload 'volatile-highlights-mode "volatile-highlights" "\ -Minor mode for visual feedback on some operations. - -\(fn &optional ARG)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; volatile-highlights-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-pkg.el b/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-pkg.el deleted file mode 100644 index 7442ab0..0000000 --- a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "volatile-highlights" "20160611.1855" "Minor mode for visual feedback on some operations." 'nil :commit "9a20091f0ce7fc0a6b3e641a6a46d5f3ac4d8392" :url "http://www.emacswiki.org/emacs/download/volatile-highlights.el" :keywords '("emulations" "convenience" "wp")) diff --git a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.el b/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.el deleted file mode 100644 index b478487..0000000 --- a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.el +++ /dev/null @@ -1,872 +0,0 @@ -;;; volatile-highlights.el --- Minor mode for visual feedback on some operations. - -;; Copyright (C) 2001, 2010-2016 K-talo Miyazaki, all rights reserved. - -;; Author: K-talo Miyazaki -;; Created: 03 October 2001. (as utility functions in my `.emacs' file.) -;; 14 March 2010. (re-written as library `volatile-highlights.el') -;; Keywords: emulations convenience wp -;; Package-Version: 20160611.1855 -;; Revision: $Id: cb468976642bf1d30cbb2070ee846c4736ee077d $ -;; URL: http://www.emacswiki.org/emacs/download/volatile-highlights.el -;; GitHub: http://github.com/k-talo/volatile-highlights.el -;; Version: 1.15 -;; Contributed by: Ryan Thompson and Le Wang. - -;; This file is not part of GNU Emacs. - -;; This program is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;;; Commentary: -;; -;; Overview -;; ======== -;; This library provides minor mode `volatile-highlights-mode', which -;; brings visual feedback to some operations by highlighting portions -;; relating to the operations. -;; -;; All of highlights made by this library will be removed -;; when any new operation is executed. -;; -;; -;; INSTALLING -;; ========== -;; To install this library, save this file to a directory in your -;; `load-path' (you can view the current `load-path' using "C-h v -;; load-path" within Emacs), then add the following line to your -;; .emacs start up file: -;; -;; (require 'volatile-highlights) -;; (volatile-highlights-mode t) -;; -;; -;; USING -;; ===== -;; To toggle volatile highlighting, type `M-x volatile-highlights-mode '. -;; -;; While this minor mode is on, a string `VHL' will be displayed on the modeline. -;; -;; Currently, operations listed below will be highlighted While the minor mode -;; `volatile-highlights-mode' is on: -;; -;; - `undo': -;; Volatile highlights will be put on the text inserted by `undo'. -;; -;; - `yank' and `yank-pop': -;; Volatile highlights will be put on the text inserted by `yank' -;; or `yank-pop'. -;; -;; - `kill-region', `kill-line', any other killing function: -;; Volatile highlights will be put at the positions where the -;; killed text used to be. -;; -;; - `delete-region': -;; Same as `kill-region', but not as reliable since -;; `delete-region' is an inline function. -;; -;; - `find-tag': -;; Volatile highlights will be put on the tag name which was found -;; by `find-tag'. -;; -;; - `occur-mode-goto-occurrence' and `occur-mode-display-occurrence': -;; Volatile highlights will be put on the occurrence which is selected -;; by `occur-mode-goto-occurrence' or `occur-mode-display-occurrence'. -;; -;; - Non incremental search operations: -;; Volatile highlights will be put on the the text found by -;; commands listed below: -;; -;; `nonincremental-search-forward' -;; `nonincremental-search-backward' -;; `nonincremental-re-search-forward' -;; `nonincremental-re-search-backward' -;; `nonincremental-repeat-search-forward' -;; `nonincremental-repeat-search-backwar' -;; -;; Highlighting support for each operations can be turned on/off individually -;; via customization. Also check out the customization group -;; -;; `M-x customize-group RET volatile-highlights RET' -;; -;; -;; EXAMPLE SNIPPETS FOR USING VOLATILE HIGHLIGHTS WITH OTHER PACKAGES -;; ================================================================== -;; -;; - vip-mode -;; -;; (vhl/define-extension 'vip 'vip-yank) -;; (vhl/install-extension 'vip) -;; -;; - evil-mode -;; -;; (vhl/define-extension 'evil 'evil-paste-after 'evil-paste-before -;; 'evil-paste-pop 'evil-move) -;; (vhl/install-extension 'evil) -;; -;; - undo-tree -;; -;; (vhl/define-extension 'undo-tree 'undo-tree-yank 'undo-tree-move) -;; (vhl/install-extension 'undo-tree) - - -;;; Change Log: -;; -;; v1.15 Sun Jun 12 10:40:31 2016 JST -;; - Update documents, example snippets for other packages, -;; regarding #14. -;; -;; v1.14 Sun Jun 12 10:12:30 2016 JST -;; - Update documents, especially supporting `evil-mode', -;; regarding #13. -;; - Fixed a bug #14, an extension won't be loaded properly -;; when it was installed by `vhl/install-extension'. -;; -;; v1.13 Sat May 21 11:02:36 2016 JST -;; - Fixed a bug that highlighting was not working with nested volatile -;; highlighting aware operations like `yak-pop'. -;; -;; v1.12 Sun Feb 21 19:09:29 2016 JST -;; - Added autoload cookie. -;; -;; v1.11 Sun Oct 5 13:05:38 2014 JST -;; - Fixed an error "Symbol's function definition is void: return", -;; that occurs when highlight being created with `hideshow' commands. -;; -;; v1.10 Thu Mar 21 22:37:27 2013 JST -;; - Use inherit in face definition when detected. -;; - Suppress compiler warnings regarding to emacs/xemacs private -;; functions by file local variable. -;; -;; v1.9 Tue Mar 5 00:52:35 2013 JST -;; - Fixed errors in shell caused by dummy functions. -;; -;; v1.8 Wed Feb 15 00:08:14 2012 JST -;; - Added "Contributed by: " line in header. -;; - Added extension for hideshow. -;; -;; v1.7 Mon Feb 13 23:31:18 2012 JST -;; - Fixed a bug required features are not loaded. -;; -;; v1.6 Thu Feb 2 06:59:48 2012 JST -;; - Removed extensions for non standard features. -;; - Suppress compiler warning "function `vhl/.make-list-string' -;; defined multiple times". -;; - Fixed compiler error "Symbol's function definition is void: -;; vhl/.make-list-string". -;; -;; v1.5 Tue Jan 31 22:19:04 2012 JST -;; - Added extension for highlighting the position where text was -;; killed from. -;; - Added extension for highlighting the position where text was -;; deleted from. -;; - Provide a macro `vhl/define-extension' for easily defining new -;; simple extensions with a single line of code. For usage -;; examples, see the definitions of the undo, yank, kill, and -;; delete extensions. -;; -;; v1.4 Sun Jan 15 20:23:58 2012 JST -;; - Suppress compiler warnings regarding to emacs/xemacs private -;; functions. -;; - Fixed bugs which occurs to xemacs. -;; -;; v1.3, Sat Dec 18 16:44:14 2010 JST -;; - Added extension for non-incremental search operations. -;; - Fixed a bug that highlights won't be appear when -;; occurrences is in folded line. -;; -;; v1.2, Tue Nov 30 01:07:48 2010 JST -;; - In `vhl/ext/occur', highlight all occurrences. -;; -;; v1.1, Tue Nov 9 20:36:09 2010 JST -;; - Fixed a bug that mode toggling feature was not working. - -;;; Code: - -(defconst vhl/version "1.8") - -(eval-when-compile - (require 'cl) - (require 'easy-mmode) - (require 'advice)) - -(provide 'volatile-highlights) - - -;;;============================================================================ -;;; -;;; Private Variables. -;;; -;;;============================================================================ - -(eval-and-compile - (defconst vhl/.xemacsp (string-match "XEmacs" emacs-version) - "A flag if the emacs is xemacs or not.")) - -(defvar vhl/.hl-lst nil - "List of volatile highlights.") - - -;;;============================================================================ -;;; -;;; Faces. -;;; -;;;============================================================================ - -(defgroup volatile-highlights nil - "Visual feedback on operations." - :group 'editing) - - -;; Borrowed from `slime.el'. -(defun vhl/.face-inheritance-possible-p () - "Return true if the :inherit face attribute is supported." - (assq :inherit custom-face-attributes)) - -(defface vhl/default-face - (cond - ((or vhl/.xemacsp - (not (vhl/.face-inheritance-possible-p))) - '((((class color) (background light)) - (:background "yellow1")) - (((class color) (background dark)) - (:background "SkyBlue4")) - (t :inverse-video t))) - (t - '((t - :inherit secondary-selection - )))) - "Face used for volatile highlights." - :group 'volatile-highlights) - - -;;;============================================================================ -;;; -;;; Minor Mode Definition. -;;; -;;;============================================================================ -;;;###autoload -(easy-mmode-define-minor-mode - volatile-highlights-mode "Minor mode for visual feedback on some operations." - :global t - :init-value nil - :lighter " VHl" - (if volatile-highlights-mode - (vhl/load-extensions) - (vhl/unload-extensions))) - - -(defcustom Vhl/highlight-zero-width-ranges nil - "If t, highlight the positions of zero-width ranges. - -For example, if a deletion is highlighted, then the position -where the deleted text used to be would be highlighted." - :type 'boolean - :group 'volatile-highlights) - - -;;;============================================================================ -;;; -;;; Public Functions/Commands. -;;; -;;;============================================================================ - -;;----------------------------------------------------------------------------- -;; (vhl/add-range BEG END &OPTIONAL BUF FACE) => VOID -;;----------------------------------------------------------------------------- -(defun vhl/add-range (beg end &optional buf face) - "Add a volatile highlight to the buffer `BUF' at the position -specified by `BEG' and `END' using the face `FACE'. - -When the buffer `BUF' is not specified or its value is `nil', -volatile highlight will be added to current buffer. - -When the face `FACE' is not specified or its value is `nil', -the default face `vhl/default-face' will -be used as the value." - (let* ((face (or face 'vhl/default-face)) - (hl (vhl/.make-hl beg end buf face))) - (setq vhl/.hl-lst - (cons hl vhl/.hl-lst)) - (add-hook 'pre-command-hook 'vhl/clear-all))) -(define-obsolete-function-alias 'vhl/add 'vhl/add-range "1.5") - -;;----------------------------------------------------------------------------- -;; (vhl/add-position POS &OPTIONAL BUF FACE) => VOID -;;----------------------------------------------------------------------------- -(defun vhl/add-position (pos &rest other-args) - "Highlight buffer position POS as a change. - -If Vhl/highlight-zero-width-ranges is nil, do nothing. - -Optional args are the same as `vhl/add-range'." - (when (and Vhl/highlight-zero-width-ranges (not (zerop (buffer-size)))) - (when (> pos (buffer-size)) - (setq pos (- pos 1))) - (apply 'vhl/add-range pos (+ pos 1) other-args))) - -;;----------------------------------------------------------------------------- -;; (vhl/clear-all) => VOID -;;----------------------------------------------------------------------------- -(defun vhl/clear-all () - "Clear all volatile highlights." - (interactive) - (while vhl/.hl-lst - (vhl/.clear-hl (car vhl/.hl-lst)) - (setq vhl/.hl-lst - (cdr vhl/.hl-lst))) - (remove-hook 'pre-command-hook 'vhl/clear-all)) - -;;----------------------------------------------------------------------------- -;; (vhl/force-clear-all) => VOID -;;----------------------------------------------------------------------------- -(defun vhl/force-clear-all () - "Force clear all volatile highlights in current buffer." - (interactive) - (vhl/.force-clear-all-hl)) - - -;;;============================================================================ -;;; -;;; Private Functions. -;;; -;;;============================================================================ - -;;----------------------------------------------------------------------------- -;; (vhl/.make-hl BEG END BUF FACE) => HIGHLIGHT -;;----------------------------------------------------------------------------- -(defun vhl/.make-hl (beg end buf face) - "Make a volatile highlight at the position specified by `BEG' and `END'." - (let (hl) - (cond - (vhl/.xemacsp - ;; XEmacs - (setq hl (make-extent beg end buf)) - (set-extent-face hl face) - (highlight-extent hl t) - (set-extent-property hl 'volatile-highlights t)) - (t - ;; GNU Emacs - (setq hl (make-overlay beg end buf)) - (overlay-put hl 'face face) - (overlay-put hl 'priority 1) - (overlay-put hl 'volatile-highlights t))) - hl)) - -;;----------------------------------------------------------------------------- -;; (vhl/.clear-hl HIGHLIGHT) => VOID -;;----------------------------------------------------------------------------- -(defun vhl/.clear-hl (hl) - "Clear one highlight." - (cond - ;; XEmacs (not tested!) - (vhl/.xemacsp - (and (extentp hl) - (delete-extent hl))) - ;; GNU Emacs - (t - (and (overlayp hl) - (delete-overlay hl))))) - -;;----------------------------------------------------------------------------- -;; (vhl/.force-clear-all-hl) => VOID -;;----------------------------------------------------------------------------- -(defun vhl/.force-clear-all-hl () - "Force clear all volatile highlights in current buffer." - (cond - ;; XEmacs (not tested!) - (vhl/.xemacsp - (map-extents (lambda (hl maparg) - (and (extent-property hl 'volatile-highlights) - (vhl/.clear-hl hl))))) - ;; GNU Emacs - (t - (save-restriction - (widen) - (mapcar (lambda (hl) - (and (overlay-get hl 'volatile-highlights) - (vhl/.clear-hl hl))) - (overlays-in (point-min) (point-max))))))) - - -;;;============================================================================ -;;; -;;; Functions to manage extensions. -;;; -;;;============================================================================ -(defvar vhl/.installed-extensions nil) - -(defun vhl/install-extension (sym) - (let ((fn-on (intern (format "vhl/ext/%s/on" sym))) - (fn-off (intern (format "vhl/ext/%s/off" sym))) - (cust-name (intern (format "vhl/use-%s-extension-p" sym)))) - (pushnew sym vhl/.installed-extensions) - (eval `(defcustom ,cust-name t - ,(format "A flag if highlighting support for `%s' is on or not." sym) - :type 'boolean - :group 'volatile-highlights - :set (lambda (sym-to-set val) - (set-default sym-to-set val) - (if val - (when volatile-highlights-mode - (vhl/load-extension (quote ,sym))) - (vhl/unload-extension (quote ,sym)))))))) - -(defun vhl/load-extension (sym) - (let ((fn-on (intern (format "vhl/ext/%s/on" sym))) - (cust-name (intern (format "vhl/use-%s-extension-p" sym)))) - (if (functionp fn-on) - (when (and (boundp cust-name) - (eval cust-name)) - (apply fn-on nil)) - (message "[vhl] No load function for extension `%s'" sym)))) - -(defun vhl/unload-extension (sym) - (let ((fn-off (intern (format "vhl/ext/%s/off" sym)))) - (if (functionp fn-off) - (apply fn-off nil) - (message "[vhl] No unload function for extension `%s'" sym)))) - -(defun vhl/load-extensions () - (dolist (sym vhl/.installed-extensions) - (vhl/load-extension sym))) - -(defun vhl/unload-extensions () - (dolist (sym vhl/.installed-extensions) - (vhl/unload-extension sym))) - - -;;;============================================================================ -;;; -;;; Utility functions/macros for extensions. -;;; -;;;============================================================================ -(defvar vhl/.after-change-hook-depth 0) - -(defun vhl/.push-to-after-change-hook (fn-name) - ;; Debug - ;; (if (zerop vhl/.after-change-hook-depth) - ;; (message "vlh: push: %s" fn-name) - ;; (message "vlh: skip push: %s" fn-name)) - (when (zerop vhl/.after-change-hook-depth) - (add-hook 'after-change-functions - 'vhl/.make-vhl-on-change)) - (setq vhl/.after-change-hook-depth - (1+ vhl/.after-change-hook-depth))) - -(defun vhl/.pop-from-after-change-hook (fn-name) - (setq vhl/.after-change-hook-depth - (1- vhl/.after-change-hook-depth)) - ;; Debug - ;; (if (zerop vhl/.after-change-hook-depth) - ;; (message "vlh: pop: %s" fn-name) - ;; (message "vlh: skip pop: %s" fn-name)) - (when (zerop vhl/.after-change-hook-depth) - (remove-hook 'after-change-functions - 'vhl/.make-vhl-on-change))) - -(defun vhl/advice-defined-p (fn-name class ad-name) - (and (ad-is-advised fn-name) - (assq ad-name - (ad-get-advice-info-field fn-name class)))) - -(defun vhl/disable-advice-if-defined (fn-name class ad-name) - (when (vhl/advice-defined-p fn-name class ad-name) - (ad-disable-advice fn-name class ad-name) - (ad-activate fn-name))) - -(defun vhl/.make-vhl-on-change (beg end len-removed) - (let ((insert-p (zerop len-removed))) - (if insert-p - ;; Highlight the insertion - (vhl/add-range beg end) - ;; Highlight the position of the deletion - (vhl/add-position beg)))) - -(defmacro vhl/give-advice-to-make-vhl-on-changes (fn-name) - (let* ((ad-name (intern (concat "vhl/make-vhl-on-" - (format "%s" fn-name))))) - (or (symbolp fn-name) - (error "vhl/give-advice-to-make-vhl-on-changes: `%s' is not type of symbol." fn-name)) - `(progn - (defadvice ,fn-name (around - ,ad-name - (&rest args)) - (vhl/.push-to-after-change-hook (quote ,fn-name)) - (unwind-protect - ad-do-it - (vhl/.pop-from-after-change-hook (quote ,fn-name)))) - ;; Enable advice. - (ad-enable-advice (quote ,fn-name) 'around (quote ,ad-name)) - (ad-activate (quote ,fn-name))))) - -(defmacro vhl/cancel-advice-to-make-vhl-on-changes (fn-name) - (let ((ad-name (intern (concat "vhl/make-vhl-on-" - (format "%s" fn-name))))) - `(vhl/disable-advice-if-defined (quote ,fn-name) 'around (quote ,ad-name)))) - -(defun vhl/require-noerror (feature &optional filename) - (condition-case c - (require feature) - (file-error nil))) - -(eval-and-compile -;; Utility function by Ryan Thompson. -(defun vhl/.make-list-string (items) - "Makes an English-style list from a list of strings. - -Converts a list of strings into a string that lists the items -separated by commas, as well as the word `and' before the last -item. In other words, returns a string of the way those items -would be listed in english. - -This is included as a private support function for generating -lists of symbols to be included docstrings of auto-generated -extensions." - (assert (listp items)) - (cond ((null items) - ;; Zero items - "") - ((null (cdr items)) - ;; One item - (assert (stringp (first items))) - (format "%s" (first items))) - ((null (cddr items)) - ;; Two items - (assert (stringp (first items))) - (assert (stringp (second items))) - (apply 'format "%s and %s" items)) - ((null (cdddr items)) - ;; Three items - (assert (stringp (first items))) - (assert (stringp (second items))) - (assert (stringp (third items))) - (apply 'format "%s, %s, and %s" items)) - (t - ;; 4 or more items - (format "%s, %s" (first items) (vhl/.make-list-string (rest items))))))) - -;; The following makes it trivial to define simple vhl extensions -(defmacro vhl/define-extension (name &rest functions) - "Define a VHL extension called NAME that applies standard VHL - advice to each of FUNCTIONS." - (assert (first functions)) - (let* ((name-string (symbol-name (eval name))) - (function-list-string (vhl/.make-list-string - (mapcar (lambda (f) (format "`%s'" (symbol-name (eval f)))) - functions))) - (on-function-name (intern (format "vhl/ext/%s/on" name-string))) - (on-body-form (cons - 'progn - (mapcar (lambda (f) - `(vhl/give-advice-to-make-vhl-on-changes ,(eval f))) - functions))) - (on-doc-string (format "Turn on volatile highlighting for %s." function-list-string)) - - (off-function-name (intern (format "vhl/ext/%s/off" name-string))) - (off-body-form (cons - 'progn - (mapcar (lambda (f) - `(vhl/cancel-advice-to-make-vhl-on-changes ,(eval f))) - functions))) - (off-doc-string (format "Turn off volatile highlighting for %s." function-list-string))) - `(progn - (defun ,on-function-name () - ,on-doc-string - (interactive) - ,on-body-form) - (defun ,off-function-name () - ,off-doc-string - (interactive) - ,off-body-form) - nil))) - - -;;;============================================================================ -;;; -;;; Extensions. -;;; -;;;============================================================================ - -;;----------------------------------------------------------------------------- -;; Extension for supporting undo. -;; -- Put volatile highlights on the text inserted by `undo'. -;; (and may be `redo'...) -;;----------------------------------------------------------------------------- - -(vhl/define-extension 'undo 'primitive-undo) -(vhl/install-extension 'undo) - - -;;----------------------------------------------------------------------------- -;; Extension for supporting yank/yank-pop. -;; -- Put volatile highlights on the text inserted by `yank' or `yank-pop'. -;;----------------------------------------------------------------------------- - -(vhl/define-extension 'yank 'yank 'yank-pop) -(vhl/install-extension 'yank) - -;;----------------------------------------------------------------------------- -;; Extension for supporting kill. -;; -- Put volatile highlights on the positions where killed text -;; used to be. -;;----------------------------------------------------------------------------- - -(vhl/define-extension 'kill 'kill-region) -(vhl/install-extension 'kill) - -;;----------------------------------------------------------------------------- -;; Extension for supporting `delete-region'. -;; -- Put volatile highlights on the positions where deleted text -;; used to be. This is not so reliable since `delete-region' is -;; an inline function and is pre-compiled sans advice into many -;; other deletion functions. -;;----------------------------------------------------------------------------- - -(vhl/define-extension 'delete 'delete-region) -(vhl/install-extension 'delete) - - -;;----------------------------------------------------------------------------- -;; Extension for supporting etags. -;; -- Put volatile highlights on the tag name which was found by `find-tag'. -;;----------------------------------------------------------------------------- -(defun vhl/ext/etags/on () - "Turn on volatile highlighting for `etags'." - (interactive) - (require 'etags) - - (defadvice find-tag (after vhl/ext/etags/make-vhl-after-find-tag (tagname &optional next-p regexp-p)) - (let ((pos (point)) - (len (length tagname))) - (save-excursion - (search-forward tagname) - (vhl/add-range (- (point) len) (point))))) - (ad-activate 'find-tag)) - -(defun vhl/ext/etags/off () - "Turn off volatile highlighting for `etags'." - (interactive) - (vhl/disable-advice-if-defined - 'find-tag 'after 'vhl/ext/etags/make-vhl-after-find-tag)) - -(vhl/install-extension 'etags) - - -;;----------------------------------------------------------------------------- -;; Extension for supporting occur. -;; -- Put volatile highlights on occurrence which is selected by -;; `occur-mode-goto-occurrence' or `occur-mode-display-occurrence'. -;;----------------------------------------------------------------------------- -(defun vhl/ext/occur/on () - "Turn on volatile highlighting for `occur'." - (interactive) - - (lexical-let ((*occur-str* nil)) ;; Text in current line. - (defun vhl/ext/occur/.pre-hook-fn () - (save-excursion - (let* ((bol (progn (beginning-of-line) (point))) - (eol (progn (end-of-line) (point))) - (bos (text-property-any bol eol 'occur-match t))) - (setq *occur-str* (and bos eol - (buffer-substring bos eol)))))) - - (defun vhl/ext/occur/.post-hook-fn () - (let ((marker (and *occur-str* - (get-text-property 0 'occur-target *occur-str*))) - (len (length *occur-str*)) - (ptr 0) - (be-lst nil)) - (when marker - ;; Detect position of each occurrence by scanning face - ;; `list-matching-lines-face' put on them. - (while (and ptr - (setq ptr (text-property-any ptr len - 'face - list-matching-lines-face - *occur-str*))) - (let ((beg ptr) - (end (or (setq ptr - (next-single-property-change - ptr 'face *occur-str*)) - ;; Occurrence ends at eol. - len))) - (push (list beg end) - be-lst))) - ;; Put volatile highlights on occurrences. - (with-current-buffer (marker-buffer marker) - (let* ((bol (marker-position marker))) - (dolist (be be-lst) - (let ((pt-beg (+ bol (nth 0 be))) - (pt-end (+ bol (nth 1 be)))) - ;; When the occurrence is in folded line, - ;; put highlight over whole line which - ;; contains folded part. - (dolist (ov (overlays-at pt-beg)) - (when (overlay-get ov 'invisible) - ;;(message "INVISIBLE: %s" ov) - (save-excursion - (goto-char (overlay-start ov)) - (beginning-of-line) - (setq pt-beg (min pt-beg (point))) - (goto-char (overlay-end ov)) - (end-of-line) - (setq pt-end (max pt-end (point)))))) - - (vhl/add-range pt-beg - pt-end - nil - list-matching-lines-face)))))))) - - - (defadvice occur-mode-goto-occurrence (before vhl/ext/occur/pre-hook (&optional event)) - (vhl/ext/occur/.pre-hook-fn)) - (defadvice occur-mode-goto-occurrence (after vhl/ext/occur/post-hook (&optional event)) - (vhl/ext/occur/.post-hook-fn)) - - (defadvice occur-mode-display-occurrence (before vhl/ext/occur/pre-hook ()) - (vhl/ext/occur/.pre-hook-fn)) - (defadvice occur-mode-display-occurrence (after vhl/ext/occur/post-hook ()) - (vhl/ext/occur/.post-hook-fn)) - - (defadvice occur-mode-goto-occurrence-other-window (before vhl/ext/occur/pre-hook ()) - (vhl/ext/occur/.pre-hook-fn)) - (defadvice occur-mode-goto-occurrence-other-window (after vhl/ext/occur/post-hook ()) - (vhl/ext/occur/.post-hook-fn)) - - (ad-activate 'occur-mode-goto-occurrence) - (ad-activate 'occur-mode-display-occurrence) - (ad-activate 'occur-mode-goto-occurrence-other-window))) - -(defun vhl/ext/occur/off () - "Turn off volatile highlighting for `occur'." - (interactive) - - (vhl/disable-advice-if-defined - 'occur-mode-goto-occurrence 'before 'vhl/ext/occur/pre-hook) - (vhl/disable-advice-if-defined - 'occur-mode-goto-occurrence 'after 'vhl/ext/occur/post-hook) - - (vhl/disable-advice-if-defined - 'occur-mode-display-occurrence 'before 'vhl/ext/occur/pre-hook) - (vhl/disable-advice-if-defined - 'occur-mode-display-occurrence 'after 'vhl/ext/occur/post-hook) - - (vhl/disable-advice-if-defined - 'occur-mode-goto-occurrence-other-window 'before 'vhl/ext/occur/pre-hook) - (vhl/disable-advice-if-defined - 'occur-mode-goto-occurrence-other-window 'after 'vhl/ext/occur/post-hook)) - -(vhl/install-extension 'occur) - - -;;----------------------------------------------------------------------------- -;; Extension for non-incremental search operations. -;; -- Put volatile highlights on the text found by non-incremental search -;; operations. -;;----------------------------------------------------------------------------- - -(defmacro vhl/ext/nonincremental-search/.advice-to-vhl (fn) - `(when (fboundp (quote ,fn)) - (defadvice ,fn (after - ,(intern (format "vhl/ext/nonincremental-search/%s" - fn)) - (&rest args)) - (when ad-return-value - (vhl/add-range (match-beginning 0) (match-end 0) nil 'match))) - (ad-activate (quote ,fn)))) - -(defmacro vhl/ext/nonincremental-search/.disable-advice-to-vhl (fn) - `(vhl/disable-advice-if-defined - (quote ,fn) - 'after - (quote ,(intern (format "vhl/ext/nonincremental-search/%s" fn))))) - -(defun vhl/ext/nonincremental-search/on () - "Turn on volatile highlighting for non-incremental search operations." - (interactive) - (when (vhl/require-noerror 'menu-bar nil) - (vhl/ext/nonincremental-search/.advice-to-vhl nonincremental-search-forward) - (vhl/ext/nonincremental-search/.advice-to-vhl nonincremental-search-backward) - (vhl/ext/nonincremental-search/.advice-to-vhl nonincremental-re-search-forward) - (vhl/ext/nonincremental-search/.advice-to-vhl nonincremental-re-search-backward) - (vhl/ext/nonincremental-search/.advice-to-vhl nonincremental-repeat-search-forward) - (vhl/ext/nonincremental-search/.advice-to-vhl nonincremental-repeat-search-backward))) - -(defun vhl/ext/nonincremental-search/off () - "Turn off volatile highlighting for non-incremental search operations." - (interactive) - (when (vhl/require-noerror 'menu-bar nil) - (vhl/ext/nonincremental-search/.disable-advice-to-vhl nonincremental-search-forward) - (vhl/ext/nonincremental-search/.disable-advice-to-vhl nonincremental-search-backward) - (vhl/ext/nonincremental-search/.disable-advice-to-vhl nonincremental-re-search-forward) - (vhl/ext/nonincremental-search/.disable-advice-to-vhl nonincremental-re-search-backward) - (vhl/ext/nonincremental-search/.disable-advice-to-vhl nonincremental-repeat-search-forward) - (vhl/ext/nonincremental-search/.disable-advice-to-vhl nonincremental-repeat-search-backward))) - -(vhl/install-extension 'nonincremental-search) - - -;;----------------------------------------------------------------------------- -;; Extension for hideshow. -;; -- Put volatile highlights on the text blocks which are shown/hidden -;; by hideshow. -;;----------------------------------------------------------------------------- - -(defun vhl/ext/hideshow/.activate () - (defadvice hs-show-block (around vhl/ext/hideshow/vhl/around-hook (&optional end)) - (let* ((bol (save-excursion (progn (beginning-of-line) (point)))) - (eol (save-excursion (progn (end-of-line) (point)))) - (ov-folded (car (delq nil - (mapcar #'(lambda (ov) - (and (overlay-get ov 'hs) - ov)) - (overlays-in bol (1+ eol)))))) - (boov (and ov-folded (overlay-start ov-folded))) - (eoov (and ov-folded (overlay-end ov-folded)))) - - ad-do-it - - (when (and boov eoov) - (vhl/add-range boov eoov)))) - (ad-activate 'hs-show-block)) - -(defun vhl/ext/hideshow/on () - "Turn on volatile highlighting for `hideshow'." - (interactive) - - (cond - ((featurep 'hideshow) - (vhl/ext/hideshow/.activate)) - (t - (eval-after-load "hideshow" '(vhl/ext/hideshow/.activate))))) - -(defun vhl/ext/hideshow/off () - (vhl/disable-advice-if-defined 'hs-show-block - 'after - 'vhl/ext/hideshow/vhl/around-hook)) - -(vhl/install-extension 'hideshow) - - -;;;============================================================================ -;;; -;;; Suppress compiler warnings regarding to emacs/xemacs private functions. -;;; -;;;============================================================================ - -;; Local variables: -;; byte-compile-warnings: (not unresolved) -;; End: - -;;; volatile-highlights.el ends here diff --git a/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.elc b/emacs/.emacs.d/elpa/volatile-highlights-20160611.1855/volatile-highlights.elc deleted file mode 100644 index 285328167fa6c76de4854bb3a92fa51bd1f9f311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21743 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 J!_L}T`9B;;8F>Hz diff --git a/emacs/.emacs.d/elpa/with-editor-20171217.1239/dir b/emacs/.emacs.d/elpa/with-editor-20171217.1239/dir deleted file mode 100644 index 93a7ef7..0000000 --- a/emacs/.emacs.d/elpa/with-editor-20171217.1239/dir +++ /dev/null @@ -1,18 +0,0 @@ -This is the file .../info/dir, which contains the -topmost node of the Info hierarchy, called (dir)Top. -The first time you invoke Info you start off looking at this node. - -File: dir, Node: Top This is the top of the INFO tree - - This (the Directory node) gives a menu of major topics. - Typing "q" exits, "?" lists all Info commands, "d" returns here, - "h" gives a primer for first-timers, - "mEmacs" visits the Emacs manual, etc. - - In Emacs, you can click mouse button 2 on a menu item or cross reference - to select it. - -* Menu: - -Emacs -* With-Editor: (with-editor). Using the Emacsclient as $EDITOR. diff --git a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-autoloads.el b/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-autoloads.el deleted file mode 100644 index e1da532..0000000 --- a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-autoloads.el +++ /dev/null @@ -1,16 +0,0 @@ -;;; with-editor-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil nil ("with-editor-pkg.el" "with-editor.el") -;;;;;; (23124 14362 578815 245000)) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; with-editor-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-pkg.el b/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-pkg.el deleted file mode 100644 index 95e03cf..0000000 --- a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor-pkg.el +++ /dev/null @@ -1,8 +0,0 @@ -(define-package "with-editor" "20171217.1239" "Use the Emacsclient as $EDITOR" - '((emacs "24.4") - (async "1.9")) - :url "https://github.com/magit/with-editor" :keywords - '("tools")) -;; Local Variables: -;; no-byte-compile: t -;; End: diff --git a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.el b/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.el deleted file mode 100644 index 45cb724..0000000 --- a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.el +++ /dev/null @@ -1,814 +0,0 @@ -;;; with-editor.el --- Use the Emacsclient as $EDITOR -*- lexical-binding: t -*- - -;; Copyright (C) 2014-2017 The Magit Project Contributors -;; -;; You should have received a copy of the AUTHORS.md file. If not, -;; see https://github.com/magit/with-editor/blob/master/AUTHORS.md. - -;; Author: Jonas Bernoulli -;; Maintainer: Jonas Bernoulli - -;; Package-Requires: ((emacs "24.4") (async "1.9")) -;; Keywords: tools -;; Homepage: https://github.com/magit/with-editor - -;; This file is not part of GNU Emacs. - -;; This file is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. - -;; This file is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with Magit. If not, see http://www.gnu.org/licenses. - -;;; Commentary: - -;; This library makes it possible to reliably use the Emacsclient as -;; the `$EDITOR' of child processes. It makes sure that they know how -;; to call home. For remote processes a substitute is provided, which -;; communicates with Emacs on standard output/input instead of using a -;; socket as the Emacsclient does. - -;; It provides the commands `with-editor-async-shell-command' and -;; `with-editor-shell-command', which are intended as replacements -;; for `async-shell-command' and `shell-command'. They automatically -;; export `$EDITOR' making sure the executed command uses the current -;; Emacs instance as "the editor". With a prefix argument these -;; commands prompt for an alternative environment variable such as -;; `$GIT_EDITOR'. To always use these variants add this to your init -;; file: -;; -;; (define-key (current-global-map) -;; [remap async-shell-command] 'with-editor-async-shell-command) -;; (define-key (current-global-map) -;; [remap shell-command] 'with-editor-shell-command) - -;; Alternatively use the global `shell-command-with-editor-mode', -;; which always sets `$EDITOR' for all Emacs commands which ultimately -;; use `shell-command' to asynchronously run some shell command. - -;; The command `with-editor-export-editor' exports `$EDITOR' or -;; another such environment variable in `shell-mode', `term-mode' and -;; `eshell-mode' buffers. Use this Emacs command before executing a -;; shell command which needs the editor set, or always arrange for the -;; current Emacs instance to be used as editor by adding it to the -;; appropriate mode hooks: -;; -;; (add-hook 'shell-mode-hook 'with-editor-export-editor) -;; (add-hook 'term-exec-hook 'with-editor-export-editor) -;; (add-hook 'eshell-mode-hook 'with-editor-export-editor) - -;; Some variants of this function exist, these two forms are -;; equivalent: -;; -;; (add-hook 'shell-mode-hook -;; (apply-partially 'with-editor-export-editor "GIT_EDITOR")) -;; (add-hook 'shell-mode-hook 'with-editor-export-git-editor) - -;; This library can also be used by other packages which need to use -;; the current Emacs instance as editor. In fact this library was -;; written for Magit and its `git-commit-mode' and `git-rebase-mode'. -;; Consult `git-rebase.el' and the related code in `magit-sequence.el' -;; for a simple example. - -;;; Code: - -(require 'cl-lib) -;; `pcase-dolist' is not autoloaded on Emacs 24. -(eval-when-compile (require 'pcase)) -(require 'server) -(require 'shell) - -(and (require 'async-bytecomp nil t) - (memq 'magit (bound-and-true-p async-bytecomp-allowed-packages)) - (fboundp 'async-bytecomp-package-mode) - (async-bytecomp-package-mode 1)) - -(eval-when-compile - (progn (require 'dired nil t) - (require 'eshell nil t) - (require 'term nil t) - (require 'warnings nil t))) -(declare-function dired-get-filename 'dired) -(declare-function term-emulate-terminal 'term) -(defvar eshell-preoutput-filter-functions) - -;;; Options - -(defgroup with-editor nil - "Use the Emacsclient as $EDITOR." - :group 'external - :group 'server) - -(defun with-editor-locate-emacsclient () - "Search for a suitable Emacsclient executable." - (or (with-editor-locate-emacsclient-1 - (with-editor-emacsclient-path) - (length (split-string emacs-version "\\."))) - (prog1 nil (display-warning 'with-editor "\ -Cannot determine a suitable Emacsclient - -Determining an Emacsclient executable suitable for the -current Emacs instance failed. For more information -please see https://github.com/magit/magit/wiki/Emacsclient.")))) - -(defun with-editor-locate-emacsclient-1 (path depth) - (let* ((version-lst (cl-subseq (split-string emacs-version "\\.") 0 depth)) - (version-reg (concat "^" (mapconcat #'identity version-lst "\\.")))) - (or (locate-file-internal - (if (equal invocation-name "remacs") "remacsclient" "emacsclient") - path - (cl-mapcan - (lambda (v) (cl-mapcar (lambda (e) (concat v e)) exec-suffixes)) - (nconc (and (boundp 'debian-emacs-flavor) - (list (format ".%s" debian-emacs-flavor))) - (cl-mapcon (lambda (v) - (setq v (mapconcat #'identity (reverse v) ".")) - (list v (concat "-" v) (concat ".emacs" v))) - (reverse version-lst)) - (list "" "-snapshot" ".emacs-snapshot"))) - (lambda (exec) - (ignore-errors - (string-match-p version-reg - (with-editor-emacsclient-version exec))))) - (and (> depth 1) - (with-editor-locate-emacsclient-1 path (1- depth)))))) - -(defun with-editor-emacsclient-version (exec) - (let ((default-directory (file-name-directory exec))) - (ignore-errors - (cadr (split-string (car (process-lines exec "--version"))))))) - -(defun with-editor-emacsclient-path () - (let ((path exec-path)) - (when invocation-directory - (push (directory-file-name invocation-directory) path) - (let* ((linkname (expand-file-name invocation-name invocation-directory)) - (truename (file-chase-links linkname))) - (unless (equal truename linkname) - (push (directory-file-name (file-name-directory truename)) path))) - (when (eq system-type 'darwin) - (let ((dir (expand-file-name "bin" invocation-directory))) - (when (file-directory-p dir) - (push dir path))) - (when (string-match-p "Cellar" invocation-directory) - (let ((dir (expand-file-name "../../../bin" invocation-directory))) - (when (file-directory-p dir) - (push dir path)))))) - (cl-remove-duplicates path :test 'equal))) - -(defcustom with-editor-emacsclient-executable (with-editor-locate-emacsclient) - "The Emacsclient executable used by the `with-editor' macro." - :group 'with-editor - :type '(choice (string :tag "Executable") - (const :tag "Don't use Emacsclient" nil))) - -(defcustom with-editor-sleeping-editor "\ -sh -c '\ -echo \"WITH-EDITOR: $$ OPEN $0\"; \ -sleep 604800 & sleep=$!; \ -trap \"kill $sleep; exit 0\" USR1; \ -trap \"kill $sleep; exit 1\" USR2; \ -wait $sleep'" - "The sleeping editor, used when the Emacsclient cannot be used. - -This fallback is used for asynchronous processes started inside -the macro `with-editor', when the process runs on a remote machine -or for local processes when `with-editor-emacsclient-executable' -is nil (i.e. when no suitable Emacsclient was found, or the user -decided not to use it). - -Where the latter uses a socket to communicate with Emacs' server, -this substitute prints edit requests to its standard output on -which a process filter listens for such requests. As such it is -not a complete substitute for a proper Emacsclient, it can only -be used as $EDITOR of child process of the current Emacs instance. - -Some shells do not execute traps immediately when waiting for a -child process, but by default we do use such a blocking child -process. - -If you use such a shell (e.g. `csh' on FreeBSD, but not Debian), -then you have to edit this option. You can either replace \"sh\" -with \"bash\" (and install that), or you can use the older, less -performant implementation: - - \"sh -c '\\ - echo \\\"WITH-EDITOR: $$ OPEN $0\\\"; \\ - trap \\\"exit 0\\\" USR1; \\ - trap \\\"exit 1\" USR2; \\ - while true; do sleep 1; done'\" - -Note that this leads to a delay of up to a second. The delay can -be shortened by replacing \"sleep 1\" with \"sleep 0.01\", or if your -implementation does not support floats, then by using `nanosleep' -instead." - :group 'with-editor - :type 'string) - -(defcustom with-editor-finish-query-functions nil - "List of functions called to query before finishing session. - -The buffer in question is current while the functions are called. -If any of them returns nil, then the session is not finished and -the buffer is not killed. The user should then fix the issue and -try again. The functions are called with one argument. If it is -non-nil then that indicates that the user used a prefix argument -to force finishing the session despite issues. Functions should -usually honor that and return non-nil." - :group 'with-editor - :type 'hook) -(put 'with-editor-finish-query-functions 'permanent-local t) - -(defcustom with-editor-cancel-query-functions nil - "List of functions called to query before canceling session. - -The buffer in question is current while the functions are called. -If any of them returns nil, then the session is not canceled and -the buffer is not killed. The user should then fix the issue and -try again. The functions are called with one argument. If it is -non-nil then that indicates that the user used a prefix argument -to force canceling the session despite issues. Functions should -usually honor that and return non-nil." - :group 'with-editor - :type 'hook) -(put 'with-editor-cancel-query-functions 'permanent-local t) - -(defcustom with-editor-mode-lighter " WE" - "The mode-line lighter of the With-Editor mode." - :group 'with-editor - :type '(choice (const :tag "No lighter" "") string)) - -(defvar with-editor-server-window-alist nil - "Alist of filename patterns vs corresponding `server-window'. - -Each element looks like (REGEXP . FUNCTION). Files matching -REGEXP are selected using FUNCTION instead of the default in -`server-window'. - -Note that when a package adds an entry here then it probably -has a reason to disrespect `server-window' and it likely is -not a good idea to change such entries.") - -(defvar with-editor-file-name-history-exclude nil - "List of regexps for filenames `server-visit' should not remember. -When a filename matches any of the regexps, then `server-visit' -does not add it to the variable `file-name-history', which is -used when reading a filename in the minibuffer.") - -(defcustom with-editor-shell-command-use-emacsclient t - "Whether to use the emacsclient when running shell commands. - -This affects `with-editor-shell-command-async' and, if the input -ends with \"&\" `with-editor-shell-command' . - -If `shell-command-with-editor-mode' is enabled, then it also -affects `shell-command-async' and, if the input ends with \"&\" -`shell-command'. - -This is a temporary kludge that lets you choose between two -possible defects, the ones described in the issues #23 and #40. - -When t, then use the emacsclient. This has the disadvantage that -`with-editor-mode' won't be enabled because we don't know whether -this package was involved at all in the call to the emacsclient, -and when it is not, then we really should. The problem is that -the emacsclient doesn't pass a long any environment variables to -the server. This will hopefully be fixed in Emacs eventually. - -When nil, then use the sleeping editor. Because in this case we -know that this package is involved, we can enable the mode. But -this makes it necessary that you invoke $EDITOR in shell scripts -like so: - - eval \"$EDITOR\" file - -And some tools that do not handle $EDITOR properly also break." - :package-version '(with-editor . "2.8.0") - :group 'with-editor - :type 'boolean) - -;;; Mode Commands - -(defvar with-editor-pre-finish-hook nil) -(defvar with-editor-pre-cancel-hook nil) -(defvar with-editor-post-finish-hook nil) -(defvar with-editor-post-finish-hook-1 nil) -(defvar with-editor-post-cancel-hook nil) -(defvar with-editor-post-cancel-hook-1 nil) -(defvar with-editor-cancel-alist nil) -(put 'with-editor-pre-finish-hook 'permanent-local t) -(put 'with-editor-pre-cancel-hook 'permanent-local t) -(put 'with-editor-post-finish-hook 'permanent-local t) -(put 'with-editor-post-cancel-hook 'permanent-local t) - -(defvar with-editor-show-usage t) -(defvar with-editor-cancel-message nil) -(defvar with-editor-previous-winconf nil) -(make-variable-buffer-local 'with-editor-show-usage) -(make-variable-buffer-local 'with-editor-cancel-message) -(make-variable-buffer-local 'with-editor-previous-winconf) -(put 'with-editor-cancel-message 'permanent-local t) -(put 'with-editor-previous-winconf 'permanent-local t) - -(defvar-local with-editor--pid nil "For internal use.") -(put 'with-editor--pid 'permanent-local t) - -(defun with-editor-finish (force) - "Finish the current edit session." - (interactive "P") - (when (run-hook-with-args-until-failure - 'with-editor-finish-query-functions force) - (let ((with-editor-post-finish-hook-1 - (ignore-errors (delq t with-editor-post-finish-hook)))) - (run-hooks 'with-editor-pre-finish-hook) - (with-editor-return nil) - (accept-process-output nil 0.1) - (run-hooks 'with-editor-post-finish-hook-1)))) - -(defun with-editor-cancel (force) - "Cancel the current edit session." - (interactive "P") - (when (run-hook-with-args-until-failure - 'with-editor-cancel-query-functions force) - (let ((message with-editor-cancel-message)) - (when (functionp message) - (setq message (funcall message))) - (let ((with-editor-post-cancel-hook-1 - (ignore-errors (delq t with-editor-post-cancel-hook))) - (with-editor-cancel-alist nil)) - (run-hooks 'with-editor-pre-cancel-hook) - (with-editor-return t) - (accept-process-output nil 0.1) - (run-hooks 'with-editor-post-cancel-hook-1)) - (message (or message "Canceled by user"))))) - -(defun with-editor-return (cancel) - (let ((winconf with-editor-previous-winconf) - (clients server-buffer-clients) - (dir default-directory) - (pid with-editor--pid)) - (remove-hook 'kill-buffer-query-functions - 'with-editor-kill-buffer-noop t) - (cond (cancel - (save-buffer) - (if clients - (dolist (client clients) - (ignore-errors - (server-send-string client "-error Canceled by user")) - (delete-process client)) - ;; Fallback for when emacs was used as $EDITOR - ;; instead of emacsclient or the sleeping editor. - ;; See https://github.com/magit/magit/issues/2258. - (ignore-errors (delete-file buffer-file-name)) - (kill-buffer))) - (t - (save-buffer) - (if clients - ;; Don't use `server-edit' because we do not want to - ;; show another buffer belonging to another client. - ;; See https://github.com/magit/magit/issues/2197. - (server-done) - (kill-buffer)))) - (when pid - (let ((default-directory dir)) - (process-file "kill" nil nil nil - "-s" (if cancel "USR2" "USR1") pid))) - (when (and winconf (eq (window-configuration-frame winconf) - (selected-frame))) - (set-window-configuration winconf)))) - -;;; Mode - -(defvar with-editor-mode-map - (let ((map (make-sparse-keymap))) - (define-key map "\C-c\C-c" 'with-editor-finish) - (define-key map [remap server-edit] 'with-editor-finish) - (define-key map [remap evil-save-and-close] 'with-editor-finish) - (define-key map [remap evil-save-modified-and-close] 'with-editor-finish) - (define-key map "\C-c\C-k" 'with-editor-cancel) - (define-key map [remap kill-buffer] 'with-editor-cancel) - (define-key map [remap ido-kill-buffer] 'with-editor-cancel) - (define-key map [remap iswitchb-kill-buffer] 'with-editor-cancel) - (define-key map [remap evil-quit] 'with-editor-cancel) - map)) - -(define-minor-mode with-editor-mode - "Edit a file as the $EDITOR of an external process." - :lighter with-editor-mode-lighter - ;; Protect the user from killing the buffer without using - ;; either `with-editor-finish' or `with-editor-cancel', - ;; and from removing the key bindings for these commands. - (unless with-editor-mode - (user-error "With-Editor mode cannot be turned off")) - (add-hook 'kill-buffer-query-functions - 'with-editor-kill-buffer-noop nil t) - ;; `server-execute' displays a message which is not - ;; correct when using this mode. - (when with-editor-show-usage - (with-editor-usage-message))) - -(put 'with-editor-mode 'permanent-local t) - -(defun with-editor-kill-buffer-noop () - (user-error (substitute-command-keys "\ -Don't kill this buffer. Instead cancel using \\[with-editor-cancel]"))) - -(defun with-editor-usage-message () - ;; Run after `server-execute', which is run using - ;; a timer which starts immediately. - (run-with-timer - 0.01 nil `(lambda () - (with-current-buffer ,(current-buffer) - (message (substitute-command-keys "\ -Type \\[with-editor-finish] to finish, \ -or \\[with-editor-cancel] to cancel")))))) - -;;; Wrappers - -(defvar with-editor--envvar nil "For internal use.") - -(defmacro with-editor (&rest body) - "Use the Emacsclient as $EDITOR while evaluating BODY. -Modify the `process-environment' for processes started in BODY, -instructing them to use the Emacsclient as $EDITOR. If optional -ENVVAR is provided then bind that environment variable instead. -\n(fn [ENVVAR] BODY...)" - (declare (indent defun) (debug (body))) - `(let ((with-editor--envvar ,(if (stringp (car body)) - (pop body) - '(or with-editor--envvar "EDITOR"))) - (process-environment process-environment)) - (with-editor--setup) - ,@body)) - -(defun with-editor--setup () - (if (or (not with-editor-emacsclient-executable) - (file-remote-p default-directory)) - (push (concat with-editor--envvar "=" with-editor-sleeping-editor) - process-environment) - ;; Make sure server-use-tcp's value is valid. - (unless (featurep 'make-network-process '(:family local)) - (setq server-use-tcp t)) - ;; Make sure the server is running. - (unless server-process - (when (server-running-p server-name) - (setq server-name (format "server%s" (emacs-pid))) - (when (server-running-p server-name) - (server-force-delete server-name))) - (server-start)) - ;; Tell $EDITOR to use the Emacsclient. - (push (concat with-editor--envvar "=" - (shell-quote-argument with-editor-emacsclient-executable) - ;; Tell the process where the server file is. - (and (not server-use-tcp) - (concat " --socket-name=" - (shell-quote-argument - (expand-file-name server-name - server-socket-dir))))) - process-environment) - (when server-use-tcp - (push (concat "EMACS_SERVER_FILE=" - (expand-file-name server-name server-auth-dir)) - process-environment)) - ;; As last resort fallback to the sleeping editor. - (push (concat "ALTERNATE_EDITOR=" with-editor-sleeping-editor) - process-environment))) - -(defun with-editor-server-window () - (or (and buffer-file-name - (cdr (cl-find-if (lambda (cons) - (string-match-p (car cons) buffer-file-name)) - with-editor-server-window-alist))) - server-window)) - -(defun server-switch-buffer--with-editor-server-window-alist - (fn &optional next-buffer killed-one filepos) - "Honor `with-editor-server-window-alist' (which see)." - (let ((server-window (with-current-buffer - (or next-buffer (current-buffer)) - (when with-editor-mode - (setq with-editor-previous-winconf - (current-window-configuration))) - (with-editor-server-window)))) - (funcall fn next-buffer killed-one filepos))) - -(advice-add 'server-switch-buffer :around - 'server-switch-buffer--with-editor-server-window-alist) - -(defun start-file-process--with-editor-process-filter - (fn name buffer program &rest program-args) - "When called inside a `with-editor' form and the Emacsclient -cannot be used, then give the process the filter function -`with-editor-process-filter'. To avoid overriding the filter -being added here you should use `with-editor-set-process-filter' -instead of `set-process-filter' inside `with-editor' forms. - -When the `default-directory' is located on a remote machine, -then also manipulate PROGRAM and PROGRAM-ARGS in order to set -the appropriate editor environment variable." - (if (not with-editor--envvar) - (apply fn name buffer program program-args) - (when (file-remote-p default-directory) - (unless (equal program "env") - (push program program-args) - (setq program "env")) - (push (concat with-editor--envvar "=" with-editor-sleeping-editor) - program-args)) - (let ((process (apply fn name buffer program program-args))) - (set-process-filter process 'with-editor-process-filter) - (process-put process 'default-dir default-directory) - process))) - -(advice-add 'start-file-process :around - 'start-file-process--with-editor-process-filter) - -(defun with-editor-set-process-filter (process filter) - "Like `set-process-filter' but keep `with-editor-process-filter'. -Give PROCESS the new FILTER but keep `with-editor-process-filter' -if that was added earlier by the adviced `start-file-process'. - -Do so by wrapping the two filter functions using a lambda, which -becomes the actual filter. It calls `with-editor-process-filter' -first, passing t as NO-STANDARD-FILTER. Then it calls FILTER, -which may or may not insert the text into the PROCESS' buffer." - (set-process-filter - process - (if (eq (process-filter process) 'with-editor-process-filter) - `(lambda (proc str) - (,filter proc str) - (with-editor-process-filter proc str t)) - filter))) - -(defvar with-editor-filter-visit-hook nil) - -(defun with-editor-output-filter (string) - (save-match-data - (if (string-match "^WITH-EDITOR: \\([0-9]+\\) OPEN \\(.+?\\)\r?$" string) - (let ((pid (match-string 1 string)) - (file (match-string 2 string))) - (with-current-buffer - (find-file-noselect - (if (and (file-name-absolute-p file) default-directory) - (concat (file-remote-p default-directory) file) - (expand-file-name file))) - (with-editor-mode 1) - (setq with-editor--pid pid) - (run-hooks 'with-editor-filter-visit-hook) - (funcall (or (with-editor-server-window) 'switch-to-buffer) - (current-buffer)) - (kill-local-variable 'server-window)) - nil) - string))) - -(defun with-editor-process-filter - (process string &optional no-default-filter) - "Listen for edit requests by child processes." - (let ((default-directory (process-get process 'default-dir))) - (with-editor-output-filter string)) - (unless no-default-filter - (internal-default-process-filter process string))) - -(advice-add 'server-visit-files :after - 'server-visit-files--with-editor-file-name-history-exclude) - -(defun server-visit-files--with-editor-file-name-history-exclude - (files _proc &optional _nowait) - (pcase-dolist (`(,file . ,_) files) - (when (cl-find-if (lambda (regexp) - (string-match-p regexp file)) - with-editor-file-name-history-exclude) - (setq file-name-history (delete file file-name-history))))) - -;;; Augmentations - -(cl-defun with-editor-export-editor (&optional (envvar "EDITOR")) - "Teach subsequent commands to use current Emacs instance as editor. - -Set and export the environment variable ENVVAR, by default -\"EDITOR\". The value is automatically generated to teach -commands to use the current Emacs instance as \"the editor\". - -This works in `shell-mode', `term-mode' and `eshell-mode'." - (interactive (list (with-editor-read-envvar))) - (cond - ((derived-mode-p 'comint-mode 'term-mode) - (let ((process (get-buffer-process (current-buffer)))) - (goto-char (process-mark process)) - (process-send-string - process (format " export %s=%s\n" envvar - (shell-quote-argument with-editor-sleeping-editor))) - (while (accept-process-output process 0.1)) - (if (derived-mode-p 'term-mode) - (with-editor-set-process-filter process 'with-editor-emulate-terminal) - (add-hook 'comint-output-filter-functions 'with-editor-output-filter - nil t)))) - ((derived-mode-p 'eshell-mode) - (add-to-list 'eshell-preoutput-filter-functions - 'with-editor-output-filter) - (setenv envvar with-editor-sleeping-editor)) - (t - (error "Cannot export environment variables in this buffer"))) - (message "Successfully exported %s" envvar)) - -(defun with-editor-export-git-editor () - "Like `with-editor-export-editor' but always set `$GIT_EDITOR'." - (interactive) - (with-editor-export-editor "GIT_EDITOR")) - -(defun with-editor-export-hg-editor () - "Like `with-editor-export-editor' but always set `$HG_EDITOR'." - (interactive) - (with-editor-export-editor "HG_EDITOR")) - -(defun with-editor-emulate-terminal (process string) - "Like `term-emulate-terminal' but also handle edit requests." - (when (with-editor-output-filter string) - (term-emulate-terminal process string))) - -(defvar with-editor-envvars '("EDITOR" "GIT_EDITOR" "HG_EDITOR")) - -(cl-defun with-editor-read-envvar - (&optional (prompt "Set environment variable") - (default "EDITOR")) - (let ((reply (completing-read (if default - (format "%s (%s): " prompt default) - (concat prompt ": ")) - with-editor-envvars nil nil nil nil default))) - (if (string= reply "") (user-error "Nothing selected") reply))) - -(define-minor-mode shell-command-with-editor-mode - "Teach `shell-command' to use current Emacs instance as editor. - -Teach `shell-command', and all commands that ultimately call that -command, to use the current Emacs instance as editor by executing -\"EDITOR=CLIENT COMMAND&\" instead of just \"COMMAND&\". - -CLIENT is automatically generated; EDITOR=CLIENT instructs -COMMAND to use to the current Emacs instance as \"the editor\", -assuming no other variable overrides the effect of \"$EDITOR\". -CLIENT may be the path to an appropriate emacsclient executable -with arguments, or a script which also works over Tramp. - -Alternatively you can use the `with-editor-async-shell-command', -which also allows the use of another variable instead of -\"EDITOR\"." - :global t) - -(defun with-editor-async-shell-command - (command &optional output-buffer error-buffer envvar) - "Like `async-shell-command' but with `$EDITOR' set. - -Execute string \"ENVVAR=CLIENT COMMAND\" in an inferior shell; -display output, if any. With a prefix argument prompt for an -environment variable, otherwise the default \"EDITOR\" variable -is used. With a negative prefix argument additionally insert -the COMMAND's output at point. - -CLIENT is automatically generated; ENVVAR=CLIENT instructs -COMMAND to use to the current Emacs instance as \"the editor\", -assuming it respects ENVVAR as an \"EDITOR\"-like variable. -CLIENT may be the path to an appropriate emacsclient executable -with arguments, or a script which also works over Tramp. - -Also see `async-shell-command' and `shell-command'." - (interactive (with-editor-shell-command-read-args "Async shell command: " t)) - (let ((with-editor--envvar envvar)) - (with-editor - (async-shell-command command output-buffer error-buffer)))) - -(defun with-editor-shell-command - (command &optional output-buffer error-buffer envvar) - "Like `shell-command' or `with-editor-async-shell-command'. -If COMMAND ends with \"&\" behave like the latter, -else like the former." - (interactive (with-editor-shell-command-read-args "Shell command: ")) - (if (string-match "&[ \t]*\\'" command) - (with-editor-async-shell-command - command output-buffer error-buffer envvar) - (shell-command command output-buffer error-buffer))) - -(defun with-editor-shell-command-read-args (prompt &optional async) - (let ((command (read-shell-command - prompt nil nil - (let ((filename (or buffer-file-name - (and (eq major-mode 'dired-mode) - (dired-get-filename nil t))))) - (and filename (file-relative-name filename)))))) - (list command - (if (or async (setq async (string-match-p "&[ \t]*\\'" command))) - (< (prefix-numeric-value current-prefix-arg) 0) - current-prefix-arg) - shell-command-default-error-buffer - (and async current-prefix-arg (with-editor-read-envvar))))) - -(defun shell-command--shell-command-with-editor-mode - (fn command &optional output-buffer error-buffer) - ;; `shell-mode' and its hook are intended for buffers in which an - ;; interactive shell is running, but `shell-command' also turns on - ;; that mode, even though it only runs the shell to run a single - ;; command. The `with-editor-export-editor' hook function is only - ;; intended to be used in buffers in which an interactive shell is - ;; running, so it has to be remove here. - (let ((shell-mode-hook (remove 'with-editor-export-editor shell-mode-hook))) - (cond ((or (not (or with-editor--envvar shell-command-with-editor-mode)) - (not (string-match-p "&\\'" command))) - (funcall fn command output-buffer error-buffer)) - ((and with-editor-shell-command-use-emacsclient - with-editor-emacsclient-executable - (not (file-remote-p default-directory))) - (with-editor (funcall fn command output-buffer error-buffer))) - (t - (apply fn (format "%s=%s %s" - (or with-editor--envvar "EDITOR") - (shell-quote-argument with-editor-sleeping-editor) - command) - output-buffer error-buffer) - (ignore-errors - (let ((process (get-buffer-process - (or output-buffer - (get-buffer "*Async Shell Command*"))))) - (set-process-filter - process (lambda (proc str) - (comint-output-filter proc str) - (with-editor-process-filter proc str t))) - process)))))) - -(advice-add 'shell-command :around - 'shell-command--shell-command-with-editor-mode) - -;;; with-editor.el ends soon - -(defun with-editor-debug () - "Debug configuration issues. -See info node `(with-editor)Debugging' for instructions." - (interactive) - (with-current-buffer (get-buffer-create "*with-editor-debug*") - (pop-to-buffer (current-buffer)) - (erase-buffer) - (ignore-errors (with-editor)) - (insert - (format "with-editor: %s\n" (locate-library "with-editor.el")) - (format "emacs: %s (%s)\n" - (expand-file-name invocation-name invocation-directory) - emacs-version) - "system:\n" - (format " system-type: %s\n" system-type) - (format " system-configuration: %s\n" system-configuration) - (format " system-configuration-options: %s\n" system-configuration-options) - "server:\n" - (format " server-running-p: %s\n" (server-running-p)) - (format " server-process: %S\n" server-process) - (format " server-use-tcp: %s\n" server-use-tcp) - (format " server-name: %s\n" server-name) - (format " server-socket-dir: %s\n" server-socket-dir)) - (if (and server-socket-dir (file-accessible-directory-p server-socket-dir)) - (dolist (file (directory-files server-socket-dir nil "^[^.]")) - (insert (format " %s\n" file))) - (insert (format " %s: not an accessible directory\n" - (if server-use-tcp "WARNING" "ERROR")))) - (insert (format " server-auth-dir: %s\n" server-auth-dir)) - (if (file-accessible-directory-p server-auth-dir) - (dolist (file (directory-files server-auth-dir nil "^[^.]")) - (insert (format " %s\n" file))) - (insert (format " %s: not an accessible directory\n" - (if server-use-tcp "ERROR" "WARNING")))) - (let ((val with-editor-emacsclient-executable) - (def (default-value 'with-editor-emacsclient-executable)) - (fun (let ((warning-minimum-level :error) - (warning-minimum-log-level :error)) - (with-editor-locate-emacsclient)))) - (insert "with-editor-emacsclient-executable:\n" - (format " value: %s (%s)\n" val - (and val (with-editor-emacsclient-version val))) - (format " default: %s (%s)\n" def - (and def (with-editor-emacsclient-version def))) - (format " funcall: %s (%s)\n" fun - (and fun (with-editor-emacsclient-version fun))))) - (insert "path:\n" - (format " $PATH: %S\n" (getenv "PATH")) - (format " exec-path: %s\n" exec-path)) - (insert (format " with-editor-emacsclient-path:\n")) - (dolist (dir (with-editor-emacsclient-path)) - (insert (format " %s (%s)\n" dir (car (file-attributes dir)))) - (when (file-directory-p dir) - ;; Don't match emacsclientw.exe, it makes popup windows. - (dolist (exec (directory-files dir t "emacsclient\\(?:[^w]\\|\\'\\)")) - (insert (format " %s (%s)\n" exec - (with-editor-emacsclient-version exec)))))))) - -(defconst with-editor-font-lock-keywords - '(("(\\(with-\\(?:git-\\)?editor\\)\\_>" (1 'font-lock-keyword-face)))) -(font-lock-add-keywords 'emacs-lisp-mode with-editor-font-lock-keywords) - -(provide 'with-editor) -;; Local Variables: -;; indent-tabs-mode: nil -;; End: -;;; with-editor.el ends here diff --git a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.elc b/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.elc deleted file mode 100644 index 37b79da36554487007b6ea3ae430ec6af1536692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30110 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 diff --git a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.info b/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.info deleted file mode 100644 index 36a7982..0000000 --- a/emacs/.emacs.d/elpa/with-editor-20171217.1239/with-editor.info +++ /dev/null @@ -1,331 +0,0 @@ -This is with-editor.info, produced by makeinfo version 5.2 from -with-editor.texi. - - Copyright (C) 2015-2017 Jonas Bernoulli - - You can redistribute this document 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 document 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. -INFO-DIR-SECTION Emacs -START-INFO-DIR-ENTRY -* With-Editor: (with-editor). Using the Emacsclient as $EDITOR. -END-INFO-DIR-ENTRY - - -File: with-editor.info, Node: Top, Next: Using the With-Editor package, Up: (dir) - -With-Editor User Manual -*********************** - -The library ‘with-editor’ makes it easy to use the Emacsclient as the -‘$EDITOR’ of child processes, making sure they know how to call home. -For remote processes a substitute is provided, which communicates with -Emacs on standard output instead of using a socket as the Emacsclient -does. - - This library was written because Magit has to be able to do the above -to allow the user to edit commit messages gracefully and to edit rebase -sequences, which wouldn’t be possible at all otherwise. - - Because other packages can benefit from such functionality, this -library is made available as a separate package. It also defines some -additional functionality which makes it useful even for end-users, who -don’t use Magit or another package which uses it internally. - -This manual is for With-Editor version 2.7.0 (v2.7.0-10-g93876b6+1). - - Copyright (C) 2015-2017 Jonas Bernoulli - - You can redistribute this document 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 document 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. - -* Menu: - -* Using the With-Editor package:: -* Using With-Editor as a library:: -* Debugging:: - -— The Detailed Node Listing — - -Using the With-Editor package - -* Configuring With-Editor:: -* Using With-Editor commands:: - - - -File: with-editor.info, Node: Using the With-Editor package, Next: Using With-Editor as a library, Prev: Top, Up: Top - -1 Using the With-Editor package -******************************* - -The ‘With-Editor’ package is used internally by Magit when editing -commit messages and rebase sequences. It also provides some commands -and features which are useful by themselves, even if you don’t use -Magit. - - For information about using this library in you own package, see -*note Using With-Editor as a library::. - -* Menu: - -* Configuring With-Editor:: -* Using With-Editor commands:: - - -File: with-editor.info, Node: Configuring With-Editor, Next: Using With-Editor commands, Up: Using the With-Editor package - -1.1 Configuring With-Editor -=========================== - -With-Editor tries very hard to locate a suitable ‘emacsclient’ -executable, so ideally you should never have to customize the option -‘with-editor-emacsclient-executable’. When it fails to do so, then the -most likely reason is that someone found yet another way to package -Emacs (most likely on macOS) without putting the executable on ‘$PATH’, -and we have to add another kludge to find it anyway. - - -- User Option: with-editor-emacsclient-executable - - The ‘emacsclient’ executable used as the editor by child process of - this Emacs instance. By using this executable, child processes can - call home to their parent process. - - This option is automatically set at startup by looking in - ‘exec-path’, and other places where the executable could be - installed, to find the ‘emacsclient’ executable most suitable for - the current Emacs instance. - - You should *not* customize this option permanently. If you have to - do it, then you should consider that a temporary kludge and inform - the Magit maintainer as described in *note Debugging::. - - If With-Editor fails to find a suitable ‘emacsclient’ on you - system, then this should be fixed for all users at once, by - teaching ‘with-editor-locate-emacsclient’ how to do so on your - system and system like yours. Doing it this way has the advantage, - that you won’t have do it again every time you update Emacs, and - that other users who have installed Emacs the same way as you have, - won’t have to go through the same trouble. - - Note that there also is a nuclear option; setting this variable to - ‘nil’ causes the "sleeping editor" described below to be used even - for local child processes. Obviously we don’t recommend that you - use this except in "emergencies", i.e. before we had a change to - add a kludge appropriate for you setup. - - -- Function: with-editor-locate-emacsclient - - The function used to set the initial value of the option - ‘with-editor-emacsclient-executable’. There’s a lot of voodoo - here. - - The ‘emacsclient’ cannot be used when using Tramp to run a process on -a remote machine. (Theoretically it could, but that would be hard to -setup, very fragile, and rather insecure). - - With-Editor provides an alternative "editor" which can be used by -remote processes in much the same way as local processes use an -‘emacsclient’ executable. This alternative is known as the "sleeping -editor" because it is implemented as a shell script which sleeps until -it receives a signal. - - -- User Option: with-editor-sleeping-editor - - The sleeping editor is a shell script used as the editor of child - processes when the ‘emacsclient’ executable cannot be used. - - This fallback is used for asynchronous process started inside the - macro ‘with-editor’, when the process runs on a remote machine or - for local processes when ‘with-editor-emacsclient-executable’ is - ‘nil’. - - Where the latter uses a socket to communicate with Emacs’ server, - this substitute prints edit requests to its standard output on - which a process filter listens for such requests. As such it is - not a complete substitute for a proper ‘emacsclient’, it can only - be used as ‘$EDITOR’ of child process of the current Emacs - instance. - - Some shells do not execute traps immediately when waiting for a - child process, but by default we do use such a blocking child - process. - - If you use such a shell (e.g. ‘csh’ on FreeBSD, but not Debian), - then you have to edit this option. You can either replace ‘sh’ - with ‘bash’ (and install that), or you can use the older, less - performant implementation: - - "sh -c '\ - echo \"WITH-EDITOR: $$ OPEN $0\"; \ - trap \"exit 0\" USR1; \ - trap \"exit 1\" USR2; \ - while true; do sleep 1; done'" - - This leads to a delay of up to a second. The delay can be - shortened by replacing ‘sleep 1’ with ‘sleep 0.01’, or if your - implementation does not support floats, then by using ‘nanosleep - 0.01’ instead. - - -File: with-editor.info, Node: Using With-Editor commands, Prev: Configuring With-Editor, Up: Using the With-Editor package - -1.2 Using With-Editor commands -============================== - -This section describes how to use the ‘with-editor’ library _outside_ of -Magit. You don’t need to know any of this just to create commits using -Magit. - - The commands ‘with-editor-async-shell-command’ and -‘with-editor-shell-command’ are intended as drop in replacements for -‘async-shell-command’ and ‘shell-command’. They automatically export -‘$EDITOR’ making sure the executed command uses the current Emacs -instance as "the editor". With a prefix argument these commands prompt -for an alternative environment variable such as ‘$GIT_EDITOR’. - - -- Command: with-editor-async-shell-command - - This command is like ‘async-shell-command’, but it runs the shell - command with the current Emacs instance exported as ‘$EDITOR’. - - -- Command: with-editor-shell-command - - This command is like ‘async-shell-command’, but it runs the shell - command with the current Emacs instance exported as ‘$EDITOR’. - This only has an effect if the shell command is run asynchronously, - i.e. when the command ends with ‘&’. - - To always use these variants add this to you init file: - - (define-key (current-global-map) - [remap async-shell-command] 'with-editor-async-shell-command) - (define-key (current-global-map) - [remap shell-command] 'with-editor-shell-command) - - Alternatively use the global ‘shell-command-with-editor-mode’. - - -- Variable: shell-command-with-editor-mode - - When this mode is active, then ‘$EDITOR’ is exported whenever - ultimately ‘shell-command’ is called to asynchronously run some - shell command. This affects most variants of that command, whether - they are defined in Emacs or in some third-party package. - - The command ‘with-editor-export-editor’ exports ‘$EDITOR’ or another -such environment variable in ‘shell-mode’, ‘term-mode’ and ‘eshell-mode’ -buffers. Use this Emacs command before executing a shell command which -needs the editor set, or always arrange for the current Emacs instance -to be used as editor by adding it to the appropriate mode hooks: - - (add-hook 'shell-mode-hook 'with-editor-export-editor) - (add-hook 'term-exec-hook 'with-editor-export-editor) - (add-hook 'eshell-mode-hook 'with-editor-export-editor) - - Some variants of this function exist; these two forms are equivalent: - - (add-hook 'shell-mode-hook - (apply-partially 'with-editor-export-editor "GIT_EDITOR")) - (add-hook 'shell-mode-hook 'with-editor-export-git-editor) - - -- Command: with-editor-export-editor - - When invoked in a ‘shell-mode’, ‘term-mode’, or ‘eshell-mode’ - buffer, this command teaches shell commands to use the current - Emacs instance as the editor, by exporting ‘$EDITOR’. - - -- Command: with-editor-export-git-editor - - This command is like ‘with-editor-export-editor’ but exports - ‘$GIT_EDITOR’. - - -- Command: with-editor-export-hg-editor - - This command is like ‘with-editor-export-editor’ but exports - ‘$HG_EDITOR’. - - -File: with-editor.info, Node: Using With-Editor as a library, Next: Debugging, Prev: Using the With-Editor package, Up: Top - -2 Using With-Editor as a library -******************************** - -This section describes how to use the ‘with-editor’ library _outside_ of -Magit to teach another package how to have its child processes call -home, just like Magit does. You don’t need to know any of this just to -create commits using Magit. You can also ignore this if you use -‘with-editor’ outside of Magit, but only as an end-user. - - For information about interactive use and options that affect both -interactive and non-interactive use, see *note Using the With-Editor -package::. - - -- Macro: with-editor &rest body - - This macro arranges for the ‘emacsclient’ or the sleeping editor to - be used as the editor of child processes, effectively teaching them - to call home to the current Emacs instance when they require that - the user edits a file. - - This is essentially done by establishing a local binding for - ‘process-environment’ and changing the value of the ‘$EDITOR’ - environment variable in that scope. This affects all asynchronous - processes started by forms (dynamically) inside BODY. - - -- Function: with-editor-set-process-filter process filter - - This function is like ‘set-process-filter’ but ensures that adding - the new FILTER does not remove the ‘with-editor-process-filter’. - This is done by wrapping the two filter functions using a lambda, - which becomes the actual filter. It calls - ‘with-editor-process-filter’ first, passing ‘t’ as - NO-STANDARD-FILTER. Then it calls FILTER. - - -File: with-editor.info, Node: Debugging, Prev: Using With-Editor as a library, Up: Top - -3 Debugging -*********** - -With-Editor tries very hard to locate a suitable ‘emacsclient’ -executable, and then sets option ‘with-editor-emacsclient-executable’ -accordingly. In very rare cases this fails. When it does fail, then -the most likely reason is that someone found yet another way to package -Emacs (most likely on macOS) without putting the executable on ‘$PATH’, -and we have to add another kludge to find it anyway. - - If you are having problems using ‘with-editor’, e.g. you cannot -commit in Magit, then please open a new issue at - and provide information -about your Emacs installation. Most importantly how did you install -Emacs and what is the output of ‘M-x with-editor-debug RET’. - - - -Tag Table: -Node: Top771 -Node: Using the With-Editor package2533 -Node: Configuring With-Editor3119 -Node: Using With-Editor commands7516 -Node: Using With-Editor as a library10779 -Node: Debugging12474 - -End Tag Table - - -Local Variables: -coding: utf-8 -End: diff --git a/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-autoloads.el b/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-autoloads.el deleted file mode 100644 index b2ea5b4..0000000 --- a/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-autoloads.el +++ /dev/null @@ -1,19 +0,0 @@ -;;; zenburn-theme-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "zenburn-theme" "zenburn-theme.el" (23124 14373 -;;;;;; 725534 779000)) -;;; Generated autoloads from zenburn-theme.el - -(and load-file-name (boundp 'custom-theme-load-path) (add-to-list 'custom-theme-load-path (file-name-as-directory (file-name-directory load-file-name)))) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; zenburn-theme-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-pkg.el b/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-pkg.el deleted file mode 100644 index 8374a98..0000000 --- a/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "zenburn-theme" "20171216.1027" "A low contrast color theme for Emacs." 'nil :commit "62d91fd7c054b0747f1309c012976deb471d4608" :url "http://github.com/bbatsov/zenburn-emacs") diff --git a/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme.el b/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme.el deleted file mode 100644 index 26c3737..0000000 --- a/emacs/.emacs.d/elpa/zenburn-theme-20171216.1027/zenburn-theme.el +++ /dev/null @@ -1,1461 +0,0 @@ -;;; zenburn-theme.el --- A low contrast color theme for Emacs. - -;; Copyright (C) 2011-2017 Bozhidar Batsov - -;; Author: Bozhidar Batsov -;; URL: http://github.com/bbatsov/zenburn-emacs -;; Package-Version: 20171216.1027 -;; Version: 2.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: - -;; A port of the popular Vim theme Zenburn for Emacs 24+, built on top -;; of the new built-in theme support in Emacs 24. - -;;; Credits: - -;; Jani Nurminen created the original theme for vim on which this port -;; is based. - -;;; Code: - -(deftheme zenburn "The Zenburn color theme") - -;;; Color Palette - -(defvar zenburn-default-colors-alist - '(("zenburn-fg+1" . "#FFFFEF") - ("zenburn-fg" . "#DCDCCC") - ("zenburn-fg-1" . "#656555") - ("zenburn-bg-2" . "#000000") - ("zenburn-bg-1" . "#2B2B2B") - ("zenburn-bg-05" . "#383838") - ("zenburn-bg" . "#3F3F3F") - ("zenburn-bg+05" . "#494949") - ("zenburn-bg+1" . "#4F4F4F") - ("zenburn-bg+2" . "#5F5F5F") - ("zenburn-bg+3" . "#6F6F6F") - ("zenburn-red+1" . "#DCA3A3") - ("zenburn-red" . "#CC9393") - ("zenburn-red-1" . "#BC8383") - ("zenburn-red-2" . "#AC7373") - ("zenburn-red-3" . "#9C6363") - ("zenburn-red-4" . "#8C5353") - ("zenburn-orange" . "#DFAF8F") - ("zenburn-yellow" . "#F0DFAF") - ("zenburn-yellow-1" . "#E0CF9F") - ("zenburn-yellow-2" . "#D0BF8F") - ("zenburn-green-1" . "#5F7F5F") - ("zenburn-green" . "#7F9F7F") - ("zenburn-green+1" . "#8FB28F") - ("zenburn-green+2" . "#9FC59F") - ("zenburn-green+3" . "#AFD8AF") - ("zenburn-green+4" . "#BFEBBF") - ("zenburn-cyan" . "#93E0E3") - ("zenburn-blue+1" . "#94BFF3") - ("zenburn-blue" . "#8CD0D3") - ("zenburn-blue-1" . "#7CB8BB") - ("zenburn-blue-2" . "#6CA0A3") - ("zenburn-blue-3" . "#5C888B") - ("zenburn-blue-4" . "#4C7073") - ("zenburn-blue-5" . "#366060") - ("zenburn-magenta" . "#DC8CC3")) - "List of Zenburn colors. -Each element has the form (NAME . HEX). - -`+N' suffixes indicate a color is lighter. -`-N' suffixes indicate a color is darker.") - -(defvar zenburn-override-colors-alist - '() - "Place to override default theme colors. - -You can override a subset of the theme's default colors by -defining them in this alist before loading the theme.") - -(defvar zenburn-colors-alist - (append zenburn-default-colors-alist zenburn-override-colors-alist)) - -(defmacro zenburn-with-color-variables (&rest body) - "`let' bind all colors defined in `zenburn-colors-alist' around BODY. -Also bind `class' to ((class color) (min-colors 89))." - (declare (indent 0)) - `(let ((class '((class color) (min-colors 89))) - ,@(mapcar (lambda (cons) - (list (intern (car cons)) (cdr cons))) - zenburn-colors-alist)) - ,@body)) - -;;; Theme Faces -(zenburn-with-color-variables - (custom-theme-set-faces - 'zenburn -;;;; Built-in -;;;;; basic coloring - '(button ((t (:underline t)))) - `(link ((t (:foreground ,zenburn-yellow :underline t :weight bold)))) - `(link-visited ((t (:foreground ,zenburn-yellow-2 :underline t :weight normal)))) - `(default ((t (:foreground ,zenburn-fg :background ,zenburn-bg)))) - `(cursor ((t (:foreground ,zenburn-fg :background ,zenburn-fg+1)))) - `(escape-glyph ((t (:foreground ,zenburn-yellow :weight bold)))) - `(fringe ((t (:foreground ,zenburn-fg :background ,zenburn-bg+1)))) - `(header-line ((t (:foreground ,zenburn-yellow - :background ,zenburn-bg-1 - :box (:line-width -1 :style released-button))))) - `(highlight ((t (:background ,zenburn-bg-05)))) - `(success ((t (:foreground ,zenburn-green :weight bold)))) - `(warning ((t (:foreground ,zenburn-orange :weight bold)))) - `(tooltip ((t (:foreground ,zenburn-fg :background ,zenburn-bg+1)))) -;;;;; compilation - `(compilation-column-face ((t (:foreground ,zenburn-yellow)))) - `(compilation-enter-directory-face ((t (:foreground ,zenburn-green)))) - `(compilation-error-face ((t (:foreground ,zenburn-red-1 :weight bold :underline t)))) - `(compilation-face ((t (:foreground ,zenburn-fg)))) - `(compilation-info-face ((t (:foreground ,zenburn-blue)))) - `(compilation-info ((t (:foreground ,zenburn-green+4 :underline t)))) - `(compilation-leave-directory-face ((t (:foreground ,zenburn-green)))) - `(compilation-line-face ((t (:foreground ,zenburn-yellow)))) - `(compilation-line-number ((t (:foreground ,zenburn-yellow)))) - `(compilation-message-face ((t (:foreground ,zenburn-blue)))) - `(compilation-warning-face ((t (:foreground ,zenburn-orange :weight bold :underline t)))) - `(compilation-mode-line-exit ((t (:foreground ,zenburn-green+2 :weight bold)))) - `(compilation-mode-line-fail ((t (:foreground ,zenburn-red :weight bold)))) - `(compilation-mode-line-run ((t (:foreground ,zenburn-yellow :weight bold)))) -;;;;; completions - `(completions-annotations ((t (:foreground ,zenburn-fg-1)))) -;;;;; eww - '(eww-invalid-certificate ((t (:inherit error)))) - '(eww-valid-certificate ((t (:inherit success)))) -;;;;; grep - `(grep-context-face ((t (:foreground ,zenburn-fg)))) - `(grep-error-face ((t (:foreground ,zenburn-red-1 :weight bold :underline t)))) - `(grep-hit-face ((t (:foreground ,zenburn-blue)))) - `(grep-match-face ((t (:foreground ,zenburn-orange :weight bold)))) - `(match ((t (:background ,zenburn-bg-1 :foreground ,zenburn-orange :weight bold)))) -;;;;; hi-lock - `(hi-blue ((t (:background ,zenburn-cyan :foreground ,zenburn-bg-1)))) - `(hi-green ((t (:background ,zenburn-green+4 :foreground ,zenburn-bg-1)))) - `(hi-pink ((t (:background ,zenburn-magenta :foreground ,zenburn-bg-1)))) - `(hi-yellow ((t (:background ,zenburn-yellow :foreground ,zenburn-bg-1)))) - `(hi-blue-b ((t (:foreground ,zenburn-blue :weight bold)))) - `(hi-green-b ((t (:foreground ,zenburn-green+2 :weight bold)))) - `(hi-red-b ((t (:foreground ,zenburn-red :weight bold)))) -;;;;; info - `(Info-quoted ((t (:inherit font-lock-constant-face)))) -;;;;; isearch - `(isearch ((t (:foreground ,zenburn-yellow-2 :weight bold :background ,zenburn-bg+2)))) - `(isearch-fail ((t (:foreground ,zenburn-fg :background ,zenburn-red-4)))) - `(lazy-highlight ((t (:foreground ,zenburn-yellow-2 :weight bold :background ,zenburn-bg-05)))) - - `(menu ((t (:foreground ,zenburn-fg :background ,zenburn-bg)))) - `(minibuffer-prompt ((t (:foreground ,zenburn-yellow)))) - `(mode-line - ((,class (:foreground ,zenburn-green+1 - :background ,zenburn-bg-1 - :box (:line-width -1 :style released-button))) - (t :inverse-video t))) - `(mode-line-buffer-id ((t (:foreground ,zenburn-yellow :weight bold)))) - `(mode-line-inactive - ((t (:foreground ,zenburn-green-1 - :background ,zenburn-bg-05 - :box (:line-width -1 :style released-button))))) - `(region ((,class (:background ,zenburn-bg-1)) - (t :inverse-video t))) - `(secondary-selection ((t (:background ,zenburn-bg+2)))) - `(trailing-whitespace ((t (:background ,zenburn-red)))) - `(vertical-border ((t (:foreground ,zenburn-fg)))) -;;;;; font lock - `(font-lock-builtin-face ((t (:foreground ,zenburn-fg :weight bold)))) - `(font-lock-comment-face ((t (:foreground ,zenburn-green)))) - `(font-lock-comment-delimiter-face ((t (:foreground ,zenburn-green-1)))) - `(font-lock-constant-face ((t (:foreground ,zenburn-green+4)))) - `(font-lock-doc-face ((t (:foreground ,zenburn-green+2)))) - `(font-lock-function-name-face ((t (:foreground ,zenburn-cyan)))) - `(font-lock-keyword-face ((t (:foreground ,zenburn-yellow :weight bold)))) - `(font-lock-negation-char-face ((t (:foreground ,zenburn-yellow :weight bold)))) - `(font-lock-preprocessor-face ((t (:foreground ,zenburn-blue+1)))) - `(font-lock-regexp-grouping-construct ((t (:foreground ,zenburn-yellow :weight bold)))) - `(font-lock-regexp-grouping-backslash ((t (:foreground ,zenburn-green :weight bold)))) - `(font-lock-string-face ((t (:foreground ,zenburn-red)))) - `(font-lock-type-face ((t (:foreground ,zenburn-blue-1)))) - `(font-lock-variable-name-face ((t (:foreground ,zenburn-orange)))) - `(font-lock-warning-face ((t (:foreground ,zenburn-yellow-2 :weight bold)))) - - `(c-annotation-face ((t (:inherit font-lock-constant-face)))) -;;;;; man - '(Man-overstrike ((t (:inherit font-lock-keyword-face)))) - '(Man-underline ((t (:inherit (font-lock-string-face underline))))) -;;;;; newsticker - `(newsticker-date-face ((t (:foreground ,zenburn-fg)))) - `(newsticker-default-face ((t (:foreground ,zenburn-fg)))) - `(newsticker-enclosure-face ((t (:foreground ,zenburn-green+3)))) - `(newsticker-extra-face ((t (:foreground ,zenburn-bg+2 :height 0.8)))) - `(newsticker-feed-face ((t (:foreground ,zenburn-fg)))) - `(newsticker-immortal-item-face ((t (:foreground ,zenburn-green)))) - `(newsticker-new-item-face ((t (:foreground ,zenburn-blue)))) - `(newsticker-obsolete-item-face ((t (:foreground ,zenburn-red)))) - `(newsticker-old-item-face ((t (:foreground ,zenburn-bg+3)))) - `(newsticker-statistics-face ((t (:foreground ,zenburn-fg)))) - `(newsticker-treeview-face ((t (:foreground ,zenburn-fg)))) - `(newsticker-treeview-immortal-face ((t (:foreground ,zenburn-green)))) - `(newsticker-treeview-listwindow-face ((t (:foreground ,zenburn-fg)))) - `(newsticker-treeview-new-face ((t (:foreground ,zenburn-blue :weight bold)))) - `(newsticker-treeview-obsolete-face ((t (:foreground ,zenburn-red)))) - `(newsticker-treeview-old-face ((t (:foreground ,zenburn-bg+3)))) - `(newsticker-treeview-selection-face ((t (:background ,zenburn-bg-1 :foreground ,zenburn-yellow)))) -;;;;; woman - '(woman-bold ((t (:inherit font-lock-keyword-face)))) - '(woman-italic ((t (:inherit (font-lock-string-face italic))))) -;;;; Third-party -;;;;; ace-jump - `(ace-jump-face-background - ((t (:foreground ,zenburn-fg-1 :background ,zenburn-bg :inverse-video nil)))) - `(ace-jump-face-foreground - ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg :inverse-video nil)))) -;;;;; ace-window - `(aw-background-face - ((t (:foreground ,zenburn-fg-1 :background ,zenburn-bg :inverse-video nil)))) - `(aw-leading-char-face ((t (:inherit aw-mode-line-face)))) -;;;;; android mode - `(android-mode-debug-face ((t (:foreground ,zenburn-green+1)))) - `(android-mode-error-face ((t (:foreground ,zenburn-orange :weight bold)))) - `(android-mode-info-face ((t (:foreground ,zenburn-fg)))) - `(android-mode-verbose-face ((t (:foreground ,zenburn-green)))) - `(android-mode-warning-face ((t (:foreground ,zenburn-yellow)))) -;;;;; anzu - `(anzu-mode-line ((t (:foreground ,zenburn-cyan :weight bold)))) - `(anzu-mode-line-no-match ((t (:foreground ,zenburn-red :weight bold)))) - `(anzu-match-1 ((t (:foreground ,zenburn-bg :background ,zenburn-green)))) - `(anzu-match-2 ((t (:foreground ,zenburn-bg :background ,zenburn-orange)))) - `(anzu-match-3 ((t (:foreground ,zenburn-bg :background ,zenburn-blue)))) - `(anzu-replace-to ((t (:inherit anzu-replace-highlight :foreground ,zenburn-yellow)))) -;;;;; auctex - `(font-latex-bold-face ((t (:inherit bold)))) - `(font-latex-warning-face ((t (:foreground nil :inherit font-lock-warning-face)))) - `(font-latex-sectioning-5-face ((t (:foreground ,zenburn-red :weight bold )))) - `(font-latex-sedate-face ((t (:foreground ,zenburn-yellow)))) - `(font-latex-italic-face ((t (:foreground ,zenburn-cyan :slant italic)))) - `(font-latex-string-face ((t (:inherit ,font-lock-string-face)))) - `(font-latex-math-face ((t (:foreground ,zenburn-orange)))) - `(font-latex-script-char-face ((t (:foreground ,zenburn-orange)))) -;;;;; agda-mode - `(agda2-highlight-keyword-face ((t (:foreground ,zenburn-yellow :weight bold)))) - `(agda2-highlight-string-face ((t (:foreground ,zenburn-red)))) - `(agda2-highlight-symbol-face ((t (:foreground ,zenburn-orange)))) - `(agda2-highlight-primitive-type-face ((t (:foreground ,zenburn-blue-1)))) - `(agda2-highlight-inductive-constructor-face ((t (:foreground ,zenburn-fg)))) - `(agda2-highlight-coinductive-constructor-face ((t (:foreground ,zenburn-fg)))) - `(agda2-highlight-datatype-face ((t (:foreground ,zenburn-blue)))) - `(agda2-highlight-function-face ((t (:foreground ,zenburn-blue)))) - `(agda2-highlight-module-face ((t (:foreground ,zenburn-blue-1)))) - `(agda2-highlight-error-face ((t (:foreground ,zenburn-bg :background ,zenburn-magenta)))) - `(agda2-highlight-unsolved-meta-face ((t (:foreground ,zenburn-bg :background ,zenburn-magenta)))) - `(agda2-highlight-unsolved-constraint-face ((t (:foreground ,zenburn-bg :background ,zenburn-magenta)))) - `(agda2-highlight-termination-problem-face ((t (:foreground ,zenburn-bg :background ,zenburn-magenta)))) - `(agda2-highlight-incomplete-pattern-face ((t (:foreground ,zenburn-bg :background ,zenburn-magenta)))) - `(agda2-highlight-typechecks-face ((t (:background ,zenburn-red-4)))) -;;;;; auto-complete - `(ac-candidate-face ((t (:background ,zenburn-bg+3 :foreground ,zenburn-bg-2)))) - `(ac-selection-face ((t (:background ,zenburn-blue-4 :foreground ,zenburn-fg)))) - `(popup-tip-face ((t (:background ,zenburn-yellow-2 :foreground ,zenburn-bg-2)))) - `(popup-menu-mouse-face ((t (:background ,zenburn-yellow-2 :foreground ,zenburn-bg-2)))) - `(popup-summary-face ((t (:background ,zenburn-bg+3 :foreground ,zenburn-bg-2)))) - `(popup-scroll-bar-foreground-face ((t (:background ,zenburn-blue-5)))) - `(popup-scroll-bar-background-face ((t (:background ,zenburn-bg-1)))) - `(popup-isearch-match ((t (:background ,zenburn-bg :foreground ,zenburn-fg)))) -;;;;; avy - `(avy-background-face - ((t (:foreground ,zenburn-fg-1 :background ,zenburn-bg :inverse-video nil)))) - `(avy-lead-face-0 - ((t (:foreground ,zenburn-green+3 :background ,zenburn-bg :inverse-video nil :weight bold)))) - `(avy-lead-face-1 - ((t (:foreground ,zenburn-yellow :background ,zenburn-bg :inverse-video nil :weight bold)))) - `(avy-lead-face-2 - ((t (:foreground ,zenburn-red+1 :background ,zenburn-bg :inverse-video nil :weight bold)))) - `(avy-lead-face - ((t (:foreground ,zenburn-cyan :background ,zenburn-bg :inverse-video nil :weight bold)))) -;;;;; company-mode - `(company-tooltip ((t (:foreground ,zenburn-fg :background ,zenburn-bg+1)))) - `(company-tooltip-annotation ((t (:foreground ,zenburn-orange :background ,zenburn-bg+1)))) - `(company-tooltip-annotation-selection ((t (:foreground ,zenburn-orange :background ,zenburn-bg-1)))) - `(company-tooltip-selection ((t (:foreground ,zenburn-fg :background ,zenburn-bg-1)))) - `(company-tooltip-mouse ((t (:background ,zenburn-bg-1)))) - `(company-tooltip-common ((t (:foreground ,zenburn-green+2)))) - `(company-tooltip-common-selection ((t (:foreground ,zenburn-green+2)))) - `(company-scrollbar-fg ((t (:background ,zenburn-bg-1)))) - `(company-scrollbar-bg ((t (:background ,zenburn-bg+2)))) - `(company-preview ((t (:background ,zenburn-green+2)))) - `(company-preview-common ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg-1)))) -;;;;; bm - `(bm-face ((t (:background ,zenburn-yellow-1 :foreground ,zenburn-bg)))) - `(bm-fringe-face ((t (:background ,zenburn-yellow-1 :foreground ,zenburn-bg)))) - `(bm-fringe-persistent-face ((t (:background ,zenburn-green-1 :foreground ,zenburn-bg)))) - `(bm-persistent-face ((t (:background ,zenburn-green-1 :foreground ,zenburn-bg)))) -;;;;; calfw - `(cfw:face-annotation ((t (:foreground ,zenburn-red :inherit cfw:face-day-title)))) - `(cfw:face-day-title ((t nil))) - `(cfw:face-default-content ((t (:foreground ,zenburn-green)))) - `(cfw:face-default-day ((t (:weight bold)))) - `(cfw:face-disable ((t (:foreground ,zenburn-fg-1)))) - `(cfw:face-grid ((t (:inherit shadow)))) - `(cfw:face-header ((t (:inherit font-lock-keyword-face)))) - `(cfw:face-holiday ((t (:inherit cfw:face-sunday)))) - `(cfw:face-periods ((t (:foreground ,zenburn-cyan)))) - `(cfw:face-saturday ((t (:foreground ,zenburn-blue :weight bold)))) - `(cfw:face-select ((t (:background ,zenburn-blue-5)))) - `(cfw:face-sunday ((t (:foreground ,zenburn-red :weight bold)))) - `(cfw:face-title ((t (:height 2.0 :inherit (variable-pitch font-lock-keyword-face))))) - `(cfw:face-today ((t (:foreground ,zenburn-cyan :weight bold)))) - `(cfw:face-today-title ((t (:inherit highlight bold)))) - `(cfw:face-toolbar ((t (:background ,zenburn-blue-5)))) - `(cfw:face-toolbar-button-off ((t (:underline nil :inherit link)))) - `(cfw:face-toolbar-button-on ((t (:underline nil :inherit link-visited)))) -;;;;; cider - `(cider-result-overlay-face ((t (:background unspecified)))) - `(cider-enlightened-face ((t (:box (:color ,zenburn-orange :line-width -1))))) - `(cider-enlightened-local-face ((t (:weight bold :foreground ,zenburn-green+1)))) - `(cider-deprecated-face ((t (:background ,zenburn-yellow-2)))) - `(cider-instrumented-face ((t (:box (:color ,zenburn-red :line-width -1))))) - `(cider-traced-face ((t (:box (:color ,zenburn-cyan :line-width -1))))) - `(cider-test-failure-face ((t (:background ,zenburn-red-4)))) - `(cider-test-error-face ((t (:background ,zenburn-magenta)))) - `(cider-test-success-face ((t (:background ,zenburn-green-1)))) - `(cider-fringe-good-face ((t (:foreground ,zenburn-green+4)))) -;;;;; circe - `(circe-highlight-nick-face ((t (:foreground ,zenburn-cyan)))) - `(circe-my-message-face ((t (:foreground ,zenburn-fg)))) - `(circe-fool-face ((t (:foreground ,zenburn-red+1)))) - `(circe-topic-diff-removed-face ((t (:foreground ,zenburn-red :weight bold)))) - `(circe-originator-face ((t (:foreground ,zenburn-fg)))) - `(circe-server-face ((t (:foreground ,zenburn-green)))) - `(circe-topic-diff-new-face ((t (:foreground ,zenburn-orange :weight bold)))) - `(circe-prompt-face ((t (:foreground ,zenburn-orange :background ,zenburn-bg :weight bold)))) -;;;;; context-coloring - `(context-coloring-level-0-face ((t :foreground ,zenburn-fg))) - `(context-coloring-level-1-face ((t :foreground ,zenburn-cyan))) - `(context-coloring-level-2-face ((t :foreground ,zenburn-green+4))) - `(context-coloring-level-3-face ((t :foreground ,zenburn-yellow))) - `(context-coloring-level-4-face ((t :foreground ,zenburn-orange))) - `(context-coloring-level-5-face ((t :foreground ,zenburn-magenta))) - `(context-coloring-level-6-face ((t :foreground ,zenburn-blue+1))) - `(context-coloring-level-7-face ((t :foreground ,zenburn-green+2))) - `(context-coloring-level-8-face ((t :foreground ,zenburn-yellow-2))) - `(context-coloring-level-9-face ((t :foreground ,zenburn-red+1))) -;;;;; coq - `(coq-solve-tactics-face ((t (:foreground nil :inherit font-lock-constant-face)))) -;;;;; ctable - `(ctbl:face-cell-select ((t (:background ,zenburn-blue :foreground ,zenburn-bg)))) - `(ctbl:face-continue-bar ((t (:background ,zenburn-bg-05 :foreground ,zenburn-bg)))) - `(ctbl:face-row-select ((t (:background ,zenburn-cyan :foreground ,zenburn-bg)))) -;;;;; debbugs - `(debbugs-gnu-done ((t (:foreground ,zenburn-fg-1)))) - `(debbugs-gnu-handled ((t (:foreground ,zenburn-green)))) - `(debbugs-gnu-new ((t (:foreground ,zenburn-red)))) - `(debbugs-gnu-pending ((t (:foreground ,zenburn-blue)))) - `(debbugs-gnu-stale ((t (:foreground ,zenburn-orange)))) - `(debbugs-gnu-tagged ((t (:foreground ,zenburn-red)))) -;;;;; diff - `(diff-added ((t (:background "#335533" :foreground ,zenburn-green)))) - `(diff-changed ((t (:background "#555511" :foreground ,zenburn-yellow-1)))) - `(diff-removed ((t (:background "#553333" :foreground ,zenburn-red-2)))) - `(diff-refine-added ((t (:background "#338833" :foreground ,zenburn-green+4)))) - `(diff-refine-change ((t (:background "#888811" :foreground ,zenburn-yellow)))) - `(diff-refine-removed ((t (:background "#883333" :foreground ,zenburn-red)))) - `(diff-header ((,class (:background ,zenburn-bg+2)) - (t (:background ,zenburn-fg :foreground ,zenburn-bg)))) - `(diff-file-header - ((,class (:background ,zenburn-bg+2 :foreground ,zenburn-fg :weight bold)) - (t (:background ,zenburn-fg :foreground ,zenburn-bg :weight bold)))) -;;;;; diff-hl - `(diff-hl-change ((,class (:foreground ,zenburn-blue :background ,zenburn-blue-2)))) - `(diff-hl-delete ((,class (:foreground ,zenburn-red+1 :background ,zenburn-red-1)))) - `(diff-hl-insert ((,class (:foreground ,zenburn-green+1 :background ,zenburn-green-1)))) -;;;;; dim-autoload - `(dim-autoload-cookie-line ((t :foreground ,zenburn-bg+1))) -;;;;; dired+ - `(diredp-display-msg ((t (:foreground ,zenburn-blue)))) - `(diredp-compressed-file-suffix ((t (:foreground ,zenburn-orange)))) - `(diredp-date-time ((t (:foreground ,zenburn-magenta)))) - `(diredp-deletion ((t (:foreground ,zenburn-yellow)))) - `(diredp-deletion-file-name ((t (:foreground ,zenburn-red)))) - `(diredp-dir-heading ((t (:foreground ,zenburn-blue :background ,zenburn-bg-1)))) - `(diredp-dir-priv ((t (:foreground ,zenburn-cyan)))) - `(diredp-exec-priv ((t (:foreground ,zenburn-red)))) - `(diredp-executable-tag ((t (:foreground ,zenburn-green+1)))) - `(diredp-file-name ((t (:foreground ,zenburn-blue)))) - `(diredp-file-suffix ((t (:foreground ,zenburn-green)))) - `(diredp-flag-mark ((t (:foreground ,zenburn-yellow)))) - `(diredp-flag-mark-line ((t (:foreground ,zenburn-orange)))) - `(diredp-ignored-file-name ((t (:foreground ,zenburn-red)))) - `(diredp-link-priv ((t (:foreground ,zenburn-yellow)))) - `(diredp-mode-line-flagged ((t (:foreground ,zenburn-yellow)))) - `(diredp-mode-line-marked ((t (:foreground ,zenburn-orange)))) - `(diredp-no-priv ((t (:foreground ,zenburn-fg)))) - `(diredp-number ((t (:foreground ,zenburn-green+1)))) - `(diredp-other-priv ((t (:foreground ,zenburn-yellow-1)))) - `(diredp-rare-priv ((t (:foreground ,zenburn-red-1)))) - `(diredp-read-priv ((t (:foreground ,zenburn-green-1)))) - `(diredp-symlink ((t (:foreground ,zenburn-yellow)))) - `(diredp-write-priv ((t (:foreground ,zenburn-magenta)))) -;;;;; dired-async - `(dired-async-failures ((t (:foreground ,zenburn-red :weight bold)))) - `(dired-async-message ((t (:foreground ,zenburn-yellow :weight bold)))) - `(dired-async-mode-message ((t (:foreground ,zenburn-yellow)))) -;;;;; ediff - `(ediff-current-diff-A ((t (:foreground ,zenburn-fg :background ,zenburn-red-4)))) - `(ediff-current-diff-Ancestor ((t (:foreground ,zenburn-fg :background ,zenburn-red-4)))) - `(ediff-current-diff-B ((t (:foreground ,zenburn-fg :background ,zenburn-green-1)))) - `(ediff-current-diff-C ((t (:foreground ,zenburn-fg :background ,zenburn-blue-5)))) - `(ediff-even-diff-A ((t (:background ,zenburn-bg+1)))) - `(ediff-even-diff-Ancestor ((t (:background ,zenburn-bg+1)))) - `(ediff-even-diff-B ((t (:background ,zenburn-bg+1)))) - `(ediff-even-diff-C ((t (:background ,zenburn-bg+1)))) - `(ediff-fine-diff-A ((t (:foreground ,zenburn-fg :background ,zenburn-red-2 :weight bold)))) - `(ediff-fine-diff-Ancestor ((t (:foreground ,zenburn-fg :background ,zenburn-red-2 weight bold)))) - `(ediff-fine-diff-B ((t (:foreground ,zenburn-fg :background ,zenburn-green :weight bold)))) - `(ediff-fine-diff-C ((t (:foreground ,zenburn-fg :background ,zenburn-blue-3 :weight bold )))) - `(ediff-odd-diff-A ((t (:background ,zenburn-bg+2)))) - `(ediff-odd-diff-Ancestor ((t (:background ,zenburn-bg+2)))) - `(ediff-odd-diff-B ((t (:background ,zenburn-bg+2)))) - `(ediff-odd-diff-C ((t (:background ,zenburn-bg+2)))) -;;;;; egg - `(egg-text-base ((t (:foreground ,zenburn-fg)))) - `(egg-help-header-1 ((t (:foreground ,zenburn-yellow)))) - `(egg-help-header-2 ((t (:foreground ,zenburn-green+3)))) - `(egg-branch ((t (:foreground ,zenburn-yellow)))) - `(egg-branch-mono ((t (:foreground ,zenburn-yellow)))) - `(egg-term ((t (:foreground ,zenburn-yellow)))) - `(egg-diff-add ((t (:foreground ,zenburn-green+4)))) - `(egg-diff-del ((t (:foreground ,zenburn-red+1)))) - `(egg-diff-file-header ((t (:foreground ,zenburn-yellow-2)))) - `(egg-section-title ((t (:foreground ,zenburn-yellow)))) - `(egg-stash-mono ((t (:foreground ,zenburn-green+4)))) -;;;;; elfeed - `(elfeed-log-error-level-face ((t (:foreground ,zenburn-red)))) - `(elfeed-log-info-level-face ((t (:foreground ,zenburn-blue)))) - `(elfeed-log-warn-level-face ((t (:foreground ,zenburn-yellow)))) - `(elfeed-search-date-face ((t (:foreground ,zenburn-yellow-1 :underline t - :weight bold)))) - `(elfeed-search-tag-face ((t (:foreground ,zenburn-green)))) - `(elfeed-search-feed-face ((t (:foreground ,zenburn-cyan)))) -;;;;; emacs-w3m - `(w3m-anchor ((t (:foreground ,zenburn-yellow :underline t - :weight bold)))) - `(w3m-arrived-anchor ((t (:foreground ,zenburn-yellow-2 - :underline t :weight normal)))) - `(w3m-form ((t (:foreground ,zenburn-red-1 :underline t)))) - `(w3m-header-line-location-title ((t (:foreground ,zenburn-yellow - :underline t :weight bold)))) - '(w3m-history-current-url ((t (:inherit match)))) - `(w3m-lnum ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) - `(w3m-lnum-match ((t (:background ,zenburn-bg-1 - :foreground ,zenburn-orange - :weight bold)))) - `(w3m-lnum-minibuffer-prompt ((t (:foreground ,zenburn-yellow)))) -;;;;; erc - `(erc-action-face ((t (:inherit erc-default-face)))) - `(erc-bold-face ((t (:weight bold)))) - `(erc-current-nick-face ((t (:foreground ,zenburn-blue :weight bold)))) - `(erc-dangerous-host-face ((t (:inherit font-lock-warning-face)))) - `(erc-default-face ((t (:foreground ,zenburn-fg)))) - `(erc-direct-msg-face ((t (:inherit erc-default-face)))) - `(erc-error-face ((t (:inherit font-lock-warning-face)))) - `(erc-fool-face ((t (:inherit erc-default-face)))) - `(erc-highlight-face ((t (:inherit hover-highlight)))) - `(erc-input-face ((t (:foreground ,zenburn-yellow)))) - `(erc-keyword-face ((t (:foreground ,zenburn-blue :weight bold)))) - `(erc-nick-default-face ((t (:foreground ,zenburn-yellow :weight bold)))) - `(erc-my-nick-face ((t (:foreground ,zenburn-red :weight bold)))) - `(erc-nick-msg-face ((t (:inherit erc-default-face)))) - `(erc-notice-face ((t (:foreground ,zenburn-green)))) - `(erc-pal-face ((t (:foreground ,zenburn-orange :weight bold)))) - `(erc-prompt-face ((t (:foreground ,zenburn-orange :background ,zenburn-bg :weight bold)))) - `(erc-timestamp-face ((t (:foreground ,zenburn-green+4)))) - `(erc-underline-face ((t (:underline t)))) -;;;;; eros - `(eros-result-overlay-face ((t (:background unspecified)))) -;;;;; ert - `(ert-test-result-expected ((t (:foreground ,zenburn-green+4 :background ,zenburn-bg)))) - `(ert-test-result-unexpected ((t (:foreground ,zenburn-red :background ,zenburn-bg)))) -;;;;; eshell - `(eshell-prompt ((t (:foreground ,zenburn-yellow :weight bold)))) - `(eshell-ls-archive ((t (:foreground ,zenburn-red-1 :weight bold)))) - `(eshell-ls-backup ((t (:inherit font-lock-comment-face)))) - `(eshell-ls-clutter ((t (:inherit font-lock-comment-face)))) - `(eshell-ls-directory ((t (:foreground ,zenburn-blue+1 :weight bold)))) - `(eshell-ls-executable ((t (:foreground ,zenburn-red+1 :weight bold)))) - `(eshell-ls-unreadable ((t (:foreground ,zenburn-fg)))) - `(eshell-ls-missing ((t (:inherit font-lock-warning-face)))) - `(eshell-ls-product ((t (:inherit font-lock-doc-face)))) - `(eshell-ls-special ((t (:foreground ,zenburn-yellow :weight bold)))) - `(eshell-ls-symlink ((t (:foreground ,zenburn-cyan :weight bold)))) -;;;;; flx - `(flx-highlight-face ((t (:foreground ,zenburn-green+2 :weight bold)))) -;;;;; flycheck - `(flycheck-error - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-red-1) :inherit unspecified)) - (t (:foreground ,zenburn-red-1 :weight bold :underline t)))) - `(flycheck-warning - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-yellow) :inherit unspecified)) - (t (:foreground ,zenburn-yellow :weight bold :underline t)))) - `(flycheck-info - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-cyan) :inherit unspecified)) - (t (:foreground ,zenburn-cyan :weight bold :underline t)))) - `(flycheck-fringe-error ((t (:foreground ,zenburn-red-1 :weight bold)))) - `(flycheck-fringe-warning ((t (:foreground ,zenburn-yellow :weight bold)))) - `(flycheck-fringe-info ((t (:foreground ,zenburn-cyan :weight bold)))) -;;;;; flymake - `(flymake-errline - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-red) - :inherit unspecified :foreground unspecified :background unspecified)) - (t (:foreground ,zenburn-red-1 :weight bold :underline t)))) - `(flymake-warnline - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-orange) - :inherit unspecified :foreground unspecified :background unspecified)) - (t (:foreground ,zenburn-orange :weight bold :underline t)))) - `(flymake-infoline - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-green) - :inherit unspecified :foreground unspecified :background unspecified)) - (t (:foreground ,zenburn-green-1 :weight bold :underline t)))) -;;;;; flyspell - `(flyspell-duplicate - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-orange) :inherit unspecified)) - (t (:foreground ,zenburn-orange :weight bold :underline t)))) - `(flyspell-incorrect - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-red) :inherit unspecified)) - (t (:foreground ,zenburn-red-1 :weight bold :underline t)))) -;;;;; full-ack - `(ack-separator ((t (:foreground ,zenburn-fg)))) - `(ack-file ((t (:foreground ,zenburn-blue)))) - `(ack-line ((t (:foreground ,zenburn-yellow)))) - `(ack-match ((t (:foreground ,zenburn-orange :background ,zenburn-bg-1 :weight bold)))) -;;;;; git-annex - '(git-annex-dired-annexed-available ((t (:inherit success :weight normal)))) - '(git-annex-dired-annexed-unavailable ((t (:inherit error :weight normal)))) -;;;;; git-commit - `(git-commit-comment-action ((,class (:foreground ,zenburn-green+1 :weight bold)))) - `(git-commit-comment-branch ((,class (:foreground ,zenburn-blue+1 :weight bold)))) ; obsolete - `(git-commit-comment-branch-local ((,class (:foreground ,zenburn-blue+1 :weight bold)))) - `(git-commit-comment-branch-remote ((,class (:foreground ,zenburn-green :weight bold)))) - `(git-commit-comment-heading ((,class (:foreground ,zenburn-yellow :weight bold)))) -;;;;; git-gutter - `(git-gutter:added ((t (:foreground ,zenburn-green :weight bold :inverse-video t)))) - `(git-gutter:deleted ((t (:foreground ,zenburn-red :weight bold :inverse-video t)))) - `(git-gutter:modified ((t (:foreground ,zenburn-magenta :weight bold :inverse-video t)))) - `(git-gutter:unchanged ((t (:foreground ,zenburn-fg :weight bold :inverse-video t)))) -;;;;; git-gutter-fr - `(git-gutter-fr:added ((t (:foreground ,zenburn-green :weight bold)))) - `(git-gutter-fr:deleted ((t (:foreground ,zenburn-red :weight bold)))) - `(git-gutter-fr:modified ((t (:foreground ,zenburn-magenta :weight bold)))) -;;;;; git-rebase - `(git-rebase-hash ((t (:foreground, zenburn-orange)))) -;;;;; gnus - `(gnus-group-mail-1 ((t (:weight bold :inherit gnus-group-mail-1-empty)))) - `(gnus-group-mail-1-empty ((t (:inherit gnus-group-news-1-empty)))) - `(gnus-group-mail-2 ((t (:weight bold :inherit gnus-group-mail-2-empty)))) - `(gnus-group-mail-2-empty ((t (:inherit gnus-group-news-2-empty)))) - `(gnus-group-mail-3 ((t (:weight bold :inherit gnus-group-mail-3-empty)))) - `(gnus-group-mail-3-empty ((t (:inherit gnus-group-news-3-empty)))) - `(gnus-group-mail-4 ((t (:weight bold :inherit gnus-group-mail-4-empty)))) - `(gnus-group-mail-4-empty ((t (:inherit gnus-group-news-4-empty)))) - `(gnus-group-mail-5 ((t (:weight bold :inherit gnus-group-mail-5-empty)))) - `(gnus-group-mail-5-empty ((t (:inherit gnus-group-news-5-empty)))) - `(gnus-group-mail-6 ((t (:weight bold :inherit gnus-group-mail-6-empty)))) - `(gnus-group-mail-6-empty ((t (:inherit gnus-group-news-6-empty)))) - `(gnus-group-mail-low ((t (:weight bold :inherit gnus-group-mail-low-empty)))) - `(gnus-group-mail-low-empty ((t (:inherit gnus-group-news-low-empty)))) - `(gnus-group-news-1 ((t (:weight bold :inherit gnus-group-news-1-empty)))) - `(gnus-group-news-2 ((t (:weight bold :inherit gnus-group-news-2-empty)))) - `(gnus-group-news-3 ((t (:weight bold :inherit gnus-group-news-3-empty)))) - `(gnus-group-news-4 ((t (:weight bold :inherit gnus-group-news-4-empty)))) - `(gnus-group-news-5 ((t (:weight bold :inherit gnus-group-news-5-empty)))) - `(gnus-group-news-6 ((t (:weight bold :inherit gnus-group-news-6-empty)))) - `(gnus-group-news-low ((t (:weight bold :inherit gnus-group-news-low-empty)))) - `(gnus-header-content ((t (:inherit message-header-other)))) - `(gnus-header-from ((t (:inherit message-header-to)))) - `(gnus-header-name ((t (:inherit message-header-name)))) - `(gnus-header-newsgroups ((t (:inherit message-header-other)))) - `(gnus-header-subject ((t (:inherit message-header-subject)))) - `(gnus-server-opened ((t (:foreground ,zenburn-green+2 :weight bold)))) - `(gnus-server-denied ((t (:foreground ,zenburn-red+1 :weight bold)))) - `(gnus-server-closed ((t (:foreground ,zenburn-blue :slant italic)))) - `(gnus-server-offline ((t (:foreground ,zenburn-yellow :weight bold)))) - `(gnus-server-agent ((t (:foreground ,zenburn-blue :weight bold)))) - `(gnus-summary-cancelled ((t (:foreground ,zenburn-orange)))) - `(gnus-summary-high-ancient ((t (:foreground ,zenburn-blue)))) - `(gnus-summary-high-read ((t (:foreground ,zenburn-green :weight bold)))) - `(gnus-summary-high-ticked ((t (:foreground ,zenburn-orange :weight bold)))) - `(gnus-summary-high-unread ((t (:foreground ,zenburn-fg :weight bold)))) - `(gnus-summary-low-ancient ((t (:foreground ,zenburn-blue)))) - `(gnus-summary-low-read ((t (:foreground ,zenburn-green)))) - `(gnus-summary-low-ticked ((t (:foreground ,zenburn-orange :weight bold)))) - `(gnus-summary-low-unread ((t (:foreground ,zenburn-fg)))) - `(gnus-summary-normal-ancient ((t (:foreground ,zenburn-blue)))) - `(gnus-summary-normal-read ((t (:foreground ,zenburn-green)))) - `(gnus-summary-normal-ticked ((t (:foreground ,zenburn-orange :weight bold)))) - `(gnus-summary-normal-unread ((t (:foreground ,zenburn-fg)))) - `(gnus-summary-selected ((t (:foreground ,zenburn-yellow :weight bold)))) - `(gnus-cite-1 ((t (:foreground ,zenburn-blue)))) - `(gnus-cite-10 ((t (:foreground ,zenburn-yellow-1)))) - `(gnus-cite-11 ((t (:foreground ,zenburn-yellow)))) - `(gnus-cite-2 ((t (:foreground ,zenburn-blue-1)))) - `(gnus-cite-3 ((t (:foreground ,zenburn-blue-2)))) - `(gnus-cite-4 ((t (:foreground ,zenburn-green+2)))) - `(gnus-cite-5 ((t (:foreground ,zenburn-green+1)))) - `(gnus-cite-6 ((t (:foreground ,zenburn-green)))) - `(gnus-cite-7 ((t (:foreground ,zenburn-red)))) - `(gnus-cite-8 ((t (:foreground ,zenburn-red-1)))) - `(gnus-cite-9 ((t (:foreground ,zenburn-red-2)))) - `(gnus-group-news-1-empty ((t (:foreground ,zenburn-yellow)))) - `(gnus-group-news-2-empty ((t (:foreground ,zenburn-green+3)))) - `(gnus-group-news-3-empty ((t (:foreground ,zenburn-green+1)))) - `(gnus-group-news-4-empty ((t (:foreground ,zenburn-blue-2)))) - `(gnus-group-news-5-empty ((t (:foreground ,zenburn-blue-3)))) - `(gnus-group-news-6-empty ((t (:foreground ,zenburn-bg+2)))) - `(gnus-group-news-low-empty ((t (:foreground ,zenburn-bg+2)))) - `(gnus-signature ((t (:foreground ,zenburn-yellow)))) - `(gnus-x ((t (:background ,zenburn-fg :foreground ,zenburn-bg)))) - `(mm-uu-extract ((t (:background ,zenburn-bg-05 :foreground ,zenburn-green+1)))) -;;;;; go-guru - `(go-guru-hl-identifier-face ((t (:foreground ,zenburn-bg-1 :background ,zenburn-green+1)))) -;;;;; guide-key - `(guide-key/highlight-command-face ((t (:foreground ,zenburn-blue)))) - `(guide-key/key-face ((t (:foreground ,zenburn-green)))) - `(guide-key/prefix-command-face ((t (:foreground ,zenburn-green+1)))) -;;;;; hackernews - '(hackernews-comment-count ((t (:inherit link-visited :underline nil)))) - '(hackernews-link ((t (:inherit link :underline nil)))) -;;;;; helm - `(helm-header - ((t (:foreground ,zenburn-green - :background ,zenburn-bg - :underline nil - :box nil)))) - `(helm-source-header - ((t (:foreground ,zenburn-yellow - :background ,zenburn-bg-1 - :underline nil - :weight bold - :box (:line-width -1 :style released-button))))) - `(helm-selection ((t (:background ,zenburn-bg+1 :underline nil)))) - `(helm-selection-line ((t (:background ,zenburn-bg+1)))) - `(helm-visible-mark ((t (:foreground ,zenburn-bg :background ,zenburn-yellow-2)))) - `(helm-candidate-number ((t (:foreground ,zenburn-green+4 :background ,zenburn-bg-1)))) - `(helm-separator ((t (:foreground ,zenburn-red :background ,zenburn-bg)))) - `(helm-time-zone-current ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) - `(helm-time-zone-home ((t (:foreground ,zenburn-red :background ,zenburn-bg)))) - `(helm-bookmark-addressbook ((t (:foreground ,zenburn-orange :background ,zenburn-bg)))) - `(helm-bookmark-directory ((t (:foreground nil :background nil :inherit helm-ff-directory)))) - `(helm-bookmark-file ((t (:foreground nil :background nil :inherit helm-ff-file)))) - `(helm-bookmark-gnus ((t (:foreground ,zenburn-magenta :background ,zenburn-bg)))) - `(helm-bookmark-info ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) - `(helm-bookmark-man ((t (:foreground ,zenburn-yellow :background ,zenburn-bg)))) - `(helm-bookmark-w3m ((t (:foreground ,zenburn-magenta :background ,zenburn-bg)))) - `(helm-buffer-not-saved ((t (:foreground ,zenburn-red :background ,zenburn-bg)))) - `(helm-buffer-process ((t (:foreground ,zenburn-cyan :background ,zenburn-bg)))) - `(helm-buffer-saved-out ((t (:foreground ,zenburn-fg :background ,zenburn-bg)))) - `(helm-buffer-size ((t (:foreground ,zenburn-fg-1 :background ,zenburn-bg)))) - `(helm-ff-directory ((t (:foreground ,zenburn-cyan :background ,zenburn-bg :weight bold)))) - `(helm-ff-file ((t (:foreground ,zenburn-fg :background ,zenburn-bg :weight normal)))) - `(helm-ff-executable ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg :weight normal)))) - `(helm-ff-invalid-symlink ((t (:foreground ,zenburn-red :background ,zenburn-bg :weight bold)))) - `(helm-ff-symlink ((t (:foreground ,zenburn-yellow :background ,zenburn-bg :weight bold)))) - `(helm-ff-prefix ((t (:foreground ,zenburn-bg :background ,zenburn-yellow :weight normal)))) - `(helm-grep-cmd-line ((t (:foreground ,zenburn-cyan :background ,zenburn-bg)))) - `(helm-grep-file ((t (:foreground ,zenburn-fg :background ,zenburn-bg)))) - `(helm-grep-finish ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) - `(helm-grep-lineno ((t (:foreground ,zenburn-fg-1 :background ,zenburn-bg)))) - `(helm-grep-match ((t (:foreground nil :background nil :inherit helm-match)))) - `(helm-grep-running ((t (:foreground ,zenburn-red :background ,zenburn-bg)))) - `(helm-match ((t (:foreground ,zenburn-orange :background ,zenburn-bg-1 :weight bold)))) - `(helm-moccur-buffer ((t (:foreground ,zenburn-cyan :background ,zenburn-bg)))) - `(helm-mu-contacts-address-face ((t (:foreground ,zenburn-fg-1 :background ,zenburn-bg)))) - `(helm-mu-contacts-name-face ((t (:foreground ,zenburn-fg :background ,zenburn-bg)))) -;;;;; helm-swoop - `(helm-swoop-target-line-face ((t (:foreground ,zenburn-fg :background ,zenburn-bg+1)))) - `(helm-swoop-target-word-face ((t (:foreground ,zenburn-yellow :background ,zenburn-bg+2 :weight bold)))) -;;;;; hl-line-mode - `(hl-line-face ((,class (:background ,zenburn-bg-05)) - (t :weight bold))) - `(hl-line ((,class (:background ,zenburn-bg-05)) ; old emacsen - (t :weight bold))) -;;;;; hl-sexp - `(hl-sexp-face ((,class (:background ,zenburn-bg+1)) - (t :weight bold))) -;;;;; hydra - `(hydra-face-red ((t (:foreground ,zenburn-red-1 :background ,zenburn-bg)))) - `(hydra-face-amaranth ((t (:foreground ,zenburn-red-3 :background ,zenburn-bg)))) - `(hydra-face-blue ((t (:foreground ,zenburn-blue :background ,zenburn-bg)))) - `(hydra-face-pink ((t (:foreground ,zenburn-magenta :background ,zenburn-bg)))) - `(hydra-face-teal ((t (:foreground ,zenburn-cyan :background ,zenburn-bg)))) -;;;;; info+ - `(info-command-ref-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-orange)))) - `(info-constant-ref-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-magenta)))) - `(info-double-quoted-name ((t (:inherit font-lock-comment-face)))) - `(info-file ((t (:background ,zenburn-bg-1 :foreground ,zenburn-yellow)))) - `(info-function-ref-item ((t (:background ,zenburn-bg-1 :inherit font-lock-function-name-face)))) - `(info-macro-ref-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-yellow)))) - `(info-menu ((t (:foreground ,zenburn-yellow)))) - `(info-quoted-name ((t (:inherit font-lock-constant-face)))) - `(info-reference-item ((t (:background ,zenburn-bg-1)))) - `(info-single-quote ((t (:inherit font-lock-keyword-face)))) - `(info-special-form-ref-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-yellow)))) - `(info-string ((t (:inherit font-lock-string-face)))) - `(info-syntax-class-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-blue+1)))) - `(info-user-option-ref-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-red)))) - `(info-variable-ref-item ((t (:background ,zenburn-bg-1 :foreground ,zenburn-orange)))) -;;;;; irfc - `(irfc-head-name-face ((t (:foreground ,zenburn-red :weight bold)))) - `(irfc-head-number-face ((t (:foreground ,zenburn-red :weight bold)))) - `(irfc-reference-face ((t (:foreground ,zenburn-blue-1 :weight bold)))) - `(irfc-requirement-keyword-face ((t (:inherit font-lock-keyword-face)))) - `(irfc-rfc-link-face ((t (:inherit link)))) - `(irfc-rfc-number-face ((t (:foreground ,zenburn-cyan :weight bold)))) - `(irfc-std-number-face ((t (:foreground ,zenburn-green+4 :weight bold)))) - `(irfc-table-item-face ((t (:foreground ,zenburn-green+3)))) - `(irfc-title-face ((t (:foreground ,zenburn-yellow - :underline t :weight bold)))) -;;;;; ivy - `(ivy-confirm-face ((t (:foreground ,zenburn-green :background ,zenburn-bg)))) - `(ivy-current-match ((t (:foreground ,zenburn-yellow :weight bold :underline t)))) - `(ivy-cursor ((t (:foreground ,zenburn-bg :background ,zenburn-fg)))) - `(ivy-match-required-face ((t (:foreground ,zenburn-red :background ,zenburn-bg)))) - `(ivy-minibuffer-match-face-1 ((t (:background ,zenburn-bg+1)))) - `(ivy-minibuffer-match-face-2 ((t (:background ,zenburn-green-1)))) - `(ivy-minibuffer-match-face-3 ((t (:background ,zenburn-green)))) - `(ivy-minibuffer-match-face-4 ((t (:background ,zenburn-green+1)))) - `(ivy-remote ((t (:foreground ,zenburn-blue :background ,zenburn-bg)))) - `(ivy-subdir ((t (:foreground ,zenburn-yellow :background ,zenburn-bg)))) -;;;;; ido-mode - `(ido-first-match ((t (:foreground ,zenburn-yellow :weight bold)))) - `(ido-only-match ((t (:foreground ,zenburn-orange :weight bold)))) - `(ido-subdir ((t (:foreground ,zenburn-yellow)))) - `(ido-indicator ((t (:foreground ,zenburn-yellow :background ,zenburn-red-4)))) -;;;;; iedit-mode - `(iedit-occurrence ((t (:background ,zenburn-bg+2 :weight bold)))) -;;;;; jabber-mode - `(jabber-roster-user-away ((t (:foreground ,zenburn-green+2)))) - `(jabber-roster-user-online ((t (:foreground ,zenburn-blue-1)))) - `(jabber-roster-user-dnd ((t (:foreground ,zenburn-red+1)))) - `(jabber-roster-user-xa ((t (:foreground ,zenburn-magenta)))) - `(jabber-roster-user-chatty ((t (:foreground ,zenburn-orange)))) - `(jabber-roster-user-error ((t (:foreground ,zenburn-red+1)))) - `(jabber-rare-time-face ((t (:foreground ,zenburn-green+1)))) - `(jabber-chat-prompt-local ((t (:foreground ,zenburn-blue-1)))) - `(jabber-chat-prompt-foreign ((t (:foreground ,zenburn-red+1)))) - `(jabber-chat-prompt-system ((t (:foreground ,zenburn-green+3)))) - `(jabber-activity-face((t (:foreground ,zenburn-red+1)))) - `(jabber-activity-personal-face ((t (:foreground ,zenburn-blue+1)))) - `(jabber-title-small ((t (:height 1.1 :weight bold)))) - `(jabber-title-medium ((t (:height 1.2 :weight bold)))) - `(jabber-title-large ((t (:height 1.3 :weight bold)))) -;;;;; js2-mode - `(js2-warning ((t (:underline ,zenburn-orange)))) - `(js2-error ((t (:foreground ,zenburn-red :weight bold)))) - `(js2-jsdoc-tag ((t (:foreground ,zenburn-green-1)))) - `(js2-jsdoc-type ((t (:foreground ,zenburn-green+2)))) - `(js2-jsdoc-value ((t (:foreground ,zenburn-green+3)))) - `(js2-function-param ((t (:foreground, zenburn-orange)))) - `(js2-external-variable ((t (:foreground ,zenburn-orange)))) -;;;;; additional js2 mode attributes for better syntax highlighting - `(js2-instance-member ((t (:foreground ,zenburn-green-1)))) - `(js2-jsdoc-html-tag-delimiter ((t (:foreground ,zenburn-orange)))) - `(js2-jsdoc-html-tag-name ((t (:foreground ,zenburn-red-1)))) - `(js2-object-property ((t (:foreground ,zenburn-blue+1)))) - `(js2-magic-paren ((t (:foreground ,zenburn-blue-5)))) - `(js2-private-function-call ((t (:foreground ,zenburn-cyan)))) - `(js2-function-call ((t (:foreground ,zenburn-cyan)))) - `(js2-private-member ((t (:foreground ,zenburn-blue-1)))) - `(js2-keywords ((t (:foreground ,zenburn-magenta)))) -;;;;; ledger-mode - `(ledger-font-payee-uncleared-face ((t (:foreground ,zenburn-red-1 :weight bold)))) - `(ledger-font-payee-cleared-face ((t (:foreground ,zenburn-fg :weight normal)))) - `(ledger-font-payee-pending-face ((t (:foreground ,zenburn-red :weight normal)))) - `(ledger-font-xact-highlight-face ((t (:background ,zenburn-bg+1)))) - `(ledger-font-auto-xact-face ((t (:foreground ,zenburn-yellow-1 :weight normal)))) - `(ledger-font-periodic-xact-face ((t (:foreground ,zenburn-green :weight normal)))) - `(ledger-font-pending-face ((t (:foreground ,zenburn-orange weight: normal)))) - `(ledger-font-other-face ((t (:foreground ,zenburn-fg)))) - `(ledger-font-posting-date-face ((t (:foreground ,zenburn-orange :weight normal)))) - `(ledger-font-posting-account-face ((t (:foreground ,zenburn-blue-1)))) - `(ledger-font-posting-account-cleared-face ((t (:foreground ,zenburn-fg)))) - `(ledger-font-posting-account-pending-face ((t (:foreground ,zenburn-orange)))) - `(ledger-font-posting-amount-face ((t (:foreground ,zenburn-orange)))) - `(ledger-occur-narrowed-face ((t (:foreground ,zenburn-fg-1 :invisible t)))) - `(ledger-occur-xact-face ((t (:background ,zenburn-bg+1)))) - `(ledger-font-comment-face ((t (:foreground ,zenburn-green)))) - `(ledger-font-reconciler-uncleared-face ((t (:foreground ,zenburn-red-1 :weight bold)))) - `(ledger-font-reconciler-cleared-face ((t (:foreground ,zenburn-fg :weight normal)))) - `(ledger-font-reconciler-pending-face ((t (:foreground ,zenburn-orange :weight normal)))) - `(ledger-font-report-clickable-face ((t (:foreground ,zenburn-orange :weight normal)))) -;;;;; linum-mode - `(linum ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) -;;;;; lispy - `(lispy-command-name-face ((t (:background ,zenburn-bg-05 :inherit font-lock-function-name-face)))) - `(lispy-cursor-face ((t (:foreground ,zenburn-bg :background ,zenburn-fg)))) - `(lispy-face-hint ((t (:inherit highlight :foreground ,zenburn-yellow)))) -;;;;; ruler-mode - `(ruler-mode-column-number ((t (:inherit 'ruler-mode-default :foreground ,zenburn-fg)))) - `(ruler-mode-fill-column ((t (:inherit 'ruler-mode-default :foreground ,zenburn-yellow)))) - `(ruler-mode-goal-column ((t (:inherit 'ruler-mode-fill-column)))) - `(ruler-mode-comment-column ((t (:inherit 'ruler-mode-fill-column)))) - `(ruler-mode-tab-stop ((t (:inherit 'ruler-mode-fill-column)))) - `(ruler-mode-current-column ((t (:foreground ,zenburn-yellow :box t)))) - `(ruler-mode-default ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) - -;;;;; lui - `(lui-time-stamp-face ((t (:foreground ,zenburn-blue-1)))) - `(lui-hilight-face ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg)))) - `(lui-button-face ((t (:inherit hover-highlight)))) -;;;;; macrostep - `(macrostep-gensym-1 - ((t (:foreground ,zenburn-green+2 :background ,zenburn-bg-1)))) - `(macrostep-gensym-2 - ((t (:foreground ,zenburn-red+1 :background ,zenburn-bg-1)))) - `(macrostep-gensym-3 - ((t (:foreground ,zenburn-blue+1 :background ,zenburn-bg-1)))) - `(macrostep-gensym-4 - ((t (:foreground ,zenburn-magenta :background ,zenburn-bg-1)))) - `(macrostep-gensym-5 - ((t (:foreground ,zenburn-yellow :background ,zenburn-bg-1)))) - `(macrostep-expansion-highlight-face - ((t (:inherit highlight)))) - `(macrostep-macro-face - ((t (:underline t)))) -;;;;; magit -;;;;;; headings and diffs - `(magit-section-highlight ((t (:background ,zenburn-bg+05)))) - `(magit-section-heading ((t (:foreground ,zenburn-yellow :weight bold)))) - `(magit-section-heading-selection ((t (:foreground ,zenburn-orange :weight bold)))) - `(magit-diff-file-heading ((t (:weight bold)))) - `(magit-diff-file-heading-highlight ((t (:background ,zenburn-bg+05 :weight bold)))) - `(magit-diff-file-heading-selection ((t (:background ,zenburn-bg+05 - :foreground ,zenburn-orange :weight bold)))) - `(magit-diff-hunk-heading ((t (:background ,zenburn-bg+1)))) - `(magit-diff-hunk-heading-highlight ((t (:background ,zenburn-bg+2)))) - `(magit-diff-hunk-heading-selection ((t (:background ,zenburn-bg+2 - :foreground ,zenburn-orange)))) - `(magit-diff-lines-heading ((t (:background ,zenburn-orange - :foreground ,zenburn-bg+2)))) - `(magit-diff-context-highlight ((t (:background ,zenburn-bg+05 - :foreground "grey70")))) - `(magit-diffstat-added ((t (:foreground ,zenburn-green+4)))) - `(magit-diffstat-removed ((t (:foreground ,zenburn-red)))) -;;;;;; popup - `(magit-popup-heading ((t (:foreground ,zenburn-yellow :weight bold)))) - `(magit-popup-key ((t (:foreground ,zenburn-green-1 :weight bold)))) - `(magit-popup-argument ((t (:foreground ,zenburn-green :weight bold)))) - `(magit-popup-disabled-argument ((t (:foreground ,zenburn-fg-1 :weight normal)))) - `(magit-popup-option-value ((t (:foreground ,zenburn-blue-2 :weight bold)))) -;;;;;; process - `(magit-process-ok ((t (:foreground ,zenburn-green :weight bold)))) - `(magit-process-ng ((t (:foreground ,zenburn-red :weight bold)))) -;;;;;; log - `(magit-log-author ((t (:foreground ,zenburn-orange)))) - `(magit-log-date ((t (:foreground ,zenburn-fg-1)))) - `(magit-log-graph ((t (:foreground ,zenburn-fg+1)))) -;;;;;; sequence - `(magit-sequence-pick ((t (:foreground ,zenburn-yellow-2)))) - `(magit-sequence-stop ((t (:foreground ,zenburn-green)))) - `(magit-sequence-part ((t (:foreground ,zenburn-yellow)))) - `(magit-sequence-head ((t (:foreground ,zenburn-blue)))) - `(magit-sequence-drop ((t (:foreground ,zenburn-red)))) - `(magit-sequence-done ((t (:foreground ,zenburn-fg-1)))) - `(magit-sequence-onto ((t (:foreground ,zenburn-fg-1)))) -;;;;;; bisect - `(magit-bisect-good ((t (:foreground ,zenburn-green)))) - `(magit-bisect-skip ((t (:foreground ,zenburn-yellow)))) - `(magit-bisect-bad ((t (:foreground ,zenburn-red)))) -;;;;;; blame - `(magit-blame-heading ((t (:background ,zenburn-bg-1 :foreground ,zenburn-blue-2)))) - `(magit-blame-hash ((t (:background ,zenburn-bg-1 :foreground ,zenburn-blue-2)))) - `(magit-blame-name ((t (:background ,zenburn-bg-1 :foreground ,zenburn-orange)))) - `(magit-blame-date ((t (:background ,zenburn-bg-1 :foreground ,zenburn-orange)))) - `(magit-blame-summary ((t (:background ,zenburn-bg-1 :foreground ,zenburn-blue-2 - :weight bold)))) -;;;;;; references etc - `(magit-dimmed ((t (:foreground ,zenburn-bg+3)))) - `(magit-hash ((t (:foreground ,zenburn-bg+3)))) - `(magit-tag ((t (:foreground ,zenburn-orange :weight bold)))) - `(magit-branch-remote ((t (:foreground ,zenburn-green :weight bold)))) - `(magit-branch-local ((t (:foreground ,zenburn-blue :weight bold)))) - `(magit-branch-current ((t (:foreground ,zenburn-blue :weight bold :box t)))) - `(magit-head ((t (:foreground ,zenburn-blue :weight bold)))) - `(magit-refname ((t (:background ,zenburn-bg+2 :foreground ,zenburn-fg :weight bold)))) - `(magit-refname-stash ((t (:background ,zenburn-bg+2 :foreground ,zenburn-fg :weight bold)))) - `(magit-refname-wip ((t (:background ,zenburn-bg+2 :foreground ,zenburn-fg :weight bold)))) - `(magit-signature-good ((t (:foreground ,zenburn-green)))) - `(magit-signature-bad ((t (:foreground ,zenburn-red)))) - `(magit-signature-untrusted ((t (:foreground ,zenburn-yellow)))) - `(magit-signature-expired ((t (:foreground ,zenburn-orange)))) - `(magit-signature-revoked ((t (:foreground ,zenburn-magenta)))) - '(magit-signature-error ((t (:inherit magit-signature-bad)))) - `(magit-cherry-unmatched ((t (:foreground ,zenburn-cyan)))) - `(magit-cherry-equivalent ((t (:foreground ,zenburn-magenta)))) - `(magit-reflog-commit ((t (:foreground ,zenburn-green)))) - `(magit-reflog-amend ((t (:foreground ,zenburn-magenta)))) - `(magit-reflog-merge ((t (:foreground ,zenburn-green)))) - `(magit-reflog-checkout ((t (:foreground ,zenburn-blue)))) - `(magit-reflog-reset ((t (:foreground ,zenburn-red)))) - `(magit-reflog-rebase ((t (:foreground ,zenburn-magenta)))) - `(magit-reflog-cherry-pick ((t (:foreground ,zenburn-green)))) - `(magit-reflog-remote ((t (:foreground ,zenburn-cyan)))) - `(magit-reflog-other ((t (:foreground ,zenburn-cyan)))) -;;;;; message-mode - `(message-cited-text ((t (:inherit font-lock-comment-face)))) - `(message-header-name ((t (:foreground ,zenburn-green+1)))) - `(message-header-other ((t (:foreground ,zenburn-green)))) - `(message-header-to ((t (:foreground ,zenburn-yellow :weight bold)))) - `(message-header-cc ((t (:foreground ,zenburn-yellow :weight bold)))) - `(message-header-newsgroups ((t (:foreground ,zenburn-yellow :weight bold)))) - `(message-header-subject ((t (:foreground ,zenburn-orange :weight bold)))) - `(message-header-xheader ((t (:foreground ,zenburn-green)))) - `(message-mml ((t (:foreground ,zenburn-yellow :weight bold)))) - `(message-separator ((t (:inherit font-lock-comment-face)))) -;;;;; mew - `(mew-face-header-subject ((t (:foreground ,zenburn-orange)))) - `(mew-face-header-from ((t (:foreground ,zenburn-yellow)))) - `(mew-face-header-date ((t (:foreground ,zenburn-green)))) - `(mew-face-header-to ((t (:foreground ,zenburn-red)))) - `(mew-face-header-key ((t (:foreground ,zenburn-green)))) - `(mew-face-header-private ((t (:foreground ,zenburn-green)))) - `(mew-face-header-important ((t (:foreground ,zenburn-blue)))) - `(mew-face-header-marginal ((t (:foreground ,zenburn-fg :weight bold)))) - `(mew-face-header-warning ((t (:foreground ,zenburn-red)))) - `(mew-face-header-xmew ((t (:foreground ,zenburn-green)))) - `(mew-face-header-xmew-bad ((t (:foreground ,zenburn-red)))) - `(mew-face-body-url ((t (:foreground ,zenburn-orange)))) - `(mew-face-body-comment ((t (:foreground ,zenburn-fg :slant italic)))) - `(mew-face-body-cite1 ((t (:foreground ,zenburn-green)))) - `(mew-face-body-cite2 ((t (:foreground ,zenburn-blue)))) - `(mew-face-body-cite3 ((t (:foreground ,zenburn-orange)))) - `(mew-face-body-cite4 ((t (:foreground ,zenburn-yellow)))) - `(mew-face-body-cite5 ((t (:foreground ,zenburn-red)))) - `(mew-face-mark-review ((t (:foreground ,zenburn-blue)))) - `(mew-face-mark-escape ((t (:foreground ,zenburn-green)))) - `(mew-face-mark-delete ((t (:foreground ,zenburn-red)))) - `(mew-face-mark-unlink ((t (:foreground ,zenburn-yellow)))) - `(mew-face-mark-refile ((t (:foreground ,zenburn-green)))) - `(mew-face-mark-unread ((t (:foreground ,zenburn-red-2)))) - `(mew-face-eof-message ((t (:foreground ,zenburn-green)))) - `(mew-face-eof-part ((t (:foreground ,zenburn-yellow)))) -;;;;; mic-paren - `(paren-face-match ((t (:foreground ,zenburn-cyan :background ,zenburn-bg :weight bold)))) - `(paren-face-mismatch ((t (:foreground ,zenburn-bg :background ,zenburn-magenta :weight bold)))) - `(paren-face-no-match ((t (:foreground ,zenburn-bg :background ,zenburn-red :weight bold)))) -;;;;; mingus - `(mingus-directory-face ((t (:foreground ,zenburn-blue)))) - `(mingus-pausing-face ((t (:foreground ,zenburn-magenta)))) - `(mingus-playing-face ((t (:foreground ,zenburn-cyan)))) - `(mingus-playlist-face ((t (:foreground ,zenburn-cyan )))) - `(mingus-mark-face ((t (:bold t :foreground ,zenburn-magenta)))) - `(mingus-song-file-face ((t (:foreground ,zenburn-yellow)))) - `(mingus-artist-face ((t (:foreground ,zenburn-cyan)))) - `(mingus-album-face ((t (:underline t :foreground ,zenburn-red+1)))) - `(mingus-album-stale-face ((t (:foreground ,zenburn-red+1)))) - `(mingus-stopped-face ((t (:foreground ,zenburn-red)))) -;;;;; nav - `(nav-face-heading ((t (:foreground ,zenburn-yellow)))) - `(nav-face-button-num ((t (:foreground ,zenburn-cyan)))) - `(nav-face-dir ((t (:foreground ,zenburn-green)))) - `(nav-face-hdir ((t (:foreground ,zenburn-red)))) - `(nav-face-file ((t (:foreground ,zenburn-fg)))) - `(nav-face-hfile ((t (:foreground ,zenburn-red-4)))) -;;;;; merlin - `(merlin-type-face ((t (:inherit highlight)))) - `(merlin-compilation-warning-face - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-orange))) - (t - (:underline ,zenburn-orange)))) - `(merlin-compilation-error-face - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-red))) - (t - (:underline ,zenburn-red)))) -;;;;; mu4e - `(mu4e-cited-1-face ((t (:foreground ,zenburn-blue :slant italic)))) - `(mu4e-cited-2-face ((t (:foreground ,zenburn-green+2 :slant italic)))) - `(mu4e-cited-3-face ((t (:foreground ,zenburn-blue-2 :slant italic)))) - `(mu4e-cited-4-face ((t (:foreground ,zenburn-green :slant italic)))) - `(mu4e-cited-5-face ((t (:foreground ,zenburn-blue-4 :slant italic)))) - `(mu4e-cited-6-face ((t (:foreground ,zenburn-green-1 :slant italic)))) - `(mu4e-cited-7-face ((t (:foreground ,zenburn-blue :slant italic)))) - `(mu4e-replied-face ((t (:foreground ,zenburn-bg+3)))) - `(mu4e-trashed-face ((t (:foreground ,zenburn-bg+3 :strike-through t)))) -;;;;; mumamo - `(mumamo-background-chunk-major ((t (:background nil)))) - `(mumamo-background-chunk-submode1 ((t (:background ,zenburn-bg-1)))) - `(mumamo-background-chunk-submode2 ((t (:background ,zenburn-bg+2)))) - `(mumamo-background-chunk-submode3 ((t (:background ,zenburn-bg+3)))) - `(mumamo-background-chunk-submode4 ((t (:background ,zenburn-bg+1)))) -;;;;; neotree - `(neo-banner-face ((t (:foreground ,zenburn-blue+1 :weight bold)))) - `(neo-header-face ((t (:foreground ,zenburn-fg)))) - `(neo-root-dir-face ((t (:foreground ,zenburn-blue+1 :weight bold)))) - `(neo-dir-link-face ((t (:foreground ,zenburn-blue)))) - `(neo-file-link-face ((t (:foreground ,zenburn-fg)))) - `(neo-expand-btn-face ((t (:foreground ,zenburn-blue)))) - `(neo-vc-default-face ((t (:foreground ,zenburn-fg+1)))) - `(neo-vc-user-face ((t (:foreground ,zenburn-red :slant italic)))) - `(neo-vc-up-to-date-face ((t (:foreground ,zenburn-fg)))) - `(neo-vc-edited-face ((t (:foreground ,zenburn-magenta)))) - `(neo-vc-needs-merge-face ((t (:foreground ,zenburn-red+1)))) - `(neo-vc-unlocked-changes-face ((t (:foreground ,zenburn-red :background ,zenburn-blue-5)))) - `(neo-vc-added-face ((t (:foreground ,zenburn-green+1)))) - `(neo-vc-conflict-face ((t (:foreground ,zenburn-red+1)))) - `(neo-vc-missing-face ((t (:foreground ,zenburn-red+1)))) - `(neo-vc-ignored-face ((t (:foreground ,zenburn-fg-1)))) -;;;;; org-mode - `(org-agenda-date-today - ((t (:foreground ,zenburn-fg+1 :slant italic :weight bold))) t) - `(org-agenda-structure - ((t (:inherit font-lock-comment-face)))) - `(org-archived ((t (:foreground ,zenburn-fg :weight bold)))) - `(org-checkbox ((t (:background ,zenburn-bg+2 :foreground ,zenburn-fg+1 - :box (:line-width 1 :style released-button))))) - `(org-date ((t (:foreground ,zenburn-blue :underline t)))) - `(org-deadline-announce ((t (:foreground ,zenburn-red-1)))) - `(org-done ((t (:weight bold :weight bold :foreground ,zenburn-green+3)))) - `(org-formula ((t (:foreground ,zenburn-yellow-2)))) - `(org-headline-done ((t (:foreground ,zenburn-green+3)))) - `(org-hide ((t (:foreground ,zenburn-bg-1)))) - `(org-level-1 ((t (:foreground ,zenburn-orange)))) - `(org-level-2 ((t (:foreground ,zenburn-green+4)))) - `(org-level-3 ((t (:foreground ,zenburn-blue-1)))) - `(org-level-4 ((t (:foreground ,zenburn-yellow-2)))) - `(org-level-5 ((t (:foreground ,zenburn-cyan)))) - `(org-level-6 ((t (:foreground ,zenburn-green+2)))) - `(org-level-7 ((t (:foreground ,zenburn-red-4)))) - `(org-level-8 ((t (:foreground ,zenburn-blue-4)))) - `(org-link ((t (:foreground ,zenburn-yellow-2 :underline t)))) - `(org-scheduled ((t (:foreground ,zenburn-green+4)))) - `(org-scheduled-previously ((t (:foreground ,zenburn-red)))) - `(org-scheduled-today ((t (:foreground ,zenburn-blue+1)))) - `(org-sexp-date ((t (:foreground ,zenburn-blue+1 :underline t)))) - `(org-special-keyword ((t (:inherit font-lock-comment-face)))) - `(org-table ((t (:foreground ,zenburn-green+2)))) - `(org-tag ((t (:weight bold :weight bold)))) - `(org-time-grid ((t (:foreground ,zenburn-orange)))) - `(org-todo ((t (:weight bold :foreground ,zenburn-red :weight bold)))) - `(org-upcoming-deadline ((t (:inherit font-lock-keyword-face)))) - `(org-warning ((t (:weight bold :foreground ,zenburn-red :weight bold :underline nil)))) - `(org-column ((t (:background ,zenburn-bg-1)))) - `(org-column-title ((t (:background ,zenburn-bg-1 :underline t :weight bold)))) - `(org-mode-line-clock ((t (:foreground ,zenburn-fg :background ,zenburn-bg-1)))) - `(org-mode-line-clock-overrun ((t (:foreground ,zenburn-bg :background ,zenburn-red-1)))) - `(org-ellipsis ((t (:foreground ,zenburn-yellow-1 :underline t)))) - `(org-footnote ((t (:foreground ,zenburn-cyan :underline t)))) - `(org-document-title ((t (:foreground ,zenburn-blue)))) - `(org-document-info ((t (:foreground ,zenburn-blue)))) - `(org-habit-ready-face ((t :background ,zenburn-green))) - `(org-habit-alert-face ((t :background ,zenburn-yellow-1 :foreground ,zenburn-bg))) - `(org-habit-clear-face ((t :background ,zenburn-blue-3))) - `(org-habit-overdue-face ((t :background ,zenburn-red-3))) - `(org-habit-clear-future-face ((t :background ,zenburn-blue-4))) - `(org-habit-ready-future-face ((t :background ,zenburn-green-1))) - `(org-habit-alert-future-face ((t :background ,zenburn-yellow-2 :foreground ,zenburn-bg))) - `(org-habit-overdue-future-face ((t :background ,zenburn-red-4))) -;;;;; outline - `(outline-1 ((t (:foreground ,zenburn-orange)))) - `(outline-2 ((t (:foreground ,zenburn-green+4)))) - `(outline-3 ((t (:foreground ,zenburn-blue-1)))) - `(outline-4 ((t (:foreground ,zenburn-yellow-2)))) - `(outline-5 ((t (:foreground ,zenburn-cyan)))) - `(outline-6 ((t (:foreground ,zenburn-green+2)))) - `(outline-7 ((t (:foreground ,zenburn-red-4)))) - `(outline-8 ((t (:foreground ,zenburn-blue-4)))) -;;;;; p4 - `(p4-depot-added-face ((t :inherit diff-added))) - `(p4-depot-branch-op-face ((t :inherit diff-changed))) - `(p4-depot-deleted-face ((t :inherit diff-removed))) - `(p4-depot-unmapped-face ((t :inherit diff-changed))) - `(p4-diff-change-face ((t :inherit diff-changed))) - `(p4-diff-del-face ((t :inherit diff-removed))) - `(p4-diff-file-face ((t :inherit diff-file-header))) - `(p4-diff-head-face ((t :inherit diff-header))) - `(p4-diff-ins-face ((t :inherit diff-added))) -;;;;; perspective - `(persp-selected-face ((t (:foreground ,zenburn-yellow-2 :inherit mode-line)))) -;;;;; powerline - `(powerline-active1 ((t (:background ,zenburn-bg-05 :inherit mode-line)))) - `(powerline-active2 ((t (:background ,zenburn-bg+2 :inherit mode-line)))) - `(powerline-inactive1 ((t (:background ,zenburn-bg+1 :inherit mode-line-inactive)))) - `(powerline-inactive2 ((t (:background ,zenburn-bg+3 :inherit mode-line-inactive)))) -;;;;; proofgeneral - `(proof-active-area-face ((t (:underline t)))) - `(proof-boring-face ((t (:foreground ,zenburn-fg :background ,zenburn-bg+2)))) - `(proof-command-mouse-highlight-face ((t (:inherit proof-mouse-highlight-face)))) - `(proof-debug-message-face ((t (:inherit proof-boring-face)))) - `(proof-declaration-name-face ((t (:inherit font-lock-keyword-face :foreground nil)))) - `(proof-eager-annotation-face ((t (:foreground ,zenburn-bg :background ,zenburn-orange)))) - `(proof-error-face ((t (:foreground ,zenburn-fg :background ,zenburn-red-4)))) - `(proof-highlight-dependency-face ((t (:foreground ,zenburn-bg :background ,zenburn-yellow-1)))) - `(proof-highlight-dependent-face ((t (:foreground ,zenburn-bg :background ,zenburn-orange)))) - `(proof-locked-face ((t (:background ,zenburn-blue-5)))) - `(proof-mouse-highlight-face ((t (:foreground ,zenburn-bg :background ,zenburn-orange)))) - `(proof-queue-face ((t (:background ,zenburn-red-4)))) - `(proof-region-mouse-highlight-face ((t (:inherit proof-mouse-highlight-face)))) - `(proof-script-highlight-error-face ((t (:background ,zenburn-red-2)))) - `(proof-tacticals-name-face ((t (:inherit font-lock-constant-face :foreground nil :background ,zenburn-bg)))) - `(proof-tactics-name-face ((t (:inherit font-lock-constant-face :foreground nil :background ,zenburn-bg)))) - `(proof-warning-face ((t (:foreground ,zenburn-bg :background ,zenburn-yellow-1)))) -;;;;; racket-mode - `(racket-keyword-argument-face ((t (:inherit font-lock-constant-face)))) - `(racket-selfeval-face ((t (:inherit font-lock-type-face)))) -;;;;; rainbow-delimiters - `(rainbow-delimiters-depth-1-face ((t (:foreground ,zenburn-fg)))) - `(rainbow-delimiters-depth-2-face ((t (:foreground ,zenburn-green+4)))) - `(rainbow-delimiters-depth-3-face ((t (:foreground ,zenburn-yellow-2)))) - `(rainbow-delimiters-depth-4-face ((t (:foreground ,zenburn-cyan)))) - `(rainbow-delimiters-depth-5-face ((t (:foreground ,zenburn-green+2)))) - `(rainbow-delimiters-depth-6-face ((t (:foreground ,zenburn-blue+1)))) - `(rainbow-delimiters-depth-7-face ((t (:foreground ,zenburn-yellow-1)))) - `(rainbow-delimiters-depth-8-face ((t (:foreground ,zenburn-green+1)))) - `(rainbow-delimiters-depth-9-face ((t (:foreground ,zenburn-blue-2)))) - `(rainbow-delimiters-depth-10-face ((t (:foreground ,zenburn-orange)))) - `(rainbow-delimiters-depth-11-face ((t (:foreground ,zenburn-green)))) - `(rainbow-delimiters-depth-12-face ((t (:foreground ,zenburn-blue-5)))) -;;;;; rcirc - `(rcirc-my-nick ((t (:foreground ,zenburn-blue)))) - `(rcirc-other-nick ((t (:foreground ,zenburn-orange)))) - `(rcirc-bright-nick ((t (:foreground ,zenburn-blue+1)))) - `(rcirc-dim-nick ((t (:foreground ,zenburn-blue-2)))) - `(rcirc-server ((t (:foreground ,zenburn-green)))) - `(rcirc-server-prefix ((t (:foreground ,zenburn-green+1)))) - `(rcirc-timestamp ((t (:foreground ,zenburn-green+2)))) - `(rcirc-nick-in-message ((t (:foreground ,zenburn-yellow)))) - `(rcirc-nick-in-message-full-line ((t (:weight bold)))) - `(rcirc-prompt ((t (:foreground ,zenburn-yellow :weight bold)))) - `(rcirc-track-nick ((t (:inverse-video t)))) - `(rcirc-track-keyword ((t (:weight bold)))) - `(rcirc-url ((t (:weight bold)))) - `(rcirc-keyword ((t (:foreground ,zenburn-yellow :weight bold)))) -;;;;; re-builder - `(reb-match-0 ((t (:foreground ,zenburn-bg :background ,zenburn-magenta)))) - `(reb-match-1 ((t (:foreground ,zenburn-bg :background ,zenburn-blue)))) - `(reb-match-2 ((t (:foreground ,zenburn-bg :background ,zenburn-orange)))) - `(reb-match-3 ((t (:foreground ,zenburn-bg :background ,zenburn-red)))) -;;;;; regex-tool - `(regex-tool-matched-face ((t (:background ,zenburn-blue-4 :weight bold)))) -;;;;; rpm-mode - `(rpm-spec-dir-face ((t (:foreground ,zenburn-green)))) - `(rpm-spec-doc-face ((t (:foreground ,zenburn-green)))) - `(rpm-spec-ghost-face ((t (:foreground ,zenburn-red)))) - `(rpm-spec-macro-face ((t (:foreground ,zenburn-yellow)))) - `(rpm-spec-obsolete-tag-face ((t (:foreground ,zenburn-red)))) - `(rpm-spec-package-face ((t (:foreground ,zenburn-red)))) - `(rpm-spec-section-face ((t (:foreground ,zenburn-yellow)))) - `(rpm-spec-tag-face ((t (:foreground ,zenburn-blue)))) - `(rpm-spec-var-face ((t (:foreground ,zenburn-red)))) -;;;;; rst-mode - `(rst-level-1-face ((t (:foreground ,zenburn-orange)))) - `(rst-level-2-face ((t (:foreground ,zenburn-green+1)))) - `(rst-level-3-face ((t (:foreground ,zenburn-blue-1)))) - `(rst-level-4-face ((t (:foreground ,zenburn-yellow-2)))) - `(rst-level-5-face ((t (:foreground ,zenburn-cyan)))) - `(rst-level-6-face ((t (:foreground ,zenburn-green-1)))) -;;;;; sh-mode - `(sh-heredoc ((t (:foreground ,zenburn-yellow :weight bold)))) - `(sh-quoted-exec ((t (:foreground ,zenburn-red)))) -;;;;; show-paren - `(show-paren-mismatch ((t (:foreground ,zenburn-red+1 :background ,zenburn-bg+3 :weight bold)))) - `(show-paren-match ((t (:background ,zenburn-bg+3 :weight bold)))) -;;;;; smart-mode-line - ;; use (setq sml/theme nil) to enable Zenburn for sml - `(sml/global ((,class (:foreground ,zenburn-fg :weight bold)))) - `(sml/modes ((,class (:foreground ,zenburn-yellow :weight bold)))) - `(sml/minor-modes ((,class (:foreground ,zenburn-fg-1 :weight bold)))) - `(sml/filename ((,class (:foreground ,zenburn-yellow :weight bold)))) - `(sml/line-number ((,class (:foreground ,zenburn-blue :weight bold)))) - `(sml/col-number ((,class (:foreground ,zenburn-blue+1 :weight bold)))) - `(sml/position-percentage ((,class (:foreground ,zenburn-blue-1 :weight bold)))) - `(sml/prefix ((,class (:foreground ,zenburn-orange)))) - `(sml/git ((,class (:foreground ,zenburn-green+3)))) - `(sml/process ((,class (:weight bold)))) - `(sml/sudo ((,class (:foreground ,zenburn-orange :weight bold)))) - `(sml/read-only ((,class (:foreground ,zenburn-red-2)))) - `(sml/outside-modified ((,class (:foreground ,zenburn-orange)))) - `(sml/modified ((,class (:foreground ,zenburn-red)))) - `(sml/vc-edited ((,class (:foreground ,zenburn-green+2)))) - `(sml/charging ((,class (:foreground ,zenburn-green+4)))) - `(sml/discharging ((,class (:foreground ,zenburn-red+1)))) -;;;;; smartparens - `(sp-show-pair-mismatch-face ((t (:foreground ,zenburn-red+1 :background ,zenburn-bg+3 :weight bold)))) - `(sp-show-pair-match-face ((t (:background ,zenburn-bg+3 :weight bold)))) -;;;;; sml-mode-line - '(sml-modeline-end-face ((t :inherit default :width condensed))) -;;;;; SLIME - `(slime-repl-output-face ((t (:foreground ,zenburn-red)))) - `(slime-repl-inputed-output-face ((t (:foreground ,zenburn-green)))) - `(slime-error-face - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-red))) - (t - (:underline ,zenburn-red)))) - `(slime-warning-face - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-orange))) - (t - (:underline ,zenburn-orange)))) - `(slime-style-warning-face - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-yellow))) - (t - (:underline ,zenburn-yellow)))) - `(slime-note-face - ((((supports :underline (:style wave))) - (:underline (:style wave :color ,zenburn-green))) - (t - (:underline ,zenburn-green)))) - `(slime-highlight-face ((t (:inherit highlight)))) -;;;;; speedbar - `(speedbar-button-face ((t (:foreground ,zenburn-green+2)))) - `(speedbar-directory-face ((t (:foreground ,zenburn-cyan)))) - `(speedbar-file-face ((t (:foreground ,zenburn-fg)))) - `(speedbar-highlight-face ((t (:foreground ,zenburn-bg :background ,zenburn-green+2)))) - `(speedbar-selected-face ((t (:foreground ,zenburn-red)))) - `(speedbar-separator-face ((t (:foreground ,zenburn-bg :background ,zenburn-blue-1)))) - `(speedbar-tag-face ((t (:foreground ,zenburn-yellow)))) -;;;;; sx - `(sx-custom-button - ((t (:background ,zenburn-fg :foreground ,zenburn-bg-1 - :box (:line-width 3 :style released-button) :height 0.9)))) - `(sx-question-list-answers - ((t (:foreground ,zenburn-green+3 - :height 1.0 :inherit sx-question-list-parent)))) - `(sx-question-mode-accepted - ((t (:foreground ,zenburn-green+3 - :height 1.3 :inherit sx-question-mode-title)))) - '(sx-question-mode-content-face ((t (:inherit highlight)))) - `(sx-question-mode-kbd-tag - ((t (:box (:color ,zenburn-bg-1 :line-width 3 :style released-button) - :height 0.9 :weight semi-bold)))) -;;;;; tabbar - `(tabbar-button ((t (:foreground ,zenburn-fg - :background ,zenburn-bg)))) - `(tabbar-selected ((t (:foreground ,zenburn-fg - :background ,zenburn-bg - :box (:line-width -1 :style pressed-button))))) - `(tabbar-unselected ((t (:foreground ,zenburn-fg - :background ,zenburn-bg+1 - :box (:line-width -1 :style released-button))))) -;;;;; term - `(term-color-black ((t (:foreground ,zenburn-bg - :background ,zenburn-bg-1)))) - `(term-color-red ((t (:foreground ,zenburn-red-2 - :background ,zenburn-red-4)))) - `(term-color-green ((t (:foreground ,zenburn-green - :background ,zenburn-green+2)))) - `(term-color-yellow ((t (:foreground ,zenburn-orange - :background ,zenburn-yellow)))) - `(term-color-blue ((t (:foreground ,zenburn-blue-1 - :background ,zenburn-blue-4)))) - `(term-color-magenta ((t (:foreground ,zenburn-magenta - :background ,zenburn-red)))) - `(term-color-cyan ((t (:foreground ,zenburn-cyan - :background ,zenburn-blue)))) - `(term-color-white ((t (:foreground ,zenburn-fg - :background ,zenburn-fg-1)))) - '(term-default-fg-color ((t (:inherit term-color-white)))) - '(term-default-bg-color ((t (:inherit term-color-black)))) -;;;;; undo-tree - `(undo-tree-visualizer-active-branch-face ((t (:foreground ,zenburn-fg+1 :weight bold)))) - `(undo-tree-visualizer-current-face ((t (:foreground ,zenburn-red-1 :weight bold)))) - `(undo-tree-visualizer-default-face ((t (:foreground ,zenburn-fg)))) - `(undo-tree-visualizer-register-face ((t (:foreground ,zenburn-yellow)))) - `(undo-tree-visualizer-unmodified-face ((t (:foreground ,zenburn-cyan)))) -;;;;; visual-regexp - `(vr/group-0 ((t (:foreground ,zenburn-bg :background ,zenburn-green :weight bold)))) - `(vr/group-1 ((t (:foreground ,zenburn-bg :background ,zenburn-orange :weight bold)))) - `(vr/group-2 ((t (:foreground ,zenburn-bg :background ,zenburn-blue :weight bold)))) - `(vr/match-0 ((t (:inherit isearch)))) - `(vr/match-1 ((t (:foreground ,zenburn-yellow-2 :background ,zenburn-bg-1 :weight bold)))) - `(vr/match-separator-face ((t (:foreground ,zenburn-red :weight bold)))) -;;;;; volatile-highlights - `(vhl/default-face ((t (:background ,zenburn-bg-05)))) -;;;;; web-mode - `(web-mode-builtin-face ((t (:inherit ,font-lock-builtin-face)))) - `(web-mode-comment-face ((t (:inherit ,font-lock-comment-face)))) - `(web-mode-constant-face ((t (:inherit ,font-lock-constant-face)))) - `(web-mode-css-at-rule-face ((t (:foreground ,zenburn-orange )))) - `(web-mode-css-prop-face ((t (:foreground ,zenburn-orange)))) - `(web-mode-css-pseudo-class-face ((t (:foreground ,zenburn-green+3 :weight bold)))) - `(web-mode-css-rule-face ((t (:foreground ,zenburn-blue)))) - `(web-mode-doctype-face ((t (:inherit ,font-lock-comment-face)))) - `(web-mode-folded-face ((t (:underline t)))) - `(web-mode-function-name-face ((t (:foreground ,zenburn-blue)))) - `(web-mode-html-attr-name-face ((t (:foreground ,zenburn-orange)))) - `(web-mode-html-attr-value-face ((t (:inherit ,font-lock-string-face)))) - `(web-mode-html-tag-face ((t (:foreground ,zenburn-cyan)))) - `(web-mode-keyword-face ((t (:inherit ,font-lock-keyword-face)))) - `(web-mode-preprocessor-face ((t (:inherit ,font-lock-preprocessor-face)))) - `(web-mode-string-face ((t (:inherit ,font-lock-string-face)))) - `(web-mode-type-face ((t (:inherit ,font-lock-type-face)))) - `(web-mode-variable-name-face ((t (:inherit ,font-lock-variable-name-face)))) - `(web-mode-server-background-face ((t (:background ,zenburn-bg)))) - `(web-mode-server-comment-face ((t (:inherit web-mode-comment-face)))) - `(web-mode-server-string-face ((t (:inherit web-mode-string-face)))) - `(web-mode-symbol-face ((t (:inherit font-lock-constant-face)))) - `(web-mode-warning-face ((t (:inherit font-lock-warning-face)))) - `(web-mode-whitespaces-face ((t (:background ,zenburn-red)))) -;;;;; whitespace-mode - `(whitespace-space ((t (:background ,zenburn-bg+1 :foreground ,zenburn-bg+1)))) - `(whitespace-hspace ((t (:background ,zenburn-bg+1 :foreground ,zenburn-bg+1)))) - `(whitespace-tab ((t (:background ,zenburn-red-1)))) - `(whitespace-newline ((t (:foreground ,zenburn-bg+1)))) - `(whitespace-trailing ((t (:background ,zenburn-red)))) - `(whitespace-line ((t (:background ,zenburn-bg :foreground ,zenburn-magenta)))) - `(whitespace-space-before-tab ((t (:background ,zenburn-orange :foreground ,zenburn-orange)))) - `(whitespace-indentation ((t (:background ,zenburn-yellow :foreground ,zenburn-red)))) - `(whitespace-empty ((t (:background ,zenburn-yellow)))) - `(whitespace-space-after-tab ((t (:background ,zenburn-yellow :foreground ,zenburn-red)))) -;;;;; wanderlust - `(wl-highlight-folder-few-face ((t (:foreground ,zenburn-red-2)))) - `(wl-highlight-folder-many-face ((t (:foreground ,zenburn-red-1)))) - `(wl-highlight-folder-path-face ((t (:foreground ,zenburn-orange)))) - `(wl-highlight-folder-unread-face ((t (:foreground ,zenburn-blue)))) - `(wl-highlight-folder-zero-face ((t (:foreground ,zenburn-fg)))) - `(wl-highlight-folder-unknown-face ((t (:foreground ,zenburn-blue)))) - `(wl-highlight-message-citation-header ((t (:foreground ,zenburn-red-1)))) - `(wl-highlight-message-cited-text-1 ((t (:foreground ,zenburn-red)))) - `(wl-highlight-message-cited-text-2 ((t (:foreground ,zenburn-green+2)))) - `(wl-highlight-message-cited-text-3 ((t (:foreground ,zenburn-blue)))) - `(wl-highlight-message-cited-text-4 ((t (:foreground ,zenburn-blue+1)))) - `(wl-highlight-message-header-contents-face ((t (:foreground ,zenburn-green)))) - `(wl-highlight-message-headers-face ((t (:foreground ,zenburn-red+1)))) - `(wl-highlight-message-important-header-contents ((t (:foreground ,zenburn-green+2)))) - `(wl-highlight-message-header-contents ((t (:foreground ,zenburn-green+1)))) - `(wl-highlight-message-important-header-contents2 ((t (:foreground ,zenburn-green+2)))) - `(wl-highlight-message-signature ((t (:foreground ,zenburn-green)))) - `(wl-highlight-message-unimportant-header-contents ((t (:foreground ,zenburn-fg)))) - `(wl-highlight-summary-answered-face ((t (:foreground ,zenburn-blue)))) - `(wl-highlight-summary-disposed-face ((t (:foreground ,zenburn-fg - :slant italic)))) - `(wl-highlight-summary-new-face ((t (:foreground ,zenburn-blue)))) - `(wl-highlight-summary-normal-face ((t (:foreground ,zenburn-fg)))) - `(wl-highlight-summary-thread-top-face ((t (:foreground ,zenburn-yellow)))) - `(wl-highlight-thread-indent-face ((t (:foreground ,zenburn-magenta)))) - `(wl-highlight-summary-refiled-face ((t (:foreground ,zenburn-fg)))) - `(wl-highlight-summary-displaying-face ((t (:underline t :weight bold)))) -;;;;; which-func-mode - `(which-func ((t (:foreground ,zenburn-green+4)))) -;;;;; xcscope - `(cscope-file-face ((t (:foreground ,zenburn-yellow :weight bold)))) - `(cscope-function-face ((t (:foreground ,zenburn-cyan :weight bold)))) - `(cscope-line-number-face ((t (:foreground ,zenburn-red :weight bold)))) - `(cscope-mouse-face ((t (:foreground ,zenburn-bg :background ,zenburn-blue+1)))) - `(cscope-separator-face ((t (:foreground ,zenburn-red :weight bold - :underline t :overline t)))) -;;;;; yascroll - `(yascroll:thumb-text-area ((t (:background ,zenburn-bg-1)))) - `(yascroll:thumb-fringe ((t (:background ,zenburn-bg-1 :foreground ,zenburn-bg-1)))) - )) - -;;; Theme Variables -(zenburn-with-color-variables - (custom-theme-set-variables - 'zenburn -;;;;; ansi-color - `(ansi-color-names-vector [,zenburn-bg ,zenburn-red ,zenburn-green ,zenburn-yellow - ,zenburn-blue ,zenburn-magenta ,zenburn-cyan ,zenburn-fg]) -;;;;; fill-column-indicator - `(fci-rule-color ,zenburn-bg-05) -;;;;; nrepl-client - `(nrepl-message-colors - '(,zenburn-red ,zenburn-orange ,zenburn-yellow ,zenburn-green ,zenburn-green+4 - ,zenburn-cyan ,zenburn-blue+1 ,zenburn-magenta)) -;;;;; pdf-tools - `(pdf-view-midnight-colors '(,zenburn-fg . ,zenburn-bg-05)) -;;;;; vc-annotate - `(vc-annotate-color-map - '(( 20. . ,zenburn-red-1) - ( 40. . ,zenburn-red) - ( 60. . ,zenburn-orange) - ( 80. . ,zenburn-yellow-2) - (100. . ,zenburn-yellow-1) - (120. . ,zenburn-yellow) - (140. . ,zenburn-green-1) - (160. . ,zenburn-green) - (180. . ,zenburn-green+1) - (200. . ,zenburn-green+2) - (220. . ,zenburn-green+3) - (240. . ,zenburn-green+4) - (260. . ,zenburn-cyan) - (280. . ,zenburn-blue-2) - (300. . ,zenburn-blue-1) - (320. . ,zenburn-blue) - (340. . ,zenburn-blue+1) - (360. . ,zenburn-magenta))) - `(vc-annotate-very-old-color ,zenburn-magenta) - `(vc-annotate-background ,zenburn-bg-1) - )) - -;;; Rainbow Support - -(declare-function rainbow-mode 'rainbow-mode) -(declare-function rainbow-colorize-by-assoc 'rainbow-mode) - -(defvar zenburn-add-font-lock-keywords nil - "Whether to add font-lock keywords for zenburn color names. -In buffers visiting library `zenburn-theme.el' the zenburn -specific keywords are always added. In all other Emacs-Lisp -buffers this variable controls whether this should be done. -This requires library `rainbow-mode'.") - -(defvar zenburn-colors-font-lock-keywords nil) - -;; (defadvice rainbow-turn-on (after zenburn activate) -;; "Maybe also add font-lock keywords for zenburn colors." -;; (when (and (derived-mode-p 'emacs-lisp-mode) -;; (or zenburn-add-font-lock-keywords -;; (equal (file-name-nondirectory (buffer-file-name)) -;; "zenburn-theme.el"))) -;; (unless zenburn-colors-font-lock-keywords -;; (setq zenburn-colors-font-lock-keywords -;; `((,(regexp-opt (mapcar 'car zenburn-colors-alist) 'words) -;; (0 (rainbow-colorize-by-assoc zenburn-colors-alist)))))) -;; (font-lock-add-keywords nil zenburn-colors-font-lock-keywords))) - -;; (defadvice rainbow-turn-off (after zenburn activate) -;; "Also remove font-lock keywords for zenburn colors." -;; (font-lock-remove-keywords nil zenburn-colors-font-lock-keywords)) - -;;; Footer - -;;;###autoload -(and load-file-name - (boundp 'custom-theme-load-path) - (add-to-list 'custom-theme-load-path - (file-name-as-directory - (file-name-directory load-file-name)))) - -(provide-theme 'zenburn) - -;; Local Variables: -;; no-byte-compile: t -;; indent-tabs-mode: nil -;; eval: (when (require 'rainbow-mode nil t) (rainbow-mode 1)) -;; End: -;;; zenburn-theme.el ends here diff --git a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-autoloads.el b/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-autoloads.el deleted file mode 100644 index 3473cd7..0000000 --- a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-autoloads.el +++ /dev/null @@ -1,36 +0,0 @@ -;;; zop-to-char-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "zop-to-char" "zop-to-char.el" (23124 14374 -;;;;;; 505538 525000)) -;;; Generated autoloads from zop-to-char.el - -(autoload 'zop-to-char "zop-to-char" "\ -An enhanced version of `zap-to-char'. - -Argument ARG, when given is index of occurrence to jump to. For -example, if ARG is 2, `zop-to-char' will jump to second occurrence -of given character. If ARG is negative, jump in backward direction. - -\(fn ARG)" t nil) - -(autoload 'zop-up-to-char "zop-to-char" "\ -An enhanced version of `zap-up-to-char'. - -Argument ARG, when given is index of occurrence to jump to. For -example, if ARG is 2, `zop-up-to-char' will jump to second -occurrence of given character. If ARG is negative, jump in -backward direction. - -\(fn ARG)" t nil) - -;;;*** - -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; End: -;;; zop-to-char-autoloads.el ends here diff --git a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-pkg.el b/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-pkg.el deleted file mode 100644 index ff39944..0000000 --- a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "zop-to-char" "20160212.754" "A replacement of zap-to-char." '((cl-lib "0.5")) :commit "816ea90337db0545a2f0a5079f4d7b3a2822af7d" :url "https://github.com/thierryvolpiatto/zop-to-char") diff --git a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.el b/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.el deleted file mode 100644 index 6b912c3..0000000 --- a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.el +++ /dev/null @@ -1,285 +0,0 @@ -;;; zop-to-char.el --- A replacement of zap-to-char. -*- lexical-binding: t -*- - -;; Author: Thierry Volpiatto -;; Copyright (C) 2010~2014 Thierry Volpiatto, all rights reserved. -;; X-URL: https://github.com/thierryvolpiatto/zop-to-char -;; Package-Requires: ((cl-lib "0.5")) -;; Package-Version: 20160212.754 -;; Version: 1.0 - -;; Compatibility: GNU Emacs 23.1+ - -;; This file is not part of GNU Emacs. - -;; This program is free software; you can redistribute it and/or -;; modify it under the terms of the GNU General Public License as -;; published by the Free Software Foundation; either version 3, or -;; (at your option) any later version. -;; -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; General Public License for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with this program; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth -;; Floor, Boston, MA 02110-1301, USA. - -;;; Commentary: - -;; (require 'zop-to-char) -;; To replace `zap-to-char': -;; (global-set-key (kbd "M-z") 'zop-to-char) - -;;; Code: - -(require 'cl-lib) - -(declare-function eldoc-run-in-minibuffer "ext:eldoc-eval.el") -(defvar eldoc-idle-delay) - - -(defgroup zop-to-char nil - "An enhanced `zap-to-char'." - :group 'convenience) - -(defconst zop-to-char-help-format-string - " [%s:kill, %s:delete, %s:copy, %s:next, %s:prec, %s:abort, %s:quit, %s:erase %s:mark]" - "Help format text to display near the prompt. -This text is displayed in mode-line if minibuffer is in use.") - -(defcustom zop-to-char-case-fold-search 'smart - "Add 'smart' option to `case-fold-search'. -When smart is enabled, ignore case in the search -if input character is not uppercase. -Otherwise, with a nil or t value, the behavior is same as -`case-fold-search'. -Default value is smart, other possible values are nil and t." - :group 'zop-to-char - :type '(choice (const :tag "Ignore case" t) - (const :tag "Respect case" nil) - (other :tag "Smart" 'smart))) - -(defcustom zop-to-char-kill-keys '(?\r ?\C-k) - "Keys to kill the region text." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-delete-keys '(?\C-l nil) - "Keys to delete the region text." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-copy-keys '(?\C-c ?\M-w) - "Keys to copy the region text to the kill ring." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-next-keys '(right ?\C-f) - "Keys to move point to the next match." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-prec-keys '(left ?\C-b) - "Keys to move point to the preceding match." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-erase-keys '(?\d ?\C-d) - "Keys to delete the current input." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-quit-at-point-keys '(?\C-q nil) - "Keys to quit and leave point at its current location." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-quit-at-pos-keys '(?\C-g ?\e) - "Keys to quit and leave point at its original location." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-mark-region-keys '(?\C- ) - "Keys to quit and mark region." - :group 'zop-to-char - :type '(repeat (choice character symbol integer))) - -(defcustom zop-to-char-mode-line-idle-delay 120 - "Display help string in mode-line that many time." - :group 'zop-to-char - :type 'integer) - -(defun zop-to-char--mapconcat-help-keys (seq) - (cl-loop for k in seq - when k concat (single-key-description k t) into str - and concat "/" into str - finally return (substring str 0 (1- (length str))))) - -(defun zop-to-char-help-string () - (format zop-to-char-help-format-string - (zop-to-char--mapconcat-help-keys - zop-to-char-kill-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-delete-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-copy-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-next-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-prec-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-quit-at-pos-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-quit-at-point-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-erase-keys) - (zop-to-char--mapconcat-help-keys - zop-to-char-mark-region-keys))) - -;; Internal -(defvar zop-to-char--delete-up-to-char nil) -(defvar zop-to-char--last-input nil) - -(defun zop-to-char-info-in-mode-line (prompt doc) - "Display PROMPT and DOC in mode-line." - (with-current-buffer - (window-buffer (with-selected-window (minibuffer-window) - (minibuffer-selected-window))) - (let ((mode-line-format - (concat " " (concat prompt zop-to-char--last-input doc)))) - (force-mode-line-update) - (sit-for zop-to-char-mode-line-idle-delay)) - (force-mode-line-update))) - -(defun zop-to-char--set-case-fold-search (str) - (cl-case zop-to-char-case-fold-search - (smart (let ((case-fold-search nil)) - (if (string-match "[[:upper:]]" str) nil t))) - (t zop-to-char-case-fold-search))) - -(defun zop-to-char--beg-end (arg beg end) - (if zop-to-char--delete-up-to-char - (if (< arg 0) - (list (1+ beg) end) - (list beg (1- end))) - (list beg end))) - - -;;;###autoload -(defun zop-to-char (arg) - "An enhanced version of `zap-to-char'. - -Argument ARG, when given is index of occurrence to jump to. For -example, if ARG is 2, `zop-to-char' will jump to second occurrence -of given character. If ARG is negative, jump in backward direction." - (interactive "p") - (let* ((pos (point)) - (ov (make-overlay pos (1+ pos))) - (char "") - timer - mini-p - (bstr (if (> arg 0) "-> " "<- ")) - (prompt (propertize (if zop-to-char--delete-up-to-char - "Zap up to char: " "Zap to char: ") - 'face 'minibuffer-prompt)) - (doc (propertize (zop-to-char-help-string) 'face 'minibuffer-prompt))) - (overlay-put ov 'face 'region) - (when (eobp) (setq arg -1)) - (setq zop-to-char--last-input char) - (when (setq mini-p (minibufferp (current-buffer))) - (when (and (boundp 'eldoc-in-minibuffer-mode) - eldoc-in-minibuffer-mode) - (cancel-function-timers #'eldoc-run-in-minibuffer)) - (setq timer (run-with-idle-timer - 0.1 t - 'zop-to-char-info-in-mode-line - prompt doc))) - (unwind-protect - (while (let ((input (read-key (unless (minibufferp (current-buffer)) - (concat prompt bstr char doc)))) - (beg (overlay-start ov)) - (end (overlay-end ov))) - (cond - ((memq input zop-to-char-kill-keys) - (apply #'kill-region - (zop-to-char--beg-end arg beg end)) - nil) - ((memq input zop-to-char-copy-keys) - (apply #'copy-region-as-kill - (zop-to-char--beg-end arg beg end)) - (goto-char pos) nil) - ((memq input zop-to-char-next-keys) - (setq arg 1) (setq bstr "-> ") - t) - ((memq input zop-to-char-prec-keys) - (setq arg -1) (setq bstr "<- ") - t) - ((memq input zop-to-char-erase-keys) - (setq char "" - zop-to-char--last-input "") - (goto-char pos) - (delete-overlay ov) - t) - ((memq input zop-to-char-delete-keys) - (apply #'delete-region - (zop-to-char--beg-end arg beg end)) - nil) - ((memq input zop-to-char-quit-at-point-keys) - nil) - ((memq input zop-to-char-quit-at-pos-keys) - (goto-char pos) - nil) - ((memq input zop-to-char-mark-region-keys) - (unless zop-to-char--delete-up-to-char - (forward-char arg)) - (push-mark pos nil t) - nil) - (t - ;; Input string - (when (characterp input) - (setq char (string input)) - (setq zop-to-char--last-input char))))) - (condition-case _err - (let ((case-fold-search (zop-to-char--set-case-fold-search char))) - (if (< arg 0) - (search-backward - char (and mini-p (field-beginning)) t (- arg)) - (forward-char 1) - (search-forward char nil t arg) - (forward-char -1)) - (if (<= (point) pos) - (move-overlay ov (1+ pos) (point)) - (move-overlay ov pos (1+ (point))))) - (scan-error nil) - (end-of-buffer nil) - (beginning-of-buffer nil))) - (message nil) - (when timer - (cancel-timer timer) - (setq timer nil)) - (when (and mini-p - (boundp 'eldoc-in-minibuffer-mode) - eldoc-in-minibuffer-mode) - (run-with-idle-timer - eldoc-idle-delay - 'repeat #'eldoc-run-in-minibuffer)) - (force-mode-line-update) - (delete-overlay ov)))) - -;;;###autoload -(defun zop-up-to-char (arg) - "An enhanced version of `zap-up-to-char'. - -Argument ARG, when given is index of occurrence to jump to. For -example, if ARG is 2, `zop-up-to-char' will jump to second -occurrence of given character. If ARG is negative, jump in -backward direction." - (interactive "p") - (let ((zop-to-char--delete-up-to-char t)) - (zop-to-char arg))) - -(provide 'zop-to-char) - -;;; zop-to-char.el ends here diff --git a/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.elc b/emacs/.emacs.d/elpa/zop-to-char-20160212.754/zop-to-char.elc deleted file mode 100644 index a5c4eeb66573fe2cb94e439df368fa9d40e38fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7819 zcmcIpZFAeW5w@H}apbvl(&@|fLwm4%ceXmFD}toxIM+08oJ%u(NiOm9I<-7wnuKgN z6v>d36X)0WSpX72S;}3Lt0y8sV6j;2E*8&j9z6Nm<6p0=taKhcc)%WK<2+78BtPPm zJsAgK$u31v##zd^x9jZMa_ntfU9ccYSe94uIDQ{gASib`a`5OPF4+it*rXICi>}gO z9EU8*!m=vj^t{}`Xi-)yh$0cO**f<9U4H)>k0=9=G^<#crBwjpNj0+e(34sRuO2^p z#=?uB2*L_N?#ShXG-74O!XRa5f+bndSVV88WFjb%SQM~v_u{2It_aJ2=g%&~>e{089B6>oUfUzbf}%$4Roo z(1=7LDj}O;mS4$63Sng)_`41MuEF1x{M|YJZiByT@OLGD zZ;rp$;O`myJ;~pj2dj@|`@*m9cA4vZ47|xx$%bk|7w>ID4n_Jhyg->Gu~RWs;N* zlt@XCXotn;X-0v9d>p5YPO6e)nBo-1X+A;3okmugNg;TW=c1q~;QJg?innozqor;G z8B8)9dUhEk6Lb^LGjS1I#^?oyG8hXMl*4qPoQGl*OcFg=lGAo~SVrrxJS)qXR493u z4B*>NN*niZT}=c8`5_X%UPo zA=KnoBv)6fzt?LRm7Ve19bh7>vlJnhJ4F7N_ut&1@GU7l^4- z*=swLSL3rRfq5!%E{eIuRisO74i8+h3l-TlyP>6TPuT(r&16LhD$EI_;@ksrdc9JB1RSCKPUxp z5D|3osiMe>ZHX*4_nA8Uq$mUwBjdxzD}(M>E2u1~-EQye~CMKjE1#Ze-FFbVU`UsyKptD|+OK_THarhytRof#9Hbr^9RqzDA@SU@Zt z;ZE2dz!tDykiqr_P=`Vl4%A_ndp>SWZreadbVJ*#`vAwzmn*A}hJ3(R zTlDqY6-~i!fW#SgU(gta8s}&Y)kOmWhIUzRDk87hB7Q- zq(l_US@#cJ1_kUvoOGCOk5cyP$#=c($+-wflx0u;$UN2^U9rVrKI_#RgbrjTTgE_d+pe8{b zHuSk%JP6-WN5dR8f}Ytuf1Kd2TpI|et#P-LlOvO`CbI-d1}N#C*JzWVtSp712tgoW z@;o*@1}|Pd|NDz08OIKvKZdW@Cjn_FIf|yhXiw!n3;aJ$M;Vr|>Ql6N?Ab2s7Sg44 zhR8PPlfbL5(+V66o8N-J*zkKi-7n$xAh5mGBRmJ_l$oaOv){{8vGGQA@c!!BjqhIk z2C0Y5bQdRA19?w&_7?b>WvF5%s!rM(`mG0zkn%Q8qwK9U%?N>e3dB*%IumdpVG;5K zeolbbM1(IQHd4r0Pw-k;bxy5dwG0pto)G(`3M43XgcZQ*F@+zsP%uJk;W{Ub12WUn z(`5)zhglJs63h$NMTQE|Ls8oe9u)-@@HZ|+48aBaI@xsYyL-Lm@d7)qta;3jD6B#t z(nX3LWMo9VU#y_*!gi`?usZDi3Eke$soR%!TU%hfYs{~8h&PGOE+`zT;Dv(>ti-y< z$NMs4*grw~jLZeTIg5lxFFzCsVc&C0;GW++_I;amNj7X@6~fxzQ~PHtt)tc@YKlQ*})2G%~_TJ-p^+2QgIG6bcrP-3&fhUAbkBcfR{$76v<3e z2OS8oG}=tP>J%0j$b0gLf`(QWr{qJ^_h1q=tGIc^(&D4-D!s?#{Asu2vJiiLw|Zoj?W9;WyQ zFD?NmNvi-TC2m6ruL@P9%N}yLy|KkD#TT@KGTzYnuO8@)H57m8?x2LKCrxGe|Jw& zLg}OxsYpo)f&p((-q)0#4N4fAR8Eb1_4=NJwp6OQ#J-;B5A=SiveMWAB%4Zp_kpCo z(=z+Mk$s=H>XmBxKgu!QB8PIfTJ80T(uL=>*Ch{ZR=P{g5UUSvkV|+6SjO|Ijm@;d z!nW_BJ-`@g2(Ib(K{Dvu=(VW@Pv9Pqp)=rUxw7T7+Z(@oi0SYX8I1}WhacS{3gQz} zhsQ`O?cwN{yhUypW5m_tTIj)`4V`055h^;EMGl{~*Z!ph;|}rj+qc_yj!v;T6au+Z z_njVX_WA(3vVY*V2=~%@644SZ^%MrYjtoc|nOrSJq`1?s4lO?$ho!7M>_HqdHZ^?@=`WcaWo4Me&xR;y%$( zm+?Ic5RdC(v!%+^4M9yfu2;6GET)S!mTk<>*;zJ8qa0Nu)W{QSTEw#`pD9pxlbR_e zX;V9ldL)REm`4(`{;rMe!PN0}s3+A?BN__D@;?LgVI=>Rp6I9x9>cPy9wtmU3wh)t zihK)4mfW%L(0OsTR@T)Ey|#`h2b8CQivd;tbt7}T~;Xb&AteW1bLoZ$&!>#z#BH2K^E!B zIztbTsL=Iov*wD^Pwh(iq`UxVLS8<*#AkW(HlR?PrbsfaY@~rODv}VW@m)e;mMDs> zXjUW_V?s+L~o`py@r0rro{0L63EF%D@Tc`5%ONb(*&YeDwcBdd5nNz+T4ykpC;# z>&z_tqrhG*$rSHV;P@O5-rD$)cS9p`oiIl$-$(Ixs{CyP+shdLxoOsOdY%6Q=sZXB diff --git a/emacs/.emacs.d/init.el b/emacs/.emacs.d/init.el deleted file mode 100644 index c77a359..0000000 --- a/emacs/.emacs.d/init.el +++ /dev/null @@ -1,148 +0,0 @@ -;;; init.el --- Prelude's configuration entry point. -;; -;; Copyright (c) 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: http://batsov.com/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; This file simply sets up the default load path and requires -;; the various modules defined within Emacs Prelude. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;; Added by Package.el. This must come before configurations of -;; installed packages. Don't delete this line. If you don't want it, -;; just comment it out by adding a semicolon to the start of the line. -;; You may delete these explanatory comments. -;(package-initialize) - -(defvar current-user - (getenv - (if (equal system-type 'windows-nt) "USERNAME" "USER"))) - -(message "Prelude is powering up... Be patient, Master %s!" current-user) - -(when (version< emacs-version "24.4") - (error "Prelude requires at least GNU Emacs 24.4, but you're running %s" emacs-version)) - -;; Always load newest byte code -(setq load-prefer-newer t) - -(defvar prelude-dir (file-name-directory load-file-name) - "The root dir of the Emacs Prelude distribution.") -(defvar prelude-core-dir (expand-file-name "core" prelude-dir) - "The home of Prelude's core functionality.") -(defvar prelude-modules-dir (expand-file-name "modules" prelude-dir) - "This directory houses all of the built-in Prelude modules.") -(defvar prelude-personal-dir (expand-file-name "personal" prelude-dir) - "This directory is for your personal configuration. - -Users of Emacs Prelude are encouraged to keep their personal configuration -changes in this directory. All Emacs Lisp files there are loaded automatically -by Prelude.") -(defvar prelude-personal-preload-dir (expand-file-name "preload" prelude-personal-dir) - "This directory is for your personal configuration, that you want loaded before Prelude.") -(defvar prelude-vendor-dir (expand-file-name "vendor" prelude-dir) - "This directory houses packages that are not yet available in ELPA (or MELPA).") -(defvar prelude-savefile-dir (expand-file-name "savefile" prelude-dir) - "This folder stores all the automatically generated save/history-files.") -(defvar prelude-modules-file (expand-file-name "prelude-modules.el" prelude-dir) - "This files contains a list of modules that will be loaded by Prelude.") - -(unless (file-exists-p prelude-savefile-dir) - (make-directory prelude-savefile-dir)) - -(defun prelude-add-subfolders-to-load-path (parent-dir) - "Add all level PARENT-DIR subdirs to the `load-path'." - (dolist (f (directory-files parent-dir)) - (let ((name (expand-file-name f parent-dir))) - (when (and (file-directory-p name) - (not (string-prefix-p "." f))) - (add-to-list 'load-path name) - (prelude-add-subfolders-to-load-path name))))) - -;; add Prelude's directories to Emacs's `load-path' -(add-to-list 'load-path prelude-core-dir) -(add-to-list 'load-path prelude-modules-dir) -(add-to-list 'load-path prelude-vendor-dir) -(prelude-add-subfolders-to-load-path prelude-vendor-dir) - -;; reduce the frequency of garbage collection by making it happen on -;; each 50MB of allocated data (the default is on every 0.76MB) -(setq gc-cons-threshold 50000000) - -;; warn when opening files bigger than 100MB -(setq large-file-warning-threshold 100000000) - -;; preload the personal settings from `prelude-personal-preload-dir' -(when (file-exists-p prelude-personal-preload-dir) - (message "Loading personal configuration files in %s..." prelude-personal-preload-dir) - (mapc 'load (directory-files prelude-personal-preload-dir 't "^[^#\.].*el$"))) - -(message "Loading Prelude's core...") - -;; the core stuff -(require 'prelude-packages) -(require 'prelude-custom) ;; Needs to be loaded before core, editor and ui -(require 'prelude-ui) -(require 'prelude-core) -(require 'prelude-mode) -(require 'prelude-editor) -(require 'prelude-global-keybindings) - -;; OSX specific settings -(when (eq system-type 'darwin) - (require 'prelude-osx)) - -(message "Loading Prelude's modules...") - -;; the modules -(if (file-exists-p prelude-modules-file) - (load prelude-modules-file) - (message "Missing modules file %s" prelude-modules-file) - (message "You can get started by copying the bundled example file from sample/prelude-modules.el")) - -;; config changes made through the customize UI will be stored here -(setq custom-file (expand-file-name "custom.el" prelude-personal-dir)) - -;; load the personal settings (this includes `custom-file') -(when (file-exists-p prelude-personal-dir) - (message "Loading personal configuration files in %s..." prelude-personal-dir) - (mapc 'load (directory-files prelude-personal-dir 't "^[^#\.].*el$"))) - -(message "Prelude is ready to do thy bidding, Master %s!" current-user) - -;; Patch security vulnerability in Emacs versions older than 25.3 -(when (version< emacs-version "25.3") - (eval-after-load "enriched" - '(defun enriched-decode-display-prop (start end &optional param) - (list start end)))) - -(prelude-eval-after-init - ;; greet the use with some useful tip - (run-at-time 5 nil 'prelude-tip-of-the-day)) - -;;; init.el ends here diff --git a/emacs/.emacs.d/modules/doc/README.md b/emacs/.emacs.d/modules/doc/README.md deleted file mode 100644 index d1025e5..0000000 --- a/emacs/.emacs.d/modules/doc/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Emacs Prelude Modules - -Prelude provides extra functionality through modules. Some modules may -require extra steps to enable all functionality. These steps and the -functionality provided by these modules are documented on the -following links. - -- C -- Clojure -- Coffee -- Common-Lisp -- CSS -- Emacs-Lisp -- [ERC](prelude-erc.md) -- Erlang -- Elixir -- Haskell -- JS -- Latex -- Lisp -- Markdown -- MediaWiki -- Org -- Perl -- [Python](prelude-python.md) -- Ruby -- Scala -- Scheme -- Scss -- Web diff --git a/emacs/.emacs.d/modules/doc/prelude-erc.md b/emacs/.emacs.d/modules/doc/prelude-erc.md deleted file mode 100644 index 5f61069..0000000 --- a/emacs/.emacs.d/modules/doc/prelude-erc.md +++ /dev/null @@ -1,50 +0,0 @@ -# Prelude ERC Quickstart - -## Customizing Server list - -If you want to join a list of servers on `M-x start-irc`, other than -the default list, please redefine the variable `my-fav-irc` as follows -in your personal config - -``` emacs-lisp -(setq my-fav-irc '("irc.freenode.net" - "irc.oftc.net" - "irc.mozilla.org" - "irc.gnome.org")) -``` - -## Customizing Last Quit Message - -If you want to customize your IRC Last Quit Message from *Asta la -vista* to something more funkier, please redefine `bye-irc-message` as -follows - -``` emacs-lisp -(setq bye-erc-message "adios") -``` - -## Reading NickServ passwords from auth-source plugin - -If you want to automatically authenticate while logging into IRC -servers set the `erc-prompt-for-password` to nil as follows - -``` emacs-lisp -(setq erc-prompt-for-password nil) -``` - -Now you can set password in plaintext in .authinfo file in the netRC -format or you it encrypted in .authinfo.gpg file after setting up gpg -in emacs - -## Opening all ERC buffers in a new perspective -Many a time when we start IRC with the `start-irc` command, all the -channels open in our existing workspace, which can be annoying to -some; especially to those who like to organize their buffers into -separate groups (perspectives). To avoid this scenario, it is better -to group all the ERC buffers into one perspective called `IRC` when -`start-irc` is called. To enable this set the `prelude-new-irc-persp` -variable to true as follows - -``` emacs-lisp -(setq prelude-new-irc-persp t) -``` diff --git a/emacs/.emacs.d/modules/doc/prelude-python.md b/emacs/.emacs.d/modules/doc/prelude-python.md deleted file mode 100644 index 8de3ff6..0000000 --- a/emacs/.emacs.d/modules/doc/prelude-python.md +++ /dev/null @@ -1,18 +0,0 @@ -# Prelude Python Quickstart - -## Python Mode - -Emacs comes with Python programming support through the built-in -Python-mode. Whenever you are editing Python code run `C-h m` to -look at the Python mode key bindings. Alternatively look at the -menu bar entries under Python. To toggle the menu bar press `F12`. - -## Syntax checking - -Prelude ships with [Flycheck](https://github.com/flycheck/flycheck), -an on the fly syntax checker. Flycheck has support for two Python -syntax checkers, [Pylint](http://www.pylint.org/) and -[Flake8](http://flake8.readthedocs.org/en/latest/). In -order to have Flycheck support on the fly syntax checking for -Python you need to have either of these installed and accessible to -Emacs. In order to manually choose a checker run `C-c ! s`. diff --git a/emacs/.emacs.d/modules/prelude-c.el b/emacs/.emacs.d/modules/prelude-c.el deleted file mode 100644 index f71bf36..0000000 --- a/emacs/.emacs.d/modules/prelude-c.el +++ /dev/null @@ -1,59 +0,0 @@ -;;; prelude-c.el --- Emacs Prelude: cc-mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for cc-mode and the modes derived from it. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) - -(defun prelude-c-mode-common-defaults () - (setq c-default-style "k&r" - c-basic-offset 4) - (c-set-offset 'substatement-open 0)) - -(setq prelude-c-mode-common-hook 'prelude-c-mode-common-defaults) - -;; this will affect all modes derived from cc-mode, like -;; java-mode, php-mode, etc -(add-hook 'c-mode-common-hook (lambda () - (run-hooks 'prelude-c-mode-common-hook))) - -(defun prelude-makefile-mode-defaults () - (whitespace-toggle-options '(tabs)) - (setq indent-tabs-mode t )) - -(setq prelude-makefile-mode-hook 'prelude-makefile-mode-defaults) - -(add-hook 'makefile-mode-hook (lambda () - (run-hooks 'prelude-makefile-mode-hook))) -(provide 'prelude-c) - -;;; prelude-c.el ends here diff --git a/emacs/.emacs.d/modules/prelude-clojure.el b/emacs/.emacs.d/modules/prelude-clojure.el deleted file mode 100644 index f15481c..0000000 --- a/emacs/.emacs.d/modules/prelude-clojure.el +++ /dev/null @@ -1,66 +0,0 @@ -;;; prelude-clojure.el --- Emacs Prelude: Clojure programming configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: http://batsov.com/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for clojure-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-lisp) -(prelude-require-packages '(clojure-mode cider)) - -(eval-after-load 'clojure-mode - '(progn - (defun prelude-clojure-mode-defaults () - (subword-mode +1) - (run-hooks 'prelude-lisp-coding-hook)) - - (setq prelude-clojure-mode-hook 'prelude-clojure-mode-defaults) - - (add-hook 'clojure-mode-hook (lambda () - (run-hooks 'prelude-clojure-mode-hook))))) - -(eval-after-load 'cider - '(progn - (setq nrepl-log-messages t) - - (add-hook 'cider-mode-hook 'eldoc-mode) - - (defun prelude-cider-repl-mode-defaults () - (subword-mode +1) - (run-hooks 'prelude-interactive-lisp-coding-hook)) - - (setq prelude-cider-repl-mode-hook 'prelude-cider-repl-mode-defaults) - - (add-hook 'cider-repl-mode-hook (lambda () - (run-hooks 'prelude-cider-repl-mode-hook))))) - -(provide 'prelude-clojure) - -;;; prelude-clojure.el ends here diff --git a/emacs/.emacs.d/modules/prelude-coffee.el b/emacs/.emacs.d/modules/prelude-coffee.el deleted file mode 100644 index 71353de..0000000 --- a/emacs/.emacs.d/modules/prelude-coffee.el +++ /dev/null @@ -1,60 +0,0 @@ -;;; prelude-coffee.el --- Emacs Prelude: CoffeeScript programming support. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; CoffeeScript is a nice little language that comples to JavaScript. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) -(prelude-require-package 'coffee-mode) - -(eval-after-load 'coffee-mode - '(progn - ;; CoffeeScript uses two spaces. - (setq coffee-tab-width 2) - - ;; remove the "Generated by CoffeeScript" header - (add-to-list 'coffee-args-compile "--no-header") - - (defun prelude-coffee-mode-defaults () - ;; Update the already compiled js on save - (and (buffer-file-name) - (file-exists-p (buffer-file-name)) - (file-exists-p (coffee-compiled-file-name (buffer-file-name))) - (coffee-cos-mode t)) - (subword-mode +1)) - - (setq prelude-coffee-mode-hook 'prelude-coffee-mode-defaults) - - (add-hook 'coffee-mode-hook (lambda () - (run-hooks 'prelude-coffee-mode-hook))))) -(provide 'prelude-coffee) - -;;; prelude-coffee.el ends here diff --git a/emacs/.emacs.d/modules/prelude-common-lisp.el b/emacs/.emacs.d/modules/prelude-common-lisp.el deleted file mode 100644 index 4829f02..0000000 --- a/emacs/.emacs.d/modules/prelude-common-lisp.el +++ /dev/null @@ -1,85 +0,0 @@ -;;; prelude-common-lisp.el --- Emacs Prelude: lisp-mode and SLIME config. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Configuration for lisp-mode and SLIME. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-lisp) - -(prelude-require-package 'slime) - -;; the SBCL configuration file is in Common Lisp -(add-to-list 'auto-mode-alist '("\\.sbclrc\\'" . lisp-mode)) - -;; Open files with .cl extension in lisp-mode -(add-to-list 'auto-mode-alist '("\\.cl\\'" . lisp-mode)) - -;; a list of alternative Common Lisp implementations that can be -;; used with SLIME. Note that their presence render -;; inferior-lisp-program useless. This variable holds a list of -;; programs and if you invoke SLIME with a negative prefix -;; argument, M-- M-x slime, you can select a program from that list. -(setq slime-lisp-implementations - '((ccl ("ccl")) - (clisp ("clisp" "-q")) - (cmucl ("cmucl" "-quiet")) - (sbcl ("sbcl" "--noinform") :coding-system utf-8-unix))) - -;; select the default value from slime-lisp-implementations -(if (and (eq system-type 'darwin) - (executable-find "ccl")) - ;; default to Clozure CL on OS X - (setq slime-default-lisp 'ccl) - ;; default to SBCL on Linux and Windows - (setq slime-default-lisp 'sbcl)) - -;; Add fancy slime contribs -(setq slime-contribs '(slime-fancy slime-cl-indent)) - -(add-hook 'lisp-mode-hook (lambda () (run-hooks 'prelude-lisp-coding-hook))) -;; rainbow-delimeters messes up colors in slime-repl, and doesn't seem to work -;; anyway, so we won't use prelude-lisp-coding-defaults. -(add-hook 'slime-repl-mode-hook (lambda () - (smartparens-strict-mode +1) - (whitespace-mode -1))) - -(eval-after-load "slime" - '(progn - (setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol - slime-fuzzy-completion-in-place t - slime-enable-evaluate-in-emacs t - slime-autodoc-use-multiline-p t - slime-auto-start 'always) - (define-key slime-mode-map (kbd "C-c C-s") 'slime-selector))) - -(provide 'prelude-common-lisp) - -;;; prelude-common-lisp.el ends here diff --git a/emacs/.emacs.d/modules/prelude-company.el b/emacs/.emacs.d/modules/prelude-company.el deleted file mode 100644 index 8b10441..0000000 --- a/emacs/.emacs.d/modules/prelude-company.el +++ /dev/null @@ -1,48 +0,0 @@ -;;; prelude-company.el --- company-mode setup -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; company-mode config. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(prelude-require-packages '(company)) - -(require 'company) - -(setq company-idle-delay 0.5) -(setq company-tooltip-limit 10) -(setq company-minimum-prefix-length 2) -;; invert the navigation direction if the the completion popup-isearch-match -;; is displayed on top (happens near the bottom of windows) -(setq company-tooltip-flip-when-above t) - -(global-company-mode 1) - -(provide 'prelude-company) -;;; prelude-company.el ends here diff --git a/emacs/.emacs.d/modules/prelude-css.el b/emacs/.emacs.d/modules/prelude-css.el deleted file mode 100644 index aa90063..0000000 --- a/emacs/.emacs.d/modules/prelude-css.el +++ /dev/null @@ -1,51 +0,0 @@ -;;; prelude-css.el --- Emacs Prelude: css support -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: http://www.batsov.com/emacs-prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for css-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(eval-after-load 'css-mode - '(progn - (prelude-require-packages '(rainbow-mode)) - - (setq css-indent-offset 2) - - (defun prelude-css-mode-defaults () - (rainbow-mode +1) - (run-hooks 'prelude-prog-mode-hook)) - - (setq prelude-css-mode-hook 'prelude-css-mode-defaults) - - (add-hook 'css-mode-hook (lambda () - (run-hooks 'prelude-css-mode-hook))))) - -(provide 'prelude-css) -;;; prelude-css.el ends here diff --git a/emacs/.emacs.d/modules/prelude-elixir.el b/emacs/.emacs.d/modules/prelude-elixir.el deleted file mode 100644 index 6e09dec..0000000 --- a/emacs/.emacs.d/modules/prelude-elixir.el +++ /dev/null @@ -1,40 +0,0 @@ -;;; prelude-elixir.el --- Emacs Prelude: Elixir programming support. -;; -;; Copyright © 2014-2017 Samuel Tonini -;; -;; Author: Samuel Tonini -;; Version: 1.0.0 -;; Keywords: convenience elixir - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for Elixir development. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) - -(prelude-require-packages '(elixir-mode alchemist)) - -(provide 'prelude-elixir) - -;;; prelude-elixir.el ends here diff --git a/emacs/.emacs.d/modules/prelude-emacs-lisp.el b/emacs/.emacs.d/modules/prelude-emacs-lisp.el deleted file mode 100644 index f80a02f..0000000 --- a/emacs/.emacs.d/modules/prelude-emacs-lisp.el +++ /dev/null @@ -1,120 +0,0 @@ -;;; prelude-emacs-lisp.el --- Emacs Prelude: Nice config for Elisp programming. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience -;; Package-Requires: ((prelude-lisp "1.0.0")) - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Nice config for Elisp Programming. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-lisp) -(require 'crux) - -(prelude-require-packages '(elisp-slime-nav rainbow-mode)) - -(defun prelude-recompile-elc-on-save () - "Recompile your elc when saving an elisp file." - (add-hook 'after-save-hook - (lambda () - (when (and - (string-prefix-p prelude-dir (file-truename buffer-file-name)) - (file-exists-p (byte-compile-dest-file buffer-file-name))) - (emacs-lisp-byte-compile))) - nil - t)) - -(defun prelude-visit-ielm () - "Switch to default `ielm' buffer. -Start `ielm' if it's not already running." - (interactive) - (crux-start-or-switch-to 'ielm "*ielm*")) - -(define-key emacs-lisp-mode-map (kbd "C-c C-z") 'prelude-visit-ielm) -(define-key emacs-lisp-mode-map (kbd "C-c C-c") 'eval-defun) -(define-key emacs-lisp-mode-map (kbd "C-c C-b") 'eval-buffer) - -(defun prelude-conditional-emacs-lisp-checker () - "Don't check doc style in Emacs Lisp test files." - (let ((file-name (buffer-file-name))) - (when (and file-name (string-match-p ".*-tests?\\.el\\'" file-name)) - (setq-local flycheck-checkers '(emacs-lisp))))) - -(defun prelude-emacs-lisp-mode-defaults () - "Sensible defaults for `emacs-lisp-mode'." - (run-hooks 'prelude-lisp-coding-hook) - (eldoc-mode +1) - (prelude-recompile-elc-on-save) - (rainbow-mode +1) - (setq mode-name "EL") - (prelude-conditional-emacs-lisp-checker)) - -(setq prelude-emacs-lisp-mode-hook 'prelude-emacs-lisp-mode-defaults) - -(add-hook 'emacs-lisp-mode-hook (lambda () - (run-hooks 'prelude-emacs-lisp-mode-hook))) - -(add-to-list 'auto-mode-alist '("Cask\\'" . emacs-lisp-mode)) - -;; ielm is an interactive Emacs Lisp shell -(defun prelude-ielm-mode-defaults () - "Sensible defaults for `ielm'." - (run-hooks 'prelude-interactive-lisp-coding-hook) - (eldoc-mode +1)) - -(setq prelude-ielm-mode-hook 'prelude-ielm-mode-defaults) - -(add-hook 'ielm-mode-hook (lambda () - (run-hooks 'prelude-ielm-mode-hook))) - -(eval-after-load "elisp-slime-nav" - '(diminish 'elisp-slime-nav-mode)) -(eval-after-load "rainbow-mode" - '(diminish 'rainbow-mode)) -(eval-after-load "eldoc" - '(diminish 'eldoc-mode)) - -(eval-after-load "ielm" - '(progn - (define-key ielm-map (kbd "M-(") (prelude-wrap-with "(")) - (define-key ielm-map (kbd "M-\"") (prelude-wrap-with "\"")))) - -;; enable elisp-slime-nav-mode -(dolist (hook '(emacs-lisp-mode-hook ielm-mode-hook)) - (add-hook hook 'elisp-slime-nav-mode)) - -(defun conditionally-enable-smartparens-mode () - "Enable `smartparens-mode' in the minibuffer, during `eval-expression'." - (if (eq this-command 'eval-expression) - (smartparens-mode 1))) - -(add-hook 'minibuffer-setup-hook 'conditionally-enable-smartparens-mode) - -(provide 'prelude-emacs-lisp) - -;;; prelude-emacs-lisp.el ends here diff --git a/emacs/.emacs.d/modules/prelude-erc.el b/emacs/.emacs.d/modules/prelude-erc.el deleted file mode 100644 index 701009c..0000000 --- a/emacs/.emacs.d/modules/prelude-erc.el +++ /dev/null @@ -1,162 +0,0 @@ -;;; prelude-erc.el --- Emacs Prelude: ERC mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for ERC mode, which should make your -;; IRC experience a bit more pleasant. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'erc) -(require 'erc-log) -(require 'erc-notify) -(require 'erc-spelling) -(require 'erc-autoaway) - -;; Interpret mIRC-style color commands in IRC chats -(setq erc-interpret-mirc-color t) - -;; The following are commented out by default, but users of other -;; non-Emacs IRC clients might find them useful. -;; Kill buffers for channels after /part -(setq erc-kill-buffer-on-part t) -;; Kill buffers for private queries after quitting the server -(setq erc-kill-queries-on-quit t) -;; Kill buffers for server messages after quitting the server -(setq erc-kill-server-buffer-on-quit t) - -;; open query buffers in the current window -(setq erc-query-display 'buffer) - -;; exclude boring stuff from tracking -(erc-track-mode t) -(setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE" - "324" "329" "332" "333" "353" "477")) - -;; logging -(setq erc-log-channels-directory "~/.erc/logs/") - -(if (not (file-exists-p erc-log-channels-directory)) - (mkdir erc-log-channels-directory t)) - -(setq erc-save-buffer-on-part t) -;; FIXME - this advice is wrong and is causing problems on Emacs exit -;; (defadvice save-buffers-kill-emacs (before save-logs (arg) activate) -;; (save-some-buffers t (lambda () (when (eq major-mode 'erc-mode) t)))) - -;; truncate long irc buffers -(erc-truncate-mode +1) - -;; enable spell checking -(when prelude-flyspell - (erc-spelling-mode 1)) -;; set different dictionaries by different servers/channels -;;(setq erc-spelling-dictionaries '(("#emacs" "american"))) - -(defvar erc-notify-nick-alist nil - "Alist of nicks and the last time they tried to trigger a -notification") - -(defvar erc-notify-timeout 10 - "Number of seconds that must elapse between notifications from -the same person.") - -(defun erc-notify-allowed-p (nick &optional delay) - "Return non-nil if a notification should be made for NICK. -If DELAY is specified, it will be the minimum time in seconds -that can occur between two notifications. The default is -`erc-notify-timeout'." - (unless delay (setq delay erc-notify-timeout)) - (let ((cur-time (time-to-seconds (current-time))) - (cur-assoc (assoc nick erc-notify-nick-alist)) - (last-time nil)) - (if cur-assoc - (progn - (setq last-time (cdr cur-assoc)) - (setcdr cur-assoc cur-time) - (> (abs (- cur-time last-time)) delay)) - (push (cons nick cur-time) erc-notify-nick-alist) - t))) - -;; autoaway setup -(setq erc-auto-discard-away t) -(setq erc-autoaway-idle-seconds 600) -(setq erc-autoaway-use-emacs-idle t) - -;; utf-8 always and forever -(setq erc-server-coding-system '(utf-8 . utf-8)) - - -(defvar my-fav-irc '( "irc.freenode.net" ) - "Stores the list of IRC servers that you want to connect to with start-irc.") - -(defvar bye-irc-message "Asta la vista" - "Message string to be sent while quitting IRC.") - -(defcustom prelude-new-irc-persp nil - "True (t) means start IRC in new perspective." - :type 'boolean - :require 'prelude-erc - :group 'prelude) - -(defun connect-to-erc (server) - "Connects securely to IRC SERVER over TLS at port 6697." - (erc-tls :server server - :port 6697 - :nick erc-nick )) - -(defun start-irc () - "Connect to IRC?" - (interactive) - (when (y-or-n-p "Do you want to start IRC? ") - (when prelude-new-irc-persp - (persp-switch "IRC")) - (mapcar 'connect-to-erc my-fav-irc))) - -(defun filter-server-buffers () - (delq nil - (mapcar - (lambda (x) (and (erc-server-buffer-p x) x)) - (buffer-list)))) - -(defun stop-irc () - "Disconnects from all irc servers." - (interactive) - (when prelude-new-irc-persp - (persp-switch "IRC")) - (dolist (buffer (filter-server-buffers)) - (message "Server buffer: %s" (buffer-name buffer)) - (with-current-buffer buffer - (erc-quit-server bye-irc-message))) - (when prelude-new-irc-persp - (persp-kill "IRC"))) - -(provide 'prelude-erc) - -;;; prelude-erc.el ends here diff --git a/emacs/.emacs.d/modules/prelude-erlang.el b/emacs/.emacs.d/modules/prelude-erlang.el deleted file mode 100644 index edc4a7d..0000000 --- a/emacs/.emacs.d/modules/prelude-erlang.el +++ /dev/null @@ -1,60 +0,0 @@ -;;; prelude-erlang.el --- Emacs Prelude: Erlang programming support. -;; -;; Copyright © 2011-2017 Gleb Peregud -;; -;; Author: Gleb Peregud -;; Version: 1.0.0 -;; Keywords: convenience erlang - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Erlang is a concurrent functional language. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) -(prelude-require-packages '(erlang)) - -(defcustom wrangler-path nil - "The location of wrangler elisp directory." - :group 'prelude-erlang - :type 'string - :safe 'stringp) - -(require 'projectile) - -(when (require 'erlang-start nil t) - - (eval-after-load 'erlang-mode - '(progn - (flymake-mode))) - - (when (not (null wrangler-path)) - (add-to-list 'load-path wrangler-path) - (require 'wrangler))) - -(add-hook 'erlang-mode-hook (lambda () - (setq erlang-compile-function 'projectile-compile-project))) - -(provide 'prelude-erlang) - -;;; prelude-erlang.el ends here diff --git a/emacs/.emacs.d/modules/prelude-evil.el b/emacs/.emacs.d/modules/prelude-evil.el deleted file mode 100644 index 0f8bd7c..0000000 --- a/emacs/.emacs.d/modules/prelude-evil.el +++ /dev/null @@ -1,152 +0,0 @@ -;;; prelude-evil.el --- Emacs Prelude: evil-mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: http://batsov.com/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for evil-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -;;; goto-chg lets you use the g-; and g-, to go to recent changes -;;; evil-visualstar enables searching visual selection with * -;;; evil-numbers enables vim style numeric incrementing and decrementing - -(prelude-require-packages '(evil goto-chg evil-surround evil-visualstar evil-numbers)) - -(require 'evil-visualstar) - -(setq evil-mode-line-format 'before) - -(setq evil-emacs-state-cursor '("red" box)) -(setq evil-normal-state-cursor '("gray" box)) -(setq evil-visual-state-cursor '("gray" box)) -(setq evil-insert-state-cursor '("gray" bar)) -(setq evil-motion-state-cursor '("gray" box)) - -;; prevent esc-key from translating to meta-key in terminal mode -(setq evil-esc-delay 0) - -(evil-mode 1) -(global-evil-surround-mode 1) - -(define-key evil-normal-state-map (kbd "C-A") - 'evil-numbers/inc-at-pt) -(define-key evil-normal-state-map (kbd "C-S-A") - 'evil-numbers/dec-at-pt) - -;; -;; Other useful Commands -;; -(evil-ex-define-cmd "W" 'evil-write-all) -(evil-ex-define-cmd "Tree" 'speedbar-get-focus) -(evil-ex-define-cmd "linum" 'linum-mode) -(evil-ex-define-cmd "Align" 'align-regexp) - -(defun prelude-yank-to-end-of-line () - "Yank to end of line." - (interactive) - (evil-yank (point) (point-at-eol))) - -(define-key evil-normal-state-map - (kbd "Y") 'prelude-yank-to-end-of-line) - -(defun prelude-shift-left-visual () - "Shift left and restore visual selection." - (interactive) - (evil-shift-left (region-beginning) (region-end)) - (evil-normal-state) - (evil-visual-restore)) - -(defun prelude-shift-right-visual () - "Shift right and restore visual selection." - (interactive) - (evil-shift-right (region-beginning) (region-end)) - (evil-normal-state) - (evil-visual-restore)) - -(define-key evil-visual-state-map (kbd ">") 'prelude-shift-right-visual) -(define-key evil-visual-state-map (kbd "<") 'prelude-shift-left-visual) - -;; Scrolling -(defun prelude-evil-scroll-down-other-window () - (interactive) - (scroll-other-window)) - -(defun prelude-evil-scroll-up-other-window () - (interactive) - (scroll-other-window '-)) - -(define-key evil-normal-state-map - (kbd "C-S-d") 'prelude-evil-scroll-down-other-window) - -(define-key evil-normal-state-map - (kbd "C-S-u") 'prelude-evil-scroll-up-other-window) - -;; -;; Magit from avsej -;; -(evil-add-hjkl-bindings magit-log-mode-map 'emacs) -(evil-add-hjkl-bindings magit-commit-mode-map 'emacs) -(evil-add-hjkl-bindings magit-branch-manager-mode-map 'emacs - "K" 'magit-discard - "L" 'magit-log-popup) -(evil-add-hjkl-bindings magit-status-mode-map 'emacs - "K" 'magit-discard - "l" 'magit-log-popup - "h" 'magit-diff-toggle-refine-hunk) - -(setq evil-shift-width 2) - -;;; enable avy with evil-mode -(define-key evil-normal-state-map (kbd "SPC") 'avy-goto-word-1) - -;;; snagged from Eric S. Fraga -;;; http://lists.gnu.org/archive/html/emacs-orgmode/2012-05/msg00153.html -(defun prelude-evil-key-bindings-for-org () - ;;(message "Defining evil key bindings for org") - (evil-declare-key 'normal org-mode-map - "gk" 'outline-up-heading - "gj" 'outline-next-visible-heading - "H" 'org-beginning-of-line ; smarter behaviour on headlines etc. - "L" 'org-end-of-line ; smarter behaviour on headlines etc. - "t" 'org-todo ; mark a TODO item as DONE - ",c" 'org-cycle - (kbd "TAB") 'org-cycle - ",e" 'org-export-dispatch - ",n" 'outline-next-visible-heading - ",p" 'outline-previous-visible-heading - ",t" 'org-set-tags-command - ",u" 'outline-up-heading - "$" 'org-end-of-line ; smarter behaviour on headlines etc. - "^" 'org-beginning-of-line ; ditto - "-" 'org-ctrl-c-minus ; change bullet style - "<" 'org-metaleft ; out-dent - ">" 'org-metaright ; indent - )) -(prelude-evil-key-bindings-for-org) -(provide 'prelude-evil) diff --git a/emacs/.emacs.d/modules/prelude-go.el b/emacs/.emacs.d/modules/prelude-go.el deleted file mode 100644 index d711445..0000000 --- a/emacs/.emacs.d/modules/prelude-go.el +++ /dev/null @@ -1,84 +0,0 @@ -;;; prelude-go.el --- Emacs Prelude: Go programming support. -;; -;; Author: Doug MacEachern -;; Version: 1.0.0 -;; Keywords: convenience go - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Prelude configuration for Go - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) - -(prelude-require-packages '(go-mode - company-go - go-eldoc - go-projectile - gotest)) - -(require 'go-projectile) - -;; Ignore go test -c output files -(add-to-list 'completion-ignored-extensions ".test") - -(define-key 'help-command (kbd "G") 'godoc) - -(eval-after-load 'go-mode - '(progn - (defun prelude-go-mode-defaults () - ;; Add to default go-mode key bindings - (let ((map go-mode-map)) - (define-key map (kbd "C-c a") 'go-test-current-project) ;; current package, really - (define-key map (kbd "C-c m") 'go-test-current-file) - (define-key map (kbd "C-c .") 'go-test-current-test) - (define-key map (kbd "C-c b") 'go-run) - (define-key map (kbd "C-h f") 'godoc-at-point)) - - ;; Prefer goimports to gofmt if installed - (let ((goimports (executable-find "goimports"))) - (when goimports - (setq gofmt-command goimports))) - - ;; gofmt on save - (add-hook 'before-save-hook 'gofmt-before-save nil t) - - ;; stop whitespace being highlighted - (whitespace-toggle-options '(tabs)) - - ;; Company mode settings - (set (make-local-variable 'company-backends) '(company-go)) - - ;; El-doc for Go - (go-eldoc-setup) - - ;; CamelCase aware editing operations - (subword-mode +1)) - - (setq prelude-go-mode-hook 'prelude-go-mode-defaults) - - (add-hook 'go-mode-hook (lambda () - (run-hooks 'prelude-go-mode-hook))))) - -(provide 'prelude-go) -;;; prelude-go.el ends here diff --git a/emacs/.emacs.d/modules/prelude-haskell.el b/emacs/.emacs.d/modules/prelude-haskell.el deleted file mode 100644 index d3f3b65..0000000 --- a/emacs/.emacs.d/modules/prelude-haskell.el +++ /dev/null @@ -1,53 +0,0 @@ -;;; prelude-haskell.el --- Emacs Prelude: Nice config for Haskell programming. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Nice config for Haskell programming. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) -(prelude-require-packages '(haskell-mode)) - -(eval-after-load 'haskell-mode - '(progn - (defun prelude-haskell-mode-defaults () - (subword-mode +1) - (eldoc-mode +1) - (haskell-indentation-mode +1) - (interactive-haskell-mode +1)) - - (setq prelude-haskell-mode-hook 'prelude-haskell-mode-defaults) - - (add-hook 'haskell-mode-hook (lambda () - (run-hooks 'prelude-haskell-mode-hook))))) - -(provide 'prelude-haskell) - -;;; prelude-haskell.el ends here diff --git a/emacs/.emacs.d/modules/prelude-helm-everywhere.el b/emacs/.emacs.d/modules/prelude-helm-everywhere.el deleted file mode 100644 index 49c739d..0000000 --- a/emacs/.emacs.d/modules/prelude-helm-everywhere.el +++ /dev/null @@ -1,72 +0,0 @@ -;;; prelude-helm-everywhere.el --- Enable Helm everywhere -;; -;; Copyright © 2014-2017 Tu, Do Hoang -;; -;; Author: Tu, Do Hoang (tuhdo1710@gmail.com) -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Enable Helm everywhere with global key bindings to replace common -;; global bindings and `helm-mode' is activated to replace `completing-read' -;; with `helm-completing-read-default', so users can use Helm with every prompt. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(require 'prelude-helm) -(prelude-require-packages '(helm-descbinds helm-ag)) -(require 'helm-eshell) - -(global-set-key (kbd "M-x") 'helm-M-x) -(global-set-key (kbd "C-x C-m") 'helm-M-x) -(global-set-key (kbd "M-y") 'helm-show-kill-ring) -(global-set-key (kbd "C-x b") 'helm-mini) -(global-set-key (kbd "C-x C-b") 'helm-buffers-list) -(global-set-key (kbd "C-x C-f") 'helm-find-files) -(global-set-key (kbd "C-h f") 'helm-apropos) -(global-set-key (kbd "C-h r") 'helm-info-emacs) -(global-set-key (kbd "C-h C-l") 'helm-locate-library) -(define-key prelude-mode-map (kbd "C-c f") 'helm-recentf) - -(define-key minibuffer-local-map (kbd "C-c C-l") 'helm-minibuffer-history) - -(define-key isearch-mode-map (kbd "C-o") 'helm-occur-from-isearch) - -;; shell history. -(define-key shell-mode-map (kbd "C-c C-l") 'helm-comint-input-ring) - -;; use helm to list eshell history -(add-hook 'eshell-mode-hook - #'(lambda () - (substitute-key-definition 'eshell-list-history 'helm-eshell-history eshell-mode-map))) - -(substitute-key-definition 'find-tag 'helm-etags-select global-map) -(setq projectile-completion-system 'helm) -(helm-descbinds-mode) -(helm-mode 1) - -;; enable Helm version of Projectile with replacment commands -(helm-projectile-on) - -(provide 'prelude-helm-everywhere) -;; prelude-helm-everywhere.el ends here. diff --git a/emacs/.emacs.d/modules/prelude-helm.el b/emacs/.emacs.d/modules/prelude-helm.el deleted file mode 100644 index 253484e..0000000 --- a/emacs/.emacs.d/modules/prelude-helm.el +++ /dev/null @@ -1,67 +0,0 @@ -;;; prelude-helm.el --- Helm setup -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some configuration for Helm following this guide: -;; http://tuhdo.github.io/helm-intro.html - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(prelude-require-packages '(helm helm-projectile)) - -(require 'helm-config) -(require 'helm-projectile) - -(when (executable-find "curl") - (setq helm-google-suggest-use-curl-p t)) - -;; See https://github.com/bbatsov/prelude/pull/670 for a detailed -;; discussion of these options. -(setq helm-split-window-in-side-p t - helm-buffers-fuzzy-matching t - helm-move-to-line-cycle-in-source t - helm-ff-search-library-in-sexp t - helm-ff-file-name-history-use-recentf t) - -;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs. -;; Changed to "C-c h". Note: We must set "C-c h" globally, because we -;; cannot change `helm-command-prefix-key' once `helm-config' is loaded. -(global-set-key (kbd "C-c h") 'helm-command-prefix) -(global-unset-key (kbd "C-x c")) - -(define-key helm-command-map (kbd "o") 'helm-occur) -(define-key helm-command-map (kbd "g") 'helm-do-grep) -(define-key helm-command-map (kbd "C-c w") 'helm-wikipedia-suggest) -(define-key helm-command-map (kbd "SPC") 'helm-all-mark-rings) - -(push "Press to navigate a project in Helm." prelude-tips) - -(provide 'prelude-helm) - -;;; prelude-helm.el ends here diff --git a/emacs/.emacs.d/modules/prelude-ido.el b/emacs/.emacs.d/modules/prelude-ido.el deleted file mode 100644 index 768bf74..0000000 --- a/emacs/.emacs.d/modules/prelude-ido.el +++ /dev/null @@ -1,64 +0,0 @@ -;;; prelude-ido.el --- Ido setup -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Ido-related config. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(prelude-require-packages '(flx-ido ido-completing-read+ smex)) - -(require 'ido) -(require 'ido-completing-read+) -(require 'flx-ido) - -(setq ido-enable-prefix nil - ido-enable-flex-matching t - ido-create-new-buffer 'always - ido-use-filename-at-point 'guess - ido-max-prospects 10 - ido-save-directory-list-file (expand-file-name "ido.hist" prelude-savefile-dir) - ido-default-file-method 'selected-window - ido-auto-merge-work-directories-length -1) -(ido-mode +1) -(ido-ubiquitous-mode +1) - -;;; smarter fuzzy matching for ido -(flx-ido-mode +1) -;; disable ido faces to see flx highlights -(setq ido-use-faces nil) - -;;; smex, remember recently and most frequently used commands -(require 'smex) -(setq smex-save-file (expand-file-name ".smex-items" prelude-savefile-dir)) -(smex-initialize) -(global-set-key (kbd "M-x") 'smex) -(global-set-key (kbd "M-X") 'smex-major-mode-commands) - -(provide 'prelude-ido) -;;; prelude-ido.el ends here diff --git a/emacs/.emacs.d/modules/prelude-ivy.el b/emacs/.emacs.d/modules/prelude-ivy.el deleted file mode 100644 index 8ecea2f..0000000 --- a/emacs/.emacs.d/modules/prelude-ivy.el +++ /dev/null @@ -1,70 +0,0 @@ -;;; prelude-ivy.el --- Ivy setup -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Ivy-related config. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(prelude-require-packages '(ivy swiper counsel)) - -;; ivy is a powerful alternative to the popular ido-mode - -(require 'ivy) - -(ivy-mode 1) -(setq ivy-use-virtual-buffers t) -(setq enable-recursive-minibuffers t) -(global-set-key (kbd "C-c C-r") 'ivy-resume) -(global-set-key (kbd "") 'ivy-resume) - -(setq projectile-completion-system 'ivy) - -;; swiper provides enhanced buffer search - -(global-set-key "\C-s" 'swiper) - - -;; counsel supercharges a lot of commands with some ivy magic - -(global-set-key (kbd "M-x") 'counsel-M-x) -(global-set-key (kbd "C-x C-f") 'counsel-find-file) -(global-set-key (kbd " f") 'counsel-describe-function) -(global-set-key (kbd " v") 'counsel-describe-variable) -(global-set-key (kbd " l") 'counsel-find-library) -(global-set-key (kbd " i") 'counsel-info-lookup-symbol) -(global-set-key (kbd " u") 'counsel-unicode-char) -(global-set-key (kbd "C-c g") 'counsel-git) -(global-set-key (kbd "C-c j") 'counsel-git-grep) -(global-set-key (kbd "C-c k") 'counsel-ag) -(global-set-key (kbd "C-x l") 'counsel-locate) -(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) - - -(provide 'prelude-ivy) -;;; prelude-ivy.el ends here diff --git a/emacs/.emacs.d/modules/prelude-js.el b/emacs/.emacs.d/modules/prelude-js.el deleted file mode 100644 index fd46dca..0000000 --- a/emacs/.emacs.d/modules/prelude-js.el +++ /dev/null @@ -1,58 +0,0 @@ -;;; prelude-js.el --- Emacs Prelude: js-mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for js-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) -(prelude-require-packages '(js2-mode json-mode)) - -(require 'js2-mode) - -(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)) -(add-to-list 'auto-mode-alist '("\\.pac\\'" . js2-mode)) -(add-to-list 'interpreter-mode-alist '("node" . js2-mode)) - -(eval-after-load 'js2-mode - '(progn - (defun prelude-js-mode-defaults () - ;; electric-layout-mode doesn't play nice with smartparens - (setq-local electric-layout-rules '((?\; . after))) - (setq mode-name "JS2") - (js2-imenu-extras-mode +1)) - - (setq prelude-js-mode-hook 'prelude-js-mode-defaults) - - (add-hook 'js2-mode-hook (lambda () (run-hooks 'prelude-js-mode-hook))))) - -(provide 'prelude-js) - -;;; prelude-js.el ends here diff --git a/emacs/.emacs.d/modules/prelude-key-chord.el b/emacs/.emacs.d/modules/prelude-key-chord.el deleted file mode 100644 index 814f4cc..0000000 --- a/emacs/.emacs.d/modules/prelude-key-chord.el +++ /dev/null @@ -1,60 +0,0 @@ -;;; prelude-key-chord.el --- Key chord setup -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Configure key-chord key bindings. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(prelude-require-package 'key-chord) - -(require 'key-chord) - -(key-chord-define-global "jj" 'avy-goto-word-1) -(key-chord-define-global "jl" 'avy-goto-line) -(key-chord-define-global "jk" 'avy-goto-char) -(key-chord-define-global "JJ" 'crux-switch-to-previous-buffer) -(key-chord-define-global "uu" 'undo-tree-visualize) -(key-chord-define-global "xx" 'execute-extended-command) -(key-chord-define-global "yy" 'browse-kill-ring) - -(defvar key-chord-tips '("Press quickly to jump to the beginning of a visible word." - "Press quickly to jump to a visible line." - "Press quickly to jump to a visible character." - "Press quickly to switch to previous buffer." - "Press quickly to visualize the undo tree." - "Press quickly to execute extended command." - "Press quickly to browse the kill ring.")) - -(setq prelude-tips (append prelude-tips key-chord-tips)) - -(key-chord-mode +1) - -(provide 'prelude-key-chord) - -;;; prelude-key-chord.el ends here diff --git a/emacs/.emacs.d/modules/prelude-latex.el b/emacs/.emacs.d/modules/prelude-latex.el deleted file mode 100644 index 3ae0af3..0000000 --- a/emacs/.emacs.d/modules/prelude-latex.el +++ /dev/null @@ -1,93 +0,0 @@ -;;; prelude-latex.el --- Emacs Prelude: Sane setup for LaTeX writers. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Nice defaults for the premium LaTeX editing mode auctex. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(prelude-require-packages '(auctex cdlatex)) -(require 'smartparens-latex) -;; for case -(require 'cl) - -(eval-after-load "company" - '(progn - (prelude-require-packages '(company-auctex)) - (company-auctex-init))) - -(defcustom prelude-latex-fast-math-entry 'LaTeX-math-mode - "Method used for fast math symbol entry in LaTeX." - :link '(function-link :tag "AUCTeX Math Mode" LaTeX-math-mode) - :link '(emacs-commentary-link :tag "CDLaTeX" "cdlatex.el") - :group 'prelude - :type '(choice (const :tag "None" nil) - (const :tag "AUCTeX Math Mode" LaTeX-math-mode) - (const :tag "CDLaTeX" cdlatex))) - -;; AUCTeX configuration -(setq TeX-auto-save t) -(setq TeX-parse-self t) -(setq TeX-close-quote "") -(setq TeX-open-quote "") - -(setq-default TeX-master nil) - -;; use pdflatex -(setq TeX-PDF-mode t) - -;; sensible defaults for OS X, other OSes should be covered out-of-the-box -(when (eq system-type 'darwin) - (setq TeX-view-program-selection - '((output-dvi "DVI Viewer") - (output-pdf "PDF Viewer") - (output-html "HTML Viewer"))) - - (setq TeX-view-program-list - '(("DVI Viewer" "open %o") - ("PDF Viewer" "open %o") - ("HTML Viewer" "open %o")))) - -(defun prelude-latex-mode-defaults () - "Default Prelude hook for `LaTeX-mode'." - (turn-on-auto-fill) - (abbrev-mode +1) - (smartparens-mode +1) - (case prelude-latex-fast-math-entry - (LaTeX-math-mode (LaTeX-math-mode 1)) - (cdlatex (turn-on-cdlatex)))) - -(setq prelude-latex-mode-hook 'prelude-latex-mode-defaults) - -(add-hook 'LaTeX-mode-hook (lambda () - (run-hooks 'prelude-latex-mode-hook))) - -(provide 'prelude-latex) - -;;; prelude-latex.el ends here diff --git a/emacs/.emacs.d/modules/prelude-lisp.el b/emacs/.emacs.d/modules/prelude-lisp.el deleted file mode 100644 index 65ca528..0000000 --- a/emacs/.emacs.d/modules/prelude-lisp.el +++ /dev/null @@ -1,64 +0,0 @@ -;;; prelude-lisp.el --- Emacs Prelude: Configuration common to all lisp modes. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Configuration shared between all modes related to lisp-like languages. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) -(prelude-require-packages '(rainbow-delimiters)) - -;; Lisp configuration -(define-key read-expression-map (kbd "TAB") 'completion-at-point) - -;; wrap keybindings -(define-key lisp-mode-shared-map (kbd "M-(") (prelude-wrap-with "(")) -;; FIXME: Pick terminal-friendly binding. -;;(define-key lisp-mode-shared-map (kbd "M-[") (prelude-wrap-with "[")) -(define-key lisp-mode-shared-map (kbd "M-\"") (prelude-wrap-with "\"")) - -;; a great lisp coding hook -(defun prelude-lisp-coding-defaults () - (smartparens-strict-mode +1) - (rainbow-delimiters-mode +1)) - -(setq prelude-lisp-coding-hook 'prelude-lisp-coding-defaults) - -;; interactive modes don't need whitespace checks -(defun prelude-interactive-lisp-coding-defaults () - (smartparens-strict-mode +1) - (rainbow-delimiters-mode +1) - (whitespace-mode -1)) - -(setq prelude-interactive-lisp-coding-hook 'prelude-interactive-lisp-coding-defaults) - -(provide 'prelude-lisp) - -;;; prelude-lisp.el ends here diff --git a/emacs/.emacs.d/modules/prelude-mediawiki.el b/emacs/.emacs.d/modules/prelude-mediawiki.el deleted file mode 100644 index 5796ad9..0000000 --- a/emacs/.emacs.d/modules/prelude-mediawiki.el +++ /dev/null @@ -1,47 +0,0 @@ -;;; prelude-mediawiki.el --- Emacs Prelude: mediawiki editing config -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Basic configs for access to WikEmacs and Wikipedia. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(prelude-require-packages '(mediawiki)) - -(eval-after-load 'mediawiki - '(progn - (setq mediawiki-site-alist '(("Wikipedia" "http://en.wikipedia.org/w" "" "" "Main Page") - ("WikEmacs" "http://wikemacs.org/w/" "" "" "Main Page"))) - - ;; Emacs users care more for WikEmacs than Wikipedia :-) - (setq mediawiki-site-default "WikEmacs"))) - -(provide 'prelude-mediawiki) - -;;; prelude-mediawiki.el ends here diff --git a/emacs/.emacs.d/modules/prelude-ocaml.el b/emacs/.emacs.d/modules/prelude-ocaml.el deleted file mode 100644 index a354d48..0000000 --- a/emacs/.emacs.d/modules/prelude-ocaml.el +++ /dev/null @@ -1,92 +0,0 @@ -;;; prelude-ocaml.el --- Emacs Prelude: decent Perl coding settings. -;; -;; Copyright © 2014-2017 Geoff Shannon -;; -;; Author: Geoff Shannon -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; tuareg is the preferred ocaml mode for Emacs - -;; These setups for ocaml assume that you are using the OPAM package -;; manager (http://opam.ocaml.org/). - -;; Because of the apparent complexity of getting emacs environment -;; variables setup to use opam correctly, it is instead easier to use -;; opam itself to execute any necessary commands. - -;; Also, the standard OCaml toplevel usage has been replaced in favor -;; of UTOP, the universal toplevel, and we assume that you are using -;; the Jane Street Core libraries rather than the regular OCaml -;; standard libraries - -;; The minimum required setup for using Prelude's OCaml setup would be -;; to install OPAM, and then, minimally `opam install core utop'. A -;; good getting started guide is available at -;; https://github.com/realworldocaml/book/wiki/Installation-Instructions - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(prelude-require-packages '(tuareg utop merlin flycheck-ocaml)) - -(require 'tuareg) -(require 'utop) -(require 'merlin) - -(setq auto-mode-alist - (append '(("\\.ml[ily]?\\'" . tuareg-mode) - ("\\.topml\\'" . tuareg-mode)) - auto-mode-alist)) - -(with-eval-after-load 'merlin - ;; Disable Merlin's own error checking - (setq merlin-error-after-save nil) - - ;; Enable Flycheck checker - (flycheck-ocaml-setup)) - -(add-hook 'tuareg-mode-hook #'utop-minor-mode) -(add-hook 'tuareg-mode-hook #'merlin-mode) - -(add-hook 'tuareg-mode-hook (lambda () - (progn - (define-key tuareg-mode-map (kbd "C-c C-s") - 'utop) - (setq compile-command - "opam config exec corebuild ")))) - -;; Setup merlin completions company is used by default in prelude -(add-to-list 'company-backends 'merlin-company-backend) - -;; Merlin also offers support for autocomplete, uncomment this next line -;; to activate it. -;; (setq merlin-use-auto-complete-mode t) - -(setq utop-command "opam config exec utop -- -emacs" - merlin-error-after-save nil) - -(provide 'prelude-ocaml) - -;;; prelude-ocaml.el ends here diff --git a/emacs/.emacs.d/modules/prelude-org.el b/emacs/.emacs.d/modules/prelude-org.el deleted file mode 100644 index d810cac..0000000 --- a/emacs/.emacs.d/modules/prelude-org.el +++ /dev/null @@ -1,58 +0,0 @@ -;;; prelude-org.el --- Emacs Prelude: org-mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for org-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(add-to-list 'auto-mode-alist '("\\.org\\’" . org-mode)) -(global-set-key "\C-cl" 'org-store-link) -(global-set-key "\C-ca" 'org-agenda) -(global-set-key "\C-cb" 'org-iswitchb) -(setq org-log-done t) - -(defun prelude-org-mode-defaults () - (let ((oldmap (cdr (assoc 'prelude-mode minor-mode-map-alist))) - (newmap (make-sparse-keymap))) - (set-keymap-parent newmap oldmap) - (define-key newmap (kbd "C-c +") nil) - (define-key newmap (kbd "C-c -") nil) - (define-key newmap (kbd "C-a") nil) - (make-local-variable 'minor-mode-overriding-map-alist) - (push `(prelude-mode . ,newmap) minor-mode-overriding-map-alist)) -) - -(setq prelude-org-mode-hook 'prelude-org-mode-defaults) - -(add-hook 'org-mode-hook (lambda () (run-hooks 'prelude-org-mode-hook))) - -(provide 'prelude-org) - -;;; prelude-org.el ends here diff --git a/emacs/.emacs.d/modules/prelude-perl.el b/emacs/.emacs.d/modules/prelude-perl.el deleted file mode 100644 index b9a2f4d..0000000 --- a/emacs/.emacs.d/modules/prelude-perl.el +++ /dev/null @@ -1,70 +0,0 @@ -;;; prelude-perl.el --- Emacs Prelude: decent Perl coding settings. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; cperl-mode is the best Perl mode for Emacs out there. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) - -;; use cperl-mode instead of perl-mode -(defalias 'perl-mode 'cperl-mode) - -(define-key 'help-command "P" 'cperl-perldoc) - -(defun prelude-cperl-mode-defaults () - (setq cperl-indent-level 4) - (setq cperl-continued-statement-offset 8) - ;; cperl-hairy affects all those variables, but I prefer - ;; a more fine-grained approach as far as they are concerned - (setq cperl-font-lock t) - (setq cperl-electric-lbrace-space t) - (setq cperl-electric-parens nil) - (setq cperl-electric-linefeed nil) - (setq cperl-electric-keywords nil) - (setq cperl-info-on-command-no-prompt t) - (setq cperl-clobber-lisp-bindings t) - (setq cperl-lazy-help-time 3) - - ;; if you want all the bells and whistles - ;; (setq cperl-hairy) - - (set-face-background 'cperl-array-face nil) - (set-face-background 'cperl-hash-face nil) - (setq cperl-invalid-face nil)) - -(setq prelude-cperl-mode-hook 'prelude-cperl-mode-defaults) - -(add-hook 'cperl-mode-hook (lambda () - (run-hooks 'prelude-cperl-mode-hook)) t) - -(provide 'prelude-perl) - -;;; prelude-perl.el ends here diff --git a/emacs/.emacs.d/modules/prelude-programming.el b/emacs/.emacs.d/modules/prelude-programming.el deleted file mode 100644 index f487652..0000000 --- a/emacs/.emacs.d/modules/prelude-programming.el +++ /dev/null @@ -1,91 +0,0 @@ -;;; prelude-programming.el --- Emacs Prelude: prog-mode configuration -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic prog-mode configuration and programming related utilities. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(defun prelude-local-comment-auto-fill () - (set (make-local-variable 'comment-auto-fill-only-comments) t)) - -(defun prelude-font-lock-comment-annotations () - "Highlight a bunch of well known comment annotations. - -This functions should be added to the hooks of major modes for programming." - (font-lock-add-keywords - nil '(("\\<\\(\\(FIX\\(ME\\)?\\|TODO\\|OPTIMIZE\\|HACK\\|REFACTOR\\):\\)" - 1 font-lock-warning-face t)))) - -;; show the name of the current function definition in the modeline -(require 'which-func) -(which-function-mode 1) - -;; in Emacs 24 programming major modes generally derive from a common -;; mode named prog-mode; for others, we'll arrange for our mode -;; defaults function to run prelude-prog-mode-hook directly. To -;; augment and/or counteract these defaults your own function -;; to prelude-prog-mode-hook, using: -;; -;; (add-hook 'prelude-prog-mode-hook 'my-prog-mode-defaults t) -;; -;; (the final optional t sets the *append* argument) - -;; smart curly braces -(sp-pair "{" nil :post-handlers - '(((lambda (&rest _ignored) - (crux-smart-open-line-above)) "RET"))) - -;; enlist a more liberal guru -(setq guru-warn-only t) - -(defun prelude-prog-mode-defaults () - "Default coding hook, useful with any programming language." - (when (and (executable-find ispell-program-name) - prelude-flyspell) - (flyspell-prog-mode)) - (when prelude-guru - (guru-mode +1)) - (smartparens-mode +1) - (prelude-enable-whitespace) - (prelude-local-comment-auto-fill) - (prelude-font-lock-comment-annotations)) - -(setq prelude-prog-mode-hook 'prelude-prog-mode-defaults) - -(add-hook 'prog-mode-hook (lambda () - (run-hooks 'prelude-prog-mode-hook))) - -;; enable on-the-fly syntax checking -(if (fboundp 'global-flycheck-mode) - (global-flycheck-mode +1) - (add-hook 'prog-mode-hook 'flycheck-mode)) - -(provide 'prelude-programming) -;;; prelude-programming.el ends here diff --git a/emacs/.emacs.d/modules/prelude-python.el b/emacs/.emacs.d/modules/prelude-python.el deleted file mode 100644 index 49a43ff..0000000 --- a/emacs/.emacs.d/modules/prelude-python.el +++ /dev/null @@ -1,111 +0,0 @@ -;;; prelude-python.el --- Emacs Prelude: python.el configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for python.el (the latest and greatest -;; Python mode Emacs has to offer). - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(prelude-require-package 'anaconda-mode) - -(when (boundp 'company-backends) - (prelude-require-package 'company-anaconda) - (add-to-list 'company-backends 'company-anaconda)) - -(require 'electric) -(require 'prelude-programming) - -;; Copy pasted from ruby-mode.el -(defun prelude-python--encoding-comment-required-p () - (re-search-forward "[^\0-\177]" nil t)) - -(defun prelude-python--detect-encoding () - (let ((coding-system - (or save-buffer-coding-system - buffer-file-coding-system))) - (if coding-system - (symbol-name - (or (coding-system-get coding-system 'mime-charset) - (coding-system-change-eol-conversion coding-system nil))) - "ascii-8bit"))) - -(defun prelude-python--insert-coding-comment (encoding) - (let ((newlines (if (looking-at "^\\s *$") "\n" "\n\n"))) - (insert (format "# coding: %s" encoding) newlines))) - -(defun prelude-python-mode-set-encoding () - "Insert a magic comment header with the proper encoding if necessary." - (save-excursion - (widen) - (goto-char (point-min)) - (when (prelude-python--encoding-comment-required-p) - (goto-char (point-min)) - (let ((coding-system (prelude-python--detect-encoding))) - (when coding-system - (if (looking-at "^#!") (beginning-of-line 2)) - (cond ((looking-at "\\s *#\\s *.*\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)") - ;; update existing encoding comment if necessary - (unless (string= (match-string 2) coding-system) - (goto-char (match-beginning 2)) - (delete-region (point) (match-end 2)) - (insert coding-system))) - ((looking-at "\\s *#.*coding\\s *[:=]")) - (t (prelude-python--insert-coding-comment coding-system))) - (when (buffer-modified-p) - (basic-save-buffer-1))))))) - -(when (fboundp 'exec-path-from-shell-copy-env) - (exec-path-from-shell-copy-env "PYTHONPATH")) - -(defun prelude-python-mode-defaults () - "Defaults for Python programming." - (subword-mode +1) - (anaconda-mode 1) - (eldoc-mode 1) - (setq-local electric-layout-rules - '((?: . (lambda () - (and (zerop (first (syntax-ppss))) - (python-info-statement-starts-block-p) - 'after))))) - (when (fboundp #'python-imenu-create-flat-index) - (setq-local imenu-create-index-function - #'python-imenu-create-flat-index)) - (add-hook 'post-self-insert-hook - #'electric-layout-post-self-insert-function nil 'local) - (add-hook 'after-save-hook 'prelude-python-mode-set-encoding nil 'local)) - -(setq prelude-python-mode-hook 'prelude-python-mode-defaults) - -(add-hook 'python-mode-hook (lambda () - (run-hooks 'prelude-python-mode-hook))) - -(provide 'prelude-python) - -;;; prelude-python.el ends here diff --git a/emacs/.emacs.d/modules/prelude-ruby.el b/emacs/.emacs.d/modules/prelude-ruby.el deleted file mode 100644 index 13ba6b4..0000000 --- a/emacs/.emacs.d/modules/prelude-ruby.el +++ /dev/null @@ -1,78 +0,0 @@ -;;; prelude-ruby.el --- Emacs Prelude: A nice setup for Ruby (and Rails) devs. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for Ruby and Rails development. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) - -(prelude-require-packages '(ruby-tools inf-ruby yari)) - -;; Rake files are ruby, too, as are gemspecs, rackup files, and gemfiles. -(add-to-list 'auto-mode-alist '("\\.rake\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Rakefile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.gemspec\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.ru\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Gemfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Guardfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Capfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.cap\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.thor\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.rabl\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Thorfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Vagrantfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.jbuilder\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Podfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("\\.podspec\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Puppetfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Berksfile\\'" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Appraisals\\'" . ruby-mode)) - -;; We never want to edit Rubinius bytecode -(add-to-list 'completion-ignored-extensions ".rbc") - -(define-key 'help-command (kbd "R") 'yari) - -(eval-after-load 'ruby-mode - '(progn - (defun prelude-ruby-mode-defaults () - (inf-ruby-minor-mode +1) - (ruby-tools-mode +1) - ;; CamelCase aware editing operations - (subword-mode +1)) - - (setq prelude-ruby-mode-hook 'prelude-ruby-mode-defaults) - - (add-hook 'ruby-mode-hook (lambda () - (run-hooks 'prelude-ruby-mode-hook))))) - -(provide 'prelude-ruby) -;;; prelude-ruby.el ends here diff --git a/emacs/.emacs.d/modules/prelude-rust.el b/emacs/.emacs.d/modules/prelude-rust.el deleted file mode 100644 index bb4c4a8..0000000 --- a/emacs/.emacs.d/modules/prelude-rust.el +++ /dev/null @@ -1,66 +0,0 @@ -;;; prelude-rust.el --- Emacs Prelude: Rust programming support. -;; -;; Authors: Doug MacEachern, Manoel Vilela -;; Version: 1.0.1 -;; Keywords: convenience rust - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Prelude configuration for Rust - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) - -;; You may need installing the following packages on your system: -;; * rustc (Rust Compiler) -;; * cargo (Rust Package Manager) -;; * racer (Rust Completion Tool) -;; * rustfmt (Rust Tool for formatting code) - -(prelude-require-packages '(rust-mode - racer - flycheck-rust - cargo)) - -(setq rust-format-on-save t) - -(eval-after-load 'rust-mode - '(progn - (add-hook 'rust-mode-hook 'racer-mode) - (add-hook 'racer-mode-hook 'eldoc-mode) - (add-hook 'rust-mode-hook 'cargo-minor-mode) - (add-hook 'rust-mode-hook 'flycheck-rust-setup) - (add-hook 'flycheck-mode-hook 'flycheck-rust-setup) - - (defun prelude-rust-mode-defaults () - (local-set-key (kbd "C-c C-d") 'racer-describe) - ;; CamelCase aware editing operations - (subword-mode +1)) - - (setq prelude-rust-mode-hook 'prelude-rust-mode-defaults) - - (add-hook 'rust-mode-hook (lambda () - (run-hooks 'prelude-rust-mode-hook))))) - -(provide 'prelude-rust) -;;; prelude-rust.el ends here diff --git a/emacs/.emacs.d/modules/prelude-scala.el b/emacs/.emacs.d/modules/prelude-scala.el deleted file mode 100644 index 6270bea..0000000 --- a/emacs/.emacs.d/modules/prelude-scala.el +++ /dev/null @@ -1,48 +0,0 @@ -;;; prelude-scala.el --- Emacs Prelude: scala-mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic support for the Scala programming language - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-programming) -(prelude-require-packages '(scala-mode ensime)) - -(defun prelude-scala-mode-defaults () - (subword-mode +1) - (ensime-mode +1)) - -(setq prelude-scala-mode-hook 'prelude-scala-mode-defaults) - -(add-hook 'scala-mode-hook (lambda () - (run-hooks 'prelude-scala-mode-hook))) -(provide 'prelude-scala) - -;;; prelude-scala.el ends here diff --git a/emacs/.emacs.d/modules/prelude-scheme.el b/emacs/.emacs.d/modules/prelude-scheme.el deleted file mode 100644 index a429c3d..0000000 --- a/emacs/.emacs.d/modules/prelude-scheme.el +++ /dev/null @@ -1,50 +0,0 @@ -;;; prelude-scheme.el --- Emacs Prelude: Some defaults for Scheme. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for Scheme programming. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(prelude-require-package 'geiser) - -(require 'prelude-lisp) -(require 'geiser) - -;; geiser replies on a REPL to provide autodoc and completion -(setq geiser-mode-start-repl-p t) - -;; keep the home clean -(setq geiser-repl-history-filename - (expand-file-name "geiser-history" prelude-savefile-dir)) - -(add-hook 'scheme-mode-hook (lambda () (run-hooks 'prelude-lisp-coding-hook))) - -(provide 'prelude-scheme) - -;;; prelude-scheme.el ends here diff --git a/emacs/.emacs.d/modules/prelude-scss.el b/emacs/.emacs.d/modules/prelude-scss.el deleted file mode 100644 index be92668..0000000 --- a/emacs/.emacs.d/modules/prelude-scss.el +++ /dev/null @@ -1,49 +0,0 @@ -;;; prelude-scss.el --- Emacs Prelude: scss support -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: http://www.batsov.com/emacs-prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for scss-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'prelude-css) -(prelude-require-packages '(scss-mode)) - -;; turn off annoying auto-compile on save -(setq scss-compile-at-save nil) - -(defun prelude-scss-mode-defaults () - (prelude-css-mode-defaults)) - -(setq prelude-scss-mode-hook 'prelude-scss-mode-defaults) - -(add-hook 'scss-mode-hook (lambda () (run-hooks 'prelude-scss-mode-hook))) - -(provide 'prelude-scss) -;;; prelude-scss.el ends here diff --git a/emacs/.emacs.d/modules/prelude-shell.el b/emacs/.emacs.d/modules/prelude-shell.el deleted file mode 100644 index 8d15547..0000000 --- a/emacs/.emacs.d/modules/prelude-shell.el +++ /dev/null @@ -1,51 +0,0 @@ -;;; prelude-shell.el --- Emacs Prelude: sh-mode configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for cc-mode and the modes derived from it. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'sh-script) - -;; recognize prezto files as zsh scripts -(defvar prelude-prezto-files '("zlogin" "zlogin" "zlogout" "zpreztorc" "zprofile" "zshenv" "zshrc")) - -(mapc (lambda (file) - (add-to-list 'auto-mode-alist `(,(format "\\%s\\'" file) . sh-mode))) - prelude-prezto-files) - -(add-hook 'sh-mode-hook - (lambda () - (if (and buffer-file-name - (member (file-name-nondirectory buffer-file-name) prelude-prezto-files)) - (sh-set-shell "zsh")))) - -(provide 'prelude-shell) -;;; prelude-shell.el ends here diff --git a/emacs/.emacs.d/modules/prelude-web.el b/emacs/.emacs.d/modules/prelude-web.el deleted file mode 100644 index 665f903..0000000 --- a/emacs/.emacs.d/modules/prelude-web.el +++ /dev/null @@ -1,73 +0,0 @@ -;;; prelude-web.el --- Emacs Prelude: web template support -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: http://www.batsov.com/emacs-prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic configuration for web-mode. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(prelude-require-packages '(web-mode)) - -(require 'web-mode) - -(add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.tpl\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.blade\\.php\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.jsp\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) -(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) -(add-to-list 'auto-mode-alist -'("/\\(views\\|html\\|theme\\|templates\\)/.*\\.php\\'" . web-mode)) - -;; make web-mode play nice with smartparens -(setq web-mode-enable-auto-pairing nil) - -(sp-with-modes '(web-mode) - (sp-local-pair "%" "%" - :unless '(sp-in-string-p) - :post-handlers '(((lambda (&rest _ignored) - (just-one-space) - (save-excursion (insert " "))) - "SPC" "=" "#"))) - (sp-local-tag "%" "<% " " %>") - (sp-local-tag "=" "<%= " " %>") - (sp-local-tag "#" "<%# " " %>")) - -(eval-after-load 'web-mode - '(progn - (defun prelude-web-mode-defaults ()) - (setq prelude-web-mode-hook 'prelude-web-mode-defaults) - - (add-hook 'web-mode-hook (lambda () - (run-hooks 'prelude-web-mode-hook))))) - -(provide 'prelude-web) -;;; prelude-web.el ends here diff --git a/emacs/.emacs.d/modules/prelude-xml.el b/emacs/.emacs.d/modules/prelude-xml.el deleted file mode 100644 index d6248d3..0000000 --- a/emacs/.emacs.d/modules/prelude-xml.el +++ /dev/null @@ -1,50 +0,0 @@ -;;; prelude-xml.el --- Emacs Prelude: XML editing configuration. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: Bozhidar Batsov -;; URL: https://github.com/bbatsov/prelude -;; Version: 1.0.0 -;; Keywords: convenience - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Some basic nxml-mode configuration. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: - -(require 'nxml-mode) - -(push '("<\\?xml" . nxml-mode) magic-mode-alist) - -;; pom files should be treated as xml files -(add-to-list 'auto-mode-alist '("\\.pom$" . nxml-mode)) - -(setq nxml-child-indent 4) -(setq nxml-attribute-indent 4) -(setq nxml-auto-insert-xml-declaration-flag nil) -(setq nxml-bind-meta-tab-to-complete-flag t) -(setq nxml-slash-auto-complete-flag t) - -(provide 'prelude-xml) - -;;; prelude-xml.el ends here diff --git a/emacs/.emacs.d/modules/prelude-yaml.el b/emacs/.emacs.d/modules/prelude-yaml.el deleted file mode 100644 index 3e11508..0000000 --- a/emacs/.emacs.d/modules/prelude-yaml.el +++ /dev/null @@ -1,44 +0,0 @@ -;;; prelude-yaml.el --- Emacs Prelude: YAML programming support. -;; -;; Copyright © 2011-2017 Bozhidar Batsov -;; -;; Author: ToBeReplaced -;; URL: http://batsov.com/prelude -;; Version: 1.0.0 -;; Keywords: convenience yaml - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Prelude configuration for YAML. - -;;; License: - -;; 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 GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Code: -(prelude-require-packages '(yaml-mode)) - -;; yaml-mode doesn't derive from prog-mode, but we can at least enable -;; whitespace-mode and apply cleanup. -(add-hook 'yaml-mode-hook 'whitespace-mode) -(add-hook 'yaml-mode-hook 'subword-mode) -(add-hook 'yaml-mode-hook - (lambda () (add-hook 'before-save-hook 'prelude-cleanup-maybe nil t))) - -(provide 'prelude-yaml) -;;; prelude-yaml.el ends here diff --git a/emacs/.emacs.d/personal/.dir-locals.el b/emacs/.emacs.d/personal/.dir-locals.el deleted file mode 100644 index 69fa3ca..0000000 --- a/emacs/.emacs.d/personal/.dir-locals.el +++ /dev/null @@ -1,5 +0,0 @@ -;; This will make sure that nothing in your personal directory will be -;; forced through the emacs-lisp-checkdoc flychecker. That's a great -;; checker for real modules, but these are just config files, and you -;; deserve not to get warnings all the time -((emacs-lisp-mode . ((flycheck-disabled-checkers . (emacs-lisp-checkdoc))))) diff --git a/emacs/.emacs.d/personal/.gitkeep b/emacs/.emacs.d/personal/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/emacs/.emacs.d/personal/preload/.gitkeep b/emacs/.emacs.d/personal/preload/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/emacs/.emacs.d/prelude-modules.el b/emacs/.emacs.d/prelude-modules.el deleted file mode 100644 index 08cbe9c..0000000 --- a/emacs/.emacs.d/prelude-modules.el +++ /dev/null @@ -1,40 +0,0 @@ -;;; Uncomment the modules you'd like to use and restart Prelude afterwards - -;; Emacs IRC client -(require 'prelude-erc) -;; (require 'prelude-ido) ;; Super charges Emacs completion for C-x C-f and more -(require 'prelude-ivy) ;; A mighty modern alternative to ido -;; (require 'prelude-helm) ;; Interface for narrowing and search -;; (require 'prelude-helm-everywhere) ;; Enable Helm everywhere -(require 'prelude-company) -;; (require 'prelude-key-chord) ;; Binds useful features to key combinations -;; (require 'prelude-mediawiki) -;; (require 'prelude-evil) - -;;; Programming languages support -(require 'prelude-c) -;; (require 'prelude-clojure) -;; (require 'prelude-coffee) -;; (require 'prelude-common-lisp) -;; (require 'prelude-css) -(require 'prelude-emacs-lisp) -;; (require 'prelude-erlang) -;; (require 'prelude-elixir) -;; (require 'prelude-go) -;; (require 'prelude-haskell) -(require 'prelude-js) -;; (require 'prelude-latex) -(require 'prelude-lisp) -;; (require 'prelude-ocaml) -(require 'prelude-org) ;; Org-mode helps you keep TODO lists, notes and more -(require 'prelude-perl) -;; (require 'prelude-python) -;; (require 'prelude-ruby) -;; (require 'prelude-rust) -;; (require 'prelude-scala) -(require 'prelude-scheme) -(require 'prelude-shell) -;; (require 'prelude-scss) -;; (require 'prelude-web) ;; Emacs mode for web templates -(require 'prelude-xml) -;; (require 'prelude-yaml) diff --git a/emacs/.emacs.d/projectile-bookmarks.eld b/emacs/.emacs.d/projectile-bookmarks.eld deleted file mode 100644 index cd49b9b..0000000 --- a/emacs/.emacs.d/projectile-bookmarks.eld +++ /dev/null @@ -1 +0,0 @@ -("~/.dotfiles/emacs/.emacs.d/") \ No newline at end of file diff --git a/emacs/.emacs.d/sample/prelude-modules.el b/emacs/.emacs.d/sample/prelude-modules.el deleted file mode 100644 index dad114d..0000000 --- a/emacs/.emacs.d/sample/prelude-modules.el +++ /dev/null @@ -1,40 +0,0 @@ -;;; Uncomment the modules you'd like to use and restart Prelude afterwards - -;; Emacs IRC client -;; (require 'prelude-erc) -;; (require 'prelude-ido) ;; Super charges Emacs completion for C-x C-f and more -(require 'prelude-ivy) ;; A mighty modern alternative to ido -;; (require 'prelude-helm) ;; Interface for narrowing and search -;; (require 'prelude-helm-everywhere) ;; Enable Helm everywhere -(require 'prelude-company) -;; (require 'prelude-key-chord) ;; Binds useful features to key combinations -;; (require 'prelude-mediawiki) -;; (require 'prelude-evil) - -;;; Programming languages support -;; (require 'prelude-c) -;; (require 'prelude-clojure) -;; (require 'prelude-coffee) -;; (require 'prelude-common-lisp) -;; (require 'prelude-css) -;; (require 'prelude-emacs-lisp) -;; (require 'prelude-erlang) -;; (require 'prelude-elixir) -;; (require 'prelude-go) -;; (require 'prelude-haskell) -;; (require 'prelude-js) -(require 'prelude-latex) -;; (require 'prelude-lisp) -;; (require 'prelude-ocaml) -(require 'prelude-org) ;; Org-mode helps you keep TODO lists, notes and more -;; (require 'prelude-perl) -(require 'prelude-python) -;; (require 'prelude-ruby) -;; (require 'prelude-rust) -;; (require 'prelude-scala) -;; (require 'prelude-scheme) -(require 'prelude-shell) -;; (require 'prelude-scss) -;; (require 'prelude-web) ;; Emacs mode for web templates -;; (require 'prelude-xml) -;; (require 'prelude-yaml) diff --git a/emacs/.emacs.d/sample/prelude-pinned-packages.el b/emacs/.emacs.d/sample/prelude-pinned-packages.el deleted file mode 100644 index 6d79431..0000000 --- a/emacs/.emacs.d/sample/prelude-pinned-packages.el +++ /dev/null @@ -1,133 +0,0 @@ -(add-to-list 'package-archives - '("melpa-stable" . "https://stable.melpa.org/packages/") t) - -(setq package-pinned-packages - '( - (ace-window . "melpa-stable") - (alchemist . "melpa-stable") - (anaconda-mode . "melpa-stable") - (anzu . "melpa-stable") - (async . "melpa-stable") - (avy . "melpa-stable") - (browse-kill-ring . "melpa-stable") - (caml . "melpa-stable") - (cask-mode . "melpa-stable") - (cdlatex . "melpa-stable") - (cider . "melpa-stable") - (clojure-mode . "melpa-stable") - (cmake-mode . "melpa-stable") - (coffee-mode . "melpa-stable") - (company . "melpa-stable") - (company-anaconda . "melpa-stable") - (company-auctex . "melpa-stable") - (company-go . "melpa-stable") - (crux . "melpa-stable") - (cython-mode . "melpa-stable") - (d-mode . "melpa-stable") - (dart-mode . "melpa-stable") - (dash . "melpa-stable") - (diff-hl . "melpa-stable") - (diminish . "melpa-stable") - (discover-my-major . "melpa-stable") - (dockerfile-mode . "melpa-stable") - (easy-kill . "melpa-stable") - (elisp-slime-nav . "melpa-stable") - (elixir-mode . "melpa-stable") - (elm-mode . "melpa-stable") - (ensime . "melpa-stable") - (epl . "melpa-stable") - (erlang . "melpa-stable") - (evil . "melpa-stable") - (evil-numbers . "melpa-stable") - (evil-surround . "melpa-stable") - (evil-visualstar . "melpa-stable") - (exec-path-from-shell . "melpa-stable") - (expand-region . "melpa-stable") - (f . "melpa-stable") - (feature-mode . "melpa-stable") - (flx . "melpa-stable") - (flx-ido . "melpa-stable") - (flycheck . "melpa-stable") - (flycheck-ocaml . "melpa-stable") - (geiser . "melpa-stable") - (gh . "melpa-stable") - (gist . "melpa-stable") - (git-commit . "melpa-stable") - (git-timemachine . "melpa-stable") - (gitconfig-mode . "melpa-stable") - (gitignore-mode . "melpa-stable") - (go-eldoc . "melpa-stable") - (go-guru . "melpa-stable") - (go-mode . "melpa-stable") - (go-projectile . "melpa-stable") - (go-rename . "melpa-stable") - (gotest . "melpa-stable") - (goto-chg . "melpa-stable") - (grizzl . "melpa-stable") - (groovy-mode . "melpa-stable") - (guru-mode . "melpa-stable") - (haml-mode . "melpa-stable") - (haskell-mode . "melpa-stable") - (helm . "melpa-stable") - (helm-ag . "melpa-stable") - (helm-core . "melpa-stable") - (helm-descbinds . "melpa-stable") - (helm-projectile . "melpa-stable") - (imenu-anywhere . "melpa-stable") - (inf-ruby . "melpa-stable") - (js2-mode . "melpa-stable") - (json-mode . "melpa-stable") - (json-reformat . "melpa-stable") - (json-snatcher . "melpa-stable") - (kivy-mode . "melpa-stable") - (less-css-mode . "melpa-stable") - (logito . "melpa-stable") - (lua-mode . "melpa-stable") - (macrostep . "melpa-stable") - (magit . "melpa-stable") - (magit-popup . "melpa-stable") - (makey . "melpa-stable") - (markdown-mode . "melpa-stable") - (marshal . "melpa-stable") - (mediawiki . "melpa-stable") - (merlin . "melpa-stable") - (operate-on-number . "melpa-stable") - (ov . "melpa-stable") - (pcache . "melpa-stable") - (php-mode . "melpa-stable") - (pkg-info . "melpa-stable") - (pkgbuild-mode . "melpa-stable") - (popup . "melpa-stable") - (projectile . "melpa-stable") - (protobuf-mode . "melpa-stable") - (puppet-mode . "melpa-stable") - (pythonic . "melpa-stable") - (queue . "gnu") - (rich-minority . "melpa-stable") - (ruby-tools . "melpa-stable") - (s . "melpa-stable") - (sass-mode . "melpa-stable") - (sbt-mode . "melpa-stable") - (scala-mode . "melpa-stable") - (scss-mode . "melpa-stable") - (slim-mode . "melpa-stable") - (slime . "melpa-stable") - (smart-mode-line . "melpa-stable") - (smartparens . "melpa-stable") - (smartrep . "melpa-stable") - (smex . "melpa-stable") - (spinner . "gnu") - (stylus-mode . "melpa-stable") - (swift-mode . "melpa-stable") - (thrift . "melpa-stable") - (tuareg . "melpa-stable") - (utop . "melpa-stable") - (volatile-highlights . "melpa-stable") - (web-mode . "melpa-stable") - (which-key . "melpa-stable") - (with-editor . "melpa-stable") - (yaml-mode . "melpa-stable") - (yasnippet . "melpa-stable") - (zenburn-theme . "melpa-stable") - (zop-to-char . "melpa-stable") - )) diff --git a/emacs/.emacs.d/themes/.gitkeep b/emacs/.emacs.d/themes/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/emacs/.emacs.d/utils/installer.sh b/emacs/.emacs.d/utils/installer.sh deleted file mode 100755 index 15f6e7e..0000000 --- a/emacs/.emacs.d/utils/installer.sh +++ /dev/null @@ -1,246 +0,0 @@ -install_prelude () { - printf " Cloning the Prelude's GitHub repository...\n$RESET" - if [ x$PRELUDE_VERBOSE != x ] - then - /usr/bin/env git clone $PRELUDE_URL "$PRELUDE_INSTALL_DIR" - else - /usr/bin/env git clone $PRELUDE_URL "$PRELUDE_INSTALL_DIR" > /dev/null - fi - if ! [ $? -eq 0 ] - then - printf "$RED A fatal error occurred during Prelude's installation. Aborting..." - exit 1 - fi -} - -make_prelude_dirs () { - printf " Making the required directories.\n$RESET" - mkdir -p "$PRELUDE_INSTALL_DIR/savefile" -} - -colors_ () { - case "$SHELL" in - *zsh) - autoload colors && colors - eval RESET='$reset_color' - for COLOR in RED GREEN YELLOW BLUE MAGENTA CYAN BLACK WHITE - do - eval $COLOR='$fg_no_bold[${(L)COLOR}]' - eval B$COLOR='$fg_bold[${(L)COLOR}]' - done - ;; - *) - RESET='\e[0m' # Reset - RED='\e[0;31m' # Red - GREEN='\e[0;32m' # Green - YELLOW='\e[0;33m' # Yellow - BLUE='\e[0;34m' # Blue - PURPLE='\e[0;35m' # Magenta - CYAN='\e[0;36m' # Cyan - WHITE='\e[0;37m' # White - BRED='\e[1;31m' # Bold Red - BGREEN='\e[1;32m' # Bold Green - BYELLOW='\e[1;33m' # Bold Yellow - BBLUE='\e[1;34m' # Bold Blue - BPURPLE='\e[1;35m' # Bold Magenta - BCYAN='\e[1;36m' # Bold Cyan - BWHITE='\e[1;37m' # Bold White - ;; - esac -} - -# Commandline args: -# -d/--directory [dir] -# Install prelude into the specified directory. If 'dir' is a relative path prefix it with $HOME. -# Defaults to '$HOME/.emacs.d' -# -c/--colors -# Enable colors -# -s/--source [url] -# Clone prelude from 'url'. -# Defaults to 'https://github.com/bbatsov/prelude.git' -# -i/--into -# If one exists, install into the existing config -# -n/--no-bytecompile -# Skip the compilation of the prelude files. -# -h/--help -# Print help -# -v/--verbose -# Verbose output, for debugging - -usage() { - printf "Usage: $0 [OPTION]\n" - printf " -c, --colors \t \t \t Enable colors.\n" - printf " -d, --directory [dir] \t Install prelude into the specified directory.\n" - printf " \t \t \t \t If 'dir' is a relative path prefix with $HOME.\n" - printf " \t \t \t \t Defaults to $HOME/.emacs.d\n" - printf " -s, --source [url] \t \t Clone prelude from 'url'.\n" - printf " \t \t \t \t Defaults to 'https://github.com/bbatsov/prelude.git'.\n" - printf " -n, --no-bytecompile \t \t Skip the bytecompilation step of prelude.\n" - printf " -i, --into \t \t \t Install Prelude into a subdirectory in the existing configuration\n" - printf " \t \t \t \t The default behavious is to install prelude into the existing\n" - printf " \t \t \t \t emacs configuration.\n" - printf " -h, --help \t \t \t Display this help and exit\n" - printf " -v, --verbose \t \t Display verbose information\n" - printf "\n" -} - -### Parse cli -while [ $# -gt 0 ] -do - case $1 in - -d | --directory) - PRELUDE_INSTALL_DIR=$2 - shift 2 - ;; - -c | --colors) - colors_ - shift 1 - ;; - -s | --source) - PRELUDE_URL=$2 - shift 2 - ;; - -i | --into) - PRELUDE_INTO='true' - shift 1 - ;; - -n | --no-bytecompile) - PRELUDE_SKIP_BC='true' - shift 1 - ;; - -h | --help) - usage - exit 0 - ;; - -v | --verbose) - PRELUDE_VERBOSE='true'; - shift 1 - ;; - *) - printf "Unkown option: $1\n" - shift 1 - ;; - esac -done - -VERBOSE_COLOR=$BBLUE - -[ -z "$PRELUDE_URL" ] && PRELUDE_URL="https://github.com/bbatsov/prelude.git" -[ -z "$PRELUDE_INSTALL_DIR" ] && PRELUDE_INSTALL_DIR="$HOME/.emacs.d" - -if [ x$PRELUDE_VERBOSE != x ] -then - printf "$VERBOSE_COLOR" - printf "PRELUDE_VERBOSE = $PRELUDE_VERBOSE\n" - printf "INSTALL_DIR = $PRELUDE_INSTALL_DIR\n" - printf "SOURCE_URL = $PRELUDE_URL\n" - printf "$RESET" - if [ -n "$PRELUDE_SKIP_BC" ] - then - printf "Skipping bytecompilation.\n" - fi - if [ -n "$PRELUDE_INTO" ] - then - printf "Replacing existing config (if one exists).\n" - fi - printf "$RESET" -fi - -# If prelude is already installed -if [ -f "$PRELUDE_INSTALL_DIR/core/prelude-core.el" ] -then - printf "\n\n$BRED" - printf "You already have Prelude installed.$RESET\nYou'll need to remove $PRELUDE_INSTALL_DIR/prelude if you want to install Prelude again.\n" - printf "If you want to update your copy of prelude, run 'git pull origin master' from your prelude directory\n\n" - exit 1; -fi - -### Check dependencies -printf "$CYAN Checking to see if git is installed... $RESET" -if hash git 2>&- -then - printf "$GREEN found.$RESET\n" -else - printf "$RED not found. Aborting installation!$RESET\n" - exit 1 -fi; - -printf "$CYAN Checking to see if aspell is installed... " -if hash aspell 2>&- -then - printf "$GREEN found.$RESET\n" -else - printf "$RED not found. Install aspell to benefit from flyspell-mode!$RESET\n" -fi - -### Check emacs version -if [ $(emacs --version 2>/dev/null | sed -n 's/.*[^0-9.]\([0-9]*\.[0-9.]*\).*/\1/p;q' | sed 's/\..*//g') -lt 24 ] -then - printf "$YELLOW WARNING:$RESET Prelude depends on emacs $RED 24$RESET !\n" -fi - -if [ -f "$HOME/.emacs" ] -then - ## If $HOME/.emacs exists, emacs ignores prelude's init.el, so remove it - printf " Backing up the existing $HOME/.emacs to $HOME/.emacs.pre-prelude\n" - mv $HOME/.emacs $HOME/.emacs.pre-prelude -fi - -if [ -d "$PRELUDE_INSTALL_DIR" ] || [ -f "$PRELUDE_INSTALL_DIR" ] -then - # Existing file/directory found -> backup - printf " Backing up the existing config to $PRELUDE_INSTALL_DIR.pre-prelude.tar.\n" - tar -cf "$PRELUDE_INSTALL_DIR.pre-prelude.tar" "$PRELUDE_INSTALL_DIR" > /dev/null 2>&1 - PRELUDE_INSTALL_DIR_ORIG="$PRELUDE_INSTALL_DIR" - # Overwrite existing? - [ -n "$PRELUDE_INTO" ] && PRELUDE_INSTALL_DIR="$PRELUDE_INSTALL_DIR/prelude" - # Clear destination directory for git clone to work - rm -fr "$PRELUDE_INSTALL_DIR" - mkdir "$PRELUDE_INSTALL_DIR" - # Replace existing config - install_prelude - make_prelude_dirs - # Reinstate files that weren't replaced - tar --skip-old-files -xf "$PRELUDE_INSTALL_DIR_ORIG.pre-prelude.tar" "$PRELUDE_INSTALL_DIR" > /dev/null 2>&1 - [ -n "$PRELUDE_INTO" ] && cp "$PRELUDE_INSTALL_DIR/sample/prelude-modules.el" "$PRELUDE_INSTALL_DIR" -elif [ -e "$PRELUDE_INSTALL_DIR" ] -then - # File exist but not a regular file or directory - # WTF NOW? - printf "$BRED $PRELUDE_INSTALL_DIR exist but isn't a file or directory.\n" - printf "$BRED please remove this file or install prelude in a different directory" - printf "$BRED (-d flag)\n$RESET" - exit 1 -else - # Nothing yet so just install prelude - install_prelude - make_prelude_dirs - cp "$PRELUDE_INSTALL_DIR/sample/prelude-modules.el" "$PRELUDE_INSTALL_DIR" -fi - -if [ -z "$PRELUDE_SKIP_BC" ]; -then - if which emacs > /dev/null 2>&1 - then - printf " Bytecompiling Prelude.\n" - if [ x$PRELUDE_VERBOSE != x ] - then - emacs -batch -f batch-byte-compile "$PRELUDE_INSTALL_DIR/core"/*.el - else - emacs -batch -f batch-byte-compile "$PRELUDE_INSTALL_DIR/core"/*.el > /dev/null 2>&1 - fi - else - printf "$YELLOW Emacs not found.$RESET Skipping bytecompilation.\n" - fi -else - printf "Skipping bytecompilation.\n" -fi - -printf "\n" -printf "$BBLUE ____ _ _ \n" -printf "$BBLUE | _ \ _ __ ___| |_ _ __| | ___ \n" -printf "$BBLUE | |_) | __/ _ \ | | | |/ _ |/ _ \ \n" -printf "$BBLUE | __/| | | __/ | |_| | (_| | __/ \n" -printf "$BBLUE |_| |_| \___|_|\__,_|\__,_|\___| \n\n" -printf "$GREEN ... is now installed and ready to do thy bidding, Master $USER!$RESET\n" -printf "$GREEN Don't forget to adjust the modules you want to use in $PRELUDE_INSTALL_DIR/sample/prelude-modules.el!$RESET\n" diff --git a/emacs/.emacs.d/vendor/.gitkeep b/emacs/.emacs.d/vendor/.gitkeep deleted file mode 100644 index e69de29..0000000