summaryrefslogtreecommitdiff
path: root/.emacs.d/elpa
diff options
context:
space:
mode:
authorSteve Lee <me@xiangyangli.com>2017-12-13 03:56:31 +0800
committerSteve Lee <me@xiangyangli.com>2017-12-13 03:56:31 +0800
commit1c64974a87c4fe531d7e1685a42f78ae1709681d (patch)
tree1785632746d146d615a7988a0ff6ab818dc6582a /.emacs.d/elpa
parent60195d5fa0ff32414c2f9421b193542a25e7af6c (diff)
downloaddotfiles-1c64974a87c4fe531d7e1685a42f78ae1709681d.tar.xz
dotfiles-1c64974a87c4fe531d7e1685a42f78ae1709681d.zip
new add
Diffstat (limited to '.emacs.d/elpa')
-rw-r--r--.emacs.d/elpa/archives/gnu/archive-contents1209
-rw-r--r--.emacs.d/elpa/archives/gnu/archive-contents.signed1
-rw-r--r--.emacs.d/elpa/archives/melpa/archive-contents2
-rw-r--r--.emacs.d/elpa/evil-20171210.501/dir18
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-autoloads.el26
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-command-window.el168
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-command-window.elcbin0 -> 7362 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-commands.el4453
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-commands.elcbin0 -> 258871 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-common.el3882
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-common.elcbin0 -> 116700 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-core.el1336
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-core.elcbin0 -> 42625 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-digraphs.el1729
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-digraphs.elcbin0 -> 30821 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-ex.el1164
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-ex.elcbin0 -> 31547 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-integration.el573
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-integration.elcbin0 -> 32825 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-jumps.el314
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-jumps.elcbin0 -> 14084 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-macros.el777
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-macros.elcbin0 -> 20654 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-maps.el559
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-maps.elcbin0 -> 22524 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-pkg.el8
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-repeat.el638
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-repeat.elcbin0 -> 17324 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-search.el1294
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-search.elcbin0 -> 40383 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-states.el905
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-states.elcbin0 -> 56971 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-types.el424
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-types.elcbin0 -> 17615 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-vars.el1862
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil-vars.elcbin0 -> 60343 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil.el146
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil.elcbin0 -> 849 bytes
-rw-r--r--.emacs.d/elpa/evil-20171210.501/evil.info1215
-rw-r--r--.emacs.d/elpa/evil-20171210.501/fdl-1.3.info484
-rw-r--r--.emacs.d/elpa/evil-20171210.501/macros.info7
-rw-r--r--.emacs.d/elpa/evil-20171210.501/version.info8
-rw-r--r--.emacs.d/elpa/evil-leader-20140606.543/evil-leader-autoloads.el42
-rw-r--r--.emacs.d/elpa/evil-leader-20140606.543/evil-leader-pkg.el2
-rw-r--r--.emacs.d/elpa/evil-leader-20140606.543/evil-leader.el213
-rw-r--r--.emacs.d/elpa/evil-leader-20140606.543/evil-leader.elcbin0 -> 7027 bytes
-rw-r--r--.emacs.d/elpa/evil-leader-readme.txt46
-rw-r--r--.emacs.d/elpa/evil-readme.txt29
-rw-r--r--.emacs.d/elpa/gnupg/pubring.kbxbin0 -> 1177 bytes
-rw-r--r--.emacs.d/elpa/gnupg/pubring.kbx~bin0 -> 32 bytes
-rw-r--r--.emacs.d/elpa/gnupg/trustdb.gpgbin0 -> 1200 bytes
-rw-r--r--.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-autoloads.el50
-rw-r--r--.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-pkg.el2
-rw-r--r--.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.el349
-rw-r--r--.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.elcbin0 -> 7358 bytes
-rw-r--r--.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-autoloads.el19
-rw-r--r--.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-pkg.el2
-rw-r--r--.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.el87
-rw-r--r--.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.elcbin0 -> 2045 bytes
-rw-r--r--.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el59
-rw-r--r--.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el2
-rw-r--r--.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el4433
-rw-r--r--.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elcbin0 -> 123766 bytes
63 files changed, 28537 insertions, 0 deletions
diff --git a/.emacs.d/elpa/archives/gnu/archive-contents b/.emacs.d/elpa/archives/gnu/archive-contents
new file mode 100644
index 0000000..ff91429
--- /dev/null
+++ b/.emacs.d/elpa/archives/gnu/archive-contents
@@ -0,0 +1,1209 @@
+(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 71)
+ ((cl-lib
+ (0 5)))
+ "Package for chess tournaments administration" single
+ ((:url . "http://elpa.gnu.org/packages/arbitools.html")
+ (:keywords))])
+ (ascii-art-to-unicode .
+ [(1 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 .
+ [(11 92 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"))])
+ (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 8)
+ ((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 .
+ [(20171211)
+ nil "Outline-based notes management and organizer" tar nil])
+ (org-edna .
+ [(1 0 -3 1)
+ ((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 3))
+ (loc-changes
+ (1 2))
+ (test-simple
+ (1 3 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 7)
+ ((emacs
+ (24))
+ (cl-lib
+ (0 5)))
+ "Major mode for editing (Standard) ML" single
+ ((:url . "http://elpa.gnu.org/packages/sml-mode.html")
+ (:keywords "sml"))])
+ (soap-client .
+ [(3 1 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)
+ 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.d/elpa/archives/gnu/archive-contents.signed b/.emacs.d/elpa/archives/gnu/archive-contents.signed
new file mode 100644
index 0000000..8c87603
--- /dev/null
+++ b/.emacs.d/elpa/archives/gnu/archive-contents.signed
@@ -0,0 +1 @@
+Good signature from 474F05837FBDEF9B GNU ELPA Signing Agent <elpasign@elpa.gnu.org> (trust undefined) created at 2017-12-12T18:10:03+0800 using DSA \ No newline at end of file
diff --git a/.emacs.d/elpa/archives/melpa/archive-contents b/.emacs.d/elpa/archives/melpa/archive-contents
new file mode 100644
index 0000000..c090836
--- /dev/null
+++ b/.emacs.d/elpa/archives/melpa/archive-contents
@@ -0,0 +1,2 @@
+
+(1 (zzz-to-char . [(20170519 335) ((emacs (24 4)) (cl-lib (0 5)) (avy (0 3 0))) "Fancy version of `zap-to-char' command" single ((:commit . "96dfe16a990474267cd290498cf9ac6dd6b3e7c0") (: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 . [(20171128 610) ((all-the-icons (2 0 0)) (magit (2 8 0)) (flycheck (29))) "A dark, medium contrast theme for Emacs" single ((:commit . "37b19b9adf633afd4adf88826e9618e5b1f09461") (: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 . [(20171109 926) nil "A low contrast color theme for Emacs." single ((:commit . "613f4c69513c7ffe7cb00a6c477cd5e8e6378d40") (: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 . [(20171030 502) 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 . [(20171127 423) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:commit . "72d3292f7a5df67502ae990278642f56164e1463") (:keywords "snippets"))]) (yasnippet . [(20170923 1646) ((cl-lib (0 5))) "Yet another snippet extension for Emacs." tar ((:commit . "4ab9cb5bac683112852f58b26557a7dc283b717b") (: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 . [(20170519 115) nil "(automatically) format python buffers using YAPF." single ((:commit . "492eb038b35f49b1012fb843d880bccc40f2260b") (: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 . [(20170607 819) ((emacs (24))) "Paste snippets from an org-mode file" single ((:commit . "70e755fcf58e37092de2c335355eab93d5f1fb44") (: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 . "8fa267ae5cf3d04adb9e4ea104acc5b307bf7f0a") (: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 . [(20171204 1819) ((emacs (24 1))) "ergonomic modal keybinding minor mode." single ((:commit . "1f25c0df7d74a05ef93e46fbcc594d91cc07ec52") (: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 . [(20171127 635) ((emacs (24 4)) (async (1 9))) "Use the Emacsclient as $EDITOR" tar ((:commit . "73d3d1ac1470001e184a5ead88f770eeb71a5461") (: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 . "b05d584a4b3e0db168c3b920ce4a270b3908d842") (: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 . [(20171207 1431) ((emacs (24 4))) "Display available keybindings in popup" single ((:commit . "78a29434789c7e7af7b3cf10a548d6247a69d3a9") (: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 . [(20171210 2030) nil "an Emacs interface to w3m" tar ((:commit . "33f17ec647363ff0f8c6b9c800f9cfdd32417f79") (: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 . [(20171029 1905) ((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 . "a34f8a14fe6a680bb18cfa4519f7984d8071a4e3") (:keywords "languages"))]) (vue-html-mode . [(20170928 1057) nil "Major mode for editing Vue.js templates" single ((:commit . "9218c61ff1ab2bdc6a6711d21ad760198d3511a8") (: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 . [(20170730 2206) ((emacs (24 4)) (cl-lib (0 5)) (f (0 18 0))) "Fold text like in Vim" single ((:commit . "5e2875c18e2d8ef27f594e0ea1ca15a2f759be42") (: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 . [(20171210 2136) ((emacs (24 3)) (bind-key (2 4))) "A configuration macro for simplifying your .emacs" tar ((:commit . "33e9a4b74042e46161bff70e19b87317b1781fc5") (: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"))]) (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 . [(20170519 51) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:commit . "bf6e72d76c0f3a68d7cd53c6580e92aa15d28dc5") (: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 . [(20171205 529) nil "Major mode for editing typescript" single ((:commit . "257326695531eb3320403a8624b7179b71fd1103") (: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 . [(20170312 735) nil "Major mode for Twitter" single ((:commit . "63c96fb029033b1a300b90aa922e167c7c405bcb") (: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 . [(20171210 1526) ((evil (1 2 12)) (treemacs (0))) "Evil mode integration for treemacs" single ((:commit . "bca3ee8cea8ea56a25f81b0f88d6747bdeaa7722") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treemacs . [(20171211 1322) ((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 . "142465b893b3c2b1bbf8cbc171900e47b5f08572") (: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 . [(20171209 905) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" single ((:commit . "7ba791404541c5cf7b063bbfe390ee7384dd2bdd") (: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 . [(20171130 2146) ((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 . "78e67f7ecef4804cfd1b7c241ee2de8560600f4e") (: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 . [(20171211 421) ((emacs (24 3))) "Keep track of a buffer's total number of lines" single ((:commit . "eb4d5406633ba891fc3122087b8969429ebc2c00") (: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 . [(20171211 1107) ((dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (typescript-mode (0 1)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "5fb082c571f1f5d2a6568977c9ce11ab4053e518") (: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 . [(20171204 1316) ((emacs (24 1))) "A major mode for Tickscript files" single ((:commit . "4f8635c6c5165cebf0a57abb9d86aff3a9f9dc1c") (: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 . "8101f00b0966deebd36a6ba658aa59d718453345") (: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 . [(20161130 1440) nil "Sunrise/Sunset Theme Changer for Emacs" single ((:commit . "60e3dd7cbd237225fef34179168006501a27b06b") (: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"))]) (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 . [(20171126 2321) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang." tar ((:commit . "e4e55cf2646c0479262db013b15b6831dd2069fa"))]) (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 . [(20171006 1352) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:commit . "22f024fe8f433af7b6a6b99520cea1e766894fe5") (: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 . [(20171120 1205) ((cl-lib (0 5))) "functions to manage system packages" single ((:commit . "1ec26d1d32a95de6f201571d85f4f12b9975c580") (: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 . [(20171209 810) ((emacs (24)) (cl-lib (0 5))) "Insert closing delimiter" single ((:commit . "096f068a338278b1603b7291227332a4e7690d76") (: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 . [(20170521 1832) ((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 . "8f1e3346286cfa5a5299ef192cc5aca3f37a7745") (: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 . [(20171206 1251) ((emacs (24 1)) (ivy (0 9 0))) "Isearch with an overview. Oh, man!" single ((:commit . "c1015256ac1d3aca24b614f01ca723c8af46e9c8") (: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 . [(20171202 2314) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language." tar ((:commit . "18c3dc47dfece59640ad501266f2e47b918f2a14") (: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 . [(20171016 1420) ((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 . "345e00569333095eb24e61239a80b0f0c77b2d11") (: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 . [(20171117 1731) nil "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" single ((:commit . "e644c8bf2a5e36ddadcfe4de657588c00fd368dd") (: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"))]) (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 . [(20161230 815) ((cl-lib (0 3))) "Practice touch and speed typing" single ((:commit . "9940383d94688e7f130b01f9872182ab59edf00f") (: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 . [(20171201 640) nil "Color theme with a dark and light versions" tar ((:commit . "5df16efbf153d0abef8a6aea971926a4108754d8") (: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 . [(20170126 353) ((emacs (24 3)) (dash (2 12 1)) (dash-functional (1 2 0)) (request (0 2 0))) "Library to interact with sourcekittendaemon" single ((:commit . "8ba62ac25bf533b7f148f333bcb5c1db799f749b") (: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 . [(20171113 1058) nil "Major mode for ethereum's solidity language" single ((:commit . "b8ddfd683c3335805f0a4788244bf0d224ffc6ae") (:keywords "languages"))]) (solarized-theme . [(20171114 1506) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 6 0))) "The Solarized color theme, ported to Emacs." tar ((:commit . "642b2afa38cb59b9e940e5082614e36c6e6a94a3"))]) (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 . [(20160706 1522) nil "View SMBC from Emacs" single ((:commit . "c377b806118d82140197d9cb1095548477e00497") (: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 . [(20171210 1637) ((emacs (25 1)) (dumb-jump (0 5 1))) "Smart go to definition." tar ((:commit . "2864ff3156797f3b9693287ffa8d2aefd2619455") (: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 . [(20171111 1604) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:commit . "83c88318bca48b1269924cd5c76b9777ecf84f11") (: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 . [(20161229 743) ((slime (2 13)) (company (0 9 0))) "slime completion backend for company mode" single ((:commit . "6c244690c80387a32b0cb984843e00c8b75ad6bb") (:keywords "convenience" "lisp" "abbrev"))]) (slime . [(20171207 1712) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:commit . "cdb7e0caea98156d4be00147c8dc967522c1a682") (: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 . [(20171210 531) ((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 . "2af2d64f81251d08c845f8af435c7cd31d4debf4") (: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 . [(20171206 128) ((emacs (24)) (cl-lib (0 5))) "Insert paired delimiter, wrap" single ((:commit . "d231218ee2f4ef47683ddc3e9de22e84c3489582") (: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 . [(20161007 1913) ((emacs (24 3)) (anaphora (1 0 0))) "analyze source code based on font-lock text-properties" single ((:commit . "431206e9c2b88cbab9cfe9ebf3f6cb73f5e6740f") (: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 . [(20171108 910) ((emacs (24 4))) "\"Extras\" for the (comint-mode) shell" single ((:commit . "aa2fda2419b6e2540f1e6eb3789b6a247c319050") (: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 . [(20171018 131) nil "interfacing with web newspapers" tar ((:commit . "2666d95df942f23e7837f27206b8352701fa22dd") (: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 . [(20171108 916) ((emacs (24))) "Major mode for shader" single ((:commit . "29118fc483bd6ad3fa42cb80867fae9dbd613fff") (: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 . [(20170320 1311) ((emacs (24 3))) "Low-contrast color scheme based on Seoul Colors." single ((:commit . "8afaf6aa2c63a003e2899e3e5ba8be85f6fdd350") (:url . "http://github.com/anandpiyer/seoul256-emacs") (:keywords "theme"))]) (sentence-navigation . [(20160830 1840) ((ample-regexps (0 1)) (cl-lib (0 5)) (emacs (24 4))) "Commands to navigate one-spaced sentences." single ((:commit . "f9aedbfc2b8d7957f427dac87558948c80582429") (: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 . [(20170828 945) ((emacs (24 4)) (org (9 0)) (alert (1 2)) (s (1 11 0)) (f (0 19 0))) "A personal assistant based on org-mode" tar ((:commit . "1cd32d957864be1ba5c44a3f505f662832169a28") (: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 . [(20170219 2003) nil "A major mode for editing OpenSCAD code" single ((:commit . "4b5e9f5b1ab464321ad616e3940a97c2c194d334") (: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 . [(20170217 1021) ((emacs (24 4))) "Roll your own modal mode" single ((:commit . "f6073b56c43a8bc4fc01eb27faba3335d556606a") (: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 . [(20171205 2311) nil "A front-end for rtags" single ((:commit . "324f256acfdac2582c684e757078b1ca73ba28ec") (: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 . [(20160618 315) ((emacs (24 4)) (restclient (0))) "Run tests with restclient.el" single ((:commit . "a21e41b905b423e762eeb4da3a236c8b1aea8c49") (: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 . [(20171128 146) ((emacs (25 1)) (markdown-mode (2 0))) "Major mode for the remark slideshow tool" tar ((:commit . "01a0952e1ebed01cef3904e0eac00c6b34cea1ef") (: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 . [(20171204 757) ((emacs (24 3))) "Major mode for editing RedPRL proofs and interacting with RedPRL" single ((:commit . "7cbf9cd20eb2b4d5b130d25be9bc63aa5837c57c") (: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 . [(20171211 902) ((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 . "4babac38fea7af83832694932637de23365206ab") (:url . "http://github.com/realgud/realgud/") (:keywords "gdb" "python" "perl" "go" "bash" "nodejs" "zsh" "bashdb" "zshdb" "remake" "make" "trepan" "perldb"))]) (real-auto-save . [(20170918 730) nil "Automatically save your all your buffers/files at regular intervals." single ((:commit . "780d6c1c219e1f1efde1159a99af97b1c54c005d"))]) (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 . [(20171005 1106) nil "Python virtual environment interface" single ((:commit . "9f528449dfc35516647118689a2104603f23b49c") (:url . "http://github.com/jorgenschaefer/pyvenv") (:keywords "python" "virtualenv" "tools"))]) (pythonic . [(20160221 1123) ((emacs (24)) (cl-lib (0 5)) (dash (2 11)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:commit . "87475def246b84339f464e80c76c7e7fcc2e780a") (: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 <wavexx@thregr.org>"))]) (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 . [(20171210 807) nil "Python major mode" tar ((:commit . "97bc4e91d9ef7fd92f5d28dd881c4066a3f10869"))]) (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 . "642577760a2afb355ccfb1f93e21a5bd1e37a4ed") (: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 . [(20171211 18) ((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 . "2bd8075594d0c5e0930c05dd11c6141967bbc2eb") (: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 . "714e322319ad7a8f5f2a3691aa431537b8a1b26c") (: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 . [(20170928 1007) ((emacs (24 1)) (pkg-info (0 4))) "Major mode for Puppet manifests" single ((:commit . "e04f041386ebfe29fc67c3407e85b577b820df4f") (: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 . [(20171122 347) ((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 . "633b07b238aff51dc4b95a75c67910a18ba28da1") (: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 . "31c54d1289f2ae44158eff631526762366ba1707") (: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 . [(20170612 1011) ((projectile (0 14 0)) (alert (1 2))) "automatically fetch git repositories" single ((:commit . "51b40134000a2411c6342e865e63f74c950a9310") (: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 . [(20171126 6) ((emacs (24 3)) (pkg-info (0 4))) "Manage and navigate projects in Emacs easily" single ((:commit . "184d3451c9258cfbbfa2b26a07c7daeee2e9a605") (: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 . [(20170406 1953) ((emacs (24))) "A high contrast color theme for Emacs." single ((:commit . "7ce96272a514caa8598aa3c7227ade8a21e20daa") (:url . "https://github.com/prassee/prassee-emacs-theme") (:keywords "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 . [(20170925 2301) ((emacs (24 3)) (alert (1 2))) "Simple and cool pomodoro timer" tar ((:commit . "16bed77ff933cb5f8430b6eacf27509631d22072") (: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 . "981c523ddbd1462970335a1069573ca3bdd3df5e") (: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 . [(20170529 2212) nil "A color theme for Emacs based on Plan9" single ((:commit . "cdc50195f6579e6c3e6e8060142ce25b609f7949") (: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 . [(20171204 23) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing PHP code" tar ((:commit . "ad7d1092e1d66602482c5b54ed0609c6171dcae1") (:url . "https://github.com/ejmr/php-mode"))]) (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 . [(20171014 111) nil "windows/buffers sets shared among frames + save/load." single ((:commit . "ccf87da2c230c3a91e627105b0f034a954e6842a") (:url . "https://github.com/Bad-ptr/persp-mode.el") (:keywords "perspectives" "session" "workspace" "persistence" "windows" "buffers" "convenience"))]) (persp-fr . [(20170908 44) ((emacs (25 0)) (persp-mode (2 9 6))) "In persp-mode, show perspective list in the GUI window title" single ((:commit . "4d2d1a75019f520742da79f1aeed9c4a960677e0") (: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 . [(20150923 13) nil "PC style quick buffer switcher" single ((:commit . "a76120bca9821c355069f135b4e6978351b66bc2") (: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 . "7252e8b3cf829e908179913daad16ff2b8bdefdd") (: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 . [(20170924 1231) ((emacs (24)) (hexrgb (0))) "A minimal Emacs colour theme." single ((:commit . "02829f582d03c149d0aace9a0bdf2bd405b2e4a2") (: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 . [(20171204 1441) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:commit . "2b2c5678b3bea84a28e90bf1b1c05aee191df88a") (: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 . [(20170927 1048) ((emacs (24 3)) (lispy (0 26 0)) (worf (0 1 0)) (hydra (0 13 4))) "Simple and fast flashcards." single ((:commit . "c840a8f941940bb8e694c635995566faee995c7b") (: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 . [(20161228 850) ((cl-lib (0 5)) (s (1 9 0))) "Mediawiki Back-End for Org Export Engine" single ((:commit . "9e13392fe88817564f46a7a9f1eadebf54a2c346") (: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 . [(20171208 816) ((emacs (24 4)) (org (9 0))) "Hugo Markdown Back-End for Org Export Engine" tar ((:commit . "054c0b55990c0239096feb35f1c3fac242f01414") (: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 . "cf2a397971f82c87dcfbe3400e3e7c2de79fa68e") (: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 . [(20170129 805) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "Flexible text folding" tar ((:commit . "5630536d04613476e13b413fe05fd0bbff4107ca") (: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 . [(20150503 114) ((org (8 1)) (epic (0 2)) (org-mac-link (1 2))) "more functionality to org-mode." tar ((:commit . "1274652d527cb6afe45d1acb79f41be5a2886ee4") (: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 . [(20170826 1843) ((org (8 3)) (xml-rpc (1 6 12)) (metaweblog (1 0 0)) (htmlize (1 51))) "Blog from Org mode to wordpress" tar ((:commit . "62a6400746847f246e12493271f0bb52f7465a92"))]) (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-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 . [(20160307 1029) nil "Simple repository todo management with org-mode" single ((:commit . "b164bacefcd3c55dd40cd1a9e91ffefd315b400d") (:url . "https://github.com/waymondo/org-repo-todo") (:keywords "convenience"))]) (org-ref . [(20171127 2044) ((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 . "459484e80a0c3fefbfad922b0afb97c8e0d93ce2") (: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 . [(20171208 400) ((emacs (24 3)) (alert (1 2))) "notify of random TODO's" single ((:commit . "905bee66cc320558c62a0cca1aee93ae016209d7") (:keywords "org" "todo" "notification"))]) (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 . [(20161130 1053) ((org (6 1)) (pdf-tools (0 40))) "Support for links to documents in pdfview mode" single ((:commit . "9de96eef6f187a10cd910e3bc3eb274d38856819") (: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-notebook . [(20170321 2152) ((emacs (24)) (org (8)) (cl-lib (0 5))) "Ease the use of org-mode as a notebook" single ((:commit . "d90c4aeca2442161e6dd89de175561af85aace03") (: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 . [(20171101 506) ((emacs (24 3))) "load most recently used clocks into history" single ((:commit . "9af184d3c8a15432516113be481f6882ef67cb3e") (: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 . [(20171126 1833) ((emacs (24 5)) (cl-lib (0 5)) (request (0 2 0))) "Syncing between Jira and Org-mode." tar ((:commit . "d125ade5069e0840e204142ca3d4405cac2593f7") (: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 . [(20171203 210) ((cl-lib (0 5))) "Visually summarize progress in org files" single ((:commit . "716a557f9f0dcb8e79fcc5775ec1f6f43d338a11") (: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 . [(20171210 1402) ((emacs (25)) (org (9))) "Org-mode concept mapping" single ((:commit . "7caed979ab4d63a6bf17b5b27c771e62577c32d7") (: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 . [(20171119 1236) ((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 . "b0c61e91d1b600875ad2eae06fe72a179a3028b6") (: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 . [(20171017 2206) ((org (8))) "Execute PHP within org-mode blocks." single ((:commit . "c281c1e17f0fd7de4adb6c3e6029dc2bd76beca1") (: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 . "b70f3d822c707cb02333fcb739ba4874614cad2a") (: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-cfengine3 . [(20170915 634) nil "Org Babel functions for CFEngine 3" single ((:commit . "f38f87256efcb2b02f5c7042900087be941c1ddc") (: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 . "6099e94538083e035a4152335f93eae5b13c8d3f") (: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 . [(20170513 1501) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (dash-functional (2 4 0))) "Manage Node versions within Emacs" single ((:commit . "61590e7fdeb19b1d866d26e48aef1af4767e5709") (: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 . [(20171204 1342) ((undo-tree (0 6 5)) (ace-window (0)) (avy (0)) (which-key (0)) (transpose-frame (0))) "Modern Emacs Prompts Based Keybinding." tar ((:commit . "4b166359ae5f1b9d6ffac326e7f039fce0d5ec1c"))]) (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 . [(20171208 1819) nil "run notmuch within emacs" tar ((:commit . "040c3236afcf95bead0324a48c2e0b9cd7934993") (:url . "https://notmuchmail.org/"))]) (nose . [(20140520 948) nil "Easy Python test running in Emacs" single ((:keywords "nose" "python" "testing"))]) (nord-theme . [(20171005 1039) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" single ((:commit . "be32879416bbed1d6524f7c30ac53fbfa5a0e024") (: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 . [(20171201 219) ((cl-lib (0 5))) "help keeping ~/.emacs.d clean" single ((:commit . "314a16bc917816af89462c6823ac3bd86b1bc962") (:url . "https://github.com/emacscollective/no-littering"))]) (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 . [(20171120 1300) nil "An awesome dark theme" single ((:commit . "a955a210f147694b257f8e79aa0a4ad23ff4fd44") (: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 . "847d1343e63c0a2d25a43f8432c4d750e4e9e7d0") (:keywords "nemerle" "mode" "languages"))]) (neato-graph-bar . [(20170731 2341) ((emacs (24 3))) "Neat-o graph bars CPU/memory etc." single ((:commit . "3ebd5168c9b8cc56cc4163206c03864b9b802f27") (: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 . [(20171119 1230) nil "Find files, compile, search, and switch between" single ((:url . "https://bitbucket.org/ellisvelo/multi-project/overview") (:keywords "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 . [(20170901 1027) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 1))) "Desktop notification for mu4e" single ((:commit . "ef90cd0f0fb6c841f326db5cad276567eb5f96b5") (: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 . [(20171203 921) ((emacs (24)) (cl-lib (0 5)) (cedet (1 0)) (ac-clang (1 2 0))) "Microsoft Visual C/C++ mode" tar ((:commit . "093f6d4eecfbfc67650644ebb637a4f1c31c08fa") (: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 . [(20160102 1506) nil "minor mode to input Japanese with Mozc" single ((:commit . "4767ce2f2b6a63f1f139daea6e98bc7a564d5e4e") (: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 . "7a572c0d87098336777efde5abdeaf2bcd11b95e"))]) (move-text . [(20170908 2030) nil "Move current line or region with M-up or M-down." single ((:commit . "bdaf3e3a0d33cd528cad1d10facbdf0635232e4d") (: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 . [(20170623 103) nil "Yet another client for nREPL" single ((:commit . "2bb59ac84e030f7047e7443e2df25185b397a5d3") (:url . "http://www.github.com/sanel/monroe") (:keywords "languages" "clojure" "nrepl" "lisp"))]) (monokai-theme . [(20171013 236) nil "A fruity color theme for Emacs." single ((:commit . "019e07947426f0192fc3458f3f72c19031b607de") (: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-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 . [(20170519 32) ((emacs (24 4))) "Easily introduce native modal editing of your own design" single ((:commit . "3cb3fdd20def5888e232863e13bd9ad68ea85a01") (: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 . [(20171203 810) ((js2-mode (20150909)) (f (0 18))) "Run Mocha or Jasmine tests" single ((:commit . "8c93902ec3498024e44b1307dfd22285cfab907b") (: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 . [(20170519 4) ((emacs (24 1)) (cl-lib (0 3))) "Missing macro tools for Emacs Lisp" single ((:commit . "5cc5d1ee3efe675fa49d62fe0ae6b483d7ad9392") (:url . "https://github.com/mrkkrp/mmt") (:keywords "macro" "emacs-lisp"))]) (mmm-mode . [(20171004 336) nil "Allow Multiple Major Modes in a buffer" tar ((:commit . "7661968fa6974996e58dfa28da33bca0cbde777d") (: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 . [(20170723 955) ((emacs (24 3))) "Use a variable pitch, keeping fixed pitch where it's sensible" single ((:commit . "121ab33af7973292bcfb081be2db4664a972d7bd") (: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 . [(20170626 750) ((xml-rpc (1 6 8))) "An emacs library to access metaweblog based weblogs" tar ((:commit . "c039d1ffb618d19d160bde835fab389e9a7433a3"))]) (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 . [(20171122 626) ((emacs (24 3)) (yasnippet (0 6 1)) (company (0 9 0)) (flycheck (0 23))) "A better java development mode" tar ((:commit . "555b8b9ea8ef56dda645ea605b38501cb4222b12") (: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 . [(20171018 932) ((eieio (1 4)) (json (1 3)) (ht (2 1))) "eieio extension for automatic (un)marshalling" single ((:commit . "6a31133b25addabc5ec9c87ba959d69c5122171b") (: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 . [(20171211 2209) ((emacs (24)) (cl-lib (0 5))) "Major mode for Markdown-formatted text" single ((:commit . "e8b336cb83d06149bdea35127cd097324d0da468") (: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 . [(20171002 12) ((org (8 0)) (magit (20151028)) (github-clone (20150705)) (git (20140128))) "A tool to access repositories of premodern Chinese texts" tar ((:commit . "77647573331c602847b06b9e21de69f72cd7bad5"))]) (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 . [(20171209 835) ((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 . "c8d8af52c6d47f1fb16c76edbe6874e89f6e1939") (: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 . [(20170703 704) ((dash (2 12 1)) (magit (2 6 1))) "commit like a rockstar" single ((:commit . "a65042e3445008b55190f1258ae54bd78e12174b") (:url . "https://github.com/tarsius/magit-rockstar") (:keywords "convenience"))]) (magit-popup . [(20171121 1110) ((emacs (24 4)) (async (1 9 2)) (dash (2 13 0))) "Define prefix-infix-suffix command combos" tar ((:commit . "70e3cdd6140ebdf477f86b88ac2bd1a8de115e88") (: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 . [(20171210 1037) ((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 . "368a89a0746a9b5d1d01225617f5ebb6fbca8e64"))]) (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 . [(20170130 435) nil "a major-mode for editing Lua scripts" tar ((:commit . "652e299cb967fccca827dda381d61a9c144d97de") (: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-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 . "5acea5f921dc396ea092ee253ec01b45dee3cbfd") (: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 . [(20171210 124) ((emacs (25 1)) (flycheck (30))) "Minor mode for interacting with Language Servers" tar ((:commit . "1fe5ba15d09e9817f9e2660a6ba2587e1f72b3d5") (: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 . "6e303c84f1edd9863cacfcfacaf52f7adb64babc") (: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 . [(20171211 2204) ((emacs (24 3))) "Live Coding in Python" tar ((:commit . "0ba575b484d5bdb4c0bd0869bb21c1ca945b6a63") (: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 . [(20171204 1232) ((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 . "c0db7dfd8203deca929b6ec48978ae9b06b6887a"))]) (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 . [(20170901 2039) ((emacs (24 3))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "24b43e34dd34de23e54d7ddaa2a147efda6af03d"))]) (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 . [(20171102 754) ((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 . "c0af876c967fc969d67c467bc6767210d19c5d87") (: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 . [(20171211 1721) ((emacs (24 4))) "Latexdiff integration in Emacs" single ((:commit . "090b801760abd75e445ab570b1f6642f23f51dd2") (: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 . "5cc92b2381f9fe4f5ddfb541a085c582771a05fb"))]) (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 . [(20170518 2358) ((emacs (24 4)) (cl-lib (0 5))) "Precise control over buffer killing in Emacs" single ((:commit . "415de48695efd30163a015063873b03f4ca5b743") (: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 . [(20170311 2151) ((emacs (24 3)) (helm-core (1 9 1))) "Input kaomoji superb easily" tar ((:commit . "91ab93cc7455486182d5e7f88e03d0de44c9953e") (:url . "https://github.com/kuanyui/kaomoji.el") (:keywords "tools" "fun"))]) (kaolin-themes . [(20171212 32) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:commit . "5c09046676cfa34bae06c43c1cf4d1a1781e37f4") (: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 . [(20170402 955) ((emacs (24 1)) (cl-lib (0 5))) "JSON-RPC library" single ((:commit . "e77a62012e4d6c946666eed3a17454d5c6f83367") (: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 . [(20170606 34) ((emacs (24 3)) (hierarchy (0 6 0))) "View and navigate JSON structures" single ((:commit . "d005a253fa73ed2c6c0b3ebbc7dc41be9270c304"))]) (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 . [(20171211 607) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:commit . "33c71692aa7fb84e11bdca6e7ff1893578a0c4a0") (: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 . [(20171031 1819) ((emacs (24))) "Minor mode for auto-formatting JavaScript code" single ((:commit . "5ba81cd7cdd09d41a8e9c9d53d370497bf64edbd") (: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 . [(20171108 1431) ((emacs (24))) "Jbeans theme for GNU Emacs 24 (deftheme)" single ((:commit . "9a5095d65de8355c88b102831b81a525d507612a") (: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 . [(20171103 845) nil "Major mode for editing J programs" tar ((:commit . "6f7f598eaa1a32ccf06b707631f2d539a2315fba") (: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 . [(20171202 1351) ((emacs (25 1)) (ivy (0 10 0))) "Ivy interface for xref results" single ((:commit . "43b7c35be871b04635864334ffd2b315401150d5") (: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 . "324f256acfdac2582c684e757078b1ca73ba28ec") (:url . "http://rtags.net"))]) (ivy-rich . [(20171106 2334) ((emacs (24 4)) (ivy (0 8 0))) "More friendly display transformer for ivy." single ((:commit . "565ea4128741f68727df9d54dee40c9a89b63885") (: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 . "78ec5632e4f4fd005014bd762c4a5ccdeabbd33d") (: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 . [(20171022 220) ((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 . "54de08577f9c19354cc303ee52836263aef486fb"))]) (ivy . [(20171210 448) ((emacs (24 1))) "Incremental Vertical completYon" tar ((:commit . "d4021393047a9abd49e356c77542dca4eade2f48") (: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 . [(20170726 1254) nil "(automatically) format python buffers using isort." single ((:commit . "28699f29cfc0d9d78b636d0ecadcf9139173bc6f") (: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 . [(20171110 1151) ((cl-lib (0 5)) (json (1 2))) "C/C++ minor mode powered by libclang" tar ((:commit . "1d865c71fefeab952a2f61184d7f77371706954a") (: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"))]) (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 . [(20171206 212) ((flycheck (0 25)) (company (0 8)) (emacs (24 4)) (haskell-mode (13 0))) "Complete development mode for Haskell" single ((:commit . "44b2c383b09ffead3e46553409334f0f62e55749") (: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 . [(20171106 640) nil "port of vim's inkpot theme" single ((:commit . "046d0bb361500e14c718b00930d31c73890929cb") (: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 . [(20171120 2310) ((emacs (24 4)) (clojure-mode (5 6))) "Run an external Clojure process in an Emacs buffer" single ((:commit . "12583f4aba2f4aea3879c0ca5ec1d002c0578371") (: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 . [(20171206 1512) ((emacs (25)) (seq (2 16)) (js2-mode (20140114)) (company (0 9 0)) (websocket (1 6))) "JavaScript Awesome Development Environment" tar ((:commit . "dea36d9e42906b231e89f27d021bb9e36c0a61cc") (: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 . [(20171103 750) ((s (0)) (hydra (0)) (yafolding (0))) "Indent, navigate (and more) by blocks of indentation: yaml, python etc." tar ((:commit . "6e8e9a8cf9efe4a8624e52f45cb5faa5fe8ec996") (:url . "https://gitlab.com/emacs-stuff/indent-tools/") (:keywords "indentation" "movements" "navigation" "kill" "fold" "yaml" "python"))]) (indent-info . [(20171209 1503) nil "show indentation information in status bar" single ((:commit . "2a9cf58cbdf8219d5b1092384280e3a564aefa33") (: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 . [(20171205 1236) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:commit . "fec1632fc84ea0f4e516cdfe2ded6ab9d1cd7697") (: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 . [(20171201 1458) ((projectile (0 11 0))) "Group ibuffer's list by projectile root" single ((:commit . "c18ac540ee46cb759fc5df18747f6e8d23563011") (: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"))]) (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 <script src=\"..\"> for popular JavaScript libraries" single ((:commit . "66460f8ab1b24656e6f3ce5bd50cff6a81be8422") (:url . "http://github.com/rejeep/html-script-src") (:keywords "tools" "convenience"))]) (html-check-frag . [(20160130 2135) ((emacs (24 3))) "Check html-fragments" single ((:commit . "feb89765eafd69dfcf07afeebded8985dc456e7c") (:keywords "html"))]) (ht . [(20171112 1405) ((dash (2 12 0))) "The missing hash table library for Emacs" single ((:commit . "ce65ce5d535cc86698ad6012f60fb56d7d80d8db") (:keywords "hash table" "hash map" "hash"))]) (howm . [(20160928 439) ((cl-lib (0 5))) "Wiki-like note-taking tool" tar ((:commit . "e0237b07f60011a1926b36848c73340ae46cdb3e") (:url . "http://howm.osdn.jp"))]) (howdoi . [(20150203 1643) nil "Instant coding answers via Emacs." tar ((:commit . "5fbf7069ee160c597a328e5ce5fb32920e1ca88f"))]) (how-many-lines-in-project . [(20140806 2142) nil "Calculate how many lines are there in your project." single ((:commit . "8a37ef885d004fe2ce231bfe05ed4867c6192d9b") (:keywords "project" "convenience"))]) (hound . [(20170627 1259) ((request (0 2 0)) (cl-lib (0 5))) "Display hound search results in a compilation window" single ((:commit . "0c5a250ef82870dca737a429b6e9b9db93874ed3"))]) (hookify . [(20141216 1409) ((s (1 9 0)) (dash (1 5 0))) "Interactive commands to create temporary hooks" single ((:commit . "21baae7393b07257de5796402fde0ca72fb00d77") (:url . "https://github.com/Silex/hookify") (:keywords "hook" "convenience"))]) (homebrew-mode . [(20160615 620) ((emacs (24 4)) (inf-ruby (2 4 0)) (dash (1 2 0))) "minor mode for editing Homebrew formulae" single ((:commit . "d422307aee2f897d1a92e3b959c3214bc54cbe38") (:url . "https://github.com/dunn/homebrew-mode") (:keywords "homebrew" "brew" "ruby"))]) (holiday-pascha-etc . [(20160821 1758) nil "Eastern Christian analog to holiday-easter-etc" single ((:commit . "eb198656f63cb8679fb0e3a8248782df071a0f3c") (:url . "http://github.com/hexmode/holiday-pascha-etc"))]) (hoa-pp-mode . [(20151027 36) ((emacs (24 1)) (names (20150723 0))) "Major mode for Hoa PP grammars" single ((:commit . "925b79930a3f4377b0fb2a36b3c6d5566d4b9a8e") (:url . "https://github.com/hoaproject/Contributions-Emacs-Pp") (:keywords "php" "hoa"))]) (hoa-mode . [(20151203 850) nil "Major mode for the Hanoi Omega Automata format" single ((:commit . "3c608e15b655d2375c5f81323ac561c7848dc029") (:url . "https://gitlab.lrde.epita.fr/spot/emacs-modes") (:keywords "major-mode" "automata" "convenience"))]) (hlinum . [(20170507 2227) ((cl-lib (0 2))) "Extension for linum.el to highlight current line number" single ((:commit . "2b4a08db4ff361ac8eeee1ed94eca7e26c614595") (:url . "https://github.com/tom-tan/hlinum-mode/") (:keywords "convenience" "extensions"))]) (hlint-refactor . [(20170817 2148) nil "Apply HLint suggestions" single ((:commit . "92c69aa01c65968e86c15db087bb1ea785e4736c") (:url . "https://github.com/mpickering/hlint-refactor-mode") (:keywords "haskell" "refactor"))]) (hledger-mode . [(20171201 1156) ((emacs (24 4)) (popup (0 5 3)) (async (1 9)) (htmlize (1 47))) "A mode for writing journal entries for hledger." tar ((:commit . "594ce27f898ba027cb7f326179ff7875072b03e0") (:url . "https://github.com/narendraj9/hledger-mode.git") (:keywords "data"))]) (hl-todo . [(20170621 1257) nil "highlight TODO and similar keywords" single ((:commit . "961db3116f1396dc4f903e3a59824a40e0bbb6a2") (:url . "https://github.com/tarsius/hl-todo") (:keywords "convenience"))]) (hl-spotlight . [(20170223 746) nil "Extension of hl-line.el to spotlight current few lines." single ((:url . "https://www.emacswiki.org/emacs/download/hl-spotlight.el") (:keywords "highlight" "cursor" "accessibility"))]) (hl-sexp . [(20101130 443) nil "highlight the current sexp" single ((:commit . "0606100422321c18db51ceda80f25cd7717c2e01") (:keywords "faces" "frames" "emulation"))]) (hl-sentence . [(20171018 819) nil "highlight a sentence based on customizable face" single ((:commit . "86ae38d3103bd20da5485cbdd59dfbd396c45ee4") (:url . "http://github.com/milkypostman/hl-sentence") (:keywords "highlighting"))]) (hl-line+ . [(20170621 734) nil "Extensions to hl-line.el." single ((:url . "https://www.emacswiki.org/emacs/download/hl-line%2b.el") (:keywords "highlight" "cursor" "accessibility"))]) (hl-indent . [(20170429 1404) ((emacs (24)) (cl-lib (0 5))) "Highlight irregular indentation." single ((:commit . "bdb2e0177a7c8b29af26998e688b856adc6ded93") (:url . "https://github.com/ikirill/hl-indent") (:keywords "convenience" "faces"))]) (hl-defined . [(20170223 744) nil "Highlight defined or undefined symbols in Emacs-Lisp." single ((:url . "https://www.emacswiki.org/emacs/download/hl-defined.el") (:keywords "highlight" "lisp" "functions"))]) (hl-anything . [(20160422 1008) ((emacs (24 3))) "Highlight symbols, selections, enclosing parens and more." tar ((:commit . "8696bc55a8cba408f0fc83a907a9ec529d79e558"))]) (hiwin . [(20150825 127) nil "Visible active window mode." single ((:commit . "6ee8ed051405653bd9b7332d7e9fbb591d954051") (:keywords "faces" "editing" "emulating"))]) (hive . [(20131217 712) ((sql (3 0))) "Hive SQL mode extension" single ((:commit . "11b5172e081ad8079fc78758bef6f306f82ae32b") (:keywords "sql" "hive"))]) (historyf . [(20151123 1759) nil "file history library like browser" single ((:commit . "196c058ceb092fdd56b0e4ce85b7e714d6f72224") (:url . "https://github.com/k1LoW/emacs-historyf"))]) (history . [(20160821 902) ((emacs (24 3))) "History utility for source code navigation" tar ((:commit . "5317663fb45bbd5e96d258cb0807dcc266ce67ff") (:url . "https://github.com/boyw165/history"))]) (historian . [(20170722 1714) ((emacs (24 4))) "Persistently store selected minibuffer candidates" single ((:commit . "78ec5632e4f4fd005014bd762c4a5ccdeabbd33d") (:url . "https://github.com/PythonNut/historian.el") (:keywords "convenience"))]) (hippie-namespace . [(20140508 1341) nil "Special treatment for namespace prefixes in hippie-expand" single ((:commit . "d0d0f15c67ab8bef5e9d1e29a89ecd3613a60b49") (:url . "http://github.com/rolandwalker/hippie-namespace") (:keywords "convenience" "lisp" "tools" "completion"))]) (hippie-expand-slime . [(20170722 1846) nil "Hook slime's completion into hippie-expand" single ((:commit . "39bbae94896a62854d31754debdfae71d35fec62") (:url . "https://github.com/purcell/hippie-expand-slime"))]) (hippie-exp-ext . [(20160502 1626) nil "Extension of hippie-expand" single ((:commit . "4eda13f90da51ab217d024701f4c30f91ffcb90e") (:url . "http://www.emacswiki.org/emacs/download/hippie-exp-ext.el") (:keywords "abbrev" "convenience" "completions" "hippie-expand"))]) (hindent . [(20171206 138) ((cl-lib (0 5))) "Indent haskell code using the \"hindent\" program" single ((:commit . "318df98d52429d85e8e244d60efb7072461c3e81") (:url . "https://github.com/chrisdone/hindent"))]) (himp . [(20170814 1215) ((emacs (24 3)) (vimish-fold (0 1 0))) "Automatically hide imports/documentation" single ((:commit . "140234b7f7cde03cf858c5011a2ab63e3bc802ec") (:url . "http://github.com/mkcms/himp/") (:keywords "convenience" "tools"))]) (highlight2clipboard . [(20151020 1140) ((htmlize (1 47))) "Copy text to clipboard with highlighting." tar ((:commit . "6ce58a060d9c5843ccb8c79ec2bba7858c68ac15") (:keywords "tools"))]) (highlight-unique-symbol . [(20130611 2242) ((deferred (0 3 2))) "highlight symbols which not appear in the repository" single ((:commit . "4141bf86a94e30d94d9af9c29d40b16886226e1c") (:url . "https://github.com/hitode909/emacs-highlight-unique-symbol"))]) (highlight-thing . [(20170919 704) nil "Minimalistic minor mode to highlight current thing under point." single ((:commit . "4eadd178175772fb04ae50e1199d797a6375ad4d") (:url . "https://github.com/fgeller/highlight-thing.el") (:keywords "highlight" "thing" "symbol"))]) (highlight-tail . [(20140415 1841) nil "draw a colourful \"tail\" while you write" single ((:keywords "highlight" "tail" "eye-candy" "visual-effect" "light" "color" "burn"))]) (highlight-symbol . [(20160102 1209) nil "automatic and manual symbol highlighting" single ((:commit . "7a789c779648c55b16e43278e51be5898c121b3a") (:url . "http://nschum.de/src/emacs/highlight-symbol/") (:keywords "faces" "matching"))]) (highlight-stages . [(20161212 657) nil "highlight staged (quasi-quoted) expressions" single ((:commit . "29cbc5b78261916da042ddb107420083da49b271") (:url . "http://hins11.yu-yake.com/"))]) (highlight-refontification . [(20170211 1224) nil "Visualize font-lock refontification." single ((:commit . "32632897d88c4611fadb08517ca00ef5cbc989b6") (:url . "https://github.com/Lindydancer/highlight-refontification") (:keywords "faces" "tools"))]) (highlight-quoted . [(20140916 1122) ((emacs (24))) "Highlight Lisp quotes and quoted symbols" single ((:commit . "24103478158cd19fbcfb4339a3f1fa1f054f1469") (:url . "https://github.com/Fanael/highlight-quoted"))]) (highlight-parentheses . [(20170809 1151) nil "highlight surrounding parentheses" single ((:commit . "c38885bba4f174c0a2cad3a60fe12b7cf8699aa1") (:url . "https://github.com/tsdh/highlight-parentheses.el") (:keywords "faces" "matching"))]) (highlight-operators . [(20170213 1420) nil "a face for operators in programming modes" single nil]) (highlight-numbers . [(20170905 342) ((emacs (24)) (parent-mode (2 0))) "Highlight numbers in source code" single ((:commit . "f952ecb7448c125d4ef82ee6ad136b25e640d74a") (:url . "https://github.com/Fanael/highlight-numbers"))]) (highlight-leading-spaces . [(20151216 422) ((emacs (24 4))) "Highlight leading spaces" single ((:commit . "840db19d863dd97993fd9f893f5be501627b6354") (:url . "https://github.com/mrBliss/highlight-leading-spaces"))]) (highlight-indentation . [(20170502 43) nil "Minor modes for highlighting indentation" single ((:commit . "5c7717a2224372f7113d13640515df3650388a37") (:url . "https://github.com/antonj/Highlight-Indentation-for-Emacs"))]) (highlight-indent-guides . [(20170516 1355) ((emacs (24))) "Minor mode to highlight indentation" single ((:commit . "b51744bde1287979f2d948f46501bd6ed0897f69") (:url . "https://github.com/DarthFennec/highlight-indent-guides"))]) (highlight-function-calls . [(20170907 2200) ((emacs (24 4))) "Highlight function/macro calls" single ((:commit . "f7a1eaf95fc64cc0db4d0567f9ff79ec4ae04787") (:url . "http://github.com/alphapapa/highlight-function-calls") (:keywords "faces" "highlighting"))]) (highlight-escape-sequences . [(20171117 437) nil "Highlight escape sequences" single ((:commit . "08d846a7aa748209d65fecead2b6a766c3e5cb41") (:url . "https://github.com/dgutov/highlight-escape-sequences") (:keywords "convenience"))]) (highlight-defined . [(20141225 730) ((emacs (24))) "Syntax highlighting of known Elisp symbols" single ((:commit . "243478cc204ab42d29805ed610961cbb260c1dfd") (:url . "https://github.com/Fanael/highlight-defined"))]) (highlight-context-line . [(20170319 1442) nil "Improve orientation when scrolling" single ((:commit . "716e10a0c7b703b5f1d9c6ca1481524a4d06b7b8") (:url . "https://github.com/ska2342/highlight-context-line/") (:keywords "faces" "services" "user"))]) (highlight-cl . [(20091012 1030) nil "Highlighting `cl' functions." single ((:url . "http://www.emacswiki.org/emacs/highlight-cl.el") (:keywords "faces"))]) (highlight-chars . [(20170223 740) nil "Highlight specified sets of characters, including whitespace." single ((:url . "https://www.emacswiki.org/emacs/download/highlight-chars.el") (:keywords "highlight" "whitespace" "characters" "unicode"))]) (highlight-blocks . [(20151201 815) ((emacs (24))) "Highlight the blocks point is in" single ((:commit . "9c4240a5d16008db430d1a81c76dad474d3deb0c") (:url . "https://github.com/Fanael/highlight-blocks"))]) (highlight . [(20170702 732) nil "Highlighting commands." single ((:url . "https://www.emacswiki.org/emacs/download/highlight.el") (:keywords "faces" "help" "local"))]) (hierarchy . [(20171017 1103) ((emacs (25 1))) "Library to create and display hierarchy structures" single ((:commit . "cd65d149b8910edfa5536eeda26988aabcfd511a") (:url . "https://github.com/DamienCassou/hierarchy"))]) (hideshowvis . [(20170227 1250) nil "Add markers to the fringe for regions foldable by hideshow.el" single nil]) (hideshow-org . [(20120223 1450) nil "Provides org-mode like hide and show for hideshow.el" single ((:commit . "16419e52e6cdd2f46f755144c0ab11ce00d1a626") (:keywords "c" "c++" "java" "lisp" "tools" "editing" "comments" "blocks" "hiding" "outlines" "org-mode"))]) (hide-region . [(20140201 314) nil "hide regions of text using overlays" single ((:url . "http://mathias.dahl.net/pgm/emacs/elisp/hide-region.el") (:keywords "hide" "region"))]) (hide-lines . [(20151127 1040) nil "Commands for hiding lines based on a regexp" single ((:commit . "331122bf19361130351cfe55968c2a7820329eb3") (:url . "https://github.com/vapniks/hide-lines") (:keywords "convenience"))]) (hide-comnt . [(20170223 739) nil "Hide/show comments in code." single ((:url . "https://www.emacswiki.org/emacs/download/hide-comnt.el") (:keywords "comment" "hide" "show"))]) (hi2 . [(20141005 1231) nil "indentation module for Haskell Mode" single ((:commit . "c9d199727b5cdcb9e36a972b38131ce4611fd6c8") (:url . "https://github.com/errge/hi2") (:keywords "indentation" "haskell"))]) (hgrc-mode . [(20150409 1343) nil "major mode for editing hgrc files" single ((:commit . "314e8320b82cc1ce74b1bd372f296252e7a23090") (:url . "http://github.com/omajid/hgrc-mode") (:keywords "convenience" "vc" "hg"))]) (hgignore-mode . [(20160430 1707) nil "a major mode for editing hgignore files" single ((:commit . "7aa9f3b8a9c610dbd80b952061b40194e1d9c5bd") (:url . "http://github.com/omajid/hgignore-mode") (:keywords "convenience" "vc" "hg"))]) (hfst-mode . [(20160708 502) nil "major mode for editing HFST files" single ((:commit . "ac1bb9dd92545d3e7fdc05c83996c227cc15c6b8") (:url . "http://wiki.apertium.org/wiki/Emacs") (:keywords "languages"))]) (hexrgb . [(20170304 1213) nil "Functions to manipulate colors, including RGB hex strings." single ((:url . "https://www.emacswiki.org/emacs/download/hexrgb.el") (:keywords "number" "hex" "rgb" "color" "background" "frames" "display"))]) (hexo . [(20170702 1915) ((emacs (24 3))) "Major mode & tools for Hexo" single ((:commit . "201c795ded01d96690ceadc1dd068744aceaeda8") (:url . "https://github.com/kuanyui/hexo.el") (:keywords "tools" "hexo"))]) (heroku-theme . [(20150522 1919) nil "Heroku color theme" single ((:commit . "8083643fe92ec3a1c3eb82f1b8dc2236c9c9691d") (:url . "https://github.com/jonathanchu/color-theme-heroku"))]) (heroku . [(20120629 1113) nil "Interface to Heroku apps." single ((:commit . "92af1c073b593c4def99c8777c869992aa4d0b3a") (:url . "https://github.com/technomancy/heroku.el") (:keywords "convenience" "api" "database"))]) (hemisu-theme . [(20130508 1144) nil "Hemisu for Emacs." tar ((:commit . "5c206561aa2c844ecdf3e3b672c3235e559ddd7f") (:url . "http://github/anrzejsliwa/django-theme"))]) (hemera-theme . [(20170910 603) ((emacs (24))) "Light theme" single ((:commit . "354ae3b788c11ac08e6e2fe7c86adc621e2b16fd") (:url . "https://github.com/GuidoSchmidt/emacs-hemera-theme") (:keywords "themes" "light-theme"))]) (helpful . [(20171211 1558) ((emacs (25 1)) (dash (2 12 0)) (s (1 11 0)) (elisp-refs (1 2)) (shut-up (0 3))) "a better *help* buffer" single ((:commit . "e4437e1135afdfcf87cee18e099e275d97318d17") (:url . "https://github.com/Wilfred/helpful") (:keywords "help" "lisp"))]) (help-mode+ . [(20170223 737) nil "Extensions to `help-mode.el'" single ((:url . "https://www.emacswiki.org/emacs/download/help-mode%2b.el") (:keywords "help"))]) (help-fns+ . [(20170223 733) nil "Extensions to `help-fns.el'." single ((:url . "https://www.emacswiki.org/emacs/download/help-fns%2b.el") (:keywords "help" "faces" "characters" "packages" "description"))]) (help+ . [(20170223 731) nil "Extensions to `help.el'." single ((:url . "https://www.emacswiki.org/emacs/download/help%2b.el") (:keywords "help"))]) (helm-zhihu-daily . [(20160625 445) ((helm (1 0)) (cl-lib (0 5)) (emacs (24 4))) "Helm interface for 知乎日报 (http://daily.zhihu.com)" single ((:commit . "be27dcc6be1eb97663b65581a9a5c0fc81cfaba7") (:url . "https://github.com/xuchunyang/helm-zhihu-daily"))]) (helm-z . [(20171203 1925) ((helm (1 0))) "Show z directory list with helm.el support." single ((:commit . "37212220bebea8b9c238cb1bbacd8332b7f26c03") (:url . "https://github.com/yynozk/helm-z"))]) (helm-youtube . [(20161113 1848) ((request (0 2 0)) (helm (2 3 1)) (cl-lib (0 5))) "Query YouTube and play videos in your browser" single ((:commit . "202c27fc3b54927611e9d9c764465e1b42ef7e41") (:url . "https://github.com/maximus12793/helm-youtube") (:keywords "youtube" "multimedia"))]) (helm-xref . [(20171209 346) ((emacs (25 1)) (helm (1 9 4))) "Helm interface for xref results" single ((:commit . "ad98c3f6e5404e44e7e87210b5827bef75e16a25") (:url . "https://github.com/brotzeitmacher/helm-xref"))]) (helm-xcdoc . [(20160116 218) ((helm (1 5)) (emacs (24 4))) "Search Xcode Document by docsetutil and eww with helm interface" single ((:commit . "a85612149a6d8e18ab309b3db2d222ce39c42049") (:url . "https://github.com/fujimisakari/emacs-helm-xcdoc"))]) (helm-wordnet . [(20160128 707) ((emacs (24)) (helm (1 7 0)) (cl-lib (0 5))) "Helm interface to local wordnet dictionary" single ((:commit . "a36dbc6fcb570b812870bc1e190f203e0a0042fc") (:url . "https://github.com/raghavgautam/helm-wordnet") (:keywords "dictionary" "wordnet" "emacs" "elisp" "helm"))]) (helm-w3m . [(20171102 216) ((helm (1 5)) (w3m (0 0)) (cl-lib (0 5)) (emacs (24 1))) "W3m bookmark - helm interface." single ((:commit . "8345b7e60702911f54eb6571e429c0d31878957d"))]) (helm-w32-launcher . [(20141223 1214) ((emacs (24)) (helm (1 6 5)) (cl-lib (0 5))) "Start Menu entry launcher using Helm" tar ((:commit . "3e59ad62b89dd21d334af0203d445a83eb25dc5b") (:url . "https://github.com/Fanael/helm-w32-launcher"))]) (helm-unicode . [(20160715 533) ((helm (1 9 8)) (emacs (24 4))) "Helm command for unicode characters." single ((:commit . "1ad1fcca7a83c163ae74eb72a443cfc102128e33"))]) (helm-tramp . [(20171208 2029) ((emacs (24 3)) (helm (2 0))) "Tramp helm interface for ssh, docker, vagrant" single ((:commit . "9494fc146a069b824ffaf1e00df49c074c235e15") (:url . "https://github.com/masasam/emacs-helm-tramp"))]) (helm-themes . [(20160917 2245) ((helm-core (2 0)) (emacs (24 4))) "Color theme selection with helm interface" single ((:commit . "1160af42590b0d845a55e65e1e782d9e4027fd6e") (:url . "https://github.com/syohex/emacs-helm-themes"))]) (helm-systemd . [(20160517 2333) ((emacs (24 4)) (helm (1 9 2)) (with-editor (2 5 0))) "helm's systemd interface" single ((:commit . "0892535baa405a2778be2f0f013bac768e72b1f9") (:keywords "convenience"))]) (helm-swoop . [(20170923 2127) ((helm (1 0)) (emacs (24 3))) "Efficiently hopping squeezed lines powered by helm interface" single ((:commit . "66a951700e0ef0621cc705791bdd6699488ab121") (:url . "https://github.com/ShingoFukuyama/helm-swoop") (:keywords "helm" "swoop" "inner" "buffer" "search"))]) (helm-sql-connect . [(20170319 551) ((helm (0 0 0))) "Choose a database to connect to via Helm." single ((:commit . "5aead55b6f8636140945714d8c332b287ab9ef10") (:url . "https://github.com/eric-hansen/helm-sql-connect") (:keywords "tools" "convenience" "comm"))]) (helm-spotify-plus . [(20170320 609) ((emacs (24 4)) (helm (2 0 0)) (multi (2 0 1))) "Control Spotify search and select music with Helm." single ((:commit . "847dfafbb5e5d65a44464b0ec8e2b7d88864a9aa"))]) (helm-spotify . [(20160905 1447) ((helm (0 0 0)) (multi (2 0 0))) "Control Spotify with Helm." single ((:commit . "f7a62d1ff88e3127de9be7cd3e818b0a92268ab3") (:url . "https://github.com/krisajenkins/helm-spotify") (:keywords "helm" "spotify"))]) (helm-spaces . [(20161001 709) ((helm-core (2 2)) (spaces (0 1 0))) "helm sources for spaces" single ((:commit . "877e2b5178926308d6a7c2a37477bb12c33a96d4") (:url . "https://github.com/yasuyk/helm-spaces") (:keywords "helm" "frames" "convenience"))]) (helm-smex . [(20171004 1308) ((emacs (24)) (smex (3 0)) (helm (1 7 7))) "Helm interface for smex" single ((:commit . "2269375dfa452b88b5170d1a5d5849ebb2c1e413") (:keywords "convenience"))]) (helm-sheet . [(20130630 539) ((helm (1 0))) "helm sources for sheet" single ((:commit . "d360b68d0ddb09aa1854e7b2f3cb39caeee26463") (:url . "https://github.com/yasuyk/helm-sheet") (:keywords "helm" "sheet"))]) (helm-sage . [(20160514 45) ((cl-lib (0 5)) (helm (1 5 6)) (sage-shell-mode (0 1 0))) "A helm extension for sage-shell-mode." single ((:commit . "f14e9281d8f2162df7d8f9c2ad9ad1248a24803b") (:url . "https://github.com/stakemori/helm-sage") (:keywords "sage" "math" "helm"))]) (helm-safari . [(20160403 2024) ((helm (1 9 1)) (emacs (24))) "Browse your Safari bookmarks and history" single ((:commit . "664c7f4488829228eed7e90cd53002e14bec555b") (:url . "https://github.com/xuchunyang/helm-safari") (:keywords "tools"))]) (helm-rubygems-org . [(20140826 456) ((emacs (24)) (helm (1 6 3)) (cl-lib (0 5))) "Use helm to search rubygems.org" single ((:commit . "6aaed984f698cbdf9f9aceb0221404563e28764d") (:url . "https://github.com/neomantic/helm-rubygems-org") (:keywords "ruby" "rubygems" "gemfile" "helm"))]) (helm-rubygems-local . [(20130711 1811) ((helm (1 5 3))) "Installed local rubygems find-file for helm" single ((:commit . "289cb33d41c703af9791d6da46b55f070013c2e3") (:url . "https://github.com/f-kubotar/helm-rubygems-local"))]) (helm-rtags . [(20170812 2111) ((helm (2 0)) (rtags (2 10))) "A front-end for rtags" single ((:commit . "324f256acfdac2582c684e757078b1ca73ba28ec") (:url . "http://rtags.net"))]) (helm-ros . [(20160812 1052) ((helm (1 9 9)) (xterm-color (1 0)) (cl-lib (0 5))) "Interfaces ROS with helm" single ((:commit . "92b0b215f6a017f0f57f1af15466cc0b2a5a0135") (:url . "https://www.github.com/davidlandry93/helm-ros") (:keywords "helm" "ros"))]) (helm-robe . [(20151208 1955) ((helm (1 7 7))) "completing read function for robe" single ((:commit . "6e69543b4ee76c5f8f3f2510c76e6d9aed17a370") (:url . "https://github.com/syohex/emacs-helm-robe"))]) (helm-rhythmbox . [(20160524 458) ((helm (1 5 0)) (cl-lib (0 5))) "control Rhythmbox's play queue via Helm" single ((:commit . "c92e1ded34ddd4e62e7e9a558259c232e05193fa") (:url . "https://github.com/mrBliss/helm-rhythmbox"))]) (helm-recoll . [(20160731 221) ((helm (1 9 9))) "helm interface for the recoll desktop search tool." single ((:commit . "cc4c4fa9c8f4f99383647baa8512b60523dc8b36") (:url . "https://github.com/emacs-helm/helm-recoll") (:keywords "convenience"))]) (helm-rdefs . [(20161129 2136) ((emacs (24)) (helm (1 6 4))) "rdefs with helm interface" single ((:commit . "cd3a6b3af3015ee58ef30cb7c81c79ebe5fc867b") (:url . "https://github.com/saidie/helm-rdefs") (:keywords "matching" "tools"))]) (helm-rb . [(20131123 839) ((helm (1 0)) (helm-ag-r (20131123))) "Search Ruby's method by ag and display helm" tar ((:commit . "4949d646420a9849af234dacdd8eb34a77c662fd") (:url . "https://github.com/yuutayamada/helm-rb") (:keywords "searching" "ruby"))]) (helm-rails . [(20130424 819) ((helm (1 5 1)) (inflections (1 1))) "Helm extension for Rails projects." single ((:commit . "506d9948d45dfbc575c9c4c0d102c1ad2f511e82") (:url . "https://github.com/asok/helm-rails") (:keywords "helm" "rails" "git"))]) (helm-rage . [(20170422 510) ((helm (1 9 8)) (emacs (24 4)) (dash (2 13 0)) (s (1 11 0))) "Helm command for rage characters." tar ((:commit . "3cae7f309b45cc6e40507be68c0cc2e5595c1392") (:url . "https://github.com/bomgar/helm-rage") (:keywords "helm" "rage" "meme"))]) (helm-qiita . [(20170821 609) ((helm (2 8 2))) "Qiita with helm interface" single ((:commit . "f00a61fc802d0f6442f07e7bd1c55fedf60f3895") (:url . "https://github.com/masutaka/emacs-helm-qiita"))]) (helm-pydoc . [(20160917 2242) ((helm-core (2 0)) (emacs (24 4))) "pydoc with helm interface" tar ((:commit . "85480a29b56dacde425655bc8f5a597c785afdf5") (:url . "https://github.com/syohex/emacs-helm-pydoc"))]) (helm-purpose . [(20170114 836) ((emacs (24)) (helm (1 9 2)) (window-purpose (1 4))) "Helm Interface for Purpose" single ((:commit . "9ff4c21c1e9ebc7afb851b738f815df7343bb287") (:url . "https://github.com/bmag/helm-purpose"))]) (helm-pt . [(20160214 1542) ((helm (1 5 6))) "Helm interface to the platinum searcher" tar ((:commit . "8acc52911dad1ed0c3975f134a468762afe0b76b") (:keywords "helm" "platinum searcher"))]) (helm-prosjekt . [(20140128 2317) ((prosjekt (0 3)) (helm (1 5 9))) "Helm integration for prosjekt." single ((:commit . "a864a8be5842223043702395f311e3350c28e9db") (:url . "https://github.com/abingham/prosjekt"))]) (helm-projectile . [(20170926 1123) ((helm (1 7 7)) (projectile (0 14 0)) (cl-lib (0 3))) "Helm integration for Projectile" single ((:commit . "4466adbcada8be19ec97b9dba52e12b8da3da849") (:url . "https://github.com/bbatsov/helm-projectile") (:keywords "project" "convenience"))]) (helm-project-persist . [(20151210 743) ((helm (1 5 2)) (project-persist (0 1 4))) "Helm integration for project-persist package" single ((:commit . "357950fbac18090985a750e40d5d8b10ee9dcd53") (:keywords "project-persist" "project" "helm"))]) (helm-proc . [(20161005 2005) ((helm (1 6 0))) "Helm interface for managing system processes" tar ((:commit . "576d31c2d74ba3897d56e2acd2b0993f52c2547c"))]) (helm-phpunit . [(20160513 153) ((helm (1 9 5)) (phpunit (0 7 0))) "Helm integration for phpunit.el" single ((:commit . "739f26204ad2ba76c25f45e8eab1e5216f7c3518") (:url . "https://github.com/eric-hansen/phpunit-helm") (:keywords "phpunit" "helm" "php"))]) (helm-perspeen . [(20170228 545) ((perspeen (0 1 0)) (helm (2 5 0))) "Helm interface for perspeen." single ((:commit . "7fe2922d85608bfa9e18269fc44181428b8849ff") (:url . "https://github.com/jimo1001/helm-perspeen") (:keywords "projects" "lisp"))]) (helm-perldoc . [(20160917 2256) ((helm-core (2 0)) (deferred (0 3 1)) (emacs (24 4))) "perldoc with helm interface" tar ((:commit . "1979f9f67814c11ec9498502237c89a5e1153100") (:url . "https://github.com/syohex/emacs-helm-perldoc"))]) (helm-pass . [(20170627 1124) ((helm (0)) (password-store (0)) (auth-password-store (0))) "helm interface of pass, the standard Unix password manager" single ((:commit . "dc599627789284eea044e881e105586f9e05bc9f") (:url . "https://github.com/jabranham/helm-pass"))]) (helm-pages . [(20161120 1826) ((helm (1 6 5)) (emacs (24)) (cl-lib (0 5))) "Pages in current buffer as Helm datasource" single ((:commit . "51dcb9374d1df9feaae85e60cfb39b970554ecba") (:keywords "convenience" "helm" "outlines"))]) (helm-package . [(20170216 2002) ((helm (2 0)) (emacs (24 4))) "Listing ELPA packages with helm interface" single ((:commit . "0f3ac5623cc6220a65f3c9ec0f587225101e96d5") (:url . "https://github.com/syohex/emacs-helm-package"))]) (helm-orgcard . [(20151001 824) ((helm-core (1 7 7))) "browse the orgcard by helm" single ((:commit . "9655ac340d1ccc5f3d1c0f7c49be8dd3556d4d0d") (:url . "https://github.com/emacs-jp/helm-orgcard") (:keywords "convenience" "helm" "org"))]) (helm-org-rifle . [(20171202 1216) ((emacs (24 4)) (dash (2 12)) (f (0 18 1)) (helm (1 9 4)) (s (1 10 0))) "Rifle through your Org files" single ((:commit . "94cb602d6373229c88126a5888f03f4b538f0771") (:url . "http://github.com/alphapapa/helm-org-rifle") (:keywords "hypermedia" "outlines"))]) (helm-open-github . [(20170219 1759) ((emacs (24 4)) (helm-core (1 7 7)) (gh (0 8 2))) "Utilities of Opening Github Page" single ((:commit . "2f03d97552a1233db7694116d5f80ecde7612756") (:url . "https://github.com/syohex/emacs-helm-open-github"))]) (helm-notmuch . [(20170903 2159) ((helm (1 9 3)) (notmuch (0 21))) "Search emails with Notmuch and Helm" single ((:commit . "782c221bf293eee55990de5b54171f08d881dcee") (:url . "https://github.com/xuchunyang/helm-notmuch") (:keywords "mail"))]) (helm-nixos-options . [(20151013 1609) ((nixos-options (0 0 1)) (helm (1 5 6))) "Helm Interface for nixos-options" single ((:commit . "7007363e773a419203a69798fb0e0731b2eb0f73") (:url . "http://www.github.com/travisbhartwell/nix-emacs/") (:keywords "unix"))]) (helm-navi . [(20170402 752) ((emacs (24 4)) (helm (1 9 4)) (navi-mode (2 0)) (s (1 10 0))) "Helm for navi-mode" single ((:commit . "2256591174ff79f889450fdc10822316819d6476") (:url . "http://github.com/emacs-helm/helm-navi") (:keywords "navigation" "outlines"))]) (helm-mu . [(20171027 933) ((helm (1 5 5))) "Helm sources for searching emails and contacts" single ((:commit . "cda769ef48e1e11e3b21cdafa85adb8e36384d78") (:url . "https://github.com/emacs-helm/helm-mu"))]) (helm-mt . [(20160917 2152) ((emacs (24)) (helm (0 0)) (multi-term (0 0)) (cl-lib (0 5))) "helm multi-term management" single ((:commit . "d2bff4100118483bc398c56d0ff095294209265b") (:url . "https://github.com/dfdeshom/helm-mt") (:keywords "helm" "multi-term"))]) (helm-mode-manager . [(20151124 138) ((helm (1 5 3))) "Select and toggle major and minor modes with helm" single ((:commit . "5d9c3ca4f8205d07ff4e03c4c3e88f596751c1fc") (:url . "https://github.com/istib/helm-mode-manager"))]) (helm-migemo . [(20151009 2056) ((emacs (24 4)) (helm-core (1 7 8)) (migemo (1 9)) (cl-lib (0 5))) "Migemo plug-in for helm" single ((:commit . "66c6a19d07c6a385daefd2090d0709d26b608b4e") (:url . "https://github.com/emacs-jp/helm-migemo") (:keywords "matching" "convenience" "tools" "i18n"))]) (helm-make . [(20171103 1155) ((helm (1 5 3)) (projectile (0 11 0))) "Select a Makefile target with helm" single ((:commit . "feae8df22bc4b20705ea08ac9adfc2b43bb348d0") (:url . "https://github.com/abo-abo/helm-make") (:keywords "makefile"))]) (helm-ls-svn . [(20150717 39) ((emacs (24 1)) (helm (1 7 0)) (cl-lib (0 5))) "helm extension to list svn files" single ((:commit . "4d4dc1a272f27fba5fdd7cc47e5d309b53c63ae3") (:url . "https://svn.macports.org/repository/macports/users/chunyang/helm-ls-svn.el/helm-ls-svn.el") (:keywords "helm" "svn"))]) (helm-ls-hg . [(20150908 2243) ((helm (1 7 8))) "List hg files in hg project." single ((:commit . "61b91a22fcfb62d0fc56e361ec01ce96973c7165"))]) (helm-ls-git . [(20170727 1238) ((helm (1 7 8))) "list git files." single ((:commit . "d116bb96b6ea946f633ed7735fbf38a63e611a3a"))]) (helm-lobsters . [(20150213 746) ((helm (1 0)) (cl-lib (0 5))) "helm front-end for lobste.rs" single ((:commit . "53c5b42baf72776dcba891fc3d7cd7d47721e9b0") (:url . "https://github.com/julienXX/helm-lobste.rs"))]) (helm-lean . [(20171102 754) ((emacs (24 3)) (dash (2 12 0)) (helm (2 8 0)) (lean-mode (3 3 0))) "Helm interfaces for lean-mode" single ((:commit . "c0af876c967fc969d67c467bc6767210d19c5d87") (:url . "https://github.com/leanprover/lean-mode") (:keywords "languages"))]) (helm-lastpass . [(20170914 142) ((emacs (24 1)) (helm-core (2 8 1)) (csv (2 1))) "Helm interface of LastPass" single ((:commit . "ae5d1252d60450082a5c26af3ad2be43994201ec") (:url . "https://github.com/xuchunyang/helm-lastpass") (:keywords "lastpass"))]) (helm-kythe . [(20170709 26) ((emacs (25)) (dash (2 12 0)) (helm (2 0))) "Google Kythe helm interface" single ((:commit . "eabbef4948f8ec7c7b2fac498e9145dfdb10ca82") (:url . "https://github.com/MaskRay/emacs-helm-kythe"))]) (helm-jstack . [(20150602 2122) ((emacs (24)) (helm (1 7 0)) (cl-lib (0 5))) "Helm interface to Jps & Jstack for Java/JVM processes" single ((:commit . "2064f7215dcf4ccbd6a7b8784223251507746da4") (:keywords "java" "jps" "jstack" "jvm" "emacs" "elisp" "helm"))]) (helm-js-codemod . [(20171106 244) ((emacs (24 4)) (helm-core (1 9 8)) (js-codemod (1 0 0))) "A helm interface for running js-codemods" single ((:commit . "18503d94e64418e8ea5c5854f197ae9f3009cdbf") (:keywords "helm" "js" "codemod" "region"))]) (helm-j-cheatsheet . [(20170217 29) ((helm (1 5 3))) "Quick J reference for Emacs" single ((:commit . "6c47e7162b9ba2de4b41221d01180146973d860b") (:url . "https://github.com/abo-abo/helm-j-cheatsheet"))]) (helm-itunes . [(20151012 2348) ((helm (1 6 1))) "Play local iTunes and Spotify tracks" single ((:commit . "966de755a5aadbe02311a6cef77bd4790e84c263") (:url . "https://github.com/daschwa/helm-itunes"))]) (helm-ispell . [(20151231 53) ((helm-core (1 7 7))) "ispell-complete-word with helm interface" single ((:commit . "cb735695ab3a0e66c123c2f3f3e8911fb1c2d5fc") (:url . "https://github.com/syohex/emacs-helm-ispell"))]) (helm-img-tiqav . [(20151224 1522) ((helm-img (0 0 1))) "An helm-source for joking." single ((:commit . "33a7e9508bc8f37d53320b56c92b53d321a57bb0") (:url . "https://github.com/l3msh0/helm-img") (:keywords "convenience"))]) (helm-img . [(20151224 1521) ((helm (1 7 7)) (cl-lib (0 5))) "Utilities for making image sources for helm." tar ((:commit . "aa3f8a5dce8d0413bf07584f07153a39015c2bfc") (:url . "https://github.com/l3msh0/helm-img") (:keywords "convenience"))]) (helm-idris . [(20141202 957) ((helm (0 0 0)) (idris-mode (0 9 14))) "A Helm datasource for Idris documentation, queried from the compiler" single ((:commit . "a2f45d6817974f318b55ad9b7fd19d5df132d47e") (:keywords "languages" "helm"))]) (helm-hunks . [(20170625 1523) ((emacs (24 4)) (helm (1 9 8))) "A helm interface for git hunks - browsing, staging, unstaging and killing" single ((:commit . "56731db3968a57fbb2473529227c2998b7f404b0") (:keywords "helm" "git" "hunks" "vc"))]) (helm-hoogle . [(20161026 2234) ((helm (1 6 2)) (emacs (24 4))) "Use helm to navigate query results from Hoogle" single ((:commit . "73969a9d46d2121a849a01a9f7ed3636d01f7bbc") (:url . "https://github.com/jwiegley/haskell-config") (:keywords "haskell" "programming" "hoogle"))]) (helm-helm-commands . [(20130902 1048) ((helm (1 5 4))) "List all helm commands with helm" single ((:commit . "3a05aa19c976501343ad9ae630a36810921a85f6") (:url . "https://github.com/vapniks/helm-helm-commands") (:keywords "convenience"))]) (helm-hayoo . [(20151013 2351) ((helm (1 6 0)) (json (1 2)) (haskell-mode (13 7))) "Source and configured helm for searching hayoo" single ((:commit . "dd4c0c8c87521026edf1b808c4de01fa19b7c693") (:keywords "helm"))]) (helm-hatena-bookmark . [(20170821 646) ((helm (2 8 2))) "Hatena::Bookmark with helm interface" single ((:commit . "ee0d2554f573779210b0e2595e539b3e28461f1d") (:url . "https://github.com/masutaka/emacs-helm-hatena-bookmark"))]) (helm-gtags . [(20170115 2129) ((emacs (24 4)) (helm (2 0))) "GNU GLOBAL helm interface" single ((:commit . "108e93d0d099ebb7b98847388f368311cf177033") (:url . "https://github.com/syohex/emacs-helm-gtags"))]) (helm-growthforecast . [(20140119 1944) ((helm (1 5 9))) "helm extensions for growthforecast." single ((:commit . "0f94ac090d6c354058ad89a86e5c18385c136d9b") (:url . "https://github.com/daic-h/helm-growthforecast"))]) (helm-grepint . [(20161001 713) ((helm (1 0)) (emacs (24))) "Generic helm interface to grep" single ((:commit . "a62ca27515ff6a366b89b420500eb16d380cc653") (:url . "https://github.com/kopoli/helm-grepint") (:keywords "grep" "grepping" "searching" "helm"))]) (helm-google . [(20170722 710) ((helm (0)) (google (0))) "Emacs Helm Interface for quick Google searches" single ((:commit . "4530a375a46880d53e5d7e906028f71c040de946") (:url . "https://github.com/steckerhalter/helm-google") (:keywords "helm" "google" "search" "browse"))]) (helm-go-package . [(20161102 1853) ((emacs (24 4)) (helm-core (2 2 1)) (go-mode (1 4 0)) (deferred (0 4 0))) "helm sources for Go programming language's package" single ((:commit . "e42c563936c205ceedb930a687c11b4bb56447bc") (:url . "https://github.com/yasuyk/helm-go-package"))]) (helm-gitlab . [(20160519 303) ((s (1 9 0)) (dash (2 9 0)) (helm (1 0)) (gitlab (0 8 0))) "Helm interface to Gitlab" single ((:commit . "67567a354a1888419331b79862f151817d9747c5") (:url . "https://github.com/nlamirault/emacs-gitlab") (:keywords "gitlab" "helm"))]) (helm-gitignore . [(20170210 1608) ((gitignore-mode (1 1 0)) (helm (1 7 0)) (request (0 1 0)) (cl-lib (0 5))) "Generate .gitignore files with gitignore.io." single ((:commit . "2a2e7da7855a6db0ab3bb6a6a087863d7abd4391") (:url . "https://github.com/jupl/helm-gitignore") (:keywords "helm" "gitignore" "gitignore.io"))]) (helm-github-stars . [(20150625 1523) ((helm (1 6 8)) (emacs (24 4))) "Helm integration for your starred repositories on github" single ((:commit . "9211be3fbb65ca8819e0d1a54524ed8abbfaa4fa") (:url . "https://github.com/Sliim/helm-github-stars") (:keywords "helm" "github" "stars"))]) (helm-git-grep . [(20170614 711) ((helm-core (2 2 0))) "helm for git grep, an incremental git-grep(1)" single ((:commit . "744cea07dba6e6a5effbdba83f1b786c78fd86d3") (:url . "https://github.com/yasuyk/helm-git-grep"))]) (helm-git-files . [(20141212 517) ((helm (1 5 9))) "helm for git files" single ((:commit . "43193960774069369ac6964bbf7c026900206fa8") (:keywords "helm" "git"))]) (helm-git . [(20120630 1403) nil "Helm extension for Git." single ((:commit . "cb96a52b5aecadd3c27aba7749d14e43ab128d55") (:url . "https://github.com/maio/helm-git") (:keywords "helm" "git"))]) (helm-ghs . [(20170714 2241) ((emacs (24)) (helm (2 2 0))) "ghs with helm interface" single ((:commit . "17a70bf16255d90d67c8350e88200ec8bfd47563") (:url . "https://github.com/iory/emacs-helm-ghs"))]) (helm-ghq . [(20161015 117) ((helm (2 2 0))) "ghq with helm interface" single ((:commit . "49481685adbb25b3f766aabfdb7472becc673a94") (:url . "https://github.com/masutaka/emacs-helm-ghq"))]) (helm-ghc . [(20141105 659) ((emacs (24)) (cl-lib (0 5)) (helm (1 6 4)) (ghc (5 2 1 0))) "A Helm datasource for ghc-mod errors" single ((:commit . "e5ee7b8d3b745d162553aecfbd41381c4de85f35") (:keywords "languages" "helm"))]) (helm-fuzzy-find . [(20171105 2000) ((emacs (24 1)) (helm (1 7 0))) "Find file using Fuzzy Search" single ((:commit . "de2abbf7ca13609587325bacd4a1ed4376b5c927") (:url . "https://github.com/xuchunyang/helm-fuzzy-find") (:keywords "helm" "fuzzy" "find" "file"))]) (helm-fuzzier . [(20160605 1445) ((emacs (24 3)) (helm (1 7 0))) "Better fuzzy matching for Helm" single ((:commit . "8798dcf3583b863df5b9dea7fe3b0179ba1c35bc") (:url . "http://github.com/EphramPerdition/helm-fuzzier") (:keywords "convenience" "helm" "fuzzy"))]) (helm-frame . [(20170515 1250) ((emacs (24 4))) "open helm buffers in a dedicated frame" single ((:commit . "389e6461a423d649b7062ba99a2234bef7770059") (:keywords "lisp" "helm" "popup" "frame"))]) (helm-flyspell . [(20170210 1101) ((helm (1 6 5))) "Helm extension for correcting words with flyspell" single ((:commit . "8d4d947c687cb650cb149aa2271ad5201ea92594") (:url . "https://github.com/pronobis/helm-flyspell") (:keywords "convenience"))]) (helm-flymake . [(20160609 1702) ((helm (1 0))) "helm interface for flymake" single ((:commit . "72cf18a1a1f843db9bb5d58301739ea9ccb1655b") (:url . "https://github.com/tam17aki"))]) (helm-flycheck . [(20160710 129) ((dash (2 12 1)) (flycheck (28)) (helm-core (1 9 8))) "Show flycheck errors with helm" single ((:commit . "3cf7d3bb194acacc6395f88360588013d92675d6") (:url . "https://github.com/yasuyk/helm-flycheck") (:keywords "helm" "flycheck"))]) (helm-flx . [(20170404 1230) ((emacs (24 4)) (helm (1 7 9)) (flx (0 5))) "Sort helm candidates by flx score" single ((:commit . "c8650d9b34afbc236c28aee12cbee998fda8d810") (:url . "https://github.com/PythonNut/helm-flx") (:keywords "convenience" "helm" "fuzzy" "flx"))]) (helm-firefox . [(20161202 517) ((helm (1 5)) (cl-lib (0 5)) (emacs (24 1))) "Firefox bookmarks" single ((:commit . "0ad34b7b5abc485a86cae6920c14de861cbeb085") (:url . "https://github.com/emacs-helm/helm-firefox"))]) (helm-filesets . [(20140929 1135) ((helm (1 6 3)) (filesets+ (0))) "A helm source for emacs filesets" single ((:commit . "b352910af4c3099267a8aa0169c7f743b35bb1fa") (:url . "https://github.com/gcla/helm-filesets") (:keywords "filesets"))]) (helm-exwm . [(20171120 1204) ((emacs (25 2)) (helm (2 8 5)) (exwm (0 15))) "Helm for EXWM buffers" single ((:commit . "f90ac4356d30d713927c65029345b3aa3624341d") (:url . "https://github.com/emacs-helm/helm-exwm") (:keywords "helm" "exwm"))]) (helm-ext . [(20171101 1231) ((emacs (24 4)) (helm (2 5 3))) "A few extensions to Helm" tar ((:commit . "c8ac56918b200239b3f73a4e6a031deecc2c5646") (:keywords "extensions"))]) (helm-etags-plus . [(20170113 614) ((helm (1 7 8))) "Another Etags helm.el interface" single ((:commit . "704f0991ee4a2298b01c33aafc224eef322e15e3") (:url . "https://github.com/jixiuf/helm-etags-plus") (:keywords "helm" "etags"))]) (helm-emms . [(20170517 1010) ((helm (1 5)) (emms (0 0)) (cl-lib (0 5)) (emacs (24 1))) "Emms for Helm." single ((:commit . "b1c7d03e80c3012e327f0d518258508acf980c1c") (:url . "https://github.com/emacs-helm/helm-emms"))]) (helm-emmet . [(20160713 531) ((helm (1 0)) (emmet-mode (1 0 2))) "helm sources for emmet-mode's snippets" single ((:commit . "f0364e736b10cf44232053a78de04133a88185ae") (:url . "https://github.com/yasuyk/helm-emmet") (:keywords "convenience" "helm" "emmet"))]) (helm-elscreen . [(20170709 214) ((helm (2 8 0)) (elscreen (0)) (cl-lib (0 5)) (emacs (24 1))) "Elscreen with helm interface" single ((:commit . "b8212866939dc4a1e1dc23ad572407b688e130e3") (:url . "https://github.com/emacs-helm/helm-elscreen") (:keywords "files" "convenience"))]) (helm-dirset . [(20151208 1612) ((f (0 16 2)) (helm (1 6 1)) (s (1 9 0)) (cl-lib (0 5))) "helm sources for multi directories" single ((:commit . "eb30810cd26e1ee73d84a863e6b2667700e9aead") (:url . "http://101000lab.org") (:keywords "files" "directories"))]) (helm-dired-recent-dirs . [(20131228 614) ((helm (1 0))) "Show recent dirs with helm.el support." single ((:commit . "3bcd125b44f5a707588ae3868777d91192351523") (:keywords "helm" "dired" "zsh"))]) (helm-dired-history . [(20170524 346) ((helm (1 9 8)) (cl-lib (0 5))) "Show dired history with helm.el support." single ((:commit . "281523f9fc46cf00fafd670ba5cd16552a607212") (:url . "https://github.com/jixiuf/helm-dired-history") (:keywords "helm" "dired history"))]) (helm-directory . [(20170705 2102) ((emacs (24 4)) (helm (2 0))) "selecting directory before select the file" single ((:commit . "29f05c87046f9a04329f817e9d7489a290a2592a") (:url . "https://github.com/masasam/emacs-helm-directory"))]) (helm-dictionary . [(20160817 1333) ((helm (1 5 5))) "Helm source for looking up dictionaries" single ((:commit . "805ce850d4cbe811227d9c9b16cc51f652198f3f") (:url . "https://github.com/emacs-helm/helm-dictionary"))]) (helm-describe-modes . [(20160211 2118) ((helm (1 9)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface to major and minor modes." single ((:commit . "11fb36af119b784539d31c6160002de1957408aa") (:url . "https://github.com/emacs-helm/helm-describe-modes") (:keywords "docs" "convenience"))]) (helm-descbinds . [(20160916 713) ((helm (1 5))) "A convenient `describe-bindings' with `helm'" single ((:commit . "6d5ddc11e6cef86548bd6b3e0d840112d602659c") (:url . "https://github.com/emacs-helm/helm-descbinds") (:keywords "helm" "help"))]) (helm-dash . [(20171120 446) ((helm (1 9 2)) (cl-lib (0 5))) "Offline documentation browser for +150 APIs using Dash docsets." single ((:commit . "13dcc176556a7dd0970790e96dbbf9105dc395de") (:url . "http://github.com/areina/helm-dash") (:keywords "docs"))]) (helm-ctest . [(20171101 934) ((s (1 9 0)) (dash (2 11 0)) (helm-core (1 7 4))) "Run ctest from within emacs" single ((:commit . "6de962e355e12a69e4aeaf6484f497e28b2e8a68") (:keywords "helm" "ctest"))]) (helm-css-scss . [(20140626 1725) ((helm (1 0)) (emacs (24))) "CSS/SCSS/LESS Selectors with helm interface" single ((:commit . "ab8348aa98e0daa2f1b771e35bdb06bfacbe5016") (:url . "https://github.com/ShingoFukuyama/helm-css-scss") (:keywords "scss" "css" "less" "selector" "helm"))]) (helm-cscope . [(20170326 22) ((xcscope (1 0)) (helm (1 6 7)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface for xcscope.el." single ((:commit . "3cc7259ab4989f9f7ca039e703cdac14b907530a") (:url . "https://github.com/alpha22jp/helm-cscope.el") (:keywords "cscope" "helm"))]) (helm-core . [(20171130 2340) ((emacs (24 4)) (async (1 9 2))) "Development files for Helm" tar ((:commit . "206c1737daeb8f1bfac4e59ad9d0bb476fbaefd7") (:url . "https://emacs-helm.github.io/helm/"))]) (helm-company . [(20170608 1029) ((helm (1 5 9)) (company (0 6 13))) "Helm interface for company-mode" single ((:commit . "ae4e1a05455f5eaf07e61b8627934ea1df4eb048") (:url . "https://github.com/Sodel-the-Vociferous/helm-company"))]) (helm-commandlinefu . [(20150610 2245) ((emacs (24 1)) (helm (1 7 0)) (json (1 3)) (let-alist (1 0 3))) "Search and browse commandlinefu.com from helm" single ((:commit . "9ee7e018c5db23ae9c8d1c8fa969876f15b7280d") (:url . "https://github.com/xuchunyang/helm-commandlinefu") (:keywords "commandlinefu.com"))]) (helm-codesearch . [(20161214 548) ((s (1 10 0)) (dash (2 12 0)) (helm (1 7 7)) (cl-lib (0 5))) "helm interface for codesearch" single ((:commit . "e80e76e492f626659b88dbe362b11aa0a3b0a116") (:keywords "tools"))]) (helm-cmd-t . [(20170125 659) nil "cmd-t style completion" tar ((:commit . "7fa3d4a9f7271512e54c5de999079b27c9eec6bf") (:url . "https://github.com/lewang/helm-cmd-t") (:keywords "helm" "project-management" "completion" "convenience" "cmd-t" "textmate"))]) (helm-clojuredocs . [(20160405 23) ((edn (1 1 2)) (helm (1 5 7))) "search for help in clojuredocs.org" single ((:commit . "5a7f0f2cb401be0b09e73262a1c18265ab9a3cea") (:url . "https://github.com/mbuczko/helm-clojuredocs") (:keywords "helm" "clojure"))]) (helm-circe . [(20160206 2252) ((emacs (24)) (helm (0 0)) (circe (0 0)) (cl-lib (0 5))) "helm circe buffer management." single ((:commit . "9091651d9fdd8d49d8ff6f9dcf3a2ae416c9f15a") (:url . "https://github.com/lesharris/helm-circe") (:keywords "helm" "circe"))]) (helm-cider-history . [(20150719 1420) ((helm (1 4 0)) (cider (0 9 0))) "Helm interface for cider history" single ((:commit . "c391fcb2e162a02001605a0b9449783575a831fd") (:url . "https://github.com/Kungi/helm-cider-history") (:keywords "convenience"))]) (helm-cider . [(20170708 1525) ((emacs (24 4)) (cider (0 12)) (helm-core (2 4))) "Helm interface to CIDER" tar ((:commit . "9480e969d5387efdd5e66c6db089e02a296b2025") (:url . "https://github.com/clojure-emacs/helm-cider") (:keywords "tools" "convenience"))]) (helm-chronos . [(20150528 1336) ((chronos (1 2)) (helm (1 7 1))) "helm interface for chronos timers" tar ((:commit . "a14fc3d65dd96ce6616234b3f7b8b08b4c1817ef") (:url . "http://github.com/dxknight/helm-chronos") (:keywords "calendar"))]) (helm-chrome . [(20160718 2220) ((helm (1 5)) (cl-lib (0 3)) (emacs (24))) "Helm interface for Chrome bookmarks" single ((:commit . "fd630ace4b4b4f33355a973743bbfe0c90ce4830") (:url . "https://github.com/kawabata/helm-chrome") (:keywords "tools"))]) (helm-charinfo . [(20170810 531) ((emacs (24)) (helm (1 7 0)) (cl-lib (0 5))) "A helm source for character information" single ((:commit . "91798a49dc115342a7e01e48b264e9a0bf5ea414") (:url . "https://github.com/cwittern/helm-charinfo") (:keywords "convenience"))]) (helm-c-yasnippet . [(20170128 742) ((helm (1 7 7)) (yasnippet (0 8 0)) (cl-lib (0 3))) "helm source for yasnippet.el" single ((:commit . "65ca732b510bfc31636708aebcfe4d2d845b59b0") (:keywords "convenience" "emulation"))]) (helm-c-moccur . [(20151230 124) ((helm (20120811)) (color-moccur (2 71))) "helm source for color-moccur.el" single ((:commit . "b0a906f85fa352db091f88b91a9c510de607dfe9") (:keywords "convenience" "emulation"))]) (helm-bundle-show . [(20151221 430) ((helm (1 8 0))) "bundle show with helm interface" single ((:commit . "850fecb36f609f1dfd5d20ca0170c9a6b7f90ab9") (:url . "https://github.com/masutaka/emacs-helm-bundle-show"))]) (helm-books . [(20170324 2331) ((helm (1 7 7))) "Helm interface for searching books" single ((:commit . "625aadec1541a5ca36951e4ce1301f4b6fe2bf3f") (:url . "https://github.com/grugrut/helm-books"))]) (helm-bm . [(20160321 631) ((bm (1 0)) (cl-lib (0 5)) (helm (1 9 3)) (s (1 11 0))) "helm sources for bm.el" single ((:commit . "d66341f5646c23178d4d8bffb6cfebe3fb73f1d7") (:url . "https://github.com/yasuyk/helm-bm") (:keywords "helm" "bookmark"))]) (helm-bind-key . [(20141108 2115) ((bind-key (1 0)) (helm (1 6 4))) "helm-source for for bind-key." single ((:commit . "9da6ad8b7530e72fb4ac67be8c6a482898dddc25") (:keywords "convenience" "emulation"))]) (helm-bibtexkey . [(20140214 704) ((helm (1 5 8))) "Bibtexkey source for helm" tar ((:commit . "aa1637ea5c8c5f1817e480fc2a3750cafab3d99f") (:url . "https://github.com/kenbeese/helm-bibtexkey") (:keywords "bib" "tex"))]) (helm-bibtex . [(20171022 220) ((helm (1 5 5)) (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 Helm" tar ((:commit . "54de08577f9c19354cc303ee52836263aef486fb"))]) (helm-bbdb . [(20170505 2338) ((helm (1 5)) (bbdb (3 1 2))) "Helm interface for bbdb" single ((:commit . "c0e6b83911598fe334c51b12f51ff1a8252ed11d") (:url . "https://github.com/emacs-helm/helm-bbdb"))]) (helm-backup . [(20171204 2357) ((helm (1 5 5)) (s (1 8 0)) (cl-lib (0))) "Backup each file change using git" single ((:commit . "a2c0fa16113e628500d6822c6605280b94e24038") (:url . "http://github.com/antham/helm-backup") (:keywords "backup" "convenience" "files" "tools" "vc"))]) (helm-aws . [(20151124 133) ((helm (1 5 3)) (cl-lib (0 5)) (s (1 9 0))) "Manage AWS EC2 server instances directly from Emacs" single ((:commit . "512fb7edcdc6c65303b9641bfc737f836939e5e9") (:url . "https://github.com/istib/helm-aws"))]) (helm-anything . [(20141126 231) ((helm (20130406)) (anything (20120101))) "Bridge between anything and helm" single ((:commit . "0ec578922928b7c75cf034d1b7a956b5f36107ea") (:url . "http://www.emacswiki.org/emacs/download/helm-anything.el") (:keywords "helm" "anything" "convenience" "search" "tools"))]) (helm-ag-r . [(20131123 731) ((helm (1 0))) "Search something by ag and display by helm" single ((:commit . "67de4ebafe9b088db950eefa5ef590a6d78b4ac8") (:url . "https://github.com/yuutayamada/helm-ag-r") (:keywords "searching"))]) (helm-ag . [(20170209 745) ((emacs (24 4)) (helm (2 0))) "the silver searcher with helm interface" single ((:commit . "2fc02c4ead29bf0db06fd70740cc7c364cb650ac") (:url . "https://github.com/syohex/emacs-helm-ag"))]) (helm-addressbook . [(20170903 28) ((helm (2 8 2)) (addressbook-bookmark (1 0)) (cl-lib (0 5)) (emacs (24 4))) "Helm for addressbook bookmarks." single ((:commit . "62497f72d46afd3a9f9f94b27d062a82fb232de4") (:url . "https://github.com/emacs-helm/helm-addressbook"))]) (helm-ad . [(20151209 215) ((dash (2 8 0)) (helm (1 6 2))) "helm source for Active Directory" single ((:commit . "8ac044705d8620ee354a9cfa8cc1b865e83c0d55") (:keywords "comm"))]) (helm-ack . [(20141030 526) ((helm (1 0)) (cl-lib (0 5))) "Ack command with helm interface" single ((:commit . "889bc225318d14c6e3be80e73b1d9d6fb30e48c3") (:url . "https://github.com/syohex/emacs-helm-ack"))]) (helm-R . [(20120819 1714) ((helm (20120517)) (ess (20120509))) "helm-sources and some utilities for GNU R." single ((:commit . "b0eb9d5f6a483a9dbe6eb6cf1f2024d4f5938bc2") (:url . "https://github.com/myuhe/helm-R.el") (:keywords "convenience"))]) (helm . [(20171206 2200) ((emacs (24 4)) (async (1 9 2)) (popup (0 5 3)) (helm-core (2 8 6))) "Helm is an Emacs incremental and narrowing framework" tar ((:commit . "fd71d598b8160f07d7151d898e17001d1d39bb0c") (:url . "https://emacs-helm.github.io/helm/"))]) (headlong . [(20150417 826) nil "reckless completion" single ((:commit . "f6830f87f236eee88263cb6976125f72422abe72") (:url . "https://github.com/abo-abo/headlong") (:keywords "completion"))]) (header2 . [(20170223 729) nil "Support for creation and update of file headers." single ((:url . "https://www.emacswiki.org/emacs/download/header2.el") (:keywords "tools" "docs" "maint" "abbrev" "local"))]) (hcl-mode . [(20170107 27) ((emacs (24 3))) "Major mode for Hashicorp" single ((:commit . "0f2c5ec7e7bcf77c8548e8cac8721ea935ca1b5e") (:url . "https://github.com/syohex/emacs-hcl-mode"))]) (hc-zenburn-theme . [(20150928 933) nil "An higher contrast version of the Zenburn theme." single ((:commit . "fd0024a5191cdce204d91c8f1db99ba31640f6e9") (:url . "https:github.com/edran/hc-zenburn-emacs"))]) (hayoo . [(20140831 521) ((emacs (24)) (json (1 3))) "Query hayoo and show results in a tabulated buffer." single ((:commit . "3ca2fb0c4d5f337d0410c21b2702dd147014e984") (:url . "https://github.com/benma/hayoo.el/") (:keywords "hayoo" "haskell"))]) (haxor-mode . [(20160618 429) ((emacs (24 0))) "Major mode for editing Haxor Assembly Files" single ((:commit . "6fa25a8e6b6a59481bc0354c2fe1e0ed53cbdc91") (:url . "https://github.com/krzysztof-magosa/haxor-mode") (:keywords "haxor"))]) (haxe-mode . [(20131004 142) nil "An Emacs major mode for Haxe" single ((:url . "http://people.debian.org/~jps/misc/haxe-mode.el"))]) (haxe-imports . [(20170330 1604) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 1))) "Code for dealing with Haxe imports" single ((:commit . "f104a641f3dfe698359d9aca1f28d9383cf43e04") (:url . "http://www.github.com/accidentalrebel/emacs-haxe-imports") (:keywords "haxe"))]) (haste . [(20141030 1334) ((json (1 2))) "Emacs client for hastebin (http://hastebin.com/about.md)" single ((:commit . "22d05aacc3296ab50a7361222ab139fb4d447c25") (:url . "http://github.com/rlister/emacs-haste-client"))]) (hasky-stack . [(20171209 749) ((emacs (24 4)) (f (0 18 0)) (magit-popup (2 10))) "Interface to the Stack Haskell development tool" single ((:commit . "79d844a49b3f97466be0f9ed32523d848e3de47b") (:url . "https://github.com/hasky-mode/hasky-stack") (:keywords "tools" "haskell"))]) (hasky-extensions . [(20171209 736) ((emacs (24 4)) (avy-menu (0 2))) "Toggle Haskell language extensions" single ((:commit . "d4f4eb136ccbf880d7f50c541450dbb0b403b7f2") (:url . "https://github.com/hasky-mode/hasky-extensions") (:keywords "programming"))]) (haskell-tab-indent . [(20170701 258) nil "tab-based indentation for haskell-mode" single ((:commit . "b4cb851aef96c42ec7b3cc37b6fdd867fe5a0853") (:url . "https://spwhitton.name/tech/code/haskell-tab-indent/") (:keywords "indentation" "haskell"))]) (haskell-snippets . [(20160918 1722) ((cl-lib (0 5)) (yasnippet (0 8 0))) "Yasnippets for Haskell" tar ((:commit . "07b0f460b946fd1be26c29652cb0468b47782f3a") (:url . "https://github.com/haskell/haskell-snippets") (:keywords "snippets" "haskell"))]) (haskell-mode . [(20171022 26) ((emacs (24 3))) "A Haskell editing mode" tar ((:commit . "9018ad5cac0b1b1b5e0a51586027fb0ca4076b1a") (:keywords "haskell" "cabal" "ghc" "repl") (:url . "https://github.com/haskell/haskell-mode"))]) (haskell-emacs-text . [(20150713 716) ((haskell-emacs (2 4 0))) "Haskell functions from Data.Text" tar ((:commit . "a2c6a079175904689eed7c6c200754bfa85d1ed9") (:url . "https://github.com/knupfer/haskell-emacs/modules/text") (:keywords "haskell" "emacs" "ffi"))]) (haskell-emacs-base . [(20150714 859) ((haskell-emacs (2 4 0))) "Haskell functions from Prelude" tar ((:commit . "a2c6a079175904689eed7c6c200754bfa85d1ed9") (:url . "https://github.com/knupfer/haskell-emacs/modules/base") (:keywords "haskell" "emacs" "ffi"))]) (haskell-emacs . [(20160904 1326) nil "Write emacs extensions in haskell" tar ((:commit . "a2c6a079175904689eed7c6c200754bfa85d1ed9") (:url . "https://github.com/knupfer/haskell-emacs") (:keywords "haskell" "emacs" "ffi"))]) (harvest . [(20170822 1046) ((swiper (0 7 0)) (hydra (0 13 0)) (s (1 11 0))) "Harvest integration" single ((:commit . "7acbc0564b250521b67131ee2a0a92720239454f") (:url . "https://github.com/kostajh/harvest.el") (:keywords "harvest"))]) (hardhat . [(20160414 713) ((ignoramus (0 7 0))) "Protect against clobbering user-writable files" single ((:commit . "9038a49ab55cd4c502cf7f07ed0d1b9b6bc3626e") (:url . "http://github.com/rolandwalker/hardhat") (:keywords "convenience"))]) (hardcore-mode . [(20151113 2301) nil "Disable arrow keys + optionally backspace and return" single ((:commit . "b1dda19692b4a7a58a689e81784a9b35be39e70d"))]) (handoff . [(20150916 2300) nil "Get your hand off that mouse, damn it!" single ((:commit . "75dc7a7e352f38679f65d0ca80ad158798e168bd") (:url . "http://github.com/rejeep/handoff.el"))]) (handlebars-sgml-mode . [(20130623 1633) nil "Add Handlebars contextual indenting support to sgml-mode" single ((:commit . "c76df93a9a8c1b1b3efdcc4add32bf93304192a4") (:url . "http://github.com/jacott/handlebars-sgml-mode"))]) (handlebars-mode . [(20150211 949) nil "A major mode for editing Handlebars files." single ((:commit . "81f6b73fea8f397807781a1b51568397af21a6ef"))]) (hamlet-mode . [(20131207 2324) ((cl-lib (0 3)) (dash (2 3 0)) (s (1 7 0))) "Hamlet editing mode" single ((:commit . "7362b955e556a3d007fa06945a27e5b99349527d") (:url . "https://github.com/lightquake/hamlet-mode") (:keywords "wp" "languages" "comm"))]) (haml-mode . [(20170923 2153) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing Haml files" single ((:commit . "1cbb2de8f0fc25f35448c5cad04642f28078f3bb") (:url . "https://github.com/nex3/haml-mode") (:keywords "markup" "languages" "html"))]) (hamburger-menu . [(20160825 1331) ((emacs (24 5))) "Mode line hamburger menu" single ((:commit . "3568159c693c30bed7f61580e4f3b6241253ad4e") (:url . "https://gitlab.com/iain/hamburger-menu-mode") (:keywords "hamburger" "menu"))]) (hamburg-theme . [(20160122 2340) ((emacs (24))) "Color Theme with a dark blue background." single ((:commit . "aacefdf1501d97a5afc0e63c8ead4b2463323028"))]) (ham-mode . [(20150811 606) ((html-to-markdown (1 2)) (markdown-mode (2 0))) "Html As Markdown. Transparently edit an html file using markdown" single ((:commit . "3a141986a21c2aa6eefb428983352abb8b7907d2") (:url . "http://github.com/Bruce-Connor/ham-mode") (:keywords "convenience" "emulation" "wp"))]) (hal-mode . [(20160704 1046) nil "Major mode for editing HAL files" single ((:commit . "cd2f66f219ee520198d4586fb6b169cef7ad3f21") (:url . "https://github.com/strahlex/hal-mode/") (:keywords "language"))]) (hackernews . [(20170930 1313) ((json (1 2))) "Access the Hacker News aggregator from Emacs" tar ((:commit . "520e8dca91b8c2bc1de852f577af46ed1b7cabcd"))]) (hacker-typer . [(20170206 720) ((emacs (24))) "Pretend to write code like a pro" tar ((:commit . "d5a23714a4ccc5071580622f278597d5973f40bd") (:url . "http://github.com/therockmandolinist/emacs-hacker-typer") (:keywords "hacker" "typer" "multimedia" "games"))]) (hack-time-mode . [(20170527 910) ((emacs (24 4))) "Forge time" single ((:commit . "73d6fcf8b39283526e5d4e3919193611e25a0898") (:url . "https://gitlab.com/marcowahl/hack-time-mode") (:keywords "time" "convenience"))]) (habitica . [(20171022 1922) ((org (8 3 5)) (emacs (24 3))) "Interface for habitica.com" single ((:commit . "e51ff7436fe1da10404e2c0872b15d6a7a926717") (:url . "https://github.com/abrochard/emacs-habitica") (:keywords "habitica" "todo"))]) (gxref . [(20170411 1053) ((emacs (25))) "xref backend using GNU Global." single ((:commit . "380b02c3c3c2586c828456716eef6a6392bb043b") (:url . "https://github.com/dedi/gxref") (:keywords "xref" "global" "tools"))]) (gvpr-mode . [(20131208 918) nil "A major mode offering basic syntax coloring for gvpr scripts." single ((:commit . "3d6cc6f4416faf2a1913821d12ba6eb624362af0") (:url . "https://raw.github.com/rodw/gvpr-lib/master/extra/gvpr-mode.el") (:keywords "graphviz" "gv" "dot" "gvpr" "graph"))]) (guru-mode . [(20170730 31) nil "Become an Emacs guru" single ((:commit . "c180e05ebc1484764aad245c85b69de779826e4e") (:url . "https://github.com/bbatsov/guru-mode") (:keywords "convenience"))]) (gulp-task-runner . [(20170718 1341) nil "Gulp task runner" single ((:commit . "877990e956b1d71e2d9c7c3e5a129ad199b9debb") (:keywords "convenience" "javascript"))]) (guix . [(20171114 1204) ((emacs (24 3)) (dash (2 11 0)) (geiser (0 8)) (bui (1 1 0)) (magit-popup (2 1 0))) "Interface for GNU Guix" tar ((:commit . "80980e064a9d5f0fa19ad2ac033d104d42021ce8") (:url . "https://alezost.github.io/guix.el/") (:keywords "tools"))]) (guide-key-tip . [(20161011 123) ((guide-key (1 2 3)) (pos-tip (0 4 5))) "Show guide-key.el hints using pos-tip.el" single ((:commit . "02c5d4b0b65f3e91be5a47f0ff1ae5e86e00c64e") (:url . "https://github.com/aki2o/guide-key-tip") (:keywords "help" "convenience" "tooltip"))]) (guide-key . [(20150107 2235) ((dash (2 10 0)) (popwin (0 3 0)) (s (1 9 0))) "Guide the following key bindings automatically and dynamically" single ((:commit . "9236d287a7272e307fb941237390a96037c8c0a2") (:url . "https://github.com/kai2nenobu/guide-key") (:keywords "help" "convenience"))]) (guess-language . [(20170620 308) ((cl-lib (0 5)) (emacs (24))) "Robust automatic language detection" tar ((:commit . "1f1602f74d7159e7fb8c90f92ec5a3d1df5429da") (:url . "https://github.com/tmalsburg/guess-language.el"))]) (gtk-pomodoro-indicator . [(20170517 900) nil "A pomodoro indicator for the GTK tray" tar ((:commit . "0fa0e682b3bd1595f230275d73ca231e93c6d28a") (:url . "https://github.com/abo-abo/gtk-pomodoro-indicator") (:keywords "convenience" "pomodoro"))]) (gscholar-bibtex . [(20170913 1457) nil "Retrieve BibTeX from Google Scholar and other online sources(ACM, IEEE, DBLP)" single ((:commit . "ba4ce159e385d695d8560e8b06b3cbe48424861c") (:keywords "extensions"))]) (gs-mode . [(20151202 206) nil "Major mode for editing GrADS script files" single ((:commit . "1a13051db21b999c7682a015b33a03096ff9d891") (:keywords "grads" "script" "major-mode"))]) (gruvbox-theme . [(20171118 1312) ((autothemer (0 2))) "A retro-groove colour theme for Emacs" tar ((:commit . "87a59d8c3a25ec8bb00dcdef0efac8ac191c4431") (:url . "http://github.com/Greduan/emacs-theme-gruvbox"))]) (grunt . [(20160316 828) ((dash (2 9 0)) (ansi-color (3 4 2)) (emacs (24 3))) "Some glue to stick Emacs and Gruntfiles together" single ((:commit . "4c269e2738658643ec2ed9ef61a2a3d71b08d304") (:url . "https://github.com/gempesaw/grunt.el") (:keywords "convenience" "grunt"))]) (gruber-darker-theme . [(20170719 2229) nil "Gruber Darker color theme for Emacs 24." single ((:commit . "8e6bb26ce0abe20e6129ae8c8ad5c41e0832334e") (:url . "http://github.com/rexim/gruber-darker-theme"))]) (groovy-mode . [(20171024 221) ((s (1 12 0))) "Major mode for Groovy source files" tar ((:commit . "c1e4cf8378bdd7e0d8205b2bcdcb3ff3e05ad8d2") (:keywords "languages"))]) (groovy-imports . [(20161003 151) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Groovy imports" single ((:commit . "e56d7dda617555ec6205644d32ffddf2e1fa43d9") (:url . "http://www.github.com/mbezjak/emacs-groovy-imports") (:keywords "groovy"))]) (grizzl . [(20160818 37) ((cl-lib (0 5)) (emacs (24 3))) "Fast fuzzy search index for Emacs." single ((:commit . "d554d93afa8519ee3a41340ec8aa6b4555065446") (:url . "https://github.com/grizzl/grizzl") (:keywords "convenience" "usability"))]) (grin . [(20110805 2358) nil "run grin and grind (python replacements for grep and find) putting hits in a grep buffer" single ((:url . "http://bitbucket.org/dariusp686/emacs-grin") (:keywords "python" "grin" "grind" "grep" "find"))]) (greymatters-theme . [(20150621 423) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "a7220a8c6cf18ccae2b76946b6f01188a7c9d5d1"))]) (grep-a-lot . [(20131006 647) nil "manages multiple search results buffers for grep.el" single ((:commit . "9f9f645b9e308a0d887b66864ff97d0fca1ba4ad") (:url . "https://github.com/ZungBang/emacs-grep-a-lot") (:keywords "tools" "convenience" "search"))]) (grep+ . [(20170223 728) nil "Extensions to standard library `grep.el'." single ((:url . "https://www.emacswiki.org/emacs/download/grep%2b.el") (:keywords "tools" "processes" "compile"))]) (gregorio-mode . [(20151026 720) nil "Gregorio Mode for .gabc files" single ((:commit . "5b618a8d05cc073bd8e6f1e4e56eceb4de60eab3") (:url . "http://chant.fsspx.pl/gregorio-mode/docs/") (:keywords "gregorio" "chant"))]) (green-screen-theme . [(20171130 234) nil "A nice color theme for those who miss green CRTs" single ((:commit . "c348ea0adf0e6ae99294a05be183a7b425a4bab0") (:url . "https://github.com/rbanffy/green-screen-emacs") (:keywords "faces" "theme"))]) (green-phosphor-theme . [(20150515 747) nil "A light color theme with muted, autumnal colors." single ((:commit . "fa42f598626adfdc5450e5c380fa2d5df6110f28") (:url . "http://github.com/aalpern/emacs-color-theme-green-phosphor") (:keywords "color" "theme"))]) (green-is-the-new-black-theme . [(20171005 1641) nil "A cool and minimalist green blackened theme" single ((:commit . "b9cdecd04691311c30c94ad4ec81124e63b9b122") (:url . "https://github.com/fredcamps/green-is-the-new-black-emacs") (:keywords "faces" "themes"))]) (grayscale-theme . [(20171005 102) nil "A simple grayscale theme" single ((:commit . "53ad50e10e68f2f076ebfc96e10ecef7a932d38d") (:url . "https://github.com/belak/emacs-grayscale-theme") (:keywords "lisp"))]) (grass-mode . [(20170503 800) ((cl-lib (0 2)) (dash (2 8 0))) "Provides Emacs modes for interacting with the GRASS GIS program" single ((:keywords "grass" "gis"))]) (grapnel . [(20131001 834) nil "HTTP request lib with flexible callback dispatch" single ((:commit . "fbd0f9a51139973d35e4014855964fa435e8ecaf") (:url . "http://www.github.com/leathekd/grapnel"))]) (graphviz-dot-mode . [(20171103 127) nil "Mode for the dot-language used by graphviz (att)." single ((:commit . "c456a2b65c734089e6c44e87209a5a432a741b1a") (:url . "http://ppareit.github.com/graphviz-dot-mode/") (:keywords "mode" "dot" "dot-language" "dotlanguage" "graphviz" "graphs" "att"))]) (graphql-mode . [(20171102 1606) ((emacs (24 3)) (request (20170131 1747))) "Major mode for editing GraphQL schemas" single ((:commit . "1f3bd34b18a41dbda75a0baee38aa0f0f1fffb7a") (:keywords "languages"))]) (graphene-meta-theme . [(20161204 807) nil "Integrated theming for common packages" single ((:commit . "62cc73fee31f1bd9474027b83a249feee050271e") (:url . "https://github.com/rdallasgray/graphene") (:keywords "defaults"))]) (graphene . [(20171125 854) ((dash (2 10 0)) (exec-path-from-shell (1 9)) (ppd-sr-speedbar (0 0 6)) (sr-speedbar (20140505)) (ido-completing-read+ (4 3)) (smex (3 0)) (web-mode (11 2)) (smartparens (1 8 0)) (graphene-meta-theme (0 0 2)) (flycheck (0 23)) (company (0 8 12))) "Friendly Emacs defaults" tar ((:commit . "9dbd50e532ca45076e03db0f96a57d21528fc460"))]) (grandshell-theme . [(20171203 613) nil "Dark color theme for Emacs > 24 with intensive colors." tar ((:commit . "50f4fc97709329be2f76bbbc338d24031a001ce2"))]) (grails-projectile-mode . [(20160327 624) ((projectile (0 10 0)) (emacs (24)) (cl-lib (0 5))) "Grails mode with Projectile for projects management." tar ((:commit . "8efca50ce92b556fe9d467b157d7aec635bcc017") (:url . "https://github.com/yveszoundi/grails-projectile-mode") (:keywords "grails" "projectile"))]) (grails-mode . [(20160504 211) nil "minor-mode that adds some Grails project management to a grails project" single ((:commit . "c1e4cf8378bdd7e0d8205b2bcdcb3ff3e05ad8d2") (:url . "http://blog.wolfman.com") (:keywords "languages"))]) (grails . [(20160416 2336) ((emacs (24))) "Minor mode for Grails projects" single ((:commit . "fa638abe5c37f3f8af4fcd32f212453185ce50b1") (:url . "https://github.com/lifeisfoo/emacs-grails"))]) (gradle-mode . [(20150313 1205) ((s (1 8 0))) "Gradle integration with Emacs' compile" single ((:commit . "e4d665d5784ecda7ddfba015f07c69be3cfc45f2") (:url . "http://github.com/jacobono/emacs-gradle-mode") (:keywords "gradle"))]) (grab-x-link . [(20161130 2147) ((emacs (24)) (cl-lib (0 5))) "Grab links from X11 apps and insert into Emacs" single ((:commit . "d2ef886097f59e1facc5cb5d8cd1c77bf340be76") (:url . "https://github.com/xuchunyang/grab-x-link") (:keywords "hyperlink"))]) (grab-mac-link . [(20171117 1047) ((emacs (24))) "Grab link from Mac Apps and insert it into Emacs" single ((:commit . "efac050750551fcbe323c44d94f49ac8c75ae845") (:url . "https://github.com/xuchunyang/grab-mac-link.el") (:keywords "markdown" "mac" "hyperlink"))]) (govet . [(20170808 1024) nil "linter/problem finder for the Go source code" single ((:commit . "1c05817cf8b96589076c7ac4e52ee58a860a0cbf") (:url . "https://godoc.org/golang.org/x/tools/cmd/vet"))]) (govc . [(20171108 1429) ((emacs (24 3)) (dash (1 5 0)) (s (1 9 0)) (magit-popup (2 0 50)) (json-mode (1 6 0))) "Interface to govc for managing VMware ESXi and vCenter" single ((:commit . "a1c4929294088f982a1edff1b90c5874ad436639") (:url . "https://github.com/vmware/govmomi/tree/master/govc/emacs") (:keywords "convenience"))]) (goto-last-change . [(20150109 1023) nil "Move point through buffer-undo-list positions" single ((:commit . "58b0928bc255b47aad318cd183a5dce8f62199cc") (:url . "https://github.com/camdez/goto-last-change.el") (:keywords "convenience"))]) (goto-gem . [(20140729 1145) ((s (1 9 0))) "Open dired in gem directory" single ((:commit . "e3206f11f48bb7e798514a4ca2c2f60649613e5e") (:keywords "gemfile" "convenience"))]) (goto-chg . [(20170917 1200) nil "goto last change" single ((:commit . "81fca94d2592cf32bab451c39a9cd2d9b03fbd6b") (:keywords "convenience" "matching"))]) (gotham-theme . [(20171013 1216) nil "A very dark Emacs color theme." single ((:commit . "5e97554d1f9639698faedb0660e63694be33bd84") (:url . "https://github.com/wasamasa/gotham-theme"))]) (gotest . [(20170823 141) ((emacs (24 3)) (s (1 11 0)) (f (0 19 0)) (go-mode (1 5 0))) "Launch GO unit tests" single ((:commit . "8a5ef7363f83edb3b77c5e23876f13dd8c23b2b9") (:url . "https://github.com/nlamirault/gotest.el") (:keywords "languages" "go" "tests"))]) (gorepl-mode . [(20170905 245) ((emacs (24)) (s (1 11 0)) (f (0 19 0)) (hydra (0 13 0))) "Go REPL Interactive Development in top of Gore" single ((:commit . "bbd27f6a0a77f484e2a3f082d70dc69da63ae52a") (:url . "http://www.github.com/manute/gorepl-mode") (:keywords "languages" "go" "golang" "gorepl"))]) (gore-mode . [(20151123 1127) ((go-mode (1 0 0))) "Simple mode for gore, a command-line evaluator for golang." single ((:commit . "94d7f3e99104e06167967c98fdc201049c433c2d") (:keywords "go" "repl"))]) (goose-theme . [(20160828 545) ((emacs (24 1))) "A gray color theme" single ((:commit . "acd017b50ab25a75fd1331eb3de66467e2042e9c") (:url . "https://github.com/thwg/goose-theme"))]) (google-translate . [(20170713 119) nil "Emacs interface to Google Translate." tar ((:commit . "d8b84a8359fcc697114d1298840e9a45b111c974"))]) (google-this . [(20170810 515) ((emacs (24 1))) "A set of functions and bindings to google under point." single ((:commit . "8a2e3ca5da6a8c89bfe99a21486c6c7db125dc84") (:url . "http://github.com/Malabarba/emacs-google-this") (:keywords "convenience" "hypermedia"))]) (google-maps . [(20171002 734) ((emacs (24 3))) "Access Google Maps from Emacs" tar ((:commit . "c0e5dccfdc9f7f77ff8f29177547be47833d7156") (:url . "https://julien.danjou.info/projects/emacs-packages#google-maps") (:keywords "comm"))]) (google-contacts . [(20171027 1033) ((oauth2 (0 10)) (cl-lib (0 5))) "Support for Google Contacts in Emacs" tar ((:commit . "a40389bae006ae094aeb1a39fae9891ca687c0fa") (:url . "http://julien.danjou.info/projects/emacs-packages#google-contacts") (:keywords "comm"))]) (google-c-style . [(20140929 1118) nil "Google's C/C++ style for c-mode" single ((:commit . "9663cabfeeea8f1307b1acde59471f74953b8fa9") (:keywords "c" "tools"))]) (google . [(20140416 1048) nil "Emacs interface to the Google API" single ((:commit . "3b3189a8b201c8d36fed6e61496274e530dd40bd") (:keywords "comm" "processes" "tools"))]) (gom-mode . [(20131007 1953) nil "Major mode for Gomfile" single ((:commit . "972e33df1d38ff323bc97de87477305826013701") (:url . "https://github.com/syohex/emacs-gom-mode"))]) (golint . [(20150414 1730) nil "lint for the Go source code" single ((:commit . "f635bddafc7154957bd70209ee858a4b97e64a9b") (:url . "https://github.com/golang/lint"))]) (golden-ratio-scroll-screen . [(20170223 1829) nil "Scroll half screen down or up, and highlight current line" single ((:commit . "44e947194d3e5cbe0fd2f3c4886a4e6e1a0c0791") (:url . "https://github.com/jixiuf/golden-ratio-scroll-screen") (:keywords "scroll" "screen" "highlight"))]) (golden-ratio . [(20150819 420) nil "Automatic resizing of Emacs windows to the golden ratio" single ((:commit . "72b028808b41d23fa3f7e8c0d23d2c475e7b46ae") (:keywords "window" "resizing"))]) (gold-mode . [(20140606 1906) ((sws-mode (0))) "Major mode for editing .gold files" single ((:commit . "6d3aa59602b1b835495271c8c9741ac344c2eab1") (:url . "https://github.com/yuutayamada/gold-mode-el") (:keywords "golang" "template" "gold"))]) (godoctor . [(20161205 143) nil "Frontend for godoctor" single ((:commit . "f892a4dbabe61186540d6035c5185fd929a6a543") (:url . "https://github.com/microamp/godoctor.el") (:keywords "go" "golang" "refactoring"))]) (god-mode . [(20151005 925) nil "God-like command entering minor mode" tar ((:commit . "6cf0807b6555eb6fcf8387a4e3b667071ef38964") (:url . "https://github.com/chrisdone/god-mode"))]) (gobgen . [(20161020 823) ((emacs (24 4))) "Generate GObject descendants using a detailed form" single ((:commit . "ed2c2b0d217deae293096f3cf14aa492791ddd4f") (:keywords "gobject" "glib" "gtk" "helper" "utilities"))]) (go-tag . [(20171204 1903) ((emacs (24 0)) (go-mode (1 3 1))) "Edit Golang struct field tag" single ((:commit . "0577599418e5824b36f09373f5f1f6f247da0d3a") (:url . "https://github.com/brantou/emacs-go-tag") (:keywords "tools"))]) (go-stacktracer . [(20150430 1442) nil "parse Go stack traces" single ((:commit . "a2ac6d801b389f80ca4e2fcc1ab44513a9e55976") (:url . "https://github.com/samertm/go-stacktracer.el") (:keywords "tools"))]) (go-snippets . [(20170831 2302) ((yasnippet (0 8 0))) "Yasnippets for go" tar ((:commit . "7e38fc0ddf2cc786cdb273882ff9b3563abc3c7a"))]) (go-scratch . [(20150809 2140) ((go-mode (1 3 1)) (emacs (24))) "*scratch* buffer for Go" single ((:commit . "3f68cbcce04f59eb8e83af109164731ec0454be0") (:keywords "languages" "go"))]) (go-rename . [(20161117 331) ((go-mode (1 3 1))) "Integration of the 'gorename' tool into Emacs." single ((:commit . "7eb5b3dd0ac31d176e9d56da4172f66aef8fae47") (:keywords "tools"))]) (go-projectile . [(20170302 1705) ((projectile (0 10 0)) (go-mode (0)) (go-eldoc (0 16)) (go-rename (0)) (go-guru (0))) "Go add-ons for Projectile" single ((:commit . "4c449eae696d4e3a15078c336c98ea779da227ab") (:url . "https://github.com/dougm/go-projectile") (:keywords "project" "convenience"))]) (go-playground-cli . [(20160503 214) ((emacs (24)) (request (0 2 0)) (deferred (0 3 2)) (names (20151201 404)) (s (1 10 0)) (f (0 17 2)) (let-alist (1 0 4)) (cl-lib (0 5))) "Go Playground client tool" single ((:commit . "60beebd98e3930641d41cee0189c579626f223bc") (:url . "https://github.com/kosh04/go-playground-cli"))]) (go-playground . [(20170226 43) ((emacs (24)) (go-mode (1 4 0)) (gotest (0 13 0))) "Local Golang playground for short snippets." single ((:commit . "559d53bbc507394aaca3683325d17286637bf4f0") (:url . "https://github.com/grafov/go-playground") (:keywords "tools" "golang"))]) (go-mode . [(20170726 555) nil "Major mode for the Go programming language" single ((:commit . "7eb5b3dd0ac31d176e9d56da4172f66aef8fae47") (:url . "https://github.com/dominikh/go-mode.el") (:keywords "languages" "go"))]) (go-impl . [(20170125 752) ((emacs (24 3)) (go-mode (1 3 0))) "impl integration for go-mode" single ((:commit . "69f0d0ef05771487e15abec500cd06befd171abf") (:url . "https://github.com/syohex/emacs-go-impl"))]) (go-guru . [(20170718 1046) ((go-mode (1 3 1)) (cl-lib (0 5))) "Integration of the Go 'guru' analysis tool into Emacs." single ((:commit . "7eb5b3dd0ac31d176e9d56da4172f66aef8fae47") (:keywords "tools"))]) (go-gopath . [(20160705 334) ((cl-lib (0 5))) "Will guess GOPATH using gb and projectile." single ((:commit . "5172fc53f21edbf9347d5ee7d1d745da1ec88a15") (:url . "http://github.com/iced/go-gopath/"))]) (go-gen-test . [(20171022 2058) ((emacs (24 3)) (s (1 12))) "Generate tests for go code with gotests" single ((:commit . "44c202ac97e728e93a35cee028a0ea8dd6e4292c") (:url . "https://github.com/s-kostyaev/go-gen-test") (:keywords "languages"))]) (go-errcheck . [(20160722 1743) nil "errcheck integration for go-mode" single ((:commit . "9db21eccecedc2490793f176246094167164af31"))]) (go-eldoc . [(20170305 627) ((emacs (24 3)) (go-mode (1 0 0))) "eldoc for go-mode" single ((:commit . "cbbd2ea1e94a36004432a9ac61414cb5a95a39bd") (:url . "https://github.com/syohex/emacs-go-eldoc"))]) (go-dlv . [(20160517 1346) ((go-mode (1 3 1))) "Go Delve - Debug Go programs interactively with the GUD." single ((:commit . "45a9e8a047c9995eb7c802268d96b3e527569f41") (:url . "https://github.com/benma/go-dlv.el/") (:keywords "go" "debug" "debugger" "delve" "interactive" "gud"))]) (go-direx . [(20150315 1843) ((direx (1 0 0)) (cl-lib (0 5))) "Tree style source code viewer for Go language" single ((:commit . "8f2206469328ee932c7f1892f5e1fb02dec98432") (:url . "https://github.com/syohex/emacs-go-direx"))]) (go-complete . [(20151015 228) ((go-mode (0)) (cl-lib (0 5))) "Native code completion for Go" single ((:commit . "e39efc356f6e19f17db3f3d2c81f28d38b31a55e") (:url . "https://github.com/vibhavp/go-complete") (:keywords "go" "golang" "completion"))]) (go-autocomplete . [(20170626 323) ((auto-complete (1 4 0))) "auto-complete-mode backend for go-mode" single ((:commit . "e990796e68a2ebfc099afed20b99e26d6b64061a") (:keywords "languages"))]) (go-add-tags . [(20161123 427) ((emacs (24 3)) (s (1 11 0))) "Add field tags for struct fields" single ((:commit . "54879945e46a0884c5f93d7fd6c866a9cdf401ac") (:url . "https://github.com/syohex/emacs-go-add-tags"))]) (go . [(20161110 1849) ((emacs (24))) "Play GO, translate and transfer between GO back ends" tar ((:commit . "ff45fb44d9cb6579d8511d8b6156ed0b34d5ac97") (:url . "http://eschulte.github.io/el-go/") (:keywords "game" "go" "sgf"))]) (gnus-x-gm-raw . [(20140610 31) ((log4e (0 2 0)) (yaxception (0 1))) "Search mail of Gmail using X-GM-RAW as web interface" single ((:commit . "978bdfcecc8844465b71641c2e909fcdc66b22be") (:url . "https://github.com/aki2o/gnus-x-gm-raw") (:keywords "gnus"))]) (gnus-summary-ext . [(20171201 1850) nil "Extra limit and process mark commands for the gnus summary buffer" single ((:commit . "fa75cdccc4d0775c775bae1ef92f4429e0341a37") (:url . "https://github.com/vapniks/gnus-summary-ext") (:keywords "comm"))]) (gnus-spotlight . [(20130901 735) nil "Search mail with Spotlight" single ((:keywords "mail" "searching" "spotlight"))]) (gnus-select-account . [(20170721 2211) nil "Select an account before writing a mail in gnus" single ((:commit . "ddc8c135eeaf90f5b6692a033af2badae36e68ce") (:url . "https://github.com/tumashu/gnus-select-account") (:keywords "convenience"))]) (gnus-desktop-notify . [(20171007 1235) ((gnus (1 0))) "Gnus Desktop Notification global minor mode" single ((:commit . "52e5de0961ce0f6890d5e7f26bc05152b99d9979") (:url . "http://www.thregr.org/~wavexx/software/gnus-desktop-notify.el/"))]) (gnus-alias . [(20150315 1742) nil "an alternative to gnus-posting-styles" single ((:commit . "9447d3ccb4c0e75d0468899cccff7aa249657bac") (:keywords "personality" "identity" "news" "mail" "gnus"))]) (gnuplot-mode . [(20171013 916) nil "Major mode for editing gnuplot scripts" single ((:commit . "601f6392986f0cba332c87678d31ae0d0a496ce7") (:url . "https://github.com/mkmcc/gnuplot-mode") (:keywords "gnuplot" "plotting"))]) (gnuplot . [(20141231 1337) nil "drive gnuplot from within emacs" tar ((:commit . "21f9046e3f5caad41b750b5c9cee02fa4fd20fb9") (:keywords "gnuplot" "plotting"))]) (gnu-apl-mode . [(20170406 732) ((emacs (24))) "Integrate GNU APL with Emacs" tar ((:commit . "d79e519308727dec897f2574c938c6425b9a30c2") (:keywords "languages" "apl") (:url . "https://github.com/lokedhs/gnu-apl-mode"))]) (gntp . [(20141024 1950) nil "Growl Notification Protocol for Emacs" single ((:commit . "767571135e2c0985944017dc59b0be79af222ef5"))]) (gnomenm . [(20150316 1218) ((s (1 9 0)) (dash (2 3 0)) (kv (0 0 19))) "Emacs interface to Gnome nmcli command" single ((:commit . "9065cda44ffc9e06239b8189a0154d31314c3b4d") (:url . "http://github.com/nicferrier/emacs-nm") (:keywords "processes" "hardware"))]) (gnome-calendar . [(20161110 456) nil "Integration with the GNOME Shell calendar" single ((:commit . "489f9f15f7bb35696b1cc19db75b554ae8328df2") (:keywords "gnome" "calendar"))]) (gmpl-mode . [(20171031 1354) ((emacs (24))) "Major mode for editing GMPL(MathProg) files" single ((:commit . "c5d362169819ee8b8e8954145daee7e260c54921") (:keywords "extensions"))]) (gmail2bbdb . [(20170423 444) nil "import email and name into bbdb from vcard." single ((:commit . "a84fa385cfaec7fc5f1518c368e52722da139f99") (:url . "http://github.com/redguardtoo/gmail2bbdb") (:keywords "vcard" "bbdb" "email" "contact" "gmail"))]) (gmail-message-mode . [(20160627 1147) ((ham-mode (1 0))) "A major-mode for editing gmail messages using markdown syntax." single ((:commit . "ec36672a9dc93c09ebe2f77597b498d11883d008") (:url . "http://github.com/Bruce-Connor/gmail-message-mode") (:keywords "mail" "convenience" "emulation"))]) (glsl-mode . [(20170927 736) nil "major mode for Open GLSL shader files" single ((:commit . "384968506cf25c5c2df61b32fdfdbd041e3bf651") (:url . "http://artis.inrialpes.fr/~Xavier.Decoret/resources/glsl-mode/") (:keywords "languages"))]) (glab . [(20170924 359) ((emacs (25))) "minuscule client for the Gitlab API" single ((:commit . "9848182275e0448390ccdd8dcd8e1e3a1853950c") (:url . "https://gitlab.com/tarsius/glab") (:keywords "tools"))]) (gl-conf-mode . [(20170714 610) ((emacs (24 3))) "Mode for editing gitolite config files" single ((:commit . "9136a9b737e0a5b6471a91571d104c487c43f35b") (:url . "https://github.com/llloret/gitolite-emacs") (:keywords "git" "gitolite" "languages"))]) (gitter . [(20161203 9) ((emacs (24 4)) (let-alist (1 0 4))) "An Emacs Gitter client" single ((:commit . "3ff1c72ee85be4e3b648b4c52b0638129f3cf7a6") (:url . "https://github.com/xuchunyang/gitter.el") (:keywords "gitter" "chat" "client" "internet"))]) (gitpatch . [(20170721 2110) ((emacs (24 3))) "Git-format patch toolkit" single ((:commit . "577d5adf65c8133caa325c10e89e1e2fc323c907") (:url . "https://github.com/tumashu/gitpatch") (:keywords "convenience"))]) (gitolite-clone . [(20160609 1655) ((dash (2 10 0)) (s (1 9 0)) (pcache (0 3 1)) (emacs (24))) "Clone gitolite repositories from a completing list" single ((:commit . "d8a4c2875c984e51137c980b5773f42703602721") (:url . "https://github.com/IvanMalison/gitolite-clone") (:keywords "gitolite" "clone" "git"))]) (gitlab . [(20170710 724) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client for Gitlab" tar ((:commit . "67567a354a1888419331b79862f151817d9747c5") (:url . "https://github.com/nlamirault/emacs-gitlab") (:keywords "gitlab"))]) (gitignore-mode . [(20160319 302) nil "Major mode for editing .gitignore files" single ((:commit . "9f18eca514d242816a4969e86c4cfd2cf4dfe401") (:url . "https://github.com/magit/git-modes") (:keywords "convenience" "vc" "git"))]) (github-theme . [(20170630 1501) nil "The GitHub color theme for Emacs." single ((:commit . "29f00a51d949a248a5f6355a97131e216747c797") (:url . "https://github.com/philiparvidsson/GitHub-Theme-for-Emacs"))]) (github-search . [(20170823 2023) ((magit (0 8 1)) (gh (1 0 0))) "Clone repositories by searching github" single ((:commit . "c5fa1d9f8f9bcf201fa31478a6f5e02ed5ac086b") (:url . "https://github.com/IvanMalison/github-search") (:keywords "github" "search" "clone" "api" "gh" "magit" "vc" "tools"))]) (github-pullrequest . [(20170115 2216) ((emacs (24 4)) (request (0 2 0)) (dash (2 11 0)) (magit (2 10 0))) "Create and fetch Github Pull requests with ease" single ((:commit . "6ae5c38b0fc15b638b5ba4490112d9822ce5e267") (:url . "https://github.com/jakoblind/github-pullrequest") (:keywords "tools"))]) (github-notifier . [(20170604 2119) ((emacs (24))) "Displays your GitHub notifications unread count in mode-line" single ((:commit . "f8d011ebef9f626a94a27b5576c8ed06e6ff8987") (:url . "https://github.com/xuchunyang/github-notifier.el") (:keywords "github" "mode-line"))]) (github-modern-theme . [(20171109 451) nil "The GitHub color theme for Emacs." single ((:commit . "a7e7b8e5e9c122138e79e837caf9b7299e748d44") (:url . "https://github.com/philiparvidsson/GitHub-Theme-for-Emacs"))]) (github-issues . [(20160616 1141) ((emacs (24))) "Functions and modes for managing GitHub projects' issues" single ((:commit . "816f7712b0eb05bffec0add3507302862d2629c4") (:url . "http://inkel.github.com/github-issues.el/") (:keywords "github" "issues"))]) (github-elpa . [(20160922 907) ((package-build (1 0)) (commander (0 7 0)) (git (0 1 1))) "Build and publish ELPA repositories with GitHub Pages" tar ((:commit . "7619a564edb1985b0487786a3b4ec6d12f897b5b") (:url . "https://github.com/10sr/github-elpa"))]) (github-clone . [(20160622 2010) ((gh (0 7 2)) (magit (2 1 0)) (emacs (24 4))) "Fork and clone github repos" single ((:commit . "467b40ca60a6c26257466ebc43c74414df7f19cc") (:url . "https://github.com/dgtized/github-clone.el") (:keywords "vc" "tools"))]) (github-browse-file . [(20160205 627) ((cl-lib (0 5))) "View the file you're editing on GitHub" single ((:commit . "9742a5183af853788c6ecb83fb7ee0b00d1675ac") (:url . "https://github.com/osener/github-browse-file") (:keywords "convenience" "vc" "git" "github"))]) (gitconfig-mode . [(20170627 854) nil "Major mode for editing .gitconfig files" single ((:commit . "9f18eca514d242816a4969e86c4cfd2cf4dfe401") (:url . "https://github.com/magit/git-modes") (:keywords "convenience" "vc" "git"))]) (gitconfig . [(20130718 235) nil "Emacs lisp interface to work with git-config variables" single ((:commit . "7612a37ca14009cac8fb8d6b6f54adad739a5741") (:keywords "git" "gitconfig" "git-config"))]) (gitattributes-mode . [(20170118 1613) nil "Major mode for editing .gitattributes files" single ((:commit . "9f18eca514d242816a4969e86c4cfd2cf4dfe401") (:url . "https://github.com/magit/git-modes") (:keywords "convenience" "vc" "git"))]) (git-wip-timemachine . [(20150408 306) ((s (1 9 0))) "Walk through git-wip revisions of a file" single ((:commit . "ed4c7931a5f5233bf3e358b1e81647d063526460") (:url . "https://github.com/itsjeyd/git-wip-timemachine") (:keywords "git"))]) (git-timemachine . [(20170325 220) ((emacs (24 3))) "Walk through git revisions of a file" single ((:commit . "7cb0d03bc370d3e734c8ee23b809a4e768b01743") (:url . "https://github.com/pidu/git-timemachine") (:keywords "git"))]) (git-ps1-mode . [(20170102 1944) nil "Global minor-mode to print __git_ps1" single ((:commit . "e41c630f5d04cb1a4d38a4b500d7a154a96a4655") (:url . "https://github.com/10sr/git-ps1-mode-el") (:keywords "utility" "mode-line" "git"))]) (git-messenger . [(20170101 2040) ((emacs (24 3)) (popup (0 5 0))) "Pop up last commit information of current line" single ((:commit . "83815915eb8c1cb47443ff34bca3fecf7d2edf3a") (:url . "https://github.com/syohex/emacs-git-messenger"))]) (git-link . [(20170603 1026) ((cl-lib (0 6 1))) "Get the GitHub/Bitbucket/GitLab URL for a buffer location" single ((:commit . "472af75eca7aba42a1934f408c4bda55e34c9dcf") (:url . "http://github.com/sshaw/git-link") (:keywords "git" "vc" "github" "bitbucket" "gitlab" "convenience"))]) (git-lens . [(20170517 144) ((emacs (24 4))) "Show new, deleted or modified files in branch" single ((:commit . "91bf19d6dd7368de5cad373a8155c48c4e254723") (:keywords "vc" "convenience"))]) (git-gutter-fringe . [(20170112 2133) ((git-gutter (0 88)) (fringe-helper (0 1 1)) (cl-lib (0 5)) (emacs (24))) "Fringe version of git-gutter.el" single ((:commit . "16226caab44174301f1659f7bf8cc67a76153445") (:url . "https://github.com/syohex/emacs-git-gutter-fringe"))]) (git-gutter-fringe+ . [(20140729 403) ((git-gutter+ (0 1)) (fringe-helper (1 0 1))) "Fringe version of git-gutter+.el" single ((:commit . "7a2f49d2455a3a872e90e5f7dd4e6b27f1d96cfc") (:url . "https://github.com/nonsequitur/git-gutter-fringe-plus"))]) (git-gutter . [(20161105 656) ((emacs (24 3))) "Port of Sublime Text plugin GitGutter" single ((:commit . "00c05264af046b5ce248e5b0bc42f117d9c27a09") (:url . "https://github.com/syohex/emacs-git-gutter"))]) (git-gutter+ . [(20151204 923) ((git-commit (0)) (dash (0))) "Manage Git hunks straight from the buffer" single ((:commit . "b7726997806d9a2da9fe84ff00ecf21d62b6f975") (:url . "https://github.com/nonsequitur/git-gutter-plus") (:keywords "git" "vc"))]) (git-dwim . [(20170126 414) nil "Context-aware git commands such as branch handling" single ((:commit . "485c732130686c2f28a026e385366006435394b9") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/git-dwim.el") (:keywords "git" "tools" "convenience"))]) (git-commit-insert-issue . [(20171102 1141) ((projectile (0)) (s (0)) (github-issues (0)) (gitlab (0)) (bitbucket (0))) "Get issues list when typing \"Fixes #\"" single ((:commit . "f986923b04b587206ce7ee8e0c456768600e8be7") (:url . "https://gitlab.com/emacs-stuff/git-commit-insert-issue/") (:keywords "git" "github" "gitlab" "bitbucket" "commit" "issues"))]) (git-commit . [(20171203 1127) ((emacs (24 4)) (dash (20170810)) (with-editor (20170817))) "Edit Git commit messages" single ((:commit . "dc857e2ed4ca666bb721fc4d88790cd73349f5f4") (:url . "https://github.com/magit/magit") (:keywords "git" "tools" "vc"))]) (git-command . [(20160111 503) ((term-run (0 1 4)) (with-editor (2 3 1))) "Yet another Git interface" single ((:commit . "dce465ca1cd80e16df0f8dce8e427a76e9edc3b7") (:url . "https://github.com/10sr/git-command-el") (:keywords "utility" "git"))]) (git-blamed . [(20161028 1226) nil "Minor mode for incremental blame for Git" single ((:commit . "cef196abf398e2dd11f775d1e6cd8690567408aa") (:keywords "git" "version control" "release management"))]) (git-auto-commit-mode . [(20161229 817) nil "Emacs Minor mode to automatically commit and push" single ((:commit . "2c8197e5d7813734d6a49f9b9c0b227b7ae022a8") (:url . "http://projects.ryuslash.org/git-auto-commit-mode/") (:keywords "vc"))]) (git-annex . [(20170417 1653) nil "Mode for easy editing of git-annex'd files" single ((:commit . "22b7161adcd144f88681b9b904972cea42b27fca") (:url . "https://github.com/jwiegley/git-annex-el") (:keywords "files" "data" "git" "annex"))]) (git . [(20140128 241) ((s (1 7 0)) (dash (2 2 0)) (f (0 10 0))) "An Elisp API for programmatically using Git" single ((:commit . "a3396a7027a7d986598c6a2d6d5599bac918f3da") (:url . "http://github.com/rejeep/git.el") (:keywords "git"))]) (gist . [(20171127 2006) ((emacs (24 1)) (gh (0 10 0))) "Emacs integration for gist.github.com" single ((:commit . "b2712a61d04af98a05cc2556d85479803b6626be") (:url . "https://github.com/defunkt/gist.el") (:keywords "tools"))]) (gildas-mode . [(20150919 1501) ((polymode (0)) (emacs (24 3))) "Major mode for Gildas" single ((:commit . "23e8a2e6066ff74af592de6d5d0d858442e2bf8a") (:url . "https://github.com/smaret/gildas-mode") (:keywords "languages" "gildas"))]) (gift-mode . [(20171121 653) nil "major mode for editing GIFT format quizzes" single ((:commit . "f8c9a495e3c6a47dbfdcb719bcbd0f8522297340") (:url . "https://github.com/csrhodes/gift-mode"))]) (ghub . [(20171211 935) ((emacs (24 4)) (let-alist (1 0 5))) "minuscule client library for the Github API" tar ((:commit . "ce58c98419ec2d197e163ddb609aee0434fd4f12") (:url . "https://github.com/magit/ghub") (:keywords "tools"))]) (ghub+ . [(20171203 1627) ((emacs (25)) (ghub (1 2)) (apiwrap (0 3))) "a thick GitHub API client built on ghub" single ((:commit . "4c4a1d009790a805404edf72ff55df6fce3645a7") (:url . "https://github.com/vermiculus/ghub-plus") (:keywords "extensions" "multimedia" "tools"))]) (ghq . [(20160803 857) nil "Ghq interface for emacs" single ((:commit . "aae4b8cb22fd6c24d2c9e3962c7e8e9dac6d9825") (:keywords "ghq"))]) (ghost-blog . [(20171023 42) ((markdown-mode (1 0))) "A package to manage Ghost blog" single ((:commit . "71b358643cc9a2db1bf752281ff94aba9b59e4cc") (:url . "https://github.com/javaguirre/ghost-blog") (:keywords "ghost" "blog"))]) (gherkin-mode . [(20140107 804) nil "An emacs major mode for editing gherkin files." single ((:commit . "ff9e47350c5ba319feb6b87fe20695519681fa64") (:keywords "languages"))]) (ghci-completion . [(20151125 457) ((emacs (24 1)) (cl-lib (0 5))) "Completion for GHCi commands in inferior-haskell buffers" single ((:commit . "c47e23d585d2a3c7b13aac163693fdc4f2bb90e5") (:keywords "convenience"))]) (ghc-imported-from . [(20141124 1132) ((emacs (24 1))) "Haskell documentation lookup with ghc-imported-from" single ((:commit . "fcff08628a19f5d26151564659218cc677779b79") (:keywords "languages"))]) (ghc . [(20170613 1212) ((haskell-mode (13 0))) "Sub mode for Haskell mode" tar ((:commit . "06515c44830788254602af90118de07ae2effb12"))]) (gh-md . [(20151207 940) ((emacs (24))) "Render markdown using the Github api" single ((:commit . "693cb0dcadff70e813e1a9d303d227aff7898557") (:url . "https://github.com/emacs-pe/gh-md.el") (:keywords "convenience"))]) (gh . [(20171120 1302) ((emacs (24 3)) (s (1 9 0)) (dash (2 9 0)) (pcache (0 4 1)) (logito (0 1)) (marshal (0 6 3))) "A GitHub library for Emacs" tar ((:commit . "458aa6e6b107a4b30b64939233c107d1378d0402"))]) (ggtags . [(20171203 1553) ((emacs (24)) (cl-lib (0 5))) "emacs frontend to GNU Global source code tagging system" single ((:commit . "eec392d2d639030c5a51bce8431f2815ad8e7bc5") (:url . "https://github.com/leoliu/ggtags") (:keywords "tools" "convenience"))]) (ggo-mode . [(20130524 443) nil "Gengetopt major mode" single ((:commit . "e326899d9ed8217c7a4ea6cfdc4dd7aea61d6c1b") (:keywords "extensions" "convenience" "local"))]) (gerrit-download . [(20150714 708) ((emacs (24 0)) (magit (2 1 0))) "Show gerrit reviews in a diff buffer." single ((:commit . "d568acc7c5935188c9bc19ba72719a6092d9f6fd") (:url . "https://github.com/chmouel/gerrit-download.el") (:keywords "tools" "gerrit" "git"))]) (german-holidays . [(20161011 13) nil "German holidays for Emacs calendar" single ((:commit . "d7d540c229c1a8be68ee09fbda08fe3ea31b7d29") (:url . "https://github.com/rudolfochrist/german-holidays"))]) (genrnc . [(20140612 537) ((deferred (0 3 1)) (concurrent (0 3)) (log4e (0 2 0)) (yaxception (0 1))) "generate RELAX NG Compact Schema from RELAX NG Schema, XML Schema and DTD." tar ((:commit . "da75b1966a73ad215ec2ced4522c25f4d0bf1f9a") (:url . "https://github.com/aki2o/emacs-genrnc") (:keywords "xml"))]) (general . [(20171208 9) ((emacs (24 4)) (cl-lib (0 5))) "Convenience wrappers for keybindings." single ((:commit . "bb9eb875b4cc8bbed1489a10d473a7f33f5461ff") (:url . "https://github.com/noctuid/general.el") (:keywords "vim" "evil" "leader" "keybindings" "keys"))]) (geiser . [(20171210 845) nil "GNU Emacs and Scheme talk to each other" tar ((:commit . "473ef183d6c2c205699b7a865a206f579e60ce17") (:url . "http://www.nongnu.org/geiser/"))]) (geeknote . [(20160717 549) ((emacs (24))) "Use Evernote in Emacs through geeknote" single ((:commit . "8ed607c76864afcc9c338972ab093caf4501cbf8") (:url . "http://github.com/avendael/emacs-geeknote") (:keywords "evernote" "geeknote" "note" "emacs-evernote" "evernote-mode"))]) (geben-helm-projectile . [(20160610 1759) ((emacs (24)) (geben (0 26)) (helm-projectile (0 13 0))) "Integrate helm-projectile with geben" single ((:commit . "31ce0faca5dcc71924884f03fd5a7a25d00ccd9b") (:url . "https://github.com/ahungry/geben-helm-projectile") (:keywords "ahungry" "emacs" "geben" "helm" "projectile" "debug"))]) (geben . [(20170801 551) ((emacs (24 3)) (cl-lib (0 5))) "DBGp protocol frontend, a script debugger" tar ((:commit . "ec3f5e9376cf1ea5615990bd8c212543d57f033b") (:url . "https://github.com/ahungry/geben") (:keywords "c" "comm" "tools"))]) (gather . [(20141230 538) nil "Gather string in buffer." single ((:commit . "50809fbc22d70a1c724c2dd99ac5a1f818ffeb6b") (:url . "https://github.com/mhayashi1120/Emacs-gather/raw/master/gather.el") (:keywords "matching" "convenience" "tools"))]) (gap-mode . [(20160204 736) nil "Major mode for editing files in the GAP programing language." tar ((:url . "https://bitbucket.org/gvol/gap-mode") (:keywords "gap"))]) (gandalf-theme . [(20130809 247) nil "Gandalf color theme" single ((:commit . "4e472fc851431458537d458d09c1f5895e338536") (:keywords "color" "theme"))]) (gams-mode . [(20171117 1815) nil "Major mode for editing GAMS (General Algebraic Modeling System) files." single ((:commit . "900e1788695d91dde2a3d7fee97681a3380285de") (:url . "http://shirotakeda.org/en/gams/gams-mode/") (:keywords "gams"))]) (fzf . [(20171026 554) ((emacs (24 4))) "A front-end for fzf." single ((:commit . "ef1dc851077913a327261a6b971fab5f5f657831") (:url . "https://github.com/bling/fzf.el") (:keywords "fzf" "fuzzy" "search"))]) (fyure . [(20130216 514) nil "An interface to fix Japanese hyoki-yure" tar ((:commit . "b6977f1eb148e8b63259f7233b55bb050e44d9b8") (:keywords "languages"))]) (fxrd-mode . [(20170728 1101) ((s (1 2))) "Major mode for editing fixed field width files" tar ((:commit . "18a603474abb5a786a8d9f20c283d5f7beed3540") (:url . "https://github.com/msherry/fxrd-mode") (:keywords "convenience"))]) (fwb-cmds . [(20160523 535) nil "misc frame, window and buffer commands" single ((:commit . "57973f99cf4a185b5cccbf941478fad25e8428c3") (:url . "https://github.com/tarsius/fwb-cmds") (:keywords "convenience"))]) (fvwm-mode . [(20160411 438) nil "A major mode for editing Fvwm configuration files" single ((:commit . "6832a1c1f68bf6249c3fd6672ea8e27dc7a5c79e") (:url . "https://github.com/theBlackDragon/fvwm-mode") (:keywords "files"))]) (fuzzy-match . [(20170222 1800) nil "fuzzy matching" single ((:url . "https://www.emacswiki.org/emacs/download/fuzzy-match.el") (:keywords "matching" "completion" "string"))]) (fuzzy-format . [(20130824 500) nil "select indent-tabs-mode and format code automatically." single ((:url . "http://code.101000lab.org, http://trac.codecheck.in"))]) (fuzzy . [(20150729 2037) nil "Fuzzy Matching" single ((:commit . "534d723ad2e06322ff8d9bd0ba4863d243f698e7") (:keywords "convenience"))]) (futhark-mode . [(20171026 722) ((cl-lib (0 5))) "major mode for editing Futhark source files" single ((:commit . "2cd28692a2b32f105ccbc299d6042a952c90d922") (:url . "https://github.com/HIPERFIT/futhark") (:keywords "languages"))]) (furl . [(20150508 2016) nil "Friendly URL retrieval" single ((:commit . "014438271e0ef27333dfcd599cb247f12a20d870"))]) (function-args . [(20171031 1004) ((ivy (0 9 1))) "C++ completion for GNU Emacs" tar ((:commit . "609b25305670fff08d5e357298e7128e4f4e3497") (:url . "https://github.com/abo-abo/function-args"))]) (fullframe . [(20170816 303) ((cl-lib (0 5))) "Generalized automatic execution in a single frame" single ((:commit . "d6a5217f7f2a5a5edcb75140f3fa69b3a50f1cdd") (:keywords "fullscreen"))]) (full-ack . [(20140223 932) nil "a front-end for ack" single ((:commit . "761d846e105b150f8e6d13d7a8983f0248313a45") (:url . "http://nschum.de/src/emacs/full-ack/") (:keywords "tools" "matching"))]) (fuff . [(20170202 703) ((seq (2 3))) "Find files with findutils, recursively" single ((:commit . "278e849913df87bd8756c59382282d87474802c3") (:url . "https://github.com/joelmo/fuff") (:keywords "files" "project" "convenience"))]) (fuel . [(20170805 2030) ((cl-lib (0 2)) (emacs (24 2))) "Major mode for the Factor programming language." tar ((:commit . "c95a56561999f526e6fa60bba4a6f830af46b32b"))]) (fstar-mode . [(20171105 1108) ((emacs (24 3)) (dash (2 11)) (company (0 8 12)) (quick-peek (1 0)) (yasnippet (0 11 0)) (flycheck (30 0)) (company-quickhelp (2 2 0))) "Support for F* programming" tar ((:commit . "742e427068b5a8568f257585db3fc89c2c6c620e") (:url . "https://github.com/FStarLang/fstar-mode.el") (:keywords "convenience" "languages"))]) (fsharp-mode . [(20171021 431) ((company (0 8 0)) (company-quickhelp (1 2 0)) (popup (0 5 3)) (pos-tip (0 4 5)) (s (1 3 1)) (dash (1 1 0)) (flycheck (0 25))) "F# mode for Emacs" tar ((:commit . "5504550605354146842c8f5c34482ece778b7b31"))]) (fsbot-data-browser . [(20160921 833) nil "browse the fsbot database using tabulated-list-mode" single ((:commit . "6bca4f7de63e31839d2542f6c678b79931dec344") (:url . "http://github.com/benaiah/fsbot-data-browser") (:keywords "fsbot" "irc" "tabulated-list-mode"))]) (fringe-helper . [(20140620 1409) nil "helper functions for fringe bitmaps" single ((:commit . "ef4a9c023bae18ec1ddd7265f1f2d6d2e775efdd") (:url . "http://nschum.de/src/emacs/fringe-helper/") (:keywords "lisp"))]) (fringe-current-line . [(20140110 2011) nil "show current line on the fringe." single ((:commit . "0ef000bac76abae30601222e6f06c7d133ab4942") (:url . "http://github.com/kyanagi/fringe-current-line/raw/master/fringe-current-line.el"))]) (free-keys . [(20160726 1350) ((cl-lib (0 3))) "Show free keybindings for modkeys or prefixes" single ((:commit . "edfd69dc369b2647447b7c28c7c1163b1ddf45b4") (:url . "https://github.com/Fuco1/free-keys") (:keywords "convenience"))]) (frecency . [(20170908 2331) ((emacs (25 1)) (a (0 1)) (dash (2 13 0))) "Library for sorting items by frequency and recency of access" single ((:commit . "132130088ef5695cffed6fcacfa219cb0c389026") (:url . "http://github.com/alphapapa/frecency.el") (:keywords "libraries" "recency" "recent" "frequency" "frequent"))]) (framesize . [(20131017 1432) ((key-chord (0 5 20080915))) "change the size of frames in Emacs" single ((:commit . "f2dbf5d2513b2bc45f2085370a55c1754b6025da") (:url . "http://github.com/nicferrier/emacs-framesize") (:keywords "frames"))]) (frames-only-mode . [(20170802 455) ((emacs (24 4)) (dash (2 13 0)) (s (1 11 0))) "Use frames instead of Emacs windows" single ((:commit . "d2e6a825e2079adb58012e9677c494d317494724") (:url . "https://github.com/davidshepherd7/frames-only-mode") (:keywords "frames" "windows"))]) (framemove . [(20130328 433) nil "directional frame selection routines" single ((:keywords "frame" "movement" "convenience"))]) (frame-tag . [(20170110 1606) ((cl-lib (0 5))) "Minor mode that assigns a unique number to each frame for easy switching" single ((:commit . "73d6163568c7d32952175e663318b872f995a4e5") (:url . "http://github.com/liangzan/frame-tag.el") (:keywords "frame" "movement"))]) (frame-mode . [(20170419 1427) ((s (1 9 0)) (emacs (24 4))) "Use frames instead of windows" single ((:commit . "fcdbafbda45758cd60ab3acb492fbbd692987a58") (:url . "https://github.com/IvanMalison/frame-mode") (:keywords "frames"))]) (frame-fns . [(20170222 1759) nil "Non-interactive frame and window functions." single ((:url . "https://www.emacswiki.org/emacs/download/frame-fns.el") (:keywords "internal" "extensions" "local" "frames"))]) (frame-cmds . [(20170819 1358) ((frame-fns (0))) "Frame and window commands (interactive functions)." single ((:url . "https://www.emacswiki.org/emacs/download/frame-cmds.el") (:keywords "internal" "extensions" "mouse" "frames" "windows" "convenience"))]) (fraktur-mode . [(20160814 1927) ((cl-lib (0 5))) "Easily insert Unicode mathematical Fraktur characters" single ((:commit . "514baf5546aed12a0d9fa0fe66e87cdcc7843b08") (:url . "https://github.com/grettke/fraktur-mode") (:keywords "unicode" "fraktur" "math" "mathematical"))]) (fountain-mode . [(20171121 559) ((emacs (24 4))) "Major mode for screenwriting in Fountain markup" single ((:commit . "5c63d2f199e96bdf8fd60d375b2b6e305a5f9017") (:url . "https://github.com/rnkn/fountain-mode") (:keywords "wp"))]) (fortune-cookie . [(20170407 1517) nil "Print a fortune in your scratch buffer." single ((:commit . "bad99a2cd090f6646c7ee1125b95dd98744939c6") (:url . "https://github.com/andschwa/fortune-cookie") (:keywords "fortune" "cowsay" "scratch" "startup"))]) (fortpy . [(20150715 1332) ((epc (0 1 0)) (auto-complete (1 4)) (python-environment (0 0 2)) (pos-tip (0 4 5))) "a Fortran auto-completion for Emacs" tar ((:commit . "c614517e9396ef7a78be3b8786fbf303879cf43b"))]) (forth-mode . [(20170527 1230) nil "Programming language mode for Forth" tar ((:commit . "522256d98d1a909983bcfd3ae20c65226d5929b6") (:url . "http://github.com/larsbrinkhoff/forth-mode") (:keywords "languages" "forth"))]) (format-sql . [(20150422 633) nil "Use format-sql to make your SQL readable in directly Emacs." single ((:commit . "97f475c245cd6c81a72a265678e2087cee66ac7b") (:url . "https://github.com/paetzke/format-sql.el"))]) (form-feed . [(20160102 1453) nil "Display ^L glyphs as horizontal lines" single ((:commit . "799ca3e72b20a59a755a094b8cead57f654f3170") (:url . "https://github.com/wasamasa/form-feed") (:keywords "faces"))]) (forest-blue-theme . [(20160627 142) ((emacs (24))) "Emacs theme with a dark background." single ((:commit . "58096ce1a25615d2bae806c3775bae3e2775019d"))]) (foreman-mode . [(20170725 722) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "View and manage Procfile-based applications" single ((:commit . "22b3bb13134b617870ed1e888af739f4818be929") (:url . "http://github.com/zweifisch/foreman-mode") (:keywords "foreman"))]) (foreign-regexp . [(20160318 907) nil "search and replace by foreign regexp." tar ((:commit . "e368c4dbd3b7a95a14cbc3c25617b5f1bc5a7fb4") (:keywords "convenience" "emulations" "matching" "tools" "unix" "wp"))]) (forecast . [(20170924 1440) ((emacs (24 4))) "Weather forecasts" single ((:commit . "02829f582d03c149d0aace9a0bdf2bd405b2e4a2") (:url . "http://gkayaalp.com/emacs.html#forecast.el") (:keywords "weather" "forecast"))]) (fontawesome . [(20170305 556) ((emacs (24 4))) "fontawesome utility" tar ((:commit . "a743f80bfd53767ca9ee32da34c5ca032172a480") (:url . "https://github.com/syohex/emacs-fontawesome"))]) (font-utils . [(20150806 1051) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Utility functions for working with fonts" single ((:commit . "9192d3f8ee6a4e75f34c3fed10378674cc2b11d3") (:url . "http://github.com/rolandwalker/font-utils") (:keywords "extensions"))]) (font-lock-studio . [(20170127 1251) ((emacs (24 3))) "interactive debugger for Font Lock keywords." single ((:commit . "12c35967b31233e06946c70627aa3152dacfe261") (:url . "https://github.com/Lindydancer/font-lock-studio") (:keywords "faces" "tools"))]) (font-lock-profiler . [(20170208 1208) ((emacs (24 3))) "Coverage and timing tool for font-lock keywords." single ((:commit . "6e096458416888a4f63cca0d6bc5965a052753c8") (:url . "https://github.com/Lindydancer/font-lock-profiler") (:keywords "faces" "tools"))]) (font-lock+ . [(20170222 1755) nil "Enhancements to standard library `font-lock.el'." single ((:url . "https://www.emacswiki.org/emacs/download/font-lock%2b.el") (:keywords "languages" "faces" "highlighting"))]) (folding . [(20170925 838) nil "A folding-editor-like minor mode." single ((:commit . "3bf134fd1ecfa8767ab7020c25281ea5ce9968a2") (:keywords "tools"))]) (fold-this . [(20150601 342) nil "Just fold this region please" single ((:commit . "90b41d7b588ab1c3295bf69f7dd87bf31b543a6a") (:keywords "convenience"))]) (fold-dwim-org . [(20131203 551) ((fold-dwim (1 2))) "Fold DWIM bound to org key-strokes." single ((:commit . "c09bb2b46d65afbd1d0febc6fded7495be7a3037") (:url . "https://github.com/mlf176f2/fold-dwim-org") (:keywords "folding" "emacs" "org-mode"))]) (fold-dwim . [(20140208 837) nil "Unified user interface for Emacs folding modes" single ((:commit . "c46f4bb2ce91b4e307136320e72c28dd50b6cd8b") (:url . "http://www.dur.ac.uk/p.j.heslin/Software/Emacs"))]) (foggy-night-theme . [(20160209 708) ((emacs (24))) "Dark low contrast theme with soft and muted colors." single ((:commit . "60a12abdac29c2d913e1cf24485d0cc083e26093"))]) (focus-autosave-mode . [(20160519 1416) ((emacs (24 4))) "Automatically save files in focus-out-hook." single ((:commit . "e89ed22aa4dfc76e1b844b202aedd468ad58814a") (:keywords "convenience" "files" "frames" "mouse"))]) (focus . [(20171203 2103) ((emacs (24)) (cl-lib (0 5))) "Dim the font color of text in surrounding sections" single ((:commit . "045ee6175e9340f873db03445c74ff9eefa35a27") (:url . "http://github.com/larstvei/Focus"))]) (fn . [(20170209 1804) ((emacs (24)) (cl-lib (0 5)) (dash (2 12 1)) (dash-functional (1 2 0))) "Concise anonymous functions for Emacs Lisp" single ((:commit . "2dc78b7ef9e24f9fe872d40c8fe6050f7ce819cf") (:keywords "functional"))]) (fm-bookmarks . [(20170104 916) ((emacs (24 3)) (cl-lib (0 5))) "Use file manager bookmarks (eg Dolphin, Nautilus, PCManFM) in Dired" single ((:commit . "11dacfd16a926bfecba96a94c6b13e162c7717f7") (:url . "http://github.com/kuanyui/fm-bookmarks.el") (:keywords "files" "convenience"))]) (fm . [(20130126 1618) nil "follow mode for compilation/output buffers" single ((:commit . "555bcebdf47ea3b1d9d1e152af7237b9daa62d59") (:keywords "outlines"))]) (flyspell-popup . [(20170529 115) ((popup (0 5 0))) "Correcting words with Flyspell in popup menus" single ((:commit . "29311849bfd253b9b689bf331860b4c4d3bd4dde") (:url . "https://github.com/xuchunyang/flyspell-popup") (:keywords "convenience"))]) (flyspell-lazy . [(20141222 652) nil "Improve flyspell responsiveness using idle timers" single ((:commit . "31786fe04a4732d2f845e1c7e96fcb030182ef10") (:url . "http://github.com/rolandwalker/flyspell-lazy") (:keywords "spelling"))]) (flyspell-correct-popup . [(20161031 1134) ((flyspell-correct (0 4 0)) (popup (0 5 3))) "correcting words with flyspell via popup interface" single ((:commit . "a8ac817f7b646d8ba761b64e1b2f65d0a9ebd277") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct-ivy . [(20161031 1134) ((flyspell-correct (0 4 0)) (ivy (0 8 0))) "correcting words with flyspell via ivy interface" single ((:commit . "a8ac817f7b646d8ba761b64e1b2f65d0a9ebd277") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct-helm . [(20161031 1134) ((flyspell-correct (0 4 0)) (helm (1 9 0))) "correcting words with flyspell via helm interface" single ((:commit . "a8ac817f7b646d8ba761b64e1b2f65d0a9ebd277") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct . [(20171205 940) nil "correcting words with flyspell via custom interface" tar ((:commit . "a8ac817f7b646d8ba761b64e1b2f65d0a9ebd277") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyparens . [(20140723 1146) nil "Check for unbalanced parens on the fly" tar ((:commit . "af9b8cfd647d0e5f97684d613dc2eea7cfc19398") (:keywords "faces" "convenience" "lisp" "matching" "parentheses" "parens"))]) (flymd . [(20160617 514) ((cl-lib (0 5))) "On the fly markdown preview" tar ((:commit . "84d5a68bcfed4a295952c33ffcd11e880978d9d7") (:url . "https://github.com/mola-T/flymd") (:keywords "markdown" "convenience"))]) (flymake-yaml . [(20130423 848) ((flymake-easy (0 1))) "A flymake handler for YAML" single ((:commit . "24cb5b744a1796e554e6dbfc6eeb237d06a00b10") (:url . "https://github.com/yasuyk/flymake-yaml") (:keywords "yaml"))]) (flymake-vala . [(20150325 2231) ((flymake-easy (0 1))) "A flymake handler for vala-mode files" single ((:commit . "c3674f461fc84fb0300cd3a562fb903a59782745") (:url . "https://github.com/daniellawrence/flymake-vala") (:keywords "convenience" "vala"))]) (flymake-solidity . [(20170804 2344) ((flymake-easy (0 10))) "A flymake handler for solidity using solc" single ((:commit . "48bfe9525f764d8a68cc0270905dbf45bfd00bb8") (:url . "https://github.com/kootenvp/flymake-solidity"))]) (flymake-shell . [(20170722 1846) ((flymake-easy (0 1))) "A flymake syntax-checker for shell scripts" single ((:commit . "a16cf453056b9849cc7c912bb127fb0b08fc6dab") (:url . "https://github.com/purcell/flymake-shell"))]) (flymake-sass . [(20170722 1846) ((flymake-easy (0 1))) "Flymake handler for sass and scss files" single ((:commit . "2de28148e92deb93bff3d55fe14e7c67ac476056") (:url . "https://github.com/purcell/flymake-sass"))]) (flymake-rust . [(20170729 1439) ((flymake-easy (0 1))) "A flymake handler for rust-mode files" single ((:commit . "2f42d1f2dad73ec9de460eda6176e3ab25c446f0") (:url . "https://github.com/joaoxsouls/flymake-rust"))]) (flymake-ruby . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for ruby-mode files" single ((:commit . "6c320c6fb686c5223bf975cc35178ad6b195e073") (:url . "https://github.com/purcell/flymake-ruby"))]) (flymake-python-pyflakes . [(20170722 1846) ((flymake-easy (0 8))) "A flymake handler for python-mode files using pyflakes (or flake8)" single ((:commit . "1d65c26bf65a5dcbd29fcd967e2feb90e1e7a33d") (:url . "https://github.com/purcell/flymake-python-pyflakes"))]) (flymake-puppet . [(20170731 2254) ((flymake-easy (0 9))) "Flymake handler using puppet-lint" single ((:commit . "9579e5c736cb890195464fabf51df113313de88d") (:url . "https://github.com/benprew/flymake-puppet"))]) (flymake-phpcs . [(20140712 2331) ((flymake-easy (0 9))) "making flymake work with PHP CodeSniffer" single ((:commit . "a4d383474e055e554aaf1cd617055d5d7181aa50") (:url . "https://github.com/senda-akiha/flymake-phpcs/") (:keywords "flymake" "phpcs" "php"))]) (flymake-php . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for php-mode files" single ((:commit . "c045d01e002ba5e09b05f40e25bf5068d02126bc") (:url . "https://github.com/purcell/flymake-php"))]) (flymake-perlcritic . [(20120328 114) ((flymake (0 3))) "Flymake handler for Perl to invoke Perl::Critic" tar ((:commit . "edfaa86500ddfa8a6a6f51f5581a81a821277df6") (:url . "https://github.com/illusori/emacs-flymake-perlcritic"))]) (flymake-lua . [(20170128 1754) nil "Flymake for Lua" single ((:commit . "84589f20066921a5b79cf3a1f914a223a2552d2a") (:keywords "lua"))]) (flymake-less . [(20151110 2338) ((less-css-mode (0 15)) (flymake-easy (0 1))) "Flymake handler for LESS stylesheets (lesscss.org)" single ((:commit . "32d3c28a9a5c52b82d1741ff9d715013b6498421") (:keywords "languages"))]) (flymake-json . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for json using jsonlint" single ((:commit . "d43e62fab69c4c39f54f1057c9801a3e645de619") (:url . "https://github.com/purcell/flymake-json"))]) (flymake-jslint . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for javascript using jslint" single ((:commit . "8edb82be605542b0ef62d38d818adcdde335eecb") (:url . "https://github.com/purcell/flymake-jslint"))]) (flymake-jshint . [(20140319 1500) ((flymake-easy (0 8))) "making flymake work with JSHint" single ((:commit . "79dd554c227883c487db38ac111306c8d5382c95") (:keywords "flymake" "jshint" "javascript"))]) (flymake-hlint . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for haskell-mode files using hlint" single ((:commit . "f910736b26784efc9a2fa29503f45c1f1dd0aa38") (:url . "https://github.com/purcell/flymake-hlint"))]) (flymake-haskell-multi . [(20170722 1846) ((flymake-easy (0 1))) "Syntax-check haskell-mode using both ghc and hlint" tar ((:commit . "b564a94312259885b1380272eb867bf52a164020"))]) (flymake-haml . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for haml files" single ((:commit . "22a81e8484734552d461e7ae7305664dc244447e") (:url . "https://github.com/purcell/flymake-haml"))]) (flymake-google-cpplint . [(20140205 525) ((flymake-easy (0 9))) "Help to comply with the Google C++ Style Guide" single ((:commit . "905d32e84a27f18a78bec455ca930ab1ff9ae31e") (:url . "https://github.com/senda-akiha/flymake-google-cpplint/") (:keywords "flymake" "c" "c++"))]) (flymake-go . [(20150714 33) nil "A flymake handler for go-mode files" single ((:commit . "ae83761aa908c1a50ff34af04f00dcc46bca2ce9") (:url . "https://github.com/robert-zaremba/flymake-go") (:keywords "go" "flymake"))]) (flymake-gjshint . [(20130327 532) nil "A flymake handler for javascript using both jshint and gjslint" single ((:commit . "dc957c14cb060819585de8aedb330e24efa4b784") (:keywords "flymake" "javascript" "jshint" "gjslint"))]) (flymake-elixir . [(20130810 717) nil "A flymake handler for elixir-mode .ex files." single ((:commit . "3810566cffe35d04cc3f01e27fe397d68d52f802"))]) (flymake-easy . [(20140818 55) nil "Helpers for easily building flymake checkers" single ((:commit . "de41ea49503f71f997e5c359a2ad08df696c0147") (:url . "https://github.com/purcell/flymake-easy") (:keywords "convenience" "internal"))]) (flymake-cursor . [(20130822 332) nil "displays flymake error msg in minibuffer after delay" single ((:url . "http://www.emacswiki.org/emacs/flymake-cursor.el") (:keywords "languages" "mode" "flymake"))]) (flymake-css . [(20170722 1846) ((flymake-easy (0 1))) "Flymake support for css using csslint" single ((:commit . "de090163ba289910ceeb61b13368ce42d0f2dfd8") (:url . "https://github.com/purcell/flymake-css"))]) (flymake-cppcheck . [(20140415 557) ((flymake-easy (0 9))) "Flymake work with Cppcheck for C/C++" single ((:commit . "9554f504d425a04fa6a875f7e3179bc7cf07dd03") (:url . "https://github.com/senda-akiha/flymake-cppcheck/") (:keywords "flymake" "cppcheck" "c" "c++"))]) (flymake-coffee . [(20170722 1846) ((flymake-easy (0 1))) "A flymake handler for coffee script" single ((:commit . "dee295acf30820ed15fe0de17137d50bc27fc80c") (:url . "https://github.com/purcell/flymake-coffee"))]) (flycheck-ycmd . [(20170614 1434) ((emacs (24)) (dash (2 13 0)) (flycheck (0 22)) (ycmd (1 2)) (let-alist (1 0 5))) "flycheck integration for ycmd" single ((:commit . "7f394d02f6f3149b215adcc96043c78d5f32d612") (:url . "https://github.com/abingham/emacs-ycmd"))]) (flycheck-yang . [(20170915 1308) ((yang-mode (0 9 4)) (flycheck (0 18))) "YANG flycheck checker" single ((:commit . "c5f65fe3f710f73d56e04d077868719afc1ebfaf"))]) (flycheck-yamllint . [(20170325 1035) ((flycheck (30))) "Flycheck integration for YAMLLint" single ((:commit . "c2b273d84f15bd03464d6722391e595d7c179a5c") (:url . "https://github.com/krzysztof-magosa/flycheck-yamllint") (:keywords "convenience" "languages" "tools"))]) (flycheck-vale . [(20170619 2322) ((emacs (24 4)) (flycheck (0 22)) (let-alist (1 0 4))) "flycheck integration for vale" single ((:commit . "97df981468120aaedeaa4cf8ecfd68b07046d998") (:url . "https://github.com/abingham/flycheck-vale"))]) (flycheck-title . [(20170216 1546) ((flycheck (30)) (emacs (24))) "show flycheck errors in the frame title" single ((:commit . "6faea67be8661faf8152217869d16e993cc2bc49"))]) (flycheck-tip . [(20171020 348) ((flycheck (29)) (emacs (24 1)) (popup (0 5 0))) "Show flycheck/flymake errors by tooltip" tar ((:commit . "9b0072d92e6b4a52834bf5a34120a0f5e1c8c2fd") (:url . "https://github.com/yuutayamada/flycheck-tip") (:keywords "flycheck"))]) (flycheck-swift3 . [(20170926 317) ((emacs (24 4)) (flycheck (26))) "Flycheck: Swift support for Apple swift-mode" single ((:commit . "756833425f51baa9eb0a2fa7493df6e68612c88d") (:url . "https://github.com/GyazSquare/flycheck-swift3") (:keywords "convenience" "languages" "tools"))]) (flycheck-swift . [(20170128 2149) ((emacs (24 4)) (flycheck (0 25))) "Flycheck extension for Apple's Swift." single ((:commit . "4c5ad401252400a78da395fd56a71e67ff8c2761") (:keywords "languages" "swift"))]) (flycheck-status-emoji . [(20170923 1439) ((cl-lib (0 1)) (emacs (24)) (flycheck (0 20)) (let-alist (1 0))) "Show flycheck status using cute, compact emoji" single ((:commit . "840e6469c5a83a2438c7e8c5833e3d22b8480f8a") (:url . "https://github.com/liblit/flycheck-status-emoji") (:keywords "convenience" "languages" "tools"))]) (flycheck-stack . [(20160520 244) ((flycheck (26)) (haskell-mode (13))) "Flychecker using stack ghci" single ((:commit . "f04235e00998000ee2c305f5a3ee72bb5dbbc926"))]) (flycheck-rust . [(20170404 842) ((emacs (24 1)) (flycheck (0 20)) (dash (2 13 0)) (seq (2 15)) (let-alist (1 0 4))) "Flycheck: Rust additions and Cargo support" single ((:commit . "a89c0298f5e8fdcb0c33833ca1eca64632cec053") (:url . "https://github.com/flycheck/flycheck-rust") (:keywords "tools" "convenience"))]) (flycheck-rtags . [(20170522 2154) ((emacs (24)) (flycheck (0 23)) (rtags (2 10))) "RTags Flycheck integration." single ((:commit . "324f256acfdac2582c684e757078b1ca73ba28ec") (:url . "http://rtags.net"))]) (flycheck-rebar3 . [(20161030 615) ((flycheck (27))) "Rebar3 flycheck integration for Erlang projects" single ((:commit . "56a7c94857f0a0ea6a2a73c476a1a2faadc0f7c6") (:url . "https://github/joedevivo/flycheck-rebar3") (:keywords "erlang" "flycheck" "rebar3"))]) (flycheck-pyflakes . [(20170330 1611) ((flycheck (0 18))) "Support pyflakes in flycheck" single ((:commit . "61b045939e3743b2162b7e4e73249c66fc2b8f65"))]) (flycheck-pycheckers . [(20171207 1754) ((flycheck (0 18))) "multiple syntax checker for Python, using Flycheck" tar ((:commit . "41e676931f37ba32652edde727e443e304e7e6ee") (:url . "https://github.com/msherry/flycheck-pycheckers") (:keywords "convenience" "tools" "languages"))]) (flycheck-purescript . [(20161121 907) ((emacs (24 3)) (flycheck (0 22)) (dash (2 12 0)) (let-alist (1 0 4)) (seq (1 11))) "Flycheck: PureScript support" single ((:commit . "30f0435d5e2715053c8c6170b2bce2ae462ac819") (:url . "https://github.com/emacs-pe/flycheck-purescript") (:keywords "convenience" "tools" "languages"))]) (flycheck-pos-tip . [(20170504 1504) ((emacs (24 1)) (flycheck (0 22)) (pos-tip (0 4 6))) "Display Flycheck errors in GUI tooltips" single ((:commit . "7b94c0c1e3185a4350dc39885add3927037ebad8") (:url . "https://github.com/flycheck/flycheck-pos-tip") (:keywords "tools" "convenience"))]) (flycheck-popup-tip . [(20170812 1651) ((flycheck (0 22)) (popup (0 5)) (emacs (24))) "Display Flycheck error messages using popup.el" single ((:commit . "ef86aad907f27ca076859d8d9416f4f7727619c6") (:url . "https://github.com/flycheck/flycheck-popup-tip/") (:keywords "convenience" "tools" "flycheck" "tooltip"))]) (flycheck-pony . [(20160501 1417) ((flycheck (0 25 1))) "Pony support in Flycheck" single ((:commit . "ef27475a14090396a01924d131bfee9e163cf6e9") (:url . "https://github.com/seantallen/flycheck-pony") (:keywords "tools" "convenience"))]) (flycheck-plantuml . [(20171017 1811) ((flycheck (0 24)) (emacs (24 4)) (plantuml-mode (1 2 2))) "Integrate plantuml with flycheck" single ((:commit . "183be89e1dbba0b38237dd198dff600e0790309d") (:url . "https://github.com/alexmurray/flycheck-plantuml"))]) (flycheck-pkg-config . [(20170214 1114) ((dash (2 8 0)) (s (1 9 0)) (flycheck (29))) "configure flycheck using pkg-config" single ((:commit . "fda3f828082bd957c838126577a6b7e4d747dd54") (:keywords "flycheck"))]) (flycheck-perl6 . [(20150414 1832) ((emacs (24 3)) (flycheck (0 22))) "Perl 6 support in Flycheck" single ((:commit . "6a9a929ffb58595bbe9fe3d7c2e78617c8e9bb5a") (:url . "https://github.com/hinrik/flycheck-perl6") (:keywords "tools" "convenience"))]) (flycheck-package . [(20161111 1451) ((flycheck (0 22)) (package-lint (0 2))) "A Flycheck checker for elisp package authors" single ((:commit . "6d99248b45eea1e5236062f38e524230efdb1a84") (:keywords "lisp"))]) (flycheck-ocaml . [(20170730 1453) ((emacs (24 1)) (flycheck (0 22)) (merlin (3 0 1)) (let-alist (1 0 3))) "Flycheck: OCaml support" single ((:commit . "8707a7bf545a8639a6a5c600a98d9a2ea1487dc9") (:url . "https://github.com/flycheck/flycheck-ocaml") (:keywords "convenience" "tools" "languages"))]) (flycheck-objc-clang . [(20171014 651) ((emacs (24 4)) (flycheck (26))) "Flycheck: Objective-C support using Clang" single ((:commit . "29a9eb320d62400564360986f7ad400b74070d8e") (:url . "https://github.com/GyazSquare/flycheck-objc-clang") (:keywords "convenience" "languages" "tools"))]) (flycheck-nimsuggest . [(20171027 1508) ((flycheck (0 23)) (emacs (24 3))) "flycheck backend for Nim using nimsuggest" single ((:commit . "dc9a5de1cb3ee05db5794d824610959a1f603bc9") (:url . "https://github.com/yuutayamada/flycheck-nimsuggest"))]) (flycheck-nim . [(20160714 2128) ((dash (2 4 0)) (flycheck (0 20))) "Defines a flycheck syntax checker for nim" single ((:commit . "6d27349b66e44578851e6148299709d64d2bde41") (:url . "https://github.com/ALSchwalm/flycheck-nim"))]) (flycheck-mypy . [(20160220 1432) ((flycheck (0 18))) "Support mypy in flycheck" single ((:commit . "2675dc0e31f8c08eb69f77b8d99e3f7d985c62ee"))]) (flycheck-mix . [(20170118 630) ((flycheck (27)) (elixir-mode (1 8 0))) "Elixir mix flycheck integration" single ((:commit . "76684d4b5987925b98b254aab656f8bf8198ab88") (:url . "https://github.com/tomekowal/flycheck-mix") (:keywords "elixir" "flycheck" "mix"))]) (flycheck-mercury . [(20151122 2334) ((flycheck (0 22)) (s (1 9 0)) (dash (2 4 0))) "Mercury support in Flycheck" single ((:commit . "fa9e433a0a912f0fae9e4dec9ea616ef99fcf861") (:url . "https://github.com/flycheck/flycheck-mercury") (:keywords "convenience" "languages" "tools"))]) (flycheck-liquidhs . [(20170412 1626) ((flycheck (0 15))) "A flycheck checker for Haskell using liquid (i.e. liquidhaskell)" single ((:commit . "c27252ac24d77f4b6eec76a4ba9cd61761a3fba9") (:url . "https://github.com/ucsd-progsys/liquidhaskell/flycheck-liquid.el") (:keywords "convenience" "languages" "tools"))]) (flycheck-lilypond . [(20171203 532) ((emacs (24 3)) (flycheck (0 22))) "LilyPond support in Flycheck" single ((:commit . "d6b2c03e94e0b9b6294d7ad0b2fe4a76907a8aed") (:url . "https://github.com/hinrik/flycheck-lilypond") (:keywords "tools" "convenience"))]) (flycheck-ledger . [(20140605 1146) ((flycheck (0 15))) "Flycheck integration for ledger files" single ((:commit . "2944c56ad72945f78f88fa363e0239b40650d829") (:keywords "convenience" "languages" "tools"))]) (flycheck-kotlin . [(20170122 337) ((flycheck (0 18))) "Support kotlin in flycheck" single ((:commit . "cbb9fbf70dbe8efcc3971b3606ee95c97469b1fe"))]) (flycheck-julia . [(20170729 1441) ((emacs (24)) (flycheck (0 22))) "Julia support for Flycheck" single ((:commit . "213b60a5a9a1cb7887260e1d159b5bb27167cbb6") (:url . "https://github.com/gdkrmr/flycheck-julia") (:keywords "convenience" "tools" "languages"))]) (flycheck-joker . [(20171003 2222) ((flycheck (0 18))) "Add Clojure syntax checker (via Joker) to flycheck" single ((:commit . "c34c3922a2e8bc918f250602e0ddf655cdcad456"))]) (flycheck-irony . [(20160317 1536) ((emacs (24 1)) (flycheck (0 22)) (irony (0 2 0))) "Flycheck: C/C++ support via Irony" single ((:commit . "34940ae5ab8f4c721d9c1118ebfc3496d7e67a84") (:url . "https://github.com/Sarcasm/flycheck-irony/") (:keywords "convenience" "tools" "c"))]) (flycheck-inline . [(20170728 2328) ((emacs (24 4)) (cl-lib (0 3)) (inline-docs (1 0 1)) (flycheck (31 -3))) "Display flycheck error messages with inline popup style." single ((:commit . "624957ec04164f03656bf2d0a5ccd6d2b013f545") (:url . "https://github.com/stardiviner/flycheck-inline") (:keywords "tools" "convenience"))]) (flycheck-hdevtools . [(20160926 2) ((flycheck (0 21 -3 1)) (dash (2 0))) "A flycheck checker for Haskell using hdevtools" single ((:commit . "eab1fc184854341a56154623a131cab6ff0ce18c") (:url . "https://github.com/flycheck/flycheck-hdevtools") (:keywords "convenience" "languages" "tools"))]) (flycheck-haskell . [(20171107 1420) ((emacs (24 3)) (flycheck (0 25)) (haskell-mode (13 7)) (dash (2 4 0)) (seq (1 11)) (let-alist (1 0 1))) "Flycheck: Automatic Haskell configuration" tar ((:commit . "ff21330a5a7db4e42d6ccf4410ef4a3231e5f19a") (:url . "https://github.com/flycheck/flycheck-haskell") (:keywords "tools" "convenience"))]) (flycheck-gometalinter . [(20170321 732) ((emacs (24)) (flycheck (0 22))) "flycheck checker for gometalinter" single ((:commit . "c90ea1aba80ddfdf603c9ba731be302400fd6ba2") (:url . "https://github.com/favadi/flycheck-gometalinter") (:keywords "convenience" "tools" "go"))]) (flycheck-ghcmod . [(20150113 2232) ((flycheck (0 21 -3 1)) (dash (2 0))) "A flycheck checker for Haskell using ghcmod" single ((:commit . "6bb7b7d879f05bbae54e99eb04806c877adf3ccc") (:url . "https://github.com/scturtle/flycheck-ghcmod") (:keywords "convenience" "languages" "tools"))]) (flycheck-flow . [(20171121 514) ((flycheck (0 18)) (json (1 4))) "Support Flow in flycheck" single ((:commit . "d9d1262b9139df1cab8072e5ab15563571f32b8f"))]) (flycheck-flawfinder . [(20170115 1927) ((flycheck (0 24)) (emacs (24 4))) "Integrate flawfinder with flycheck" single ((:commit . "7d964d38023b088adf3ffc2fddeead81f4491a45") (:url . "https://github.com/alexmurray/flycheck-flawfinder"))]) (flycheck-elm . [(20160717 257) ((flycheck (0 29 -3)) (emacs (24 4))) "Flycheck support for the elm language" single ((:commit . "b401873ebd2176190a0a6fb4d61c2cca97d3b9fb") (:url . "https://github.com/bsermons/flycheck-elm"))]) (flycheck-elixir . [(20171122 507) ((flycheck (0 25))) "Support Elixir in flycheck" single ((:commit . "1f19a739cdb93851c6b01b1e188e215d035cd4a1"))]) (flycheck-dogma . [(20170124 2321) ((flycheck (29))) "flycheck checker for elixir dogma" single ((:commit . "eea1844a81e87e2488b05e703a93272d0fc3bc74") (:url . "https://github.com/aaronjensen/flycheck-dogma"))]) (flycheck-dmd-dub . [(20170816 648) ((flycheck (0 24)) (f (0 18 2))) "Sets flycheck-dmd-include-paths from dub package information" single ((:commit . "5a2e65fbae90e1dd69cfa78e4af0bda25c7db973") (:url . "http://github.com/atilaneves/flycheck-dmd-dub") (:keywords "languages"))]) (flycheck-dialyzer . [(20160326 730) ((flycheck (0 18))) "Support dialyzer in flycheck" single ((:commit . "a5df0db95ac69f397b5f85d325a6d88cf8974f64"))]) (flycheck-dialyxir . [(20170515 825) ((flycheck (29))) "flycheck checker for elixir dialyxir" single ((:commit . "adfb73374cb2bee75724822972f405f2ec371199") (:url . "https://github.com/aaronjensen/flycheck-dialyxir"))]) (flycheck-demjsonlint . [(20161114 2318) ((flycheck (30))) "Flychecker for json-mode using jsonlint from demjson" tar ((:commit . "a3dfe1df8ecdea76c076c0849901427567356228") (:url . "https://github.com/z4139jq/flycheck-demjsonlint") (:keywords "convenience" "tools"))]) (flycheck-dedukti . [(20171103 512) ((flycheck (0 19)) (dedukti-mode (0 1))) "Flycheck integration of Dedukti" single ((:commit . "3dbff5646355f39d57a3ec514f560a6b0082a1cd") (:url . "https://github.com/rafoo/flycheck-dedukti") (:keywords "convenience" "languages" "tools" "flycheck" "dedukti"))]) (flycheck-d-unittest . [(20160521 2117) ((flycheck (0 21 -3 1)) (dash (1 4 0))) "Add D unittest support to flycheck" single ((:commit . "3e614f23cb4a5566fd7988dbcaaf254af81c7718") (:url . "https://github.com/tom-tan/flycheck-d-unittest/") (:keywords "flycheck" "d"))]) (flycheck-cython . [(20170724 258) ((flycheck (0 25))) "Support Cython in flycheck" single ((:commit . "ecc4454d35ab5317ab66a04406f36f0c1dbc0b76"))]) (flycheck-cstyle . [(20160905 1641) ((flycheck (0 24)) (emacs (24 4))) "Integrate cstyle with flycheck" single ((:commit . "207285140a353d08cf1fc450cacab158bc98ba82") (:url . "https://github.com/alexmurray/flycheck-cstyle"))]) (flycheck-css-colorguard . [(20161031 422) ((flycheck (0 22)) (emacs (24))) "Detect similar colors in CSS" single ((:commit . "ae94fa0396acd99f9ec36d9572459df793f37fe8") (:url . "https://github.com/Simplify/flycheck-css-colorguard/") (:keywords "flycheck" "css" "colorguard"))]) (flycheck-crystal . [(20171124 740) ((flycheck (30))) "Add support for Crystal to Flycheck" single ((:commit . "5795e05450016d1337c1a198ae7ea76deeec40e2") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode") (:keywords "tools" "crystal"))]) (flycheck-credo . [(20170526 845) ((flycheck (29))) "flycheck checker for elixir credo" single ((:commit . "e88f11ead53805c361ec7706e44c3dfee1daa19f") (:url . "https://github.com/aaronjensen/flycheck-credo"))]) (flycheck-coverity . [(20170703 1759) ((flycheck (0 24)) (dash (2 12 0)) (emacs (24 4))) "Integrate Coverity with flycheck" single ((:commit . "cb211e3dd50413a5042eb20175be518214591c9d") (:url . "https://github.com/alexmurray/flycheck-coverity"))]) (flycheck-color-mode-line . [(20171121 2307) ((flycheck (0 15)) (dash (1 2)) (emacs (24 1))) "Change mode line color with Flycheck status" single ((:commit . "cc474804d4e8088a627485faaf4217a5781aec7d") (:keywords "convenience" "language" "tools"))]) (flycheck-clojure . [(20170221 1354) ((cider (0 8 1)) (flycheck (0 22 -3 1)) (let-alist (1 0 1)) (emacs (24))) "Flycheck: Clojure support" single ((:commit . "2a0e96889b128808866a1e2e98694be1b251fd37") (:url . "https://github.com/clojure-emacs/squiggly-clojure"))]) (flycheck-clangcheck . [(20150712 10) ((cl-lib (0 5)) (seq (1 7)) (flycheck (0 17))) "A Flycheck checker difinition for ClangCheck." single ((:commit . "24a9424c484420073a24443a829fd5779752362b") (:url . "https://github.com/kumar8600/flycheck-clangcheck"))]) (flycheck-clang-tidy . [(20171024 108) ((flycheck (0 30))) "Flycheck syntax checker using clang-tidy" single ((:commit . "b8ebd49693f67e08e420ba847cc88f6721ef9e3e") (:url . "https://github.com/ch1bo/flycheck-clang-tidy") (:keywords "convenience" "languages" "tools"))]) (flycheck-clang-analyzer . [(20170704 2333) ((flycheck (0 24)) (emacs (24 4))) "Integrate Clang Analyzer with flycheck" single ((:commit . "a33752224cb1da13b35d0d60b2017fe73d167781") (:url . "https://github.com/alexmurray/flycheck-clang-analyzer"))]) (flycheck-checkpatch . [(20170217 225) ((emacs (25)) (flycheck (30))) "Flycheck support for checkpatch.pl tool" single ((:commit . "6461fc7b0d493eb9863814055f8bce5fa35739de") (:url . "https://github.com/zpp0/flycheck-checkpatch"))]) (flycheck-checkbashisms . [(20160224 906) ((emacs (24)) (flycheck (0 25))) "checkbashisms checker for flycheck" single ((:commit . "0794ad763d7cd81286283f6400bc89a81e8e07d4") (:url . "https://github.com/Gnouc/flycheck-checkbashisms") (:keywords "convenience" "tools" "sh" "unix"))]) (flycheck-cask . [(20160928 226) ((emacs (24 1)) (flycheck (0 14)) (dash (2 4 0))) "Cask support in Flycheck" single ((:commit . "c3a51147eddeb7347de81f6a498fc96538bac499") (:url . "https://github.com/flycheck/flycheck-cask") (:keywords "tools" "convenience"))]) (flycheck-bashate . [(20160629 2140) ((flycheck (0 24)) (emacs (24 4))) "Integrate bashate with flycheck" single ((:commit . "77fa03dbc578c34fe71ca44926bac2aff8f2b021") (:url . "https://github.com/alexmurray/flycheck-bashate"))]) (flycheck-ats2 . [(20170225 836) ((emacs (24 1)) (flycheck (0 22))) "Flycheck: ATS2 support" single ((:commit . "9f77add8408462af35bdddf87e37a661880255e3") (:url . "http://github.com/drvink/flycheck-ats2") (:keywords "convenience" "tools" "languages"))]) (flycheck-apertium . [(20160406 618) ((flycheck (0 25))) "Apertium checkers in flycheck" tar ((:commit . "71cf49d5aaee962b995583384bfa045a1d4c3db7") (:url . "http://wiki.apertium.org/wiki/Emacs") (:keywords "convenience" "tools" "xml"))]) (flycheck . [(20171206 1239) ((dash (2 12 1)) (pkg-info (0 4)) (let-alist (1 0 4)) (seq (1 11)) (emacs (24 3))) "On-the-fly syntax checking" tar ((:commit . "77c2ca7d08c438f3887323277ce306d5e1a7b0d2") (:url . "http://www.flycheck.org") (:keywords "convenience" "languages" "tools"))]) (flx-isearch . [(20160105 1217) ((emacs (24)) (flx (20140821)) (cl-lib (0 5))) "Fuzzy incremental searching for emacs" single ((:commit . "54ae0a5a31e6a07b68823d486ff4ec9e4c558588") (:url . "https://github.com/pythonnut/flx-isearch") (:keywords "convenience" "search" "flx"))]) (flx-ido . [(20151030 1112) ((flx (0 1)) (cl-lib (0 3))) "flx integration for ido" single ((:commit . "ae0981b253b17b52dec666e2f739f889e7952291") (:url . "https://github.com/lewang/flx"))]) (flx . [(20151030 1112) ((cl-lib (0 3))) "fuzzy matching with good sorting" single ((:commit . "ae0981b253b17b52dec666e2f739f889e7952291") (:url . "https://github.com/lewang/flx"))]) (fluxus-mode . [(20170210 1141) ((osc (0 1)) (emacs (24 4))) "Major mode for interfacing with Fluxus" single ((:commit . "3661d4dfdaf249138e7f215f15f291c9391ede8d") (:url . "https://github.com/defaultxr/fluxus-mode") (:keywords "languages"))]) (flow-minor-mode . [(20171207 952) ((emacs (25 1))) "Flow type mode based on web-mode." single ((:commit . "640a99bdc5f5d484a546c41800255cd43ff710e6") (:url . "https://github.com/an-sh/flow-minor-mode"))]) (floobits . [(20170802 1500) ((json (1 2)) (highlight (0))) "Floobits plugin for real-time collaborative editing" tar ((:commit . "ed5586d1bf94f36354091648e824ccb6fcaf807f") (:url . "http://github.com/Floobits/floobits-emacs") (:keywords "comm" "tools"))]) (fliptext . [(20131113 1818) nil "Input method for flipping characters upside down" single ((:keywords "games" "i18n"))]) (flimenu . [(20170417 1847) ((dash (2 10 0)) (emacs (24 4))) "Flatten imenu automatically" single ((:commit . "9351201d89b05cbdaec312a6ebd7fd10c38d6112") (:url . "https://github.com/IvanMalison/flimenu") (:keywords "imenu" "browse" "structure" "hook" "mode" "matching" "tools" "convenience" "files"))]) (flim . [(20161210 1728) ((apel (10 8))) "A library to provide basic features about message representation or encoding." tar ((:commit . "3510d32e5820b2c22b4e9c9f29177beea42c5bfb"))]) (flex-isearch . [(20170308 1210) nil "Flex matching (like ido) in isearch." single ((:url . "https://bitbucket.org/jpkotta/flex-isearch") (:keywords "convenience" "search"))]) (flex-compile . [(20171113 929) ((emacs (25)) (buffer-manage (0 6)) (dash (2 13 0))) "Run, evaluate and compile for a many languages and modes." tar ((:commit . "631a5a95bcf783b8d43435d7666ccd8e205a3bd5") (:url . "https://github.com/plandes/flex-compile") (:keywords "compilation" "integration"))]) (flex-autopair . [(20120809 518) nil "Automatically insert pair braces and quotes, insertion conditions & actions are highly customizable." single ((:commit . "4bb757f2556a4a51828e2fed8fb81e31e83052cb") (:url . "https://github.com/uk-ar/flex-autopair.el") (:keywords "keyboard" "input"))]) (flatui-theme . [(20160618 1827) nil "A color theme for Emacs based on flatuicolors.com" single ((:commit . "9c15db5526c15c8dba55023f5698372b19c2a780") (:url . "https://github.com/john2x/flatui-theme.el"))]) (flatui-dark-theme . [(20170513 722) ((emacs (24))) "Dark color theme with colors from https://flatuicolors.com/" single ((:commit . "5b959a9f743f891e4660b1b432086417947872ea") (:url . "https://github.com/theasp/flatui-dark-theme") (:keywords "color" "theme" "dark" "flatui" "faces"))]) (flatland-theme . [(20171113 721) nil "A simple theme for Emacs based on the Flatland theme for Sublime Text" single ((:commit . "a98a6f19ad4dff0fa3fad1ea487b7d0ef634a19a") (:url . "http://github.com/gregchapple/flatland-emacs"))]) (flatland-black-theme . [(20170808 612) ((emacs (24 0))) "an Emacs 24 theme based on Flatland Black (tmTheme)" single ((:commit . "348c5d5fe615e6ea13cadc17f046e506e789ce07") (:url . "https://github.com/emacsfodder/flatland-black-theme"))]) (flash-region . [(20130923 1117) nil "Flash a region" single ((:commit . "261b3597b23cdd40e5c14262a5687bcc6c1d0901") (:keywords "utility"))]) (flappymacs . [(20171023 304) nil "flappybird clone for emacs" single ((:commit . "27f3e21acb22f786606481e3f4e5dc1edbaaaed4") (:url . "https://github.com/taksatou/flappymacs") (:keywords "games"))]) (fixmee . [(20150223 555) ((button-lock (1 0 2)) (nav-flash (1 0 0)) (back-button (0 6 0)) (smartrep (0 0 3)) (string-utils (0 3 2)) (tabulated-list (0))) "Quickly navigate to FIXME notices in code" single ((:commit . "1b8b3460f1e3c3c1784b2a63fb9f4fb3bb4dc084") (:url . "http://github.com/rolandwalker/fixmee") (:keywords "navigation" "convenience"))]) (fix-word . [(20170518 2343) ((emacs (24 1)) (cl-lib (0 5))) "Convenient word transformation" single ((:commit . "7df98ac9f9b0e6e09d7999d83e678cb22248be77") (:url . "https://github.com/mrkkrp/fix-word") (:keywords "word" "convenience"))]) (fix-muscle-memory . [(20160822 2139) nil "Simple hacks to fix muscle memory problems" single ((:commit . "a123e04f8a1d2982cbf930efb909cad9522ac884") (:keywords "spelling" "typing"))]) (fix-input . [(20170518 2311) ((emacs (24 4))) "Make input methods play nicely with alternative keyboard layout on OS level" single ((:commit . "a0fd233bba6206854c5d7365d7182aaae842f210") (:url . "https://github.com/mrkkrp/fix-input") (:keywords "input" "method"))]) (fit-frame . [(20170222 1754) nil "Resize a frame. In particular, fit a frame to its buffers." single ((:url . "https://www.emacswiki.org/emacs/download/fit-frame.el") (:keywords "internal" "extensions" "convenience" "local"))]) (fish-mode . [(20170430 623) ((emacs (24))) "Major mode for fish shell scripts" single ((:commit . "888d037008272f6001207a2990e51ba87fe187e6") (:keywords "fish" "shell"))]) (fish-completion . [(20171209 508) nil "Add fish completion to pcomplete (shell and Eshell)" single ((:commit . "12e5db70b5efe7a3cd37e8fd25eb526d08007aac") (:url . "https://github.com/Ambrevar/emacs-fish-completion"))]) (firestarter . [(20161219 523) nil "Execute (shell) commands on save" single ((:commit . "4d6b106f325ac1802eabce3c8a7cd0a4c7a32864") (:url . "https://github.com/wasamasa/firestarter") (:keywords "convenience"))]) (fireplace . [(20160811 519) nil "A cozy fireplace for emacs" single ((:commit . "23a444f749bcb2b804593e3b2cb9c73cc59231fb") (:url . "https://github.com/johanvts/emacs-fireplace") (:keywords "games"))]) (firefox-controller . [(20160320 1147) ((moz (0)) (popwin (1 0 0)) (cl-lib (0 5))) "An improved Firefox controller" single ((:commit . "a8af8cbf70afaf6b89a26d6ac69af8e92afc181f") (:url . "https://github.com/cute-jumper/emacs-firefox-controller") (:keywords "extensions"))]) (firecode-theme . [(20170808 611) ((emacs (24 0))) "an Emacs 24 theme based on FireCode (tmTheme)" single ((:commit . "8b7b03ecdd41e70dab145b98906017e1392eaef4") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (fiplr . [(20140723 2345) ((grizzl (0 1 0)) (cl-lib (0 1))) "Fuzzy Search for Files in Projects" tar ((:commit . "bb6b90ba3c558988c195048c4c40140b2ee17530"))]) (fingers . [(20160817 129) nil "Modal editing with universal text manipulation helpers." tar ((:commit . "fed0f742afb1d72eaef29d8da394467550a030fa") (:url . "http://github.com/fgeller/fingers.el") (:keywords "fingers" "modal" "editing" "workman"))]) (findr . [(20130824 507) nil "Breadth-first file-finding facility for (X)Emacs" single ((:keywords "files"))]) (finder+ . [(20170222 1752) nil "Extensions to standard library finder.el" single ((:url . "https://www.emacswiki.org/emacs/download/finder%2b.el") (:keywords "help"))]) (find-things-fast . [(20150519 1526) nil "Find things fast, leveraging the power of git" single ((:commit . "efc7c189019ed65430e2f9e910e8e0a5ca9d2d03") (:keywords "project" "convenience"))]) (find-temp-file . [(20170107 539) nil "Open quickly a temporary file" single ((:commit . "513005d19d72d71f34481ee00158dd57bd93206f") (:url . "https://github.com/thisirs/find-temp-file.git") (:keywords "convenience"))]) (find-file-in-repository . [(20151113 519) nil "Quickly find files in a git, mercurial or other repository" single ((:commit . "8a8c84a6dbe7a2bba4564c3b58c92d157abfa3f8") (:url . "https://github.com/hoffstaetter/find-file-in-repository") (:keywords "files" "convenience" "repository" "project" "source control"))]) (find-file-in-project . [(20171203 110) ((ivy (0 10 0)) (emacs (24 3))) "Find file/directory and review Diff/Patch/Commit efficiently everywhere" single ((:commit . "2cf17fb48c67e26743c3d632ee01577d1a941a3e") (:url . "https://github.com/technomancy/find-file-in-project") (:keywords "project" "convenience"))]) (find-dired+ . [(20170409 1832) nil "Extensions to `find-dired.el'." single ((:url . "https://www.emacswiki.org/emacs/download/find-dired%2b.el") (:keywords "internal" "unix" "tools" "matching" "local"))]) (find-by-pinyin-dired . [(20170206 208) ((pinyinlib (0 1 0))) "Find file by first PinYin character of Chinese Hanzi" single ((:commit . "2c48434637bd63840fca4d2c6cf9ebd5dd44658f") (:url . "http://github.com/redguardtoo/find-by-pinyin-dired") (:keywords "hanzi" "chinese" "dired" "find" "file" "pinyin"))]) (finalize . [(20170418 1245) ((emacs (24 1)) (cl-generic (0 3)) (cl-lib (0 3)) (eieio (1 4))) "finalizers for Emacs Lisp" tar ((:commit . "0496a7b8f2f8b197010d8602b5fc529f5104704a"))]) (fillcode . [(20171029 925) nil "Fill (wrap) function calls and expressions in source code" single ((:commit . "d0a9e20f5fcc24a786d09ea19bfb9237681ba823") (:url . "https://snarfed.org/fillcode"))]) (fill-column-indicator . [(20171209 1124) nil "Graphically indicate the fill column" single ((:commit . "d2536b1c48f78679e15a2b50cd5d8c0ffde4b155") (:keywords "convenience"))]) (filesets+ . [(20170222 1748) nil "Extensions to `filesets.el'." single ((:url . "https://www.emacswiki.org/emacs/download/filesets%2b.el"))]) (files+ . [(20170222 1746) nil "Enhancements of standard library `files.el'." single ((:url . "https://www.emacswiki.org/emacs/download/files%2b.el") (:keywords "internal" "extensions" "local"))]) (figlet . [(20160218 1437) nil "Annoy people with big, ascii art text" single nil]) (fifo-class . [(20160424 2258) nil "First in first out abstract class" single ((:commit . "8fe4cf690727f4ac7b67f29c55f845df023c3f21") (:url . "https://github.com/mola-T/fifo-class") (:keywords "lisp"))]) (fic-mode . [(20160209 1011) nil "Show FIXME/TODO/BUG(...) in special face only in comments and strings" single ((:commit . "8182f5be875fdefc5bd7142ab45adea89ac20705") (:url . "https://github.com/lewang/fic-mode"))]) (fetch . [(20131130 2330) nil "Fetch and unpack resources" single ((:commit . "3f2793afcbbc32f320e572453166f9354ecc6d06") (:url . "https://github.com/crshd/fetch.el"))]) (feature-mode . [(20170907 748) nil "Major mode for editing Gherkin (i.e. Cucumber) user stories" tar ((:commit . "722b352c4f0b800a9356dd369c79612782b3b847"))]) (fcopy . [(20150304 603) nil "Funny Copy, set past point HERE then search copy text" single ((:commit . "e355f6ec889d8ecbdb096019c2dc660b1cec4941") (:url . "https://github.com/ataka/fcopy") (:keywords "convenience"))]) (fcitx . [(20170913 1900) nil "Make fcitx better in Emacs" single ((:commit . "095332fbeb994c908c533fe2ad068c0728211c3d") (:url . "https://github.com/cute-jumper/fcitx.el") (:keywords "extensions"))]) (faustine . [(20170908 658) ((emacs (24 3)) (faust-mode (0 3))) "Edit, visualize, build and run Faust code" tar ((:commit . "ae67cd9d1a2625d80726dace9dd83539e71d1b36") (:url . "https://bitbucket.org/yassinphilip/faustine") (:keywords "languages" "faust"))]) (faust-mode . [(20171122 414) nil "Faust syntax colorizer for Emacs." single ((:commit . "720fd8f5f48be27ceae3c6e3c612b39304484a03") (:url . "https://github.com/rukano/emacs-faust-mode") (:keywords "languages" "faust"))]) (fastnav . [(20120211 657) nil "Fast navigation and editing routines." single ((:commit . "1019ba2b61d1a070204099b23da347278a61bc89") (:keywords "nav" "fast" "fastnav" "navigation"))]) (fastdef . [(20160713 629) ((ivy (0 7 0)) (w3m (0 0))) "Insert terminology from Google top search results" single ((:commit . "0696f41dc150d35ce31fe8d2ea74f4173818bb55") (:url . "http://github.com/redguardtoo/fastdef") (:keywords "terminology" "org-mode" "markdown"))]) (fasd . [(20161216 831) nil "Emacs integration for the command-line productivity booster `fasd'" single ((:commit . "5940b84dfa1ea7225b740d3a8dd215290d964873") (:url . "https://github.com/steckerhalter/emacs-fasd") (:keywords "cli" "bash" "zsh" "autojump"))]) (farmhouse-theme . [(20160713 1544) nil "Farmhouse Theme, Emacs edition" tar ((:commit . "7ddc1ff13b4a3d5466bd0d33ecb86100352e83a7") (:keywords "color" "theme") (:url . "https://github.com/mattly/emacs-farmhouse-theme"))]) (fancy-narrow . [(20171030 1716) nil "narrow-to-region with more eye candy." single ((:commit . "9f4a587f6a5a387271fb665e13f59d41fd42504c") (:url . "http://github.com/Bruce-Connor/fancy-narrow") (:keywords "faces" "convenience"))]) (fancy-battery . [(20150101 404) ((emacs (24 1))) "Fancy battery display" single ((:commit . "9b88ae77a01aa3edc529840338bcb2db7f445822") (:url . "https://github.com/lunaryorn/fancy-battery.el") (:keywords "convenience" "tools" "hardware"))]) (fakir . [(20140729 952) ((noflet (0 0 8)) (dash (1 3 2)) (kv (0 0 19))) "fakeing bits of Emacs" single ((:commit . "1fca406ad7de80fece6319ff75d4230b648534b0") (:url . "http://github.com/nicferrier/emacs-fakir") (:keywords "lisp" "tools"))]) (fakespace . [(20120817 1706) nil "fake namespaces with defpackage" single ((:commit . "d1bd1f4b14b2690d7a67f9a52622ec51ed84813a") (:url . "https://github.com/skeeto/elisp-fakespace"))]) (faff-theme . [(20170522 1219) nil "Light Emacs color theme on ivory3 background" single ((:commit . "e79dc142d99bc5a455a46345d3aba6f95f3f3f42") (:url . "https://github.com/WJCFerguson/emacs-faff-theme") (:keywords "color" "theme"))]) (factlog . [(20130209 1740) ((deferred (0 3 1))) "File activity logger" single ((:commit . "6503d77ea882c995b051d22e72db336fb28770fc") (:url . "https://github.com/tkf/factlog"))]) (faceup . [(20170925 1246) nil "Markup language for faces and font-lock regression testing" single ((:commit . "6c92dad56a133e14e7b27831e1bcf9b3a71ff154") (:url . "https://github.com/Lindydancer/faceup") (:keywords "faces" "languages"))]) (faces+ . [(20170222 1745) nil "Extensions to `faces.el'." single ((:url . "https://www.emacswiki.org/emacs/download/faces%2b.el") (:keywords "faces" "local"))]) (facemenu+ . [(20170222 1744) nil "Extensions to `facemenu.el'." single ((:url . "https://www.emacswiki.org/emacs/download/facemenu%2b.el") (:keywords "faces" "extensions" "convenience" "menus" "local"))]) (face-remap+ . [(20170222 1742) nil "Extensions to standard library `face-remap.el'." single ((:url . "https://www.emacswiki.org/emacs/download/face-remap%2b.el") (:keywords "window" "frame" "face" "font"))]) (face-explorer . [(20170710 1201) nil "Library and tools for faces and text properties" single ((:commit . "13bd4553bc4b09215a04d0267be1cb4ed834775c") (:url . "https://github.com/Lindydancer/face-explorer") (:keywords "faces"))]) (fabric . [(20171115 2256) nil "Launch Fabric using Emacs" tar ((:commit . "df79be341d0b34ed23850f9894136092fa5fea8c") (:url . "https://github.com/nlamirault/fabric.el") (:keywords "python" "fabric"))]) (f3 . [(20170728 1120) ((emacs (24)) (helm (1 9 6)) (cl-lib (0 5))) "The Fantastic File Finder: a helm interface for searching files really fast" tar ((:commit . "1ed0ac4368a9f631f6dfad7ad17e9f7434a42bd6") (:keywords "find" "file" "files" "helm" "fast" "finder"))]) (f . [(20171119 723) ((s (1 7 0)) (dash (2 2 0))) "Modern API for working with files and directories" single ((:commit . "595519ea07d6ff49e5cb1cbd442eb689f9142ed1") (:url . "http://github.com/rejeep/f.el") (:keywords "files" "directories"))]) (eziam-theme . [(20171007 939) nil "A mostly monochrome theme, inspired by Tao and Leuven, with dark and light versions." tar ((:commit . "909a84dc5959aac982d1c296e82d687d172d3ecd"))]) (ez-query-replace . [(20170814 621) ((dash (1 2 0)) (s (1 11 0))) "a smarter context-sensitive query-replace that can be reapplied" single ((:commit . "f5dbd2d3e5e62e6b7e7cc1a98fc4d0cd411e5afa"))]) (eyuml . [(20141028 1527) ((request (0 2 0)) (s (1 8 0))) "Write textual uml diagram from emacs using yuml.me" single ((:commit . "eb29c37316e44a14741f16e894fbcfcb7537dc80") (:url . "http://github.com/antham/eyuml") (:keywords "uml"))]) (eyebrowse . [(20171123 6) ((dash (2 7 0)) (emacs (24 3 1))) "Easy window config switching" single ((:commit . "7294ed5fbf5f38407b599a10a335b8c4ec15a8d5") (:url . "https://github.com/wasamasa/eyebrowse") (:keywords "convenience"))]) (exwm-x . [(20170916 2015) ((cl-lib (0 5)) (exwm (0 1)) (switch-window (0 10)) (swiper (0 9 0)) (bind-key (1 0)) (counsel (0 9 0)) (ivy (0 9 0))) "A derivative wm based on EXWM (emacs x window manager)" tar ((:commit . "abb210ff56134cc6a285d91b875f3115bc951ad0") (:url . "https://github.com/tumashu/exwm-x") (:keywords "window-manager" "exwm"))]) (extend-dnd . [(20151122 1050) nil "R drag and Drop" tar ((:commit . "80c966c93b82c9bb5c6225a432557c39144fc602") (:url . "https://github.com/mlf176f2/extend-dnd") (:keywords "extend" "drag and drop"))]) (extempore-mode . [(20160620 1813) ((emacs (24 4))) "Emacs major mode for Extempore source files" single ((:commit . "ce052da4899ea85ee33792a344359fdd19bc653b") (:url . "http://github.com/extemporelang/extempore-emacs-mode") (:keywords "extempore"))]) (exsqlaim-mode . [(20170607 303) ((s (1 10 0))) "Use variables inside sql queries" single ((:commit . "a2e0a62ec8b87193d8eaa695774bfd689324b06c") (:url . "https://github.com/ahmadnazir/exsqlaim-mode"))]) (express . [(20140508 1341) ((string-utils (0 3 2))) "Alternatives to `message'" single ((:commit . "93dae7377eace4a5413ba99aecb6f26f90798725") (:url . "http://github.com/rolandwalker/express") (:keywords "extensions" "message" "interface"))]) (expand-region . [(20170514 1309) nil "Increase selected region by semantic units." tar ((:commit . "2357f1d5efd9d5b9e37f3513342237fec2629291"))]) (expand-line . [(20151005 1907) nil "Expand selection by line" single ((:commit . "75a5d0241f35dd0748ab8ecb4ff16891535be372"))]) (exotica-theme . [(20171208 430) ((emacs (24))) "A dark theme with vibrant colors" single ((:commit . "6f449e7f4472b08262c833a58a2275ee5642f9e4") (:url . "https://github.com/jbharat/exotica-theme") (:keywords "faces" "theme" "dark" "vibrant colors"))]) (exiftool . [(20170822 1432) ((emacs (25))) "Elisp wrapper around ExifTool" single ((:commit . "3a07dbcb975577734d4abf6d68e1ab83a01951bb") (:url . "https://git.systemreboot.net/exiftool.el") (:keywords "data"))]) (exec-path-from-shell . [(20170508 4) nil "Get environment variables such as $PATH from the shell" single ((:commit . "5e355fbc50913d1ffe48bf86df0bcecd8b369ffb") (:url . "https://github.com/purcell/exec-path-from-shell") (:keywords "environment"))]) (exato . [(20171127 1736) ((evil (1 2 13)) (thingatpt+ (0))) "EXATO: Evil XML/HTML Attributes Text Object" single ((:commit . "ba21cd2c8d0588e1c70ba89ebad6df247605e03f") (:url . "https://github.com/ninrod/exato"))]) (eww-lnum . [(20150102 712) nil "Conkeror-like functionality for eww" single ((:commit . "4b0ecec769919ecb05ca4fb15ec51911ba589929") (:url . "https://github.com/m00natic/eww-lnum") (:keywords "eww" "browse" "conkeror"))]) (ewmctrl . [(20170921 1917) nil "Use `wmctrl' to manage desktop windows via EWMH/NetWM." single ((:commit . "3d0217c4d6cdb5c308b6cb4293574f470d4faacf") (:url . "https://github.com/flexibeast/ewmctrl") (:keywords "desktop" "windows" "ewmh" "netwm"))]) (evm . [(20141007 456) ((dash (2 3 0)) (f (0 13 0))) "Emacs Version Manager" single ((:commit . "d0623b2355436a5fd9f7238b419782080c79196b") (:url . "http://github.com/rejeep/evm"))]) (evil-visualstar . [(20160222 1648) ((evil (0))) "Starts a * or # search from the visual selection" single ((:commit . "06c053d8f7381f91c53311b1234872ca96ced752") (:url . "https://github.com/bling/evil-visualstar") (:keywords "evil" "vim" "visualstar"))]) (evil-visual-replace . [(20171015 2313) ((evil (1 0 0))) "search/replace commands for evil visual state, inc. blocks" single ((:commit . "163fc827a1ffc106475da470c37fb26f4cc9b008") (:url . "https://github.com/troyp/evil-visual-replace") (:keywords "evil" "search" "replace" "regexp" "block" "rectangular" "region" "visual"))]) (evil-visual-mark-mode . [(20150202 1000) ((evil (1 0 9)) (dash (2 10))) "Display evil marks on buffer" single ((:commit . "094ee37599492885ff3144918fcdd9b74dadaaa0") (:keywords "evil"))]) (evil-vimish-fold . [(20171030 451) ((emacs (24 4)) (evil (1 0 0)) (vimish-fold (0 2 0))) "Integrate vimish-fold with evil" single ((:commit . "4db872d12274fdddf7c6e9d01cf68cbad9cfcf15") (:url . "https://github.com/alexmurray/evil-vimish-fold"))]) (evil-tutor-ja . [(20160916 1832) ((evil (1 0 9)) (evil-tutor (0 1))) "Japanese Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "99af7d82e02ce3bcdfaff47c5c80b57327a7ea8d") (:url . "https://github.com/kenjimyzk/evil-tutor-ja") (:keywords "convenience" "editing" "evil" "japanese"))]) (evil-tutor . [(20150102 2250) ((evil (1 0 9))) "Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "4e124cd3911dc0d1b6817ad2c9e59b4753638f28") (:url . "https://github.com/syl20bnr/evil-tutor") (:keywords "convenience" "editing" "evil"))]) (evil-textobj-column . [(20170905 1205) ((names (0 5)) (emacs (24)) (evil (0))) "Provides column text objects." single ((:commit . "835d7036d0bc9a6e44fc9b7c54ccf2a7c01428cd") (:url . "https://github.com/noctuid/evil-textobj-column") (:keywords "evil" "column" "text-object"))]) (evil-textobj-anyblock . [(20170905 1207) ((cl-lib (0 5)) (evil (1 1 0))) "Textobject for the closest user-defined blocks." single ((:commit . "ff00980f0634f95bf2ad9956b615a155ea8743be") (:url . "https://github.com/noctuid/evil-textobj-anyblock") (:keywords "evil"))]) (evil-text-object-python . [(20160815 141) ((emacs (24)) (evil (1 2 12))) "Python specific evil text objects" single ((:commit . "3b3fb01e7ad7eeeeae1143695547fe75148cc44f") (:url . "https://github.com/wbolster/evil-text-object-python") (:keywords "evil" "python" "text-object"))]) (evil-test-helpers . [(20171122 1206) ((evil (1 2 13))) "unit test helpers for Evil" single ((:commit . "994bb12f5840da6cd6b9f16fd7e034c7d5c13a04"))]) (evil-terminal-cursor-changer . [(20170401 142) ((evil (1 0 8))) "Change cursor shape and color by evil state in terminal" single ((:commit . "b49ca4393d2f3cc6014174950059b36a5cb22949") (:url . "https://github.com/7696122/evil-terminal-cursor-changer") (:keywords "evil" "terminal" "cursor"))]) (evil-tabs . [(20160217 720) ((evil (0 0 0)) (elscreen (0 0 0))) "Integrating Vim-style tabs for Evil mode users." single ((:commit . "53d3314a810017b6056ab6796aef671f5ea1c063") (:url . "https://github.com/krisajenkins/evil-tabs") (:keywords "evil" "tab" "tabs" "vim"))]) (evil-swap-keys . [(20170726 1120) ((emacs (24))) "intelligently swap keys on text input with evil" single ((:commit . "56bc201e265a6bd482a7c41a7c81d2238341ef3a") (:url . "https://github.com/wbolster/evil-swap-keys") (:keywords "evil" "key" "swap" "numbers" "symbols"))]) (evil-surround . [(20171210 838) ((evil (1 2 12))) "emulate surround.vim from Vim" single ((:commit . "6e1da767ec7f8e6dca41b2a97edd7c1be9752ffa") (:keywords "emulation" "vi" "evil"))]) (evil-space . [(20151208 428) ((evil (1 0 0))) "Repeat motion in Evil. Correct the behaviour of what SPC should do." single ((:commit . "a9c07284d308425deee134c9d88a2d538dd229e6") (:url . "http://github.com/linktohack/evil-space") (:keywords "space" "repeat" "motion"))]) (evil-snipe . [(20170903 603) ((emacs (24 4)) (evil (1 2 12)) (cl-lib (0 5))) "emulate vim-sneak & vim-seek" single ((:commit . "69adb46546a871beb54a445cb22652ac276555c1") (:url . "https://github.com/hlissner/evil-snipe") (:keywords "emulation" "vim" "evil" "sneak" "seek"))]) (evil-smartparens . [(20171210 713) ((evil (1 0)) (emacs (24 4)) (smartparens (1 10 1))) "Evil support for smartparens" single ((:commit . "026d4a3cfce415a4dfae1457f871b385386e61d3") (:url . "https://www.github.com/expez/evil-smartparens") (:keywords "evil" "smartparens"))]) (evil-search-highlight-persist . [(20170522 2034) ((highlight (0))) "Persistent highlights after search" single ((:commit . "979d2dec58d3b9c5ca5fdf4bb802a0209913794e"))]) (evil-rsi . [(20160221 1304) ((evil (1 0 0))) "Use emacs motion keys in evil, inspired by vim-rsi" single ((:commit . "65ae60866be494e4622fe383e23975e04d2a42a3") (:url . "http://github.com/linktohack/evil-rsi") (:keywords "evil" "rsi" "evil-rsi"))]) (evil-replace-with-register . [(20170713 225) ((evil (1 0 8))) "Port of vim plugin ReplaceWithRegister" single ((:commit . "91cc7bf21a94703c441cc9212214075b226b7f67") (:url . "https://github.com/Dewdrops/evil-ReplaceWithRegister") (:keywords "evil" "plugin"))]) (evil-rails . [(20160621 1558) ((evil (1 0)) (projectile-rails (1 0))) "Rails support for Evil Mode" single ((:commit . "c8669783d8a40719b2604c58a4c06c248cab272f") (:url . "https://github.com/antono/evil-rails") (:keywords "ruby" "rails" "vim" "project" "convenience" "web" "evil" "projectile"))]) (evil-quickscope . [(20160202 1124) ((evil (0))) "Highlight unique characters in words for f,F,t,T navigation" single ((:commit . "37a20e4c56c6058abf186ad4013c155e695e876f") (:url . "http://github.com/blorbx/evil-quickscope") (:keywords "faces" "emulation" "vim" "evil"))]) (evil-paredit . [(20150413 1348) ((evil (1 0 9)) (paredit (25 -2))) "Paredit support for evil keybindings" single ((:commit . "e058fbdcf9dbf7ad6cc77f0172d7517ef233d55f") (:url . "https://github.com/roman/evil-paredit") (:keywords "paredit" "evil"))]) (evil-org . [(20171203 1211) ((emacs (24 4)) (evil (1 0))) "evil keybindings for org-mode" tar ((:commit . "5c01f573920e4794f812c30e7fd8f0bfb9734286") (:url . "https://github.com/Somelauw/evil-org-mode.git") (:keywords "evil" "vim-emulation" "org-mode" "key-bindings" "presets"))]) (evil-opener . [(20161207 1010) ((evil (1 2 12)) (opener (0 2 2))) "opening urls as buffers in evil" tar ((:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:url . "https://github.com/0robustus1/opener.el") (:keywords "url" "http" "files"))]) (evil-numbers . [(20140606 551) nil "increment/decrement numbers like in vim" single ((:commit . "6ea1c8c3a9b37bed63d48f1128e9a4910e68187e") (:url . "http://github.com/cofi/evil-numbers") (:keywords "numbers" "increment" "decrement" "octal" "hex" "binary"))]) (evil-nerd-commenter . [(20171206 441) nil "Comment/uncomment lines efficiently. Like Nerd Commenter in Vim" tar ((:commit . "41d43709210711c07de69497c5f7db646b7e7a96") (:url . "http://github.com/redguardtoo/evil-nerd-commenter") (:keywords "commenter" "vim" "line" "evil"))]) (evil-multiedit . [(20170623 1135) ((emacs (24 4)) (evil (1 2 12)) (iedit (0 97)) (cl-lib (0 5))) "multiple cursors for evil-mode" single ((:commit . "e135fd8662406807bc0d9d0f2688e7dbe89b98c8") (:url . "https://github.com/hlissner/evil-multiedit") (:keywords "multiple cursors" "editing" "iedit"))]) (evil-mu4e . [(20171127 1214) ((emacs (24 4)) (dash (2 12 0)) (evil (1 2 10))) "evil-based key bindings for mu4e" single ((:commit . "234f8a7b24e3b21b6d849d209c006a258ae056ce") (:url . "https://github.com/JorisE/evil-mu4e"))]) (evil-mc-extras . [(20170202 849) ((emacs (24 3)) (evil (1 2 12)) (cl-lib (0 5)) (evil-mc (0 0 2)) (evil-numbers (0 4))) "Extra functionality for evil-mc" tar ((:commit . "ba3252ae129c3b79aeb70ec3d276cbda32b00421") (:url . "https://github.com/gabesoft/evil-mc-extras") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc-extras"))]) (evil-mc . [(20170716 1806) ((emacs (24 3)) (evil (1 2 12)) (cl-lib (0 5))) "Multiple cursors for evil-mode" tar ((:commit . "8127c3161a6d990635684a020f708b7914445593") (:url . "https://github.com/gabesoft/evil-mc") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc"))]) (evil-matchit . [(20171127 245) ((evil (1 0 7))) "Vim matchit ported to Evil" tar ((:commit . "ceb13ad1b34eb0debe2472c024841bdddce9e593") (:url . "http://github.com/redguardtoo/evil-matchit") (:keywords "matchit" "vim" "evil"))]) (evil-mark-replace . [(20150424 18) ((evil (1 0 8))) "replace the thing in marked area" single ((:commit . "56cf191724a3e82239ca47a17b071c20aedb0617") (:url . "http://github.com/redguardtoo/evil-mark-replace") (:keywords "mark" "replace" "evil"))]) (evil-magit . [(20171018 722) ((evil (1 2 3)) (magit (2 6 0))) "evil-based key bindings for magit" single ((:commit . "a24186be7cc2cdab24b56f6dcc4665eeb8349c1a") (:url . "https://github.com/justbur/evil-magit"))]) (evil-lispy . [(20170304 259) ((lispy (0 26 0)) (evil (1 2 12)) (hydra (0 13 5))) "precision Lisp editing with Evil and Lispy" tar ((:commit . "040a7ee130c2403a1d6dac591b94b202bb48e186") (:url . "https://github.com/sp3ctum/evil-lispy") (:keywords "lisp"))]) (evil-lisp-state . [(20160403 1948) ((evil (1 0 9)) (bind-map (0)) (smartparens (1 6 1))) "An evil state to edit Lisp code" single ((:commit . "3c65fecd9917a41eaf6460f22187e2323821f3ce") (:url . "https://github.com/syl20bnr/evil-lisp-state") (:keywords "convenience" "editing" "evil" "smartparens" "lisp" "mnemonic"))]) (evil-lion . [(20170810 2314) ((emacs (24 3)) (evil (1 0 0))) "Evil align operator, port of vim-lion" single ((:commit . "aaa3874ad54c31b4322ac5bbc63e331498b11d61") (:url . "http://github.com/edkolev/evil-lion") (:keywords "emulations" "evil" "vim"))]) (evil-ledger . [(20170905 519) ((emacs (24 4)) (evil (1 2 12))) "Make `ledger-mode' more `evil'." single ((:commit . "a282fae7921d2648a32c3207413d927d1adda8b8") (:url . "https://github.com/atheriel/evil-ledger") (:keywords "convenience" "evil" "languages" "ledger" "vim-emulation"))]) (evil-leader . [(20140606 543) ((evil (0))) "let there be <leader>" single ((:commit . "39f7014bcf8b36463e0c7512c638bda4bac6c2cf") (:url . "http://github.com/cofi/evil-leader") (:keywords "evil" "vim-emulation" "leader"))]) (evil-indent-textobject . [(20130831 1519) ((evil (0))) "evil textobjects based on indentation" single ((:commit . "70a1154a531b7cfdbb9a31d6922482791e20a3a7") (:url . "http://github.com/cofi/evil-indent-textobject") (:keywords "convenience" "evil"))]) (evil-indent-plus . [(20151109 1106) ((evil (0)) (cl-lib (0 5))) "Evil textobjects based on indentation" single ((:commit . "0c7501e6efed661242c3a20e0a6c79a6455c2c40") (:url . "http://github.com/TheBB/evil-indent-plus") (:keywords "convenience" "evil"))]) (evil-iedit-state . [(20160905 1908) ((evil (1 0 9)) (iedit (0 97))) "Evil states to interface iedit mode." single ((:commit . "02ce7ea1414aa0f139b52f1b3350c2b7af74d0ba") (:url . "https://github.com/syl20bnr/evil-iedit-state") (:keywords "convenience" "editing" "evil" "iedit" "mnemonic"))]) (evil-goggles . [(20171209 15) ((emacs (24 4)) (evil (1 0 0))) "Add a visual hint to evil operations" single ((:commit . "d4b0ea224d637cd3ec24e3f8f24f447a3a5da62e") (:url . "http://github.com/edkolev/evil-goggles") (:keywords "emulations" "evil" "vim" "visual"))]) (evil-god-state . [(20141116 1855) ((evil (1 0 8)) (god-mode (2 12 0))) "use god-mode keybindings in evil-mode" single ((:commit . "3d44197dc0a1fb40e7b7ff8717f8a8c339ce1d40") (:url . "https://github.com/gridaphobe/evil-god-state") (:keywords "evil" "leader" "god-mode"))]) (evil-find-char-pinyin . [(20160514 1341) ((evil (1 2 12)) (pinyinlib (0 1 0))) "Evil's f/F/t/T/evil-snipe commands with Pinyin support" single ((:commit . "04e277946d658f1a73c68dcbbadea9c21097a31c") (:keywords "extensions"))]) (evil-extra-operator . [(20161212 2003) ((evil (1 0 7))) "Evil operator for evaluating codes, taking notes, searching via google, etc." single ((:commit . "e16a9b36f9901254da9af8a73871061616410fc3") (:url . "http://github.com/Dewdrops/evil-extra-operator") (:keywords "evil" "plugin"))]) (evil-expat . [(20171125 752) ((emacs (24 3)) (evil (1 0 0))) "Evil ex commands" single ((:commit . "152fdfacea2847d438cdd4e83779fe5a57edfde2") (:url . "http://github.com/edkolev/evil-expat") (:keywords "emulations" "evil" "vim"))]) (evil-exchange . [(20170510 1959) ((evil (1 2 8)) (cl-lib (0 3))) "Exchange text more easily within Evil" single ((:commit . "47691537815150715e64e6f6ec79be7746c96120") (:url . "http://github.com/Dewdrops/evil-exchange") (:keywords "evil" "plugin"))]) (evil-escape . [(20170913 618) ((emacs (24)) (evil (1 0 9)) (cl-lib (0 5))) "Escape from anything with a customizable key sequence" single ((:commit . "25920fb2f4ef48998eecea433c04096f8d124cfe") (:url . "https://github.com/syl20bnr/evil-escape") (:keywords "convenience" "editing" "evil"))]) (evil-embrace . [(20160519 1129) ((emacs (24 4)) (embrace (0 1 0)) (evil-surround (0))) "Evil integration of embrace.el" single ((:commit . "4379adea032b25e359d01a36301b4a5afdd0d1b7") (:keywords "extensions"))]) (evil-ediff . [(20170724 1223) ((evil (1 2 3))) "Make ediff a little evil" single ((:commit . "67b0e69f65c196eff5b39dacb7a9ec05bb919c74") (:url . "https://github.com/justbur/evil-ediff"))]) (evil-easymotion . [(20170110 2004) ((emacs (24)) (avy (0 3 0)) (cl-lib (0 5))) "A port of vim's easymotion to emacs" single ((:commit . "f9b5aa52f238ea14c2b16982e56c3b2c8f739101") (:url . "https://github.com/pythonnut/evil-easymotion") (:keywords "convenience" "evil"))]) (evil-dvorak . [(20160416 1141) ((evil (1 0 8))) "evil keybindings for that work with dvorak mode" tar ((:commit . "824f7c56980d72a0ff04c662223540cd66f13754") (:keywords "evil" "vim-emulation" "dvorak" "keyboard") (:url . "https://github.com/jbranso/evil-dvorak.git"))]) (evil-commentary . [(20170413 751) ((evil (1 0 0))) "Comment stuff out. A port of vim-commentary." tar ((:commit . "395f91014b69844b81660c155f42eb9b1b3d199d") (:url . "http://github.com/linktohack/evil-commentary") (:keywords "evil" "comment" "commentary" "evil-commentary"))]) (evil-colemak-minimal . [(20171006 617) ((emacs (24)) (evil (1 2 12))) "Minimal Colemak key bindings for evil-mode" single ((:commit . "6d98b6da60f414524a0d718f76024c26dce742b3") (:url . "https://github.com/bmallred/evil-colemak-minimal") (:keywords "colemak" "evil"))]) (evil-colemak-basics . [(20170425 509) ((emacs (24)) (evil (1 2 12)) (evil-snipe (2 0 3))) "Basic Colemak key bindings for evil-mode" single ((:commit . "7844079b47f47bb1dc24c885b0ac2e67524fa960") (:url . "https://github.com/wbolster/evil-colemak-basics") (:keywords "colemak" "evil"))]) (evil-cleverparens . [(20170717 2113) ((evil (1 0)) (paredit (1)) (smartparens (1 6 1)) (emacs (24 4)) (dash (2 12 0))) "Evil friendly minor-mode for editing lisp." tar ((:commit . "8c45879d49bfa6d4e414b6c1df700a4a51cbb869") (:url . "https://github.com/luxbock/evil-cleverparens") (:keywords "cleverparens" "parentheses" "evil" "paredit" "smartparens"))]) (evil-avy . [(20150908 48) ((emacs (24 1)) (cl-lib (0 5)) (avy (0 3 0)) (evil (1 2 3))) "set-based completion" single ((:commit . "2dd955cc3ecaa7ddeb67b295298abdc6d16dd3a5") (:url . "https://github.com/louy2/evil-avy") (:keywords "point" "location" "evil" "vim"))]) (evil-args . [(20140329 1429) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil." single ((:commit . "2a88b4d19953a11227cc1e91973b92149116f44c") (:url . "http://github.com/wcsmith/evil-args") (:keywords "evil" "vim-emulation"))]) (evil-anzu . [(20170123 2318) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" single ((:commit . "9bca6ca14d865e7e005bc02a28a09b4ae74facc9") (:url . "https://github.com/syohex/emacs-evil-anzu"))]) (evil . [(20171210 501) ((emacs (24 1)) (undo-tree (0 6 3)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "994bb12f5840da6cd6b9f16fd7e034c7d5c13a04"))]) (eve-mode . [(20170822 1531) ((emacs (25)) (polymode (1 0)) (markdown-mode (2 0))) "Major mode for editing Eve documents." single ((:commit . "a4661114d9c18725691b76321d72167ca5a9070a") (:url . "https://github.com/witheve/emacs-eve-mode") (:keywords "languages" "wp" "tools"))]) (evalator-clojure . [(20160208 1348) ((cider (0 10 0)) (evalator (1 0 0))) "Clojure evaluation context for evalator via CIDER." tar ((:commit . "caa4e0a137bdfada86593128a654e16aa617ad50") (:url . "http://www.github.com/seanirby/evalator-clojure") (:keywords "languages" "clojure" "cider" "helm"))]) (evalator . [(20160212 1728) ((helm-core (1 9 1))) "Package for interactive transformation of data with helm" tar ((:commit . "f30da4da48c0b3f3cfa1fc1c7cfdb53ffe79df36") (:url . "http://www.github.com/seanirby/evalator") (:keywords "languages" "elisp" "helm"))]) (eval-sexp-fu . [(20131230 1351) ((highlight (0))) "Tiny functionality enhancements for evaluating sexps." single ((:commit . "6cffd33155d10c3e58b39cbb170f42e910fd8595") (:keywords "lisp" "highlight" "convenience"))]) (eval-in-repl . [(20171122 543) ((dash (0 0 0)) (paredit (0 0 0)) (ace-window (0 0 0))) "Consistent ESS-like eval interface for various REPLs" tar ((:commit . "fea05a5b81d74ac53cb2a83aa83a73d9526bcc42") (:url . "https://github.com/kaz-yos/eval-in-repl/"))]) (eval-expr . [(20120618 2347) nil "enhanced eval-expression command" single ((:commit . "a0e69e83de41df8dbccefc1962ab4f02206a3328") (:keywords "lisp" "extensions"))]) (euslisp-mode . [(20170830 1229) ((emacs (24 3)) (s (1 9)) (exec-path-from-shell (0)) (helm-ag (0 58))) "Major mode for Euslisp-formatted text" single ((:commit . "db62a2d148482317794727982576494596365a55") (:url . "https://github.com/iory/euslisp-mode") (:keywords "euslisp" "euslisp" "github"))]) (ethan-wspace . [(20170507 1330) nil "whitespace customizations for emacs" single ((:commit . "e055ee6730c0b03525d32e67511ef6c51e4c29e4") (:keywords "whitespace" "tab" "newline" "trailing" "clean"))]) (eterm-256color . [(20171204 1329) ((emacs (24 4)) (xterm-color (1 6)) (f (0 19 0))) "Customizable 256 colors for term." tar ((:commit . "8aea15c69ae861b7cf3e9ba3dc996134cf2075ae") (:url . "http://github.com/dieggsy/eterm-256color") (:keywords "faces"))]) (etags-table . [(20130824 457) nil "Set tags table(s) based on current file" single ((:keywords "etags" "tags" "tag"))]) (etags-select . [(20130824 500) nil "Select from multiple tags" single ((:keywords "etags" "tags" "tag" "select"))]) (etable . [(20161028 1309) ((dash (2 9 0)) (interval-list (0 1)) (emacs (24 4))) "Implementation of javax.swing.JTable for Emacs." tar ((:commit . "d502141f0c69bf95256ba5cb9cd15350c7e942d2"))]) (esxml . [(20171129 7) nil "Library for working with xml via esxml and sxml" tar ((:commit . "5548ceba17deae0c3c6d0092672edc4de3c75ce3"))]) (esup . [(20170923 1328) ((cl-lib (0 5)) (emacs (24))) "the Emacs StartUp Profiler (ESUP)" tar ((:commit . "a589005a9a888537deef94d6fe38a9b8790c97c7") (:url . "http://github.com/jschaf/esup") (:keywords "convenience" "processes"))]) (ess-view . [(20160309 1315) ((ess (15)) (s (1 8 0)) (f (0 16 0))) "View R dataframes in a spreadsheet software" single ((:commit . "5ae35d37ac625b16640401d19f9a51b340da9420") (:url . "https://github.com/GioBo/ess-view") (:keywords "extensions" "ess"))]) (ess-smart-underscore . [(20170222 1715) ((ess (0))) "Ess Smart Underscore" tar ((:commit . "02e8a03553f34fe7184afff97f20e560d6f8d617") (:url . "http://github.com/mlf176f2/ess-smart-underscore.el") (:keywords "ess" "underscore"))]) (ess-smart-equals . [(20150201 2201) ((emacs (24)) (ess (5 0))) "better smart-assignment with =-key in R and S" single ((:commit . "e0f5f18f01ed252fde50d051adf1fa6254a254c9") (:url . "https://github.com/genovese/ess-smart-equals") (:keywords "r" "s" "ess" "convenience"))]) (ess-R-data-view . [(20130509 458) ((ctable (20130313 1743)) (popup (20130324 1305)) (ess (20130225 1754))) "Data viewer for GNU R" single ((:commit . "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9") (:url . "https://github.com/myuhe/ess-R-data-view.el") (:keywords "convenience"))]) (ess . [(20171204 1404) ((julia-mode (0 3))) "Emacs Speaks Statistics" tar ((:commit . "8a5cefe1bfec7c76d03332c4f6dfc224ad4bc61b") (:url . "http://ess.r-project.org"))]) (esqlite-helm . [(20151116 50) ((esqlite (0 2 0)) (helm (20131207 845))) "Define helm source for sqlite database" single ((:commit . "bc4047e09b8f6c34802db86095cd465935670dce") (:url . "https://github.com/mhayashi1120/Emacs-esqlite") (:keywords "data"))]) (esqlite . [(20151206 406) ((pcsv (1 3 3))) "Manipulate sqlite file from Emacs" single ((:commit . "bc4047e09b8f6c34802db86095cd465935670dce") (:url . "https://github.com/mhayashi1120/Emacs-esqlite") (:keywords "data"))]) (espuds . [(20160905 600) ((s (1 7 0)) (dash (2 2 0)) (f (0 12 1))) "Ecukes step definitions" single ((:commit . "78fc53feaf77a98d63894cd410faee2a18107b00") (:url . "http://github.com/ecukes/espuds") (:keywords "test"))]) (espresso-theme . [(20170716 813) nil "Espresso Tutti Colori port for Emacs" single ((:commit . "e79c5c14732b7e34aab75dbcc968839536536c59") (:url . "https://github.com/dgutov/espresso-theme"))]) (eslintd-fix . [(20171128 453) ((dash (2 12 0)) (emacs (24 3))) "use eslint_d to automatically fix js files" single ((:commit . "3efb041c9ad0116e745efaede7f7972bc2179a72") (:url . "https://github.com/aaronjensen/eslintd-fix"))]) (eslint-fix . [(20160819 36) nil "Fix JavaScript files using ESLint" single ((:commit . "be90d1e78b1dfd43b6b3b1c06868539e2ac27d3a") (:url . "https://github.com/codesuki/eslint-fix") (:keywords "javascript" "eslint" "lint" "formatting" "style"))]) (eshell-z . [(20170116 2038) ((cl-lib (0 5))) "cd to frequent directory in eshell" single ((:commit . "c9334cbc1552234df3437f35d98e32f4d18446b8") (:url . "https://github.com/xuchunyang/eshell-z") (:keywords "convenience"))]) (eshell-up . [(20170425 1037) ((emacs (24))) "Quickly go to a specific parent directory in eshell" single ((:commit . "9c100bae5c3020e8d9307e4332d3b64e7dc28519") (:url . "https://github.com/peterwvj/eshell-up") (:keywords "eshell"))]) (eshell-prompt-extras . [(20171020 2207) nil "Display extra information for your eshell prompt." single ((:commit . "9b1a49853909c4fae95d32bb9a68cace471c161e") (:url . "https://github.com/hiddenlotus/eshell-prompt-extras") (:keywords "eshell" "prompt"))]) (eshell-git-prompt . [(20170909 752) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 11 0))) "Some Eshell prompt for Git users" single ((:commit . "b6bb2d7bd4e393b4170b29891cfefb72ae020aab") (:url . "https://github.com/xuchunyang/eshell-git-prompt") (:keywords "eshell" "git"))]) (eshell-fringe-status . [(20170117 1516) nil "Show last status in fringe" single ((:commit . "adc6997c68e39c0d52a2af1b2fd5cf2057783797") (:url . "http://projects.ryuslash.org/eshell-fringe-status/"))]) (eshell-fixed-prompt . [(20170804 635) ((emacs (25)) (s (1 11 0))) "Restrict eshell to a single fixed prompt" single ((:commit . "4351b214de6d4e8e45279930448e2f93b491848e"))]) (eshell-did-you-mean . [(20150915 1252) ((emacs (24 1)) (cl-lib (0 5))) "command not found (\"did you mean…\" feature) in Eshell" single ((:commit . "7cb6ef8e2274d0a50a9e114d412307a6543533d5") (:url . "https://github.com/xuchunyang/eshell-did-you-mean") (:keywords "eshell"))]) (eshell-bookmark . [(20170922 814) ((emacs (24 3))) "Integrate bookmarks with eshell." single ((:commit . "deda4b848b2fb979dbe73ead2cb866610e3596ed") (:url . "https://github.com/Fuco1/eshell-bookmark") (:keywords "convenience" "files"))]) (eshell-autojump . [(20150927 24) nil "autojump command for Eshell" single ((:commit . "c6a8b81a16576df9875e721fbbfe6690d04e7e43") (:url . "http://github.com/coldnew/eshell-autojump"))]) (esh-help . [(20170829 2111) ((dash (1 4 0))) "Add some help functions and support for Eshell" single ((:commit . "8a8a9d4d9852f8bd96da3b94e95ff57097ac8ec6") (:url . "https://github.com/tom-tan/esh-help/") (:keywords "eshell" "extensions"))]) (esh-buf-stack . [(20140107 218) nil "Add a buffer stack feature to Eshell" single ((:commit . "ce0ea5aadca3150eaa9d2e6ec20296add4e99176") (:keywords "eshell" "extensions"))]) (escreen . [(20170613 1534) nil "emacs window session manager" single ((:commit . "153dc05b2b7e6e2d4cbd7b6cbe8b10d6a70f73f3"))]) (esa . [(20170427 845) ((cl-lib (0 5))) "Interface to esa.io" single ((:commit . "8bd011cd1861113f54ad155d3c62725e1dcd37e7") (:url . "https://github.com/nabinno/esa.el") (:keywords "tools" "esa"))]) (es-windows . [(20140211 104) ((cl-lib (0 3)) (emacs (24))) "Window-management utilities" single ((:commit . "239e30408cb1adb4bc8bd63e2df34711fa910b4f") (:url . "https://github.com/sabof/es-windows"))]) (es-mode . [(20171130 941) ((dash (2 11 0)) (cl-lib (0 5)) (spark (1 0)) (s (1 11 0)) (request (0 3 0))) "A major mode for editing and executing Elasticsearch queries" tar ((:commit . "a765e2e6a3c5ab8c5d4d9b52c87a4b5823ad4fa8") (:url . "http://www.github.com/dakrone/es-mode") (:keywords "elasticsearch"))]) (es-lib . [(20141111 1030) ((cl-lib (0 3))) "A collection of emacs utilities" tar ((:commit . "753b27363e39c10edc9e4e452bdbbbe4d190df4a") (:url . "https://github.com/sabof/es-lib"))]) (ert-runner . [(20171111 451) ((s (1 6 1)) (dash (1 8 0)) (f (0 10 0)) (commander (0 2 0)) (ansi (0 1 0)) (shut-up (0 1 0))) "Opinionated Ert testing workflow" tar ((:commit . "80ff435058f0e9815d0ac8c7a53143c474e00db3") (:url . "http://github.com/rejeep/ert-runner.el") (:keywords "test"))]) (ert-modeline . [(20140115 215) ((s (1 3 1)) (dash (1 2 0)) (emacs (24 1)) (projectile (0 9 1))) "displays ert test results in the modeline." single ((:commit . "e7be2b81191afb437b70368a819770f8f750e4af") (:keywords "tools" "tests" "convenience"))]) (ert-junit . [(20161018 1217) ((ert (0))) "JUnit XML reports from ert results" single ((:commit . "c4cd27b60f9e7ccd05fd8a2097cde947eb250599") (:url . "http://bitbucket.org/olanilsson/ert-junit") (:keywords "tools" "test" "unittest" "ert"))]) (ert-expectations . [(20130824 500) nil "The simplest unit test framework in the world" single ((:url . "http://www.emacswiki.org/emacs/download/ert-expectations.el") (:keywords "test" "unittest" "ert" "expectations"))]) (ert-async . [(20151011 659) nil "Async support for ERT" single ((:commit . "f64a7ed5b0d2900c9a3d8cc33294bf8a79bc8526") (:url . "http://github.com/rejeep/ert-async.el") (:keywords "test"))]) (eros . [(20161221 826) ((emacs (24 4))) "Evaluation Result OverlayS for Emacs Lisp" single ((:commit . "a42e45c9b2397156c684330b0fc90ee0eba773f5") (:url . "https://github.com/xiongtx/eros") (:keywords "convenience" "lisp"))]) (erlang . [(20171117 243) ((emacs (24 1))) "Erlang major mode" tar ((:commit . "779ea5fecf0e0ba525410a3dcb4ea84d12b5c77f"))]) (ergoemacs-status . [(20160317 2238) ((powerline (2 3)) (mode-icons (0 1 0))) "Adaptive Status Bar / Mode Line" single ((:commit . "d952cc2361adf6eb4d6af60950ad4ab699c81320"))]) (ergoemacs-mode . [(20171030 738) ((emacs (24 1)) (undo-tree (0 6 5)) (cl-lib (0 5))) "Emacs mode based on common modern interface and ergonomics." tar ((:commit . "3ce23bba3cb50562693860f87f3528c471d603ba") (:url . "https://github.com/ergoemacs/ergoemacs-mode") (:keywords "convenience"))]) (erefactor . [(20160121 159) ((cl-lib (0 3))) "Emacs-Lisp refactoring utilities" single ((:commit . "bf68085e5635eb94fd85709f8e1355c1f5534745") (:url . "https://github.com/mhayashi1120/Emacs-erefactor") (:keywords "extensions" "tools" "maint"))]) (eredis . [(20160809 2053) nil "eredis, a Redis client in emacs lisp" single ((:commit . "0d7d524592be488309c7c339d137ba836e52bfff") (:url . "http://code.google.com/p/eredis/"))]) (ereader . [(20170809 2201) ((emacs (24 4)) (dash (2 12 1)) (s (1 10 0)) (xml+ (0 0 0))) "Major mode for reading ebooks with org-mode integration" tar ((:commit . "f3bbd3f13195f8fba3e3c880aab0e4c60430dcf3") (:url . "https://github.com/bddean/emacs-ereader") (:keywords "epub" "ebook"))]) (ercn . [(20150523 803) nil "Flexible ERC notifications" single ((:commit . "79a4df5609046ae2e2e3375998287be6dda80615") (:url . "http://www.github.com/leathekd/ercn"))]) (erc-yt . [(20150426 549) ((dash (2 10 0))) "An erc module to display youtube links nicely" single ((:commit . "43e7d49325b17a3217a6ffb4a9daf75c5ff4e6f8") (:keywords "multimedia"))]) (erc-youtube . [(20150603 1436) nil "Show info about a YouTube URL in an ERC buffer." single ((:commit . "97054ba8475b442e2aa81e5a291f668b7f28697f") (:keywords "multimedia"))]) (erc-view-log . [(20140227 1239) nil "Major mode for viewing ERC logs" single ((:commit . "c5a25f0cbca84ed2e4f72068c02b66bd0ea3b266") (:url . "http://github.com/Niluge-KiWi/erc-view-log/raw/master/erc-view-log.el") (:keywords "erc" "viewer" "logs" "colors"))]) (erc-twitch . [(20170426 2306) ((json (1 3)) (erc (5 0))) "Support for Twitch emotes for ERC." single ((:commit . "53c6af0cb72e56d897d30a40e7e5066668d6b5ec") (:url . "https://github.com/vibhavp/erc-twitch") (:keywords "twitch" "erc" "emotes"))]) (erc-tweet . [(20150920 558) nil "shows text of a tweet when an url is posted in erc buffers" single ((:commit . "91fed61e139fa788d66a7358f0d50acc896414b8") (:keywords "extensions"))]) (erc-track-score . [(20130328 515) nil "Add score support to tracked channel buffers" single ((:commit . "5b27531ea6b1a4c4b703b270dfa9128cb5bfdaa3") (:url . "http://julien.danjou.info/erc-track-score.html"))]) (erc-terminal-notifier . [(20140115 224) nil "OSX notifications via the terminal-notifier gem for Emacs ERC." single ((:commit . "a3dacb935845e4a20031212bbd82b2170f68d2a8") (:url . "http://github.com/julienXX/") (:keywords "erc" "terminal-notifier" "nick"))]) (erc-social-graph . [(20150508 504) nil "A social network graph module for ERC." single ((:commit . "e6ef3416a1c5064054bf054d9f0c1c7bf54a9cd0") (:url . "https://github.com/vibhavp/erc-social-graph") (:keywords "erc" "graph"))]) (erc-scrolltoplace . [(20171104 1346) ((emacs (24 0)) (switch-buffer-functions (0 0 1))) "An Erc module to scrolltobottom better with keep-place" single ((:commit . "7539654e4a72edcc5bba07a101961e5bf0a9d449") (:url . "http://github.com/jgkamat/erc-scrolltoplace") (:keywords "erc" "module" "comm" "scrolltobottom" "keep-place"))]) (erc-image . [(20170909 312) nil "Show received image urls in the ERC buffer" single ((:commit . "15805aa7ed4b13eeaaa4ec294443ef0f9d21c0c2") (:keywords "multimedia"))]) (erc-hl-nicks . [(20160202 1150) nil "ERC nick highlighter that ignores uniquifying chars when colorizing" single ((:commit . "be181920ce6af0ab5d00d1c638e4e598b3998643") (:url . "http://www.github.com/leathekd/erc-hl-nicks"))]) (erc-hipchatify . [(20170314 937) ((emacs (24 4)) (s (1 10 0)) (alert (1 2)) (request (0 2 0))) "Provide emoticons and html rendering for HipChat" single ((:url . "https://bitbucket.org/seanfarley/erc-hipchatify") (:keywords "erc" "bitlbee" "hipchat" "multimedia"))]) (erc-crypt . [(20161228 739) ((cl-lib (0 5))) "Symmetric Encryption for ERC" single ((:commit . "731f9264a5bf08a8fc0b5ce69e72058c86f873a5") (:url . "https://github.com/atomontage/erc-crypt") (:keywords "comm"))]) (erc-colorize . [(20170107 539) nil "Per user colorization of whole message" single ((:commit . "d026a016dcb9d63d9ac66d30627a92a8f1681bbd") (:url . "https://github.com/thisirs/erc-colorize.git") (:keywords "erc" "convenience"))]) (eproject . [(20151205 2130) ((helm (1 6 4))) "assign files to projects, programatically" tar ((:commit . "fdff000d601eb8bdb165db3dc4925c6797308b78") (:keywords "programming" "projects"))]) (eprime-mode . [(20140513 1116) nil "An E-prime checking mode for Emacs" single ((:commit . "17a481af26496be91c07139a9bfc05cfe722506f") (:url . "https://github.com/AndrewHynes/eprime-mode") (:keywords "e-prime" "english" "grammar"))]) (epresent . [(20160410 1901) ((org (8)) (cl-lib (0 5))) "Simple presentation mode for Emacs Org-mode" single ((:commit . "6c8abedcf46ff08091fa2bba52eb905c6290057d") (:url . "https://github.com/dakrone/epresent") (:keywords "gui"))]) (epm . [(20161027 34) ((emacs (24 3)) (epl (0 8))) "Emacs Package Manager" tar ((:commit . "ab3d194fc4d11520d6b9bce4746d7242f3f1606a") (:url . "https://github.com/xuchunyang/epm"))]) (epl . [(20150517 433) ((cl-lib (0 3))) "Emacs Package Library" single ((:commit . "83797835f729f39b80acba4c7e83d73a2e410e26") (:url . "http://github.com/cask/epl") (:keywords "convenience"))]) (epkg . [(20171206 1638) ((closql (0 4 0)) (dash (2 13 0)) (emacs (25 1))) "browse the Emacsmirror package database" tar ((:commit . "6172b4cc5247cbfbcfb87ad856a70d617326c760") (:url . "https://github.com/emacscollective/epkg") (:keywords "tools"))]) (epic . [(20170209 1623) ((htmlize (1 47))) "Evernote Picker for Cocoa Emacs" single ((:commit . "a41826c330eb0ea061d58a08cc861b0c4ac8ec4e") (:url . "https://github.com/yoshinari-nomura/epic") (:keywords "evernote" "applescript"))]) (epc . [(20140609 2234) ((concurrent (0 3 1)) (ctable (0 1 2))) "A RPC stack for the Emacs Lisp" tar ((:commit . "e1bfa5ca163273859336e3cc89b4b6460f7f8cda") (:url . "https://github.com/kiwanami/emacs-epc") (:keywords "lisp" "rpc"))]) (eopengrok . [(20160903 2359) ((s (1 9 0)) (dash (2 10 0)) (magit (2 1 0)) (cl-lib (0 5))) "opengrok interface for emacs" single ((:commit . "78f734328aaf19c52720415c037708ece1944c4c") (:keywords "tools"))]) (envdir . [(20160221 1123) ((emacs (24)) (dash (2 10 0)) (f (0 17 2))) "Modify environment according to files in a specified directory" single ((:commit . "f29346c55ccf11d8c75628edc6d430ed63c36917") (:url . "https://github.com/proofit404/envdir-mode"))]) (ensime . [(20171027 1433) ((scala-mode (0 23)) (sbt-mode (0 2)) (yasnippet (0 10 0)) (company (0 9 0)) (dash (2 12 1)) (s (1 11 0)) (popup (0 5 3))) "ENhanced Scala Interaction Mode for Emacs" tar ((:commit . "483e94546d9b1de5841b8853882d5644cc419479") (:url . "https://github.com/ensime/ensime-emacs") (:keywords "languages"))]) (enotify . [(20130407 648) nil "A networked notification system for emacs" tar ((:commit . "7fd2f48ef4ff32c8f013c634ea2dd6b1d1409f80"))]) (eno . [(20160110 234) ((dash (2 12 1)) (edit-at-point (1 0))) "Goto/copy/cut any word/symbol/line in view, similar to ace-jump/easymotion" single ((:commit . "40075bb1ed9e62f42c5799f3d3721734742ed417") (:url . "http://github.com/enoson/eno.el"))]) (enlive . [(20170725 717) nil "query html document with css selectors" single ((:commit . "604a8ca272b6889f114e2b5a13adb5b1dc4bae86") (:url . "http://github.com/zweifisch/enlive") (:keywords "css" "selector" "query"))]) (enh-ruby-mode . [(20171101 1638) ((emacs (24))) "Major mode for editing Ruby files" tar ((:commit . "9467cd7fc8b6bb3caf644b223e3046fc32013ccb") (:url . "http://github.com/zenspider/Enhanced-Ruby-Mode") (:keywords "languages elisp" "ruby"))]) (engine-mode . [(20170812 2007) ((cl-lib (0 5))) "Define and query search engines from within Emacs." single ((:commit . "408932727bb723017eaf6338e50cb6d1266b8df8") (:url . "https://github.com/hrs/engine-mode"))]) (encourage-mode . [(20151128 105) ((emacs (24 4))) "Encourages you in your work. :D" single ((:commit . "99edacf2d94d168d3da0609860dc7253db7c9815") (:url . "https://github.com/halbtuerke/encourage-mode.el") (:keywords "fun"))]) (enclose . [(20121008 914) nil "Enclose cursor within punctuation pairs." tar ((:commit . "2747653e84af39017f503064bc66ed1812a77259"))]) (emr . [(20170811 1057) ((s (1 3 1)) (dash (1 2 0)) (cl-lib (0 2)) (popup (0 5 0)) (emacs (24 1)) (list-utils (0 3 0)) (redshank (1 0 0)) (paredit (24 0 0)) (projectile (0 9 1)) (clang-format (0)) (iedit (0 97))) "Emacs refactoring system." tar ((:commit . "d7009b30be810af6bb33c7d99a9b320e2aaeb698") (:keywords "tools" "convenience" "refactoring"))]) (empos . [(20151011 1216) nil "Locate bibtex citations from within emacs" single ((:commit . "7b99ad30e56937adb7e6349777e5a2045597d564") (:url . "http://github.com/dimalik/empos/") (:keywords "citations" "reference" "bibtex" "reftex"))]) (emojify-logos . [(20171125 214) ((emojify (0 4))) "Add logos to emojify" tar ((:commit . "96c74383a7c69e839ba41de3507154ca4ad564a1") (:url . "https://github.com/mxgoldstein/emojify-logos"))]) (emojify . [(20171018 744) ((seq (1 11)) (ht (2 0)) (emacs (24 3))) "Display emojis in Emacs" tar ((:commit . "001c3adcc521223f6b53a2243635528b2cb7f7e8") (:url . "https://github.com/iqbalansari/emacs-emojify") (:keywords "multimedia" "convenience"))]) (emoji-recall . [(20160723 1508) ((emacs (24))) "How many emoji can you recall from memory?" tar ((:commit . "d9122f8fb1467309260109a1985cd14f18fdf631") (:url . "https://github.com/lujun9972/emoji-recall.el") (:keywords "game"))]) (emoji-fontset . [(20160726 1224) nil "Set font face for Emoji." single ((:commit . "10be897fa5165fd40fd35a89e38c759e008fa775") (:keywords "emoji" "font" "config"))]) (emoji-display . [(20140117 213) nil "emoji displaying module" single ((:commit . "bb4217f6400151a9cfa6d4524b8427f01feb5193") (:url . "https://github.com/ikazuhiro/emoji-display") (:keywords "emoji"))]) (emoji-cheat-sheet-plus . [(20150617 631) ((emacs (24)) (helm (1 6 4))) "emoji-cheat-sheet for emacs" tar ((:commit . "96a003127d646a2683d81ca906a17eace0a6413e") (:url . "https://github.com/syl20bnr/emacs-emoji-cheat-sheet-plus") (:keywords "emacs" "emoji"))]) (emms-state . [(20160504 105) ((emms (0))) "Display track description and playing time in the mode line" single ((:commit . "77930300222333b71eafd495cc1fee3a3585eb23") (:url . "https://github.com/alezost/emms-state.el") (:keywords "emms"))]) (emms-soundcloud . [(20131221 345) ((emms (20131016)) (json (1 2))) "EMMS source for Soundcloud audio sharing platform" single ((:commit . "87e5cbf9609d1f26c24dc834fdeb78b33d453c2b") (:url . "http://github.com/osener/emms-soundcloud") (:keywords "emms" "soundcloud"))]) (emms-player-simple-mpv . [(20170930 2216) ((emacs (24)) (cl-lib (0 5)) (emms (4 0))) "An extension of emms-player-simple.el for mpv JSON IPC" tar ((:commit . "1af7838037c86872e897bea872d279ff080c28c6") (:url . "https://github.com/momomo5717/emms-player-simple-mpv") (:keywords "emms" "mpv"))]) (emms-player-mpv-jp-radios . [(20171102 811) ((emacs (24)) (cl-lib (0 5)) (emms (4 0)) (emms-player-simple-mpv (0 1 7))) "EMMS players and stream lists of Japan radio stations" tar ((:commit . "57924973b9e7a3b059b6dd40decb194abc596875") (:url . "https://github.com/momomo5717/emms-player-mpv-jp-radios") (:keywords "emms" "mpv" "radio"))]) (emms-player-mpv . [(20170628 303) ((emms (0))) "mpv support for EMMS" single ((:commit . "8c72282c98f9b10601e9a6901277040cda4b33aa") (:url . "https://github.com/dochang/emms-player-mpv/") (:keywords "multimedia" "emms" "mpv"))]) (emms-mode-line-cycle . [(20160221 320) ((emacs (24)) (emms (4 0))) "Display the emms mode line as a ticker" single ((:commit . "2c2f395e484a1d345050ddd61ff5fab71a92a6bc") (:url . "https://github.com/momomo5717/emms-mode-line-cycle") (:keywords "emms" "mode-line"))]) (emms-mark-ext . [(20130528 2027) ((emms (3 0))) "Extra functions for emms-mark-mode and emms-tag-edit-mode" single ((:commit . "ec68129e3e9e469e5bf160c6a1b7030e322f3541") (:url . "https://github.com/vapniks/emms-mark-ext") (:keywords "convenience" "multimedia"))]) (emms-info-mediainfo . [(20131223 500) ((emms (0))) "Info-method for EMMS using medianfo" single ((:commit . "bce16eae9eacd38719fea62a9755225a888da59d") (:keywords "multimedia" "processes"))]) (emms . [(20171209 744) ((cl-lib (0 5))) "The Emacs Multimedia System" tar ((:commit . "cd53cecbd5a0036de89a373dc71567a9630b33a4") (:keywords "emms" "mp3" "mpeg" "multimedia"))]) (emmet-mode . [(20161113 2158) nil "Unofficial Emmet's support for emacs" single ((:commit . "5af39aaef59125fd80901f275c23c89493f9d133") (:url . "https://github.com/smihica/emmet-mode") (:keywords "convenience"))]) (emlib . [(20161126 723) ((dash (2 13 0)) (cl-lib (0 5))) "A Machine Learning library for Emacs" tar ((:commit . "dea2af00f551ea580c641d86dd69219f7d4f3685") (:url . "https://github.com/narendraj9/emlib.git") (:keywords "data" "ai" "neural networks" "ml"))]) (embrace . [(20171031 1133) ((cl-lib (0 5)) (expand-region (0 10 0))) "Add/Change/Delete pairs based on `expand-region'" single ((:commit . "dd5da196e5bcc5e6d87e1937eca0c21da4334ef2") (:keywords "extensions"))]) (ember-yasnippets . [(20160526 958) ((yasnippet (0 8 0))) "Snippets for Ember.js development" tar ((:commit . "3b5bd01569646237bf1b540d097e12f9118b67f4") (:keywords "tools" "abbrev" "languages"))]) (ember-mode . [(20171208 559) ((cl-lib (0 5))) "Ember navigation mode for emacs" single ((:commit . "755256782478cb724edd8f111225d7c8d342f90c") (:keywords "ember" "ember.js" "emberjs"))]) (emaps . [(20160910 521) nil "utilities for working with keymaps." single ((:commit . "728eb6eeae46194f32a01bafa349ece520bc7a10") (:url . "https://github.com/GuiltyDolphin/emaps") (:keywords "convenience" "keyboard" "keymap" "utility"))]) (emamux-ruby-test . [(20130812 939) ((emamux (0 1)) (projectile (0 9 1))) "Ruby test with emamux" single ((:commit . "23b73c650573b340351a919da3da416acfc2ac84") (:url . "https://github.com/syohex/emamux-ruby-test"))]) (emamux . [(20170226 1937) ((emacs (24 3))) "Interact with tmux" single ((:commit . "39f57786b2cdd3844888df42d71c7bd251f07158") (:url . "https://github.com/syohex/emacs-emamux"))]) (emacsshot . [(20161018 743) nil "Snapshot a frame or window from within Emacs" tar ((:commit . "11ace77ab718292d05b82d93178380aff591468b") (:url . "https://github.com/marcowahl/emacsshot") (:keywords "convenience"))]) (emacsql-sqlite . [(20171129 1147) ((emacs (24 3)) (cl-generic (0 3)) (cl-lib (0 3)) (emacsql (2 0 0))) "EmacSQL back-end for SQLite" tar ((:commit . "5ad4d2da9aa1ee0c2f9915d3c92a61eb7d999f68") (:url . "https://github.com/skeeto/emacsql"))]) (emacsql-psql . [(20170410 1008) ((emacs (24 3)) (cl-generic (0 3)) (cl-lib (0 3)) (emacsql (2 0 0)) (pg (0 12))) "EmacSQL back-end for PostgreSQL via psql and pg" tar ((:commit . "e3bc9b105f6f2de514dd689c8fa8f74f1d610a04") (:url . "https://github.com/skeeto/emacsql"))]) (emacsql-mysql . [(20170410 1008) ((emacs (24 3)) (cl-generic (0 3)) (cl-lib (0 3)) (emacsql (2 0 0))) "EmacSQL back-end for MySQL" single ((:commit . "5ad4d2da9aa1ee0c2f9915d3c92a61eb7d999f68") (:url . "https://github.com/skeeto/emacsql"))]) (emacsql . [(20170807 1901) ((emacs (24 3)) (cl-generic (0 3)) (cl-lib (0 3)) (finalize (1 0 0))) "high-level SQL database front-end" tar ((:commit . "e3bc9b105f6f2de514dd689c8fa8f74f1d610a04") (:url . "https://github.com/skeeto/emacsql"))]) (emacsist-view . [(20160426 523) nil "Mode for viewing emacsist.com" single ((:commit . "f67761259ed779a9bc95c9a4e0474522990c5c6b") (:url . "https://github.com/lujun9972/emacsist-view") (:keywords "convenience" "usability"))]) (emacsc . [(20161028 1006) nil "helper for emacsc(1)" tar ((:commit . "421e0c567358769e32f670ae8e949d99abae0c28") (:url . "https://github.com/knu/emacsc") (:keywords "tools"))]) (emacsagist . [(20140331 1130) ((cl-lib (0 5))) "Search Packagist.org packages without leaving Emacs" single ((:commit . "aba342ba59c254a88017f25e9fb7a8cd6f2fda83") (:url . "http://github.com/echosa/emacsagist") (:keywords "tools"))]) (emacs-setup . [(20120727 726) nil "Package for maintaining your emacs configuration. Clean up your .emacs!" tar ((:commit . "c783ec13e3b39093fffb6f6d64dccdce8ce4d375"))]) (elx . [(20170805 449) ((emacs (24 4))) "extract information from Emacs Lisp libraries" single ((:commit . "9f5d593b65686e8da29ef79457c8f6fc061af7e5") (:url . "https://github.com/emacscollective/elx") (:keywords "docs" "libraries" "packages"))]) (elwm . [(20150817 307) ((dash (1 1 0))) "Minimalistic window manager for emacs" single ((:commit . "c33b183f006ad476c3a44dab316f580f8b369930") (:url . "https://github.com/Fuco1/elwm") (:keywords "docs"))]) (elvish-mode . [(20170913 1939) ((emacs (24 3))) "Defines a major mode for Elvish" single ((:commit . "9cf31b453ac79b011b84e83ca11c964c4e647649") (:url . "https://github.com/ALSchwalm/elvish-mode"))]) (elscreen-separate-buffer-list . [(20161106 1958) ((emacs (24 4)) (elscreen (1 4 6))) "Separate buffer list manager for elscreen" single ((:commit . "7652d827aa1b8c1b04303c5b4b0bda5e8f85565e") (:keywords "elscreen"))]) (elscreen-multi-term . [(20151021 1933) ((emacs (24 4)) (elscreen (1 4 6)) (multi-term (1 3))) "Multi term for elscreen" single ((:commit . "7b6048a0dd80f69460a62bbc6f1af8856141a5ea") (:keywords "elscreen" "multi term"))]) (elscreen-mew . [(20160504 1135) ((elscreen (20120413 807))) "ElScreen Add-On for Mew" single ((:commit . "c90a23441d836da14a1cb12788432308ba58e2b6") (:url . "https://github.com/masutaka/elscreen-mew"))]) (elscreen-fr . [(20160920 253) ((elscreen (0)) (seq (1 11))) "Use frame title as screen tab" single ((:commit . "b9c11f80d277086d5d5bf88623e15fc7adbbbe3c") (:url . "http://github.com/rocher/elscreen-fr"))]) (elscreen-buffer-group . [(20170808 1825) ((emacs (24 4)) (elscreen (0)) (cl-lib (0 5))) "elscreen buffer group" single ((:commit . "a3cd4d7eae3cca87bede4b39a46d3c0641f8cd06") (:url . "https://github.com/jeffgran/elscreen-buffer-group") (:keywords "buffer"))]) (elscreen . [(20160613 251) nil "Emacs window session manager" tar ((:commit . "35c68a7503179fa618639e1c90b43bec9812a988"))]) (elquery . [(20170624 1635) ((emacs (25 1)) (s (1 11 0)) (dash (2 13 0))) "The HTML library for elisp." single ((:commit . "a5f7f3545330280991dd6334f4ce4f72aaa44145") (:url . "https://github.com/AdamNiederer/elquery") (:keywords "html" "hypermedia" "tools" "webscale"))]) (elpy . [(20171210 1216) ((company (0 9 2)) (emacs (24 4)) (find-file-in-project (3 3)) (highlight-indentation (0 5 0)) (pyvenv (1 3)) (yasnippet (0 8 0)) (s (1 11 0))) "Emacs Python Development Environment" tar ((:commit . "3d6d4565f9756b06fe08a8f699b4c1327212a393"))]) (elpa-mirror . [(20171012 15) nil "Create local package repository so package upgrade never breaks" single ((:commit . "f4a84f71368dc343d09093312d1b2c2e9a5a3987") (:url . "http://github.com/redguardtoo/elpa-mirror") (:keywords "cloud" "mirror" "elpa"))]) (elpa-clone . [(20170502 514) ((emacs (24 4)) (cl-lib (0))) "Clone ELPA archive" single ((:commit . "92f4c9d3570ad002575a90d0cc4a522c203a1110") (:url . "https://github.com/dochang/elpa-clone") (:keywords "comm" "elpa" "clone" "mirror"))]) (elpa-audit . [(20141023 631) nil "Handy functions for inspecting and comparing package archives" single ((:commit . "727da50e626977351aff2675b6540a36818bbbe6") (:url . "https://github.com/purcell/elpa-audit") (:keywords "maint"))]) (eloud . [(20160731 857) ((emacs (24 4))) "A lightweight, interactive screen reader" single ((:commit . "82c97918585bd2a749251ae87d7732ca9d856c16") (:url . "https://github.com/smythp/eloud") (:keywords "extensions"))]) (elogcat . [(20151120 1641) ((s (1 9 0)) (dash (2 10 0))) "logcat interface" single ((:commit . "4f311b7a07565b0d060334bc68edb36f2bff703f") (:keywords "tools"))]) (elog . [(20160724 1555) ((eieio (1 3))) "logging library extended from logito" single ((:commit . "a67237d9813c7591614d95e2ef31cc5e5ed3f31b") (:keywords "lisp" "tool" "log"))]) (elnode . [(20140203 1506) ((web (0 1 4)) (dash (1 1 0)) (noflet (0 0 7)) (s (1 5 0)) (creole (0 8 14)) (fakir (0 1 6)) (db (0 0 5)) (kv (0 0 17))) "The Emacs webserver." tar ((:commit . "3f2bf225853e40a2a10386ee5ae0bd6ba5d44ce9"))]) (elmine . [(20170511 20) ((s (1 10 0))) "Redmine API access via elisp." single ((:commit . "432d2f2f7cb5b533f25b993d1001abcadcebe8ed") (:url . "http://github.com/leoc/elmine") (:keywords "tools"))]) (elmacro . [(20170312 356) ((s (1 11 0)) (dash (2 13 0))) "Convert keyboard macros to emacs lisp" single ((:commit . "97c8ca4041e5082df243ad6371a091759c30d0f7") (:url . "https://github.com/Silex/elmacro") (:keywords "macro" "elisp" "convenience"))]) (elm-yasnippets . [(20160331 2224) ((yasnippet (0 8 0))) "Yasnippets for Elm" tar ((:commit . "45a11a0cef0c36633fb3477d3dc4167e82779ba4") (:keywords "snippets"))]) (elm-mode . [(20171114 1225) ((f (0 17)) (let-alist (1 0 4)) (seq (2 2)) (s (1 7 0)) (emacs (24 4)) (dash (2 13 0))) "Major mode for Elm" tar ((:commit . "a01626ce462fffc11af1f7e64f6d520e363157f9") (:url . "https://github.com/jcollard/elm-mode"))]) (elixir-yasnippets . [(20150417 539) ((yasnippet (0 8 0))) "Yasnippets for Elixir" tar ((:commit . "980ca7626c14ef0573bec0035ec7942796062783"))]) (elixir-mode . [(20170918 2231) ((emacs (24)) (pkg-info (0 4))) "Major mode for editing Elixir files" tar ((:commit . "861788186f4dbd500209656dcf38a15b3efe74dd") (:url . "https://github.com/elixir-lang/emacs-elixir") (:keywords "languages" "elixir"))]) (elisp-slime-nav . [(20160128 1109) ((cl-lib (0 2))) "Make M-. and M-, work in elisp like they do in slime" single ((:commit . "34938422929800839e2f935aca890cd4a229ca99") (:url . "https://github.com/purcell/elisp-slime-nav") (:keywords "navigation" "slime" "elisp" "emacs-lisp"))]) (elisp-sandbox . [(20131116 1042) nil "Evaluate EmacsLisp expressions in a sandbox" single ((:commit . "d894d68934ef09c42f72ac4e1173a0bedc23f139") (:url . "https://github.com/joelmccracken/elisp-sandbox") (:keywords "lisp"))]) (elisp-refs . [(20171211 1100) ((dash (2 12 0)) (f (0 18 2)) (list-utils (0 4 4)) (loop (1 2)) (s (1 11 0))) "find callers of elisp functions or macros" single ((:commit . "ae5abe0821fca407c3bd6f705fe277390e966269") (:keywords "lisp"))]) (elisp-lint . [(20150430 1558) nil "basic linting for Emacs Lisp" single ((:commit . "1168b12575f1ed54ee523d34a90757459a6e42a3") (:url . "http://github.com/nschum/elisp-lint/") (:keywords "lisp"))]) (elisp-format . [(20160508 252) nil "Format elisp code" single ((:commit . "03cc293eb2f78ec58fc1d84279af06816a04b979") (:url . "https://github.com/Yuki-Inoue/elisp-format"))]) (elisp-docstring-mode . [(20170304 815) nil "Major mode for editing elisp docstrings." single ((:commit . "f512e509dd690f65133e55563ebbfd2dede5034f") (:keywords "languages"))]) (elisp-depend . [(20161230 750) nil "Parse depend libraries of elisp file." single ((:commit . "e4b201ac7dcee4489d58800c299fd04aaa61d07a"))]) (elhome . [(20161025 1342) ((initsplit (20120630))) "A framework for a \"home\" Emacs configuration" tar ((:commit . "e789e806469af3e9705f72298683c21f6c3a516d") (:url . "http://github.com/demyanrogozhin/elhome") (:keywords "lisp"))]) (elfeed-web . [(20170709 954) ((simple-httpd (1 4 3)) (elfeed (1 4 0)) (emacs (24 1))) "web interface to Elfeed" tar ((:commit . "312b3bf4ca542dd84e3cc502c5297498d4c1f7ef"))]) (elfeed-protocol . [(20171211 714) ((emacs (24 4)) (elfeed (2 1 1)) (cl-lib (0 5))) "Provide owncloud/ttrss protocols for elfeed" tar ((:commit . "b2efaabd2a7ffeed9e090042995a55f888398e95") (:url . "https://github.com/fasheng/elfeed-protocol") (:keywords "news"))]) (elfeed-org . [(20171113 356) ((elfeed (1 1 1)) (org (8 2 7)) (dash (2 10 0)) (s (1 9 0)) (cl-lib (0 5))) "Configure elfeed with one or more org-mode files" single ((:commit . "1a2bacc160d4e164f012ebf23f3ecccac85df18f") (:url . "https://github.com/remyhonig/elfeed-org") (:keywords "news"))]) (elfeed-goodies . [(20171126 2251) ((popwin (1 0 0)) (powerline (2 2)) (elfeed (2 0 0)) (cl-lib (0 5)) (noflet (0 0 10)) (ace-jump-mode (2 0))) "Elfeed goodies" tar ((:commit . "fc0c3e72f9fcd7bbf5237f6f2323bc666e8240b4") (:url . "https://github.com/algernon/elfeed-goodies"))]) (elfeed . [(20171103 737) ((emacs (24 3))) "an Emacs Atom/RSS feed reader" tar ((:commit . "312b3bf4ca542dd84e3cc502c5297498d4c1f7ef"))]) (elf-mode . [(20161009 48) ((emacs (24 3))) "Show symbols in binaries" single ((:commit . "cd280d683cd3341d8bb31af6db7e3b74a133e6ab") (:url . "https://github.com/abo-abo/elf-mode") (:keywords "matching"))]) (elein . [(20120120 316) nil "running leiningen commands from emacs" single ((:commit . "d4c0c0491dbb7c90e953d7a16172107c37103605") (:url . "https://github.com/remvee/elein") (:keywords "tools" "processes"))]) (electric-spacing . [(20161209 1157) nil "Insert operators with surrounding spaces smartly" single ((:commit . "9d0f8a213133f2619a4e9dfbba3b00d4348c07b0"))]) (electric-operator . [(20171125 148) ((dash (2 10 0)) (names (20150618 0)) (emacs (24 4))) "Automatically add spaces around operators" single ((:commit . "77ec424e1383b866b404b58fdd92515f9b786eac") (:url . "https://github.com/davidshepherd7/electric-operator") (:keywords "electric"))]) (electric-case . [(20150417 412) nil "insert camelCase, snake_case words without \"Shift\"ing" single ((:commit . "bac64e772107e3dc721a9819f63b9ebdc28a81f7") (:url . "http://hins11.yu-yake.com/"))]) (eldoc-overlay-mode . [(20170909 651) ((emacs (24 3)) (inline-docs (1 0 1)) (quick-peek (1 0))) "Display eldoc with contextual documentation overlay." single ((:commit . "4512e5499cd4f647ad3b5212b853f0299d6cff47") (:url . "https://github.com/stardiviner/eldoc-overlay-mode") (:keywords "eldoc" "overlay"))]) (eldoc-extension . [(20140306 645) nil "Some extension for eldoc" single ((:keywords "eldoc"))]) (eldoc-eval . [(20150512 506) nil "Enable eldoc support when minibuffer is in use." single ((:commit . "e87b89f89a2aed0bb3b31c014fc1b72f00413866"))]) (el2org . [(20170804 2142) ((emacs (25 1))) "Convert elisp file to org file" single ((:commit . "4a33469cd305e581603d7ef63bc2a1f2156f2e2e") (:url . "https://github.com/tumashu/el2org") (:keywords "convenience"))]) (el2markdown . [(20170630 1158) nil "Convert commentary section of elisp files to markdown." single ((:commit . "368d99313683cd943c99feaffca356be60bdb636") (:url . "https://github.com/Lindydancer/el2markdown"))]) (el-x . [(20140111 1401) nil "main entry point for el-x package" tar ((:commit . "e7c333d4fc31a90f4dca951efe21129164b42605") (:keywords "lisp"))]) (el-swank-fuzzy . [(20130824 457) nil "fuzzy symbol completion." single ((:keywords "matching" "completion" "string"))]) (el-spy . [(20131226 1208) nil "Mocking framework for Emacs lisp. It also support spy, proxy." single ((:commit . "b1dead9d1877660856ada22d906ac4e54695aec7") (:url . "https://github.com/uk-ar/el-spy") (:keywords "test"))]) (el-sprunge . [(20140106 1739) ((web-server (20140105 2246)) (htmlize (20130207 1202)) (emacs (24 3))) "Command line paste server with Emacs highlighting" tar ((:commit . "37855ec60aeb4d565c49a4d711edc7341e9a22cb"))]) (el-spice . [(20140805 1138) ((thingatpt+ (0))) "Extra spice for emacs lisp programming" tar ((:commit . "65d9ec84b581a5867eebbc58de93958e992ca80d") (:url . "https://github.com/vedang/el-spice") (:keywords "languages" "extensions"))]) (el-spec . [(20121018 4) nil "ruby's rspec like syntax test frame work" single ((:commit . "1dbc465401d4aea5560318c4f13ff30920a0718d") (:url . "https://github.com/uk-ar/el-spec") (:keywords "test"))]) (el-pocket . [(20170922 549) ((web (0 5 2)) (emacs (24))) "Read and write to Pocket (getpocket.com)" single ((:commit . "a80abfb67efe68ada1d7d0a73aecee57e763baaa") (:url . "http://github.com/pterygota/el-pocket") (:keywords "emacs" "pocket" "bookmarks"))]) (el-patch . [(20171016 1743) ((emacs (25))) "Future-proof your Emacs Lisp customizations!" single ((:commit . "a5999539e42fb41d2b31f09022b9efe27ae76684") (:url . "https://github.com/raxod502/el-patch") (:keywords "extensions"))]) (el-mock . [(20170824 1254) nil "Tiny Mock and Stub framework in Emacs Lisp" single ((:commit . "5df1d3a956544f1d3ad0bcd81daf47fff33ab8cc") (:url . "http://github.com/rejeep/el-mock.el") (:keywords "lisp" "testing" "unittest"))]) (el-init-viewer . [(20150303 28) ((emacs (24)) (cl-lib (0 5)) (ctable (0 1 2)) (dash (2 10 0)) (anaphora (1 0 0)) (el-init (0 1 4))) "Record viewer for el-init" single ((:commit . "dbcb4418fe342dfd7da805f2d7caf1def68db7f9") (:url . "https://github.com/HKey/el-init-viewer"))]) (el-init . [(20150728 220) ((emacs (24)) (cl-lib (0 5)) (anaphora (1 0 0))) "A loader inspired by init-loader" single ((:commit . "6b45551b8ed473c8a0c897b743b0378a3501556c") (:url . "https://github.com/HKey/el-init"))]) (el-get . [(20170813 1436) nil "Manage the external elisp bits and pieces you depend upon" tar ((:commit . "4d5e51241f1863dff58fc23a815aad29f0869e3b") (:url . "http://www.emacswiki.org/emacs/el-get") (:keywords "emacs" "package" "elisp" "install" "elpa" "git" "git-svn" "bzr" "cvs" "svn" "darcs" "hg" "apt-get" "fink" "pacman" "http" "http-tar" "emacswiki"))]) (el-autoyas . [(20120918 617) nil "Automatically create Emacs-Lisp Yasnippets" tar ((:commit . "bde0251ecb504f585dfa27c205c8e312655310cc") (:url . "https://github.com/mlf176f2/el-autoyas.el") (:keywords "emacs" "lisp" "mode" "yasnippet"))]) (ejc-sql . [(20171205 530) ((emacs (24 4)) (clomacs (0 0 2)) (cider (0 14)) (dash (2 12 1)) (auto-complete (1 5 1)) (spinner (1 7 1)) (direx (1 0 0))) "Emacs SQL client uses Clojure JDBC." tar ((:commit . "a7118493f1bcf78c5c3e9808b786387af9df9264") (:url . "https://github.com/kostafey/ejc-sql") (:keywords "sql" "jdbc"))]) (eink-theme . [(20170717 807) nil "E Ink color theme" single ((:commit . "4c990bb3428f725735fa1f733ef4c5ad61f632b0") (:url . "http://github.com/maio/eink-emacs"))]) (ein-mumamo . [(20150301 1628) ((ein (0 4))) "Multiple major mode support for Emacs IPython Notebook" single ((:commit . "028fefec499598add1a87b92ed991891f38f0c7b"))]) (ein . [(20171128 516) ((websocket (1 7)) (auto-complete (1 4 0)) (request (0 3)) (deferred (0 5)) (request-deferred (0 2 0)) (cl-generic (0 3)) (dash (2 13 0)) (s (1 11 0)) (skewer-mode (1 6 2))) "Emacs IPython Notebook" tar ((:commit . "1bd6155005ee9749e51bcc8232c80690484c8ca2"))]) (eimp . [(20120826 1339) nil "Emacs Image Manipulation Package" single ((:commit . "2e7536fe6d8f7faf1bad7a8ae37faba0162c3b4f") (:keywords "files" "frames"))]) (eide . [(20170906 1216) nil "IDE interface" tar ((:commit . "25f9af215781163b10d411fe2b5674033eb24165"))]) (ego . [(20170601 817) ((emacs (24 5)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (simple-httpd (1 4 5))) "a static site generator based on org mode, forked from org-page." tar ((:commit . "93ccd450d2d9e5db27aebb024a1b2ed56d5131dc"))]) (egison-mode . [(20160603 103) nil "Egison editing mode" single ((:commit . "83e835870d9d10dc3622b09157354332d1154eb7") (:url . "https://github.com/egisatoshi/egison3/blob/master/elisp/egison-mode.el"))]) (egg . [(20160330 2047) nil "Emacs Got Git - Emacs interface to Git" tar ((:commit . "cadc5c7fd21142d7ea41732200ab52eac0b96d3f") (:keywords "git" "version control" "release management"))]) (eg . [(20170830 115) ((cl-lib (0 5)) (emacs (24 3))) "Norton Guide reader" single ((:commit . "1c7f1613d2aaae728ef540305f6ba030616f86bd") (:url . "https://github.com/davep/eg.el") (:keywords "docs"))]) (efire . [(20151009 1331) ((circe (1 2))) "Use campfire from Emacs" single ((:commit . "91a644662afb352475efad0b377713656f131e5c") (:url . "https://github.com/capitaomorte/efire") (:keywords "convenience" "tools"))]) (edts . [(20171030 9) ((auto-complete (1 3 1)) (auto-highlight-symbol (1 53)) (dash (2 13)) (erlang (2 4 1)) (f (0 19 0)) (popup (0 4)) (s (1 11 0))) "Erlang Development Tool Suite" tar ((:commit . "6ef4bdf571235ee1b078db321402270cabff7fda"))]) (edn . [(20160215 419) ((cl-lib (0 3)) (emacs (24 1)) (peg (0 6))) "Support for reading and writing the edn data format from elisp" single ((:commit . "be9e32d1b49e35247b263b0243df7cfdc8d413ab") (:url . "https://www.github.com/expez/edn.el") (:keywords "edn" "clojure"))]) (editorconfig-domain-specific . [(20160705 802) ((cl-lib (0 5)) (editorconfig (0 6 0))) "Apply brace style and other \"domain-specific\" EditorConfig properties" single ((:commit . "0142ddff7b3293c82b0a83ad2c3edd6ee1a84ddd") (:url . "https://github.com/lassik/editorconfig-emacs-domain-specific") (:keywords "editorconfig" "util"))]) (editorconfig-custom-majormode . [(20170509 141) ((editorconfig (0 6 0))) "Decide major-mode and mmm-mode from EditorConfig" single ((:commit . "b5350d20b2730a0f029c9e1d651e50cf9a809fa9") (:url . "https://github.com/10sr/editorconfig-custom-major-mode-el") (:keywords "editorconfig" "util"))]) (editorconfig-charset-extras . [(20170712 108) ((editorconfig (0 6 0))) "Extra EditorConfig Charset Support" single ((:commit . "bf2d23c57a485ee41d21a9a0015d5bd52baabf85") (:url . "https://github.com/10sr/editorconfig-charset-extras-el") (:keywords "tools"))]) (editorconfig . [(20171208 2036) ((cl-lib (0 5))) "EditorConfig Emacs Plugin" tar ((:commit . "15e26cf5a5a656735fa25bfa75164f0893f4688a") (:url . "https://github.com/editorconfig/editorconfig-emacs#readme"))]) (edit-server-htmlize . [(20130329 1548) ((edit-server (1 9))) "(de)HTMLization hooks for edit-server.el" single ((:commit . "e7f8dadfabe869c77ca241cd6fbd4c52bd908392") (:url . "https://github.com/frobtech/edit-server-htmlize"))]) (edit-server . [(20170725 859) nil "server that responds to edit requests from Chrome" single ((:commit . "43ec7693bc7f36b5f497161ff3c4b27d2989c9dd") (:url . "https://github.com/stsquad/emacs_chrome"))]) (edit-list . [(20100930 743) nil "edit a single list" single ((:commit . "f460d3f9e208a4e606fe6ded307f1b011916ca71") (:url . "http://mwolson.org/static/dist/elisp/edit-list.el"))]) (edit-indirect-region-latex . [(20161128 2245) ((emacs (24 3)) (ht (2 2)) (edit-indirect (0 1 4))) "Edit LaTeX regions in separate buffers, e.g. for English grammar checks" single ((:commit . "05043f2c0c9838947d3ca4b51b695deb7c47612e") (:url . "https://github.com/niitsuma/edit-indirect-region-latex"))]) (edit-indirect . [(20170928 430) ((emacs (24 3))) "Edit regions in separate buffers" single ((:commit . "032ac0ec690d4999d564fd882588c7a197efe8dd") (:url . "https://github.com/Fanael/edit-indirect"))]) (edit-color-stamp . [(20130529 1033) ((es-lib (0 2)) (cl-lib (1 0))) "Edit a hex color stamp, using a QT or the internal color picker" tar ((:commit . "32dc1ca5bcf3dcf83fad5e39b55dc5b77becb3d3") (:url . "https://github.com/sabof/edit-color-stamp"))]) (edit-at-point . [(20150716 624) nil "edit(copy,cut..) current things(word,symbol..) under cursor" single ((:commit . "3b800c11685102e1eab62ec71c5fc1589ebb81a7") (:url . "http://github.com/enoson/edit-at-point.el"))]) (edebug-x . [(20130615 2325) nil "Extensions for Edebug" single ((:commit . "a2c2c42553d3bcbd5ac11898554865acbed1bc46") (:url . "https://github.com/ScottyB/edebug-x") (:keywords "extensions"))]) (ede-php-autoload-drupal . [(20170316 1458) ((ede-php-autoload (1 0 0)) (f (0 19 0)) (s (1 7 0))) "Drupal support for ede-php-autoload" single ((:commit . "54a04241d94fabc4f4d16ae4dc8ba4f0c6e3b435") (:keywords "programming" "php" "drupal"))]) (ede-php-autoload-composer-installers . [(20170221 1226) ((ede-php-autoload (1 0 0)) (f (0 19 0)) (s (1 7 0))) "Composer installers support for ede-php-autoload" single ((:commit . "7840439802c7d11ee086bbf465657f3da12f9f66") (:url . "https://github.com/xendk/ede-php-autoload-composer-installers") (:keywords "programming" "php"))]) (ede-php-autoload . [(20170428 933) nil "Simple EDE PHP Project" tar ((:commit . "65e502602dbc623257a820245d41f94cf2e1f07d") (:url . "https://github.com/stevenremot/ede-php-autoload") (:keywords "php" "project" "ede"))]) (ede-compdb . [(20150920 1333) ((ede (1 2)) (semantic (2 2)) (cl-lib (0 4))) "Support for compilation database projects in EDE" single ((:commit . "d6d8466cd62876fc90adeff5875a1a584fd846cd") (:keywords "development" "ninja" "build" "cedet" "ede"))]) (edbi-sqlite . [(20160221 1123) ((emacs (24)) (edbi (0 1 3))) "Open sqlite files with edbi" single ((:commit . "52cb9ca1af7691b592f2cfd2f007847e7a4ccd5f") (:url . "https://github.com/proofit404/edbi-sqlite"))]) (edbi-minor-mode . [(20160706 747) ((edbi (0 1 3))) "Use edbi with regular SQL files." single ((:commit . "566a2141a6eb9d9d5d7e1bd7c251d1c5e8f0d2ec") (:url . "https://github.com/proofit404/edbi-minor-mode"))]) (edbi-django . [(20160221 1123) ((emacs (24)) (edbi (0 1 3)) (f (0 17 1))) "Run edbi with django settings" tar ((:commit . "61c70d3a727ff28c1c7d1eb61af1efba7a268b8f") (:url . "https://github.com/proofit404/edbi-django"))]) (edbi-database-url . [(20160221 1123) ((emacs (24)) (edbi (0 1 3))) "Run edbi with database url" single ((:commit . "d56c580268cd93651998c4c6b1c5558e6b6ca90f") (:url . "https://github.com/proofit404/edbi-database-url"))]) (edbi . [(20160224 1741) ((concurrent (0 3 1)) (ctable (0 1 2)) (epc (0 1 1))) "Emacs Database Interface" tar ((:commit . "6f50aaf4bde75255221f2292c7a4ad3fa9d918c0"))]) (ecukes . [(20171110 627) ((commander (0 6 1)) (espuds (0 2 2)) (ansi (0 3 0)) (dash (2 2 0)) (s (1 8 0)) (f (0 11 0))) "Cucumber for Emacs." tar ((:commit . "c8092db08be5337ff3f3dd2857bfa94e360945d2"))]) (eclipse-theme . [(20160430 322) nil "Theme based on Eclipse circa 2010" single ((:commit . "dc54d9312d97210823b922038076e2b1b132eff2") (:url . "https://github.com/abo-abo/eclipse-theme") (:keywords "themes"))]) (eclim . [(20171113 1754) ((dash (2 11 0)) (json (1 2)) (popup (0 5 2)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (0 10 0))) "An interface to the Eclipse IDE." tar ((:commit . "4f27d04c30a026f24c0ff18c3a7d36e3fb5b57a5"))]) (echo-bell . [(20170221 1635) nil "Show visual bell at right in the echo area." single ((:url . "https://www.emacswiki.org/emacs/download/echo-bell.el") (:keywords "echo area" "bell" "ding"))]) (ecb . [(20170728 1221) nil "a code browser for Emacs" tar ((:commit . "1330a44cf3c171781083b0b926ab7622f64e6e81") (:keywords "browser" "code" "programming" "tools"))]) (ebib . [(20171110 1) ((dash (2 5 0)) (seq (2 15)) (parsebib (2 3)) (emacs (24 4))) "a BibTeX database manager" tar ((:commit . "ab9596e03b749785919857f9785dc37c3c5dfc4e") (:keywords "text" "bibtex"))]) (ebf . [(20160211 958) ((dash (2 11 0)) (dash-functional (1 2 0)) (cl-lib (0 5))) "brainfuck language transpiler to Emacs Lisp" tar ((:commit . "4cd9c26354d8be6571354b2954d21fba882e78a2") (:url . "http://github.com/rexim/ebf"))]) (ebal . [(20170810 631) ((emacs (24 4)) (f (0 18 0))) "Emacs interface to Cabal and Stack" single ((:commit . "65a131b95a1e934c0cab384ef533b0ac58961f0c") (:url . "https://github.com/mrkkrp/ebal") (:keywords "convenience" "cabal" "haskell"))]) (easy-repeat . [(20150516 148) ((emacs (24 4))) "Repeat easily" single ((:commit . "060f0e6801c82c40c06961dc0528a00e18947a8c") (:url . "https://github.com/xuchunyang/easy-repeat.el") (:keywords "repeat" "convenience"))]) (easy-kill-extras . [(20161028 504) ((easy-kill (0 9 4))) "Extra functions for easy-kill." tar ((:commit . "e60a74d7121eff7c263098aea2901cc05a5f6acd") (:url . "https://github.com/knu/easy-kill-extras.el") (:keywords "killing" "convenience"))]) (easy-kill . [(20151030 2229) ((emacs (24)) (cl-lib (0 5))) "kill & mark things easily" single ((:commit . "e2b667f651a3531164d24ea4cbcd8c34fba0e17f") (:url . "https://github.com/leoliu/easy-kill") (:keywords "killing" "convenience"))]) (easy-jekyll . [(20171207 1638) ((emacs (24 4))) "Major mode managing jekyll blogs" single ((:commit . "8060e6e37abf67bad262c3064cecead22e9a5e4f") (:url . "https://github.com/masasam/emacs-easy-jekyll"))]) (easy-hugo . [(20171207 2240) ((emacs (24 4))) "Write blogs made with hugo by markdown or org-mode" single ((:commit . "9a3be722cbde9bac311f634e3ee8366e039df8e4") (:url . "https://github.com/masasam/emacs-easy-hugo"))]) (easy-escape . [(20161209 744) nil "Improve readability of escape characters in regular expressions" single ((:commit . "63fa5fcf9a53b7d3c1e872081e65afad5a722ba8") (:url . "https://github.com/cpitclaudel/easy-escape") (:keywords "convenience" "lisp" "tools"))]) (easy-after-load . [(20170817 531) nil "eval-after-load for all files in a directory" single ((:commit . "29e20145da49ac9ea40463c552130777408040de") (:url . "https://github.com/pd/easy-after-load"))]) (eacl . [(20171109 40) ((emacs (24 3)) (ivy (0 9 1))) "Auto-complete line(s) by grepping project" single ((:commit . "0ee57b495036b6c1b54d668e84be373f8a1c8d9a") (:url . "http://github.com/redguardtoo/eacl") (:keywords "abbrev" "convenience" "matching"))]) (e2wm-term . [(20141009 608) ((e2wm (1 2)) (log4e (0 2 0)) (yaxception (0 3 2))) "Perspective of e2wm.el for work in terminal" single ((:commit . "65b5ac88043d5c4048920a048f3599904ca55981") (:url . "https://github.com/aki2o/e2wm-term") (:keywords "tools" "window manager"))]) (e2wm-sww . [(20140524 158) ((e2wm (1 2))) "Plugin of e2wm.el to switch plugin quickly" single ((:commit . "1063f9854bd34db5ac771cd1036cecc89834729d") (:url . "https://github.com/aki2o/e2wm-sww") (:keywords "tools" "window manager"))]) (e2wm-svg-clock . [(20150106 506) ((e2wm (20130225 1602)) (svg-clock (0 4))) "e2wm plugin for svg-clock" single ((:commit . "d425925e3afffcbe2ff74edc80b714e4319d4c94") (:url . "https://github.com/myuhe/e2wm-svg-clock.el") (:keywords "convenience" "e2wm"))]) (e2wm-pkgex4pl . [(20140525 347) ((e2wm (1 2)) (plsense-direx (0 2 0))) "Plugin of e2wm.el for package explorer of Perl" single ((:commit . "7ea994450727190c4f3cb46cb429ba41b692ecc0") (:url . "https://github.com/aki2o/e2wm-pkgex4pl") (:keywords "tools" "window manager" "perl"))]) (e2wm-direx . [(20170509 601) ((e2wm (1 2)) (direx (0 1 -3))) "Plugin of e2wm.el for direx.el" single ((:commit . "b47f19d15436cc28233a812a1150689f61d11046") (:url . "https://github.com/aki2o/e2wm-direx") (:keywords "tools" "window manager" "convenience"))]) (e2wm-bookmark . [(20151122 2121) ((e2wm (1 2))) "Bookmark plugin for e2wm.el" single ((:commit . "bad816b6d8049984d69bcd277b7d325fb84d55eb") (:keywords "convenience"))]) (e2wm-R . [(20151230 126) ((e2wm (1 3)) (inlineR (1 0)) (ess (15 3))) "some e2wm plugin and perspective for GNU R" single ((:commit . "4350601ee1a96bf89777b3f09f1b79b88e2e6e4d") (:url . "https://github.com/myuhe/e2wm-R.el") (:keywords "convenience" "e2wm"))]) (e2wm . [(20170214 1636) ((window-layout (1 4))) "simple window manager for emacs" tar ((:commit . "4353d3394c77a49f8f0291c239858c8c5e877549") (:keywords "tools" "window manager"))]) (e2ansi . [(20150220 1513) nil "Syntax highlighting support for `less', powered by Emacs." tar ((:commit . "bd047d3d6ad02a0679582d5786afe9aee656da90") (:url . "https://github.com/Lindydancer/e2ansi") (:keywords "faces" "languages"))]) (dynamic-spaces . [(20171027 1151) nil "When editing, don't move text separated by spaces" single ((:commit . "97ae8480c257ba573ca3d06dbf602f9b23c41d38") (:url . "https://github.com/Lindydancer/dynamic-spaces") (:keywords "convenience"))]) (dynamic-ruler . [(20160602 108) nil "Displays a dynamic ruler at point." single ((:commit . "c9c0de6fe5721f06b50e01d9b4684b519c71b367") (:url . "http://rocher.github.io/dynamic-ruler") (:keywords "ruler" "tools" "convenience"))]) (dynamic-fonts . [(20140731 526) ((font-utils (0 7 0)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Set faces based on available fonts" single ((:commit . "ab0c65accbdb59acaed5b263327e22ec019b3e82") (:url . "http://github.com/rolandwalker/dynamic-fonts") (:keywords "faces" "frames"))]) (dylan-mode . [(20160405 1514) nil "Major mode for editing Dylan programs." tar ((:commit . "7e8ba16bf125f0066d3e1caeefaba94a6d32ac72"))]) (dyalog-mode . [(20171211 722) ((cl-lib (0 2)) (emacs (24))) "Major mode for editing Dyalog APL source code" tar ((:url . "https://bitbucket.org/harsman/dyalog-mode/") (:keywords "languages"))]) (dut-mode . [(20170729 1411) ((emacs (24))) "Major mode for the Dut programming language" single ((:commit . "9235c7acaa6690942e9de8b7acd1e4be0c859dc1") (:url . "https://github.com/dut-lang/dut-mode") (:keywords "languages" "gut"))]) (duplicate-thing . [(20120515 948) nil "Duplicate current line & selection" single ((:commit . "f6ed0232fd0653621afe450d53775a32a9d0e328") (:keywords "command" "duplicate" "line" "selection"))]) (dummyparens . [(20141009 324) nil "parenthesis auto-pairing and wrapping" single ((:commit . "9798ef1d0eaa24e4fe66f8aa6022a8c62714cc89") (:url . "https://github.com/snosov1/dummyparens") (:keywords "dummyparens" "auto-pair" "wrapping"))]) (dummy-h-mode . [(20160603 417) nil "switch major mode to c-/c++-/objc-mode on .h file" single ((:keywords "c-mode" "c++-mode" "objc-mode"))]) (dumb-jump . [(20171122 1614) ((emacs (24 3)) (f (0 17 3)) (s (1 11 0)) (dash (2 9 0)) (popup (0 5 3))) "jump to definition for multiple languages without configuration." single ((:commit . "87baf3f9272bb7f38874bdc22ffa2bc83a08ca1b") (:keywords "programming"))]) (dumb-diff . [(20171211 1322) ((emacs (24 3))) "fast arbitrary diffs" single ((:commit . "1a2331d283049b71a07c1b06b1e0627a950d55f4") (:keywords "programming" "diff"))]) (ducpel . [(20140702 454) ((cl-lib (0 5))) "Logic game with sokoban elements" tar ((:commit . "b53b935ab95c02b82ccf38f63c89e39e99477a55") (:url . "https://github.com/alezost/ducpel") (:keywords "games"))]) (dts-mode . [(20161103 523) nil "Major mode for Devicetree source code" single ((:commit . "9ee0854446dcc6c53d2b8d2941051768dba50344") (:keywords "languages"))]) (dtrt-indent . [(20171001 1233) nil "Adapt to foreign indentation offsets" tar ((:commit . "7fd55af3b0311ea24b68397054e705c835fa5ef1") (:keywords "convenience" "files" "languages" "c"))]) (dtrace-script-mode . [(20150213 2223) nil "DTrace code editing commands for Emacs" single ((:commit . "801af1ef16075d31a19830ebb8404bbf3a322f10"))]) (dsvn . [(20130120 1257) nil "Subversion interface" single ((:commit . "17bce692e9bd5a43373d5cb1d66da50e1acb903b") (:keywords "docs"))]) (drupal-spell . [(20130520 955) nil "Aspell extra dictionary for Drupal" tar ((:commit . "a69f5e3b62c4c0da74ce26c1d00d5b8f7395e4ae") (:url . "https://github.com/arnested/drupal-spell") (:keywords "wp"))]) (drupal-mode . [(20171120 1509) ((php-mode (1 5 0))) "Advanced minor mode for Drupal development" tar ((:commit . "47fda0a38a5b197f4606137d9c3b7d44aaeaa886") (:url . "https://github.com/arnested/drupal-mode") (:keywords "programming" "php" "drupal"))]) (dropdown-list . [(20120329 936) nil "Drop-down menu interface" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/download/dropdown-list.el") (:keywords "menu" "convenience" "dropdown"))]) (dropbox . [(20170502 1722) ((json (1 2)) (oauth (1 0 3))) "Emacs backend for dropbox" single ((:commit . "d85bbf6caa4203d6088ea29f5c057c1e9bcacd85") (:keywords "dropbox"))]) (drone . [(20161106 118) nil "Launch your drone test suite if drone.yml is present" single ((:commit . "1d4ee037ad3208847a4235426edf0c4a3e7b1899") (:url . "https://github.com/olymk2/emacs-drone") (:keywords "drone" "tests" "ci"))]) (drill-instructor-AZIK-force . [(20151122 2114) ((popup (0 5))) "Support AZIK input" tar ((:commit . "008cea202dc31d7d6fb1e7d8e6334d516403b7a5"))]) (drawille . [(20160418 1138) ((cl-lib (0 5))) "Drawille implementation in elisp" tar ((:commit . "d914845725719d8293e2f0dea3c9c7e0a1e0e62a") (:url . "https://github.com/sshbio/elisp-drawille") (:keywords "graphics"))]) (drag-stuff . [(20161107 2349) nil "Drag stuff (lines, words, region, etc...) around" tar ((:commit . "6d06d846cd37c052d79acd0f372c13006aa7e7c8"))]) (draft-mode . [(20140609 756) nil "Rough drafting for Emacs." single ((:commit . "4779fb32daf53746459da2def7e08004492d4f18") (:url . "https://github.com/gaudecker/draft-mode") (:keywords "draft" "drafting"))]) (dracula-theme . [(20170412 845) ((emacs (24))) "Dracula Theme" single ((:commit . "62df5de68c73d34faaa0191a92ce3ebce589bf24") (:url . "https://github.com/dracula/emacs"))]) (dr-racket-like-unicode . [(20161021 511) ((emacs (24 1))) "DrRacket-style unicode input" single ((:commit . "4953f1c8a68472e157a0dcd0a7e35a4ec2577133") (:keywords "i18n" "tools"))]) (dpaste_de . [(20131015 525) ((web (0 3 7))) "Emacs mode to paste to dpaste.de" single ((:commit . "f0c39e8864299f735642f7d9fa490689398ce39d") (:keywords "pastebin"))]) (dpaste . [(20160303 1312) nil "Emacs integration for dpaste.com" single ((:commit . "5ebabb466a6ae70882549855b6b2194fc32189f8") (:keywords "paste" "pastie" "pastebin" "dpaste" "python"))]) (downplay-mode . [(20151125 1209) nil "focus attention on a region of the buffer" single ((:commit . "4a2c3addc73c8ca3816345c3c11c08af265baedb") (:url . "https://github.com/tobias/downplay-mode/"))]) (download-region . [(20160430 1116) ((cl-lib (0 3))) "Simple in-buffer download manager" single ((:commit . "eb9e557529a73b4cfc8281c70dd0d95db333fffa") (:url . "http://hins11.yu-yake.com/"))]) (dotnet . [(20170827 838) nil "Interact with dotnet CLI tool" single ((:commit . "e22fd23bf2bfab980d4802b10c4d872b800f90d4") (:url . "https://github.com/julienXX/dotnet.el") (:keywords ".net" "tools"))]) (dotenv-mode . [(20171123 649) ((emacs (24 3))) "Major mode for .env files" single ((:commit . "8d45b98beb04f486eb13d71765589e7dccb8ffa9") (:url . "https://github.com/preetpalS/emacs-dotenv-mode"))]) (dot-mode . [(20161025 1037) ((emacs (24 3))) "minor mode to repeat typing or commands" single ((:commit . "cde2d593cb3f8e31db8778e434d3a4550707d2cc") (:url . "https://github.com/wyrickre/dot-mode") (:keywords "convenience"))]) (doremi-mac . [(20170221 1633) nil "A macro for defining Do Re Mi commands." single ((:url . "https://www.emacswiki.org/emacs/download/doremi-mac.el") (:keywords "extensions" "convenience" "keys" "repeat" "cycle"))]) (doremi-frm . [(20170221 1632) ((doremi (0)) (faces+ (0)) (frame-fns (0)) (hexrgb (0))) "Incrementally adjust face attributes and frame parameters." single ((:url . "https://www.emacswiki.org/emacs/download/doremi-frm.el") (:keywords "frames" "extensions" "convenience" "keys" "repeat" "cycle"))]) (doremi-cmd . [(20170221 1631) ((doremi (0))) "Miscellaneous Do Re Mi commands" single ((:url . "https://www.emacswiki.org/emacs/download/doremi-cmd.el") (:keywords "keys" "cycle" "repeat"))]) (doremi . [(20170221 1634) nil "Do Re Mi: Incremental change using arrow keys or mouse wheel." single ((:url . "https://www.emacswiki.org/emacs/download/doremi.el") (:keywords "keys" "cycle" "repeat" "higher-order"))]) (doom-themes . [(20171211 2249) ((emacs (24 4)) (all-the-icons (1 0 0)) (cl-lib (0 5))) "an opinionated pack of modern color-themes" tar ((:commit . "b6c6568c6ef2f965cbebc12fa60d0c37fbba9cda") (:url . "https://github.com/hlissner/emacs-doom-theme") (:keywords "dark" "light" "blue" "atom" "one" "theme" "neotree" "icons" "faces" "nova"))]) (doom . [(20160121 722) ((cl-lib (0 5))) "DOM implementation and manipulation library" single ((:commit . "5e2d3f54e5b84eaa533cbdb6cf17b1b6009f0730") (:url . "http://www.github.com/toroidal-code/doom.el/") (:keywords "xml" "doom"))]) (dollaro . [(20151123 502) ((s (1 6 0))) "simple text templates" single ((:commit . "500127f0172ac7a1eec627e026b59136580a74ac") (:keywords "tools" "convenience"))]) (dokuwiki-mode . [(20170223 501) nil "Major mode for DokuWiki document" single ((:commit . "e4e116f6fcc373e3f5937c1a7daa5c2c9c6d3fa1") (:url . "https://github.com/kai2nenobu/emacs-dokuwiki-mode") (:keywords "hypermedia" "text" "dokuwiki"))]) (dokuwiki . [(20170213 122) ((emacs (24 3)) (xml-rpc (1 6 8))) "Edit Remote DokuWiki Pages Using XML-RPC" single ((:commit . "a78289d99068ec3dfb4945877c32751e789d099d") (:url . "http://www.github.com/accidentalrebel/emacs-dokuwiki") (:keywords "convenience"))]) (dockerfile-mode . [(20171124 1647) ((emacs (24)) (s (1 12))) "Major mode for editing Docker's Dockerfiles" single ((:commit . "cd102cffa11a0557b1c04651e8cbd53fe01fbb92") (:url . "https://github.com/spotify/dockerfile-mode"))]) (docker-tramp . [(20170206 1925) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for docker containers" tar ((:commit . "8e2b671eff7a81af43b76d9dfcf94ddaa8333a23") (:url . "https://github.com/emacs-pe/docker-tramp.el") (:keywords "docker" "convenience"))]) (docker-compose-mode . [(20170916 1438) ((emacs (24 3)) (dash (2 12 0)) (yaml-mode (0 0 12))) "Major mode for editing docker-compose files" single ((:commit . "f3c06a43d69dfe80041a82a9365281bd5c65a105") (:url . "https://github.com/meqif/docker-compose-mode") (:keywords "convenience"))]) (docker-api . [(20160525 20) ((dash (2 12 1)) (request (0 2 0)) (s (1 11 0))) "Emacs interface to the Docker API" tar ((:commit . "206144346b7fa4165223349cfeb64a75d47ddd1b") (:url . "https://github.com/Silex/docker-api.el"))]) (docker . [(20171121 2316) ((emacs (24 4)) (dash (2 12 1)) (docker-tramp (0 1)) (magit-popup (2 6 0)) (s (1 11 0)) (tablist (0 70)) (json-mode (1 7 0))) "Emacs interface to Docker" tar ((:commit . "fc31c2b1aa8ef553050ace61beadf08ded58529c") (:url . "https://github.com/Silex/docker.el") (:keywords "filename" "convenience"))]) (docean . [(20150927 1118) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "Interact with DigitalOcean from Emacs." single ((:commit . "dcc296782b08531b768d3cf851cc7959ec486bf1") (:url . "https://github.com/emacs-pe/docean.el") (:keywords "convenience"))]) (docbook-snippets . [(20150714 925) ((yasnippet (0 8 0))) "Yasnippets for DocBook" tar ((:commit . "b06297fdec039a541aaa6312cb328a11062cfab4") (:url . "https://github.com/jhradilek/emacs-docbook-snippets") (:keywords "snippets" "docbook"))]) (dna-mode . [(20170804 114) nil "a major mode for editing dna sequences" tar ((:commit . "471d374de22c33eaddd8e41dd8ae29753fab2f6a") (:url . "http://www.mahalito.net/~harley/elisp/dna-mode.el") (:keywords "dna" "emacs" "editing"))]) (dmenu . [(20160228 627) ((cl-lib (0 5))) "simulate the dmenu command line program" single ((:commit . "8dffd614e37d3971f989cbce5849d04d84ee8c76") (:keywords "convenience" "usability"))]) (dkmisc . [(20131110 315) ((emacs (24 1))) "Miscellaneous functions required by dk* packages." tar ((:commit . "fe3d49c6f8322b6f89466361acd97585bdfe0608"))]) (dklrt . [(20131110 541) ((dkmisc (0 50)) (ledger-mode (20130908 1357)) (emacs (24 1))) "Ledger Recurring Transactions." tar ((:commit . "5d6c99f8018335256ab934b4c1049708ae2d48ba"))]) (dkl . [(20161004 1707) nil "Display keyboard layout." tar ((:commit . "6b4584f86037bda3383960c678d51f340229fb91") (:url . "https://github.com/flexibeast/dkl") (:keywords "input" "keyboard" "layout"))]) (dkdo . [(20131110 319) ((dkmisc (0 50)) (emacs (24 1))) "Do List major mode based on org-mode." tar ((:commit . "fd6bb105e8331fafb6385c5238c988c4c5bbe2da"))]) (django-theme . [(20131022 202) nil "Custom face theme for Emacs" single ((:commit . "86c8142b3eb1addd94a43aa6f1d98dab06401af0") (:url . "http://github/anrzejsliwa/django-theme"))]) (django-snippets . [(20131229 811) ((yasnippet (0 8 0))) "Yasnippets for django" tar ((:commit . "a71b8dd984e7f724b8321246e5c353a4ae5c986e") (:url . "https://github.com/myfreeweb/django-mode"))]) (django-mode . [(20170522 14) ((projectile (0)) (s (0)) (helm-make (0))) "Major mode for Django web framework." tar ((:commit . "a71b8dd984e7f724b8321246e5c353a4ae5c986e") (:keywords "languages"))]) (django-manage . [(20160818 1912) ((hydra (0 13 2))) "Django minor mode for commanding manage.py" single ((:commit . "876fb2cb627d465adfdc905841279784bcdd7ee8") (:keywords "languages"))]) (dizzee . [(20171201 116) nil "A more pleasant way to manage your project's subprocesses in Emacs." tar ((:commit . "e3cf1c2ea5d0fc00747524b6f3c5b905d0a8c8e1"))]) (dix-evil . [(20170105 623) ((dix (0 3 0)) (evil (1 0 7))) "optional evil-integration with dix.el" single ((:commit . "bcc7fd7aef5d25171978c386c620e09d0ba8d2f8") (:url . "http://wiki.apertium.org/wiki/Emacs") (:keywords "languages"))]) (dix . [(20170224 615) ((cl-lib (0 5))) "minor mode for editing Apertium XML dictionary files" tar ((:commit . "bcc7fd7aef5d25171978c386c620e09d0ba8d2f8") (:url . "http://wiki.apertium.org/wiki/Emacs") (:keywords "languages"))]) (ditz-mode . [(20150729 240) nil "Emacs interface to Ditz issue tracking system" single ((:keywords "tools"))]) (distinguished-theme . [(20151216 1215) nil "A dark and elegant theme for emacs." single ((:commit . "9b1d25ac59465a5016d187ea84b7614c95a29b3b") (:url . "https://github.com/Lokaltog/distinguished-theme"))]) (distel-completion-lib . [(20160816 406) nil "Completion library for Erlang/Distel" single ((:commit . "2ba4eea51cecfa75cf62f58180460ee9ff43131f") (:url . "github.com/sebastiw/distel-completion") (:keywords "erlang" "distel" "completion"))]) (display-theme . [(20140115 756) ((emacs (24))) "display current theme(s) at mode-line" single ((:commit . "b180b3be7a74ae4799a14e7e4bc2fe10e3ff7a15") (:url . "https://github.com/kawabata/emacs-display-theme/") (:keywords "tools"))]) (dispass . [(20140202 731) ((dash (1 0 0))) "Emacs wrapper for DisPass" single ((:commit . "b6e8f89040ebaaf0e7609b04bc27a8979f0ae861") (:url . "http://projects.ryuslash.org/dispass.el/") (:keywords "processes"))]) (disk . [(20171115 2331) nil "simplified find-file, revert-file, save-buffer interface" single ((:commit . "283e54e3be7d08f959076240b2ab324e25632137") (:url . "http://www.emacswiki.org/emacs/DiskKey") (:keywords "convenience"))]) (discover-my-major . [(20170113 2306) ((makey (0 2))) "Discover key bindings and their meaning for the current Emacs major mode" single ((:commit . "ac83b24b5130eb0944f820736012df0924cce528") (:url . "https://github.com/steckerhalter/discover-my-major") (:keywords "discover" "help" "major-mode" "keys"))]) (discover-js2-refactor . [(20140129 752) ((js2-refactor (20131221 501)) (discover (20140103 1339))) "Adds discover context menu for js2-refactor" single ((:commit . "3812abf61f39f3e73a9f3daefa6fed4f21a429ba") (:keywords "js2-refactor" "discover"))]) (discover-clj-refactor . [(20150328 759) ((clj-refactor (0 14 0)) (discover (0 3))) "Adds discover context menu for clj-refactor" single ((:commit . "3fbd5c1162739e606d7cf5d4f5d7426547d99647") (:keywords "clj-refactor" "discover" "convenience"))]) (discover . [(20140103 1339) ((makey (0 3))) "discover more of Emacs" single ((:commit . "7b0044bbb3b3bd5d811fdfb0f5ac6ec8de1239df"))]) (discourse . [(20160911 119) ((cl-lib (0 5)) (request (0 2)) (s (1 11 0))) "discourse api" single ((:commit . "a86c7e608851e186fe12e892a573994f08c8e65e") (:url . "https://github.com/lujun9972/discourse-api") (:keywords "lisp" "discourse"))]) (disaster . [(20171016 1452) nil "Disassemble C/C++ code under cursor in Emacs" single ((:commit . "10a785facc60d89d78e0d5177985ab1af1741bb4") (:url . "https://github.com/jart/disaster") (:keywords "tools"))]) (disable-mouse . [(20170929 1353) nil "Disable mouse commands globally" single ((:commit . "81639930bcaeedadbcc19728e91719afcac84613") (:url . "https://github.com/purcell/disable-mouse") (:keywords "mouse"))]) (dirtree-prosjekt . [(20140129 104) ((prosjekt (0 3)) (dirtree (0 1))) "dirtree integration for prosjekt." single ((:commit . "a864a8be5842223043702395f311e3350c28e9db") (:url . "https://github.com/abingham/prosjekt"))]) (dirtree . [(20140129 32) ((tree-mode (1 1 1 1)) (windata (0))) "Directory tree views" single ((:commit . "ba55f1e716e386fdd37cb8e7f48616e405dc7251"))]) (direx-grep . [(20140515 806) ((direx (0 1 -3))) "Grep node of direx.el using incremental search like anything.el/helm.el" single ((:commit . "1109a512a80b2673a70b18b8568514049017faad") (:url . "https://github.com/aki2o/direx-grep") (:keywords "convenience"))]) (direx . [(20170422 627) nil "Simple Directory Explorer" tar ((:commit . "a79bfdb5980cf6ed7bfb3b41ddc471a7b6c0ede4") (:keywords "convenience"))]) (direnv . [(20171205 227) ((emacs (24 4)) (dash (2 13 0)) (with-editor (2 5 10))) "direnv support for emacs" single ((:commit . "80845b7a5da478514f2df90b09373e963bd785e1") (:url . "https://github.com/wbolster/emacs-direnv") (:keywords "direnv" "environment"))]) (diredful . [(20160529 1317) nil "colorful file names in dired buffers" single ((:commit . "c08e163d9d6c62f7b07e94d54c96c2e364e67e0e") (:url . "https://github.com/thamer/diredful") (:keywords "dired" "colors" "extension" "widget"))]) (diredfl . [(20171014 1402) ((emacs (24))) "Extra font lock rules for a more colourful dired" single ((:commit . "085eabf2e70590ec8e31c1e66931d652d8eab432") (:url . "https://github.com/purcell/diredfl") (:keywords "faces"))]) (dired-toggle-sudo . [(20151109 206) nil "Browse directory with sudo privileges." single ((:commit . "02449dbda4e168f99fe5352c9628df5d39e11483") (:keywords "emacs" "dired"))]) (dired-toggle . [(20140907 1349) nil "provide a simple way to toggle dired buffer for current directory" single ((:commit . "84efb9ec9c327e4da53cdb7cda5b51dcd0ede0e5") (:url . "https://github.com/fasheng/dired-toggle") (:keywords "dired" "toggle"))]) (dired-subtree . [(20170910 1521) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "Insert subdirectories in a tree-like fashion" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-sort-menu . [(20130824 507) nil "provide menu/dialogue for dired sort options" single ((:url . "http://centaur.maths.qmw.ac.uk/Emacs/") (:keywords "dired" "sort" "menu" "dialogue"))]) (dired-sort-menu+ . [(20170221 1630) ((dired-sort-menu (0))) "Extensions to `dired-sort-menu.el'" single ((:url . "https://www.emacswiki.org/emacs/download/dired-sort-menu%2b.el") (:keywords "directories" "diredp" "dired"))]) (dired-sort . [(20090208 2038) nil "Sort files in dired." single ((:url . "http://www.emacswiki.org/emacs/download/dired-sort.el") (:keywords "dired" "sort"))]) (dired-single . [(20170804 544) nil "Reuse the current dired buffer to visit a directory" single ((:commit . "0dcc645de6397bf12c33229de67a503e4490c618") (:keywords "dired" "reuse" "buffer"))]) (dired-sidebar . [(20171212 36) ((emacs (25 1)) (dired-subtree (0 0 1))) "Tree browser leveraging dired" single ((:commit . "fb5a2ee4ab36742317a702208bd4463b03679a29") (:url . "https://github.com/jojojames/dired-sidebar") (:keywords "dired" "files" "tools"))]) (dired-ranger . [(20160924 335) ((dash (2 7 0)) (dired-hacks-utils (0 0 1))) "Implementation of useful ranger features for dired" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-rainbow . [(20171202 1448) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "Extended file highlighting according to its type" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-quick-sort . [(20161208 1312) ((hydra (0 13 0))) "Persistent quick sorting of dired buffers in various ways." single ((:commit . "1845f978d313f750a5b70b832457ed803c4ffbdb") (:url . "https://gitlab.com/xuhdev/dired-quick-sort#dired-quick-sort") (:keywords "convenience" "files"))]) (dired-open . [(20160205 1213) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "Open files from dired using using custom actions" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-narrow . [(20170309 329) ((dash (2 7 0)) (dired-hacks-utils (0 0 1))) "Live-narrowing of search results for dired" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-launch . [(20171004 1027) nil "Use dired as a launcher" single ((:commit . "f71826804221bafc4f9f2f75a800400a72c24b8b") (:url . "https://github.com/thomp/dired-launch") (:keywords "dired" "launch"))]) (dired-k . [(20170313 803) ((emacs (24 3))) "highlight dired buffer by file size, modified time, git status" tar ((:commit . "c50e8f73358060a448bff66db2d330b52bbeffc1") (:url . "https://github.com/syohex/emacs-dired-k"))]) (dired-imenu . [(20140109 810) nil "imenu binding for dired mode" single ((:commit . "610e21fe0988c85931d34894d3eee2442c79ab0a") (:url . "https://github.com/DamienCassou/dired-imenu") (:keywords "dired" "imenu"))]) (dired-icon . [(20170222 2126) ((emacs (24 3))) "A minor mode to display a list of associated icons in dired buffers." tar ((:commit . "f60e10757a5011235b519231ad35974ff25963ed") (:url . "https://gitlab.com/xuhdev/dired-icon") (:keywords "dired" "files"))]) (dired-hide-dotfiles . [(20170314 1339) ((emacs (25 1))) "Hide dotfiles in dired" single ((:commit . "b715f643ec805b3b8aca334595e6589320f04a49") (:url . "https://github.com/mattiasb/dired-hide-dotfiles") (:keywords "files"))]) (dired-hacks-utils . [(20160527 1436) ((dash (2 5 0))) "Utilities and helpers for dired-hacks collection" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-filter . [(20171010 204) ((dash (2 10 0)) (dired-hacks-utils (0 0 1)) (f (0 17 0)) (cl-lib (0 3))) "Ibuffer-like filtering for dired" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-filetype-face . [(20160822 655) nil "Set different faces for different filetypes in dired" single ((:commit . "72b3c88e8b82b3f8681d940757f7b2992bd80793") (:url . "https://github.com/jixiuf/dired-filetype-face") (:keywords "dired" "filetype" "face"))]) (dired-fdclone . [(20170413 747) nil "dired functions and settings to mimic FDclone" single ((:commit . "f55b69e5cd1d45699a0f37468ac8e20fa7a0cff6") (:url . "https://github.com/knu/dired-fdclone.el") (:keywords "unix" "directories" "dired"))]) (dired-explorer . [(20170614 1956) ((cl-lib (0 5))) "minor-mode provides Explorer like select file at dired." single ((:commit . "b02b08d73821512853c6a14113c794dded1df75a") (:keywords "dired" "explorer"))]) (dired-efap . [(20140122 856) nil "Edit Filename At Point in a dired buffer" single ((:commit . "624757b2e54d9a13e2183118d6c113e37684b90c") (:url . "https://github.com/juan-leon/dired-efap") (:keywords "dired" "environment" "files" "renaming"))]) (dired-dups . [(20130527 1425) nil "Find duplicate files and display them in a dired buffer" single ((:commit . "694ad128c822c59348ced16c4a0c1356d43da47a") (:url . "https://github.com/vapniks/dired-dups") (:keywords "unix"))]) (dired-details . [(20130824 458) nil "make file details hide-able in dired" single ((:keywords "dired" "hide"))]) (dired-details+ . [(20170903 1237) ((dired-details (0))) "Enhancements to library `dired-details+.el'." single ((:url . "https://www.emacswiki.org/emacs/download/dired-details%2b.el") (:keywords "dired" "frames"))]) (dired-collapse . [(20171107 47) ((dash (2 10 0)) (f (0 19 0))) "Collapse unique nested paths in dired listing" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-avfs . [(20161012 404) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "AVFS support for dired" single ((:commit . "edea7534b36297211fe1c0e493220a5cc1bdec93") (:keywords "files"))]) (dired-atool . [(20160208 433) ((emacs (24))) "Pack/unpack files with atool on dired." single ((:commit . "f188ccf6092330dbbefc0e75aa4fad3e7258749d") (:url . "https://github.com/HKey/dired-atool") (:keywords "files"))]) (dired+ . [(20170818 1411) nil "Extensions to Dired." single ((:url . "https://www.emacswiki.org/emacs/download/dired%2b.el") (:keywords "unix" "mouse" "directories" "diredp" "dired"))]) (dircmp . [(20141204 956) nil "Compare and sync directories." tar ((:commit . "558ee0b601c2de9d247612085aafe2926f56a09f") (:url . "https://github.com/matthewlmcclure/dircmp-mode") (:keywords "unix" "tools"))]) (dionysos . [(20160810 356) ((libmpdee (2 1 0)) (alert (1 2)) (s (1 11 0)) (dash (2 12 1)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Dionysos, a music player for Emacs" tar ((:commit . "0aac21caadabc5a7f09e18a9dcb02f3dec26588b") (:url . "https://github.com/nlamirault/dionysos") (:keywords "music"))]) (diminish . [(20170419 1036) nil "Diminished modes are minor modes with no modeline display" single ((:commit . "565a983a39d2e2cffab5df13b34f3b6116723208") (:url . "https://github.com/myrjola/diminish.el") (:keywords "extensions" "diminish" "minor" "codeprose"))]) (dim-autoload . [(20161023 1329) nil "dim or hide autoload cookie lines" single ((:commit . "c91edab065f413910354940742b35bdffeb52029") (:url . "https://github.com/tarsius/dim-autoload") (:keywords "convenience"))]) (dim . [(20160818 249) ((emacs (24 4))) "Change mode-line names of major/minor modes" single ((:commit . "4b00587dfaabc1f2393b9a9f9993996c288d4445") (:url . "https://github.com/alezost/dim.el") (:keywords "convenience"))]) (digit-groups . [(20160816 1926) ((dash (2 11 0))) "Highlight place-value positions in numbers" single ((:url . "http://bitbucket.com/adamsmd/digit-groups"))]) (digistar-mode . [(20160218 1155) nil "major mode for Digistar scripts" single ((:commit . "15288b1e1a04b79b5ab7097fdd26d48b2ff41076") (:keywords "languages"))]) (diffview . [(20150928 2211) nil "View diffs in side-by-side format" single ((:commit . "031b70913e755c5e55222680f80185032a7d1728") (:url . "https://github.com/mgalgs/diffview-mode") (:keywords "convenience" "diff"))]) (diffscuss-mode . [(20141014 1657) nil "Major mode for diffscuss files." single ((:commit . "e0aacd8b3d9f886f27222c1397f0655e849e0af7") (:keywords "tools"))]) (difflib . [(20171204 2120) ((emacs (24 4)) (cl-generic (0 3)) (ht (2 2)) (s (1 12 0))) "Helpers for computing deltas between sequences." single ((:commit . "56032966934dae5ac04764d2580d3dbadb0345ef") (:url . "http://github.com/dieggsy/difflib.el") (:keywords "matching" "tools" "string"))]) (diff-hl . [(20170709 2000) ((cl-lib (0 2)) (emacs (24 3))) "Highlight uncommitted changes using VC" tar ((:commit . "bec9889de7bf48d28826039880cec9bfad24a628") (:url . "https://github.com/dgutov/diff-hl") (:keywords "vc" "diff"))]) (dictionary . [(20140717 2029) ((connection (1 10)) (link (1 10))) "Client for rfc2229 dictionary servers" single ((:commit . "a23b8f4a422d0de69a006ed010eff5795319db98") (:keywords "interface" "dictionary"))]) (dictcc . [(20170318 1232) ((emacs (24)) (cl-lib (0 5)) (s (1 0)) (dash (2 0)) (helm (1 0))) "Look up translations on dict.cc" single ((:commit . "24fb40d0822f97c3d796ae81cb6684cd97263248") (:keywords "convenience"))]) (dic-lookup-w3m . [(20170803 354) ((w3m (20120723 324)) (stem (20120826))) "look up dictionaries on the Internet" tar ((:commit . "79aca5eb9c78e67cb85a386060d48113caad5ec3") (:keywords "emacs-w3m" "w3m" "dictionary"))]) (dhall-mode . [(20171204 1327) ((emacs (24 4))) "a major mode for dhall configuration language" single ((:commit . "bc6aec777594beeac6ba4c6dbfb1c889341589c9") (:url . "https://github.com/psibi/dhall-mode") (:keywords "languages"))]) (dfmt . [(20170728 323) nil "Emacs Interface to D indenting/formatting tool dfmt." single ((:commit . "21b9094e907b7ac53f5ecb4ff4539613a9d12434") (:url . "https://github.com/qsimpleq/elisp-dfmt") (:keywords "tools" "convenience" "languages" "dlang"))]) (devdocs . [(20170731 150) nil "Launch DevDocs search" single ((:commit . "a2d51e824f0cc48a9dd611cc740bc8b86143e611") (:url . "https://github.com/xuchunyang/DevDocs.el"))]) (desktop-registry . [(20140119 1343) nil "Keep a central registry of desktop files" single ((:commit . "244c2e7f9f0a1050aa8a47ad0b38f4e4584682dd") (:url . "http://projects.ryuslash.org/desktop-registry/") (:keywords "convenience"))]) (desktop+ . [(20170107 1332) ((emacs (24 4)) (dash (2 11 0)) (f (0 17 2))) "Handle special buffers when saving & restoring sessions" single ((:commit . "88055cee526a000056201898499cebbd35e3ea76") (:url . "https://github.com/ffevotte/desktop-plus"))]) (describe-number . [(20151031 1755) ((yabin (1 1))) "Describe arbitrarily large number at point." single ((:commit . "40618345a37831804b29589849a785ef5aa5ac24") (:url . "https://github.com/netromdk/describe-number") (:keywords "describe" "value" "help"))]) (demo-it . [(20170628 1503) nil "Create demonstrations" tar ((:commit . "1e8b42ff6479fa541eeec5699b4727af136d40da") (:keywords "demonstration" "presentation" "test"))]) (demangle-mode . [(20170923 1501) ((cl-lib (0 1)) (emacs (24))) "Automatically demangle C++ symbols" single ((:commit . "79231b05f97da147d66120f947656f856a3a64fb") (:url . "https://github.com/liblit/demangle-mode") (:keywords "c" "tools"))]) (delim-kill . [(20100516 2320) nil "Kill text between delimiters." single ((:commit . "1dbe47344f2d2cbc8c54beedf0cf0bf10fd203c1") (:url . "http://github.com/thomas11/delim-kill/tree/master") (:keywords "convenience" "languages"))]) (deft . [(20171031 530) nil "quickly browse, filter, and edit plain text notes" single ((:commit . "c7413a390ac22331ad5226a8c8c007bd08759bc8") (:url . "http://jblevins.org/projects/deft/") (:keywords "plain text" "notes" "simplenote" "notational velocity"))]) (defproject . [(20151201 1419) ((emacs (24))) "Manager dir-locals and project specific variables" single ((:commit . "674d48a5e34cb4bba76faa38ee901322ec649086") (:url . "https://github.com/kotfic/defproject") (:keywords "convenience"))]) (define-word . [(20171125 25) ((emacs (24 1))) "display the definition of word at point." single ((:commit . "1e8e537c3b5b25e770c1b2f993497298405225b2") (:url . "https://github.com/abo-abo/define-word") (:keywords "dictionary" "convenience"))]) (deferred . [(20170901 630) ((emacs (24 4))) "Simple asynchronous functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:url . "https://github.com/kiwanami/emacs-deferred") (:keywords "deferred" "async"))]) (default-text-scale . [(20170826 2215) nil "Easily adjust the font size in all frames" single ((:commit . "968e985e219235f3e744d6d967e592acbaf6e0a8") (:url . "https://github.com/purcell/default-text-scale") (:keywords "frames" "faces"))]) (dedukti-mode . [(20171103 512) nil "Major mode for Dedukti files" single ((:commit . "d7c3505a1046187de3c3aeb144455078d514594e") (:url . "https://github.com/rafoo/dedukti-mode") (:keywords "languages" "dedukti"))]) (dedicated . [(20090428 1231) nil "A very simple minor mode for dedicated buffers" single ((:commit . "8275fb672f9cc4ba6682ebda0ef91db827e32992") (:keywords "dedicated" "buffer"))]) (decl . [(20170314 23) ((dash (2 5 0)) (emacs (24 3)) (cl-lib (0 3))) "Library for organizing code declaratively" single ((:commit . "b25825de88289fab5212dfd6d18874ca2748123f") (:url . "https://github.com/preetpalS/decl.el"))]) (decide . [(20170702 1617) nil "rolling dice and other random things" single ((:commit . "90133687118c236142b8110571c463304b3192f9"))]) (debug-print . [(20140125 1619) ((emacs (24))) "A nice printf debugging environment by the way Gauche do" single ((:commit . "d817fd9ea2d3f8d2c1ace4d8af155684f3a99dc5") (:url . "https://github.com/kenoss/debug-print") (:keywords "extensions" "lisp" "tools" "maint"))]) (debpaste . [(20160113 1547) ((xml-rpc (1 6 7))) "Interface for getting/posting/deleting pastes from paste.debian.net" single ((:commit . "6f2a400665062468ebd03a2ce1de2a73d9084958") (:url . "http://github.com/alezost/debpaste.el") (:keywords "paste"))]) (ddskk . [(20170709 839) ((ccc (1 43)) (cdb (20141201 754))) "Simple Kana to Kanji conversion program." tar ((:commit . "16d156562aef72f02ced58087335ed72d520d878"))]) (db-pg . [(20130131 1102) ((pg (0 12)) (db (0 0 6))) "A PostgreSQL adapter for emacs-db" single ((:commit . "7d5ab86b74b05fe003b3b434d4835f37f3f3eded") (:keywords "data" "comm" "database" "postgresql"))]) (db . [(20140421 1411) ((kv (0 0 11))) "A database for EmacsLisp" single ((:commit . "b3a423fb8e72f9013009cbe033d654df2ce31438") (:keywords "data" "lisp"))]) (dayone . [(20160105 440) ((uuid (0 0 3)) (mustache (0 22)) (ht (1 5))) "Utility script for Day One" tar ((:commit . "ab628274f0806451f23bce16f62a6a11cbf91a2b") (:url . "https://github.com/mori-dev/emacs-dayone") (:keywords "day one" "tools" "convenience"))]) (datomic-snippets . [(20130707 1315) ((s (1 4 0)) (dash (1 2 0)) (yasnippet (0 6 1))) "Yasnippets for Datomic" tar ((:commit . "7116eac8e15a16fc72973b96fa855fd9784bbbb8"))]) (datetime-format . [(20160612 1015) nil "Datetime functions" single ((:commit . "e6427538b547cbe02e1bd6ed4b765c73620bdae8") (:url . "https://github.com/zonuexe/emacs-datetime") (:keywords "datetime" "calendar"))]) (datetime . [(20170928 815) ((emacs (24 1))) "Parsing, formatting and matching timestamps" single ((:commit . "082d2c7b0e38c26a8c46af9c9956a2e100d88e71") (:url . "https://github.com/doublep/datetime") (:keywords "lisp" "i18n"))]) (date-field . [(20141128 1705) ((dash (2 9 0)) (log4e (0 2 0)) (yaxception (0 3 2))) "Date widget" single ((:commit . "11c9170d1f7b343233f7716d4c0a62be024c1654") (:url . "https://github.com/aki2o/emacs-date-field") (:keywords "widgets"))]) (date-at-point . [(20150308 543) nil "Add `date' to `thing-at-point' function" single ((:commit . "38df823d05df08ec0748a4185113fae5f99090e9") (:url . "https://github.com/alezost/date-at-point.el") (:keywords "convenience"))]) (dashboard . [(20170923 719) ((emacs (24 4)) (page-break-lines (0 11))) "A startup screen extracted from Spacemacs" tar ((:commit . "8594c4f55448148b720eda5b72d51667fb7a8a39") (:url . "https://github.com/rakanalh/emacs-dashboard") (:keywords "startup" "screen" "tools"))]) (dash-functional . [(20171028 804) ((dash (2 0 0)) (emacs (24))) "Collection of useful combinators for Emacs Lisp" single ((:commit . "91d8cb01e62bab0d6267d3d4dbcabd6da6fdea78") (:keywords "lisp" "functions" "combinators"))]) (dash-at-point . [(20140626 35) nil "Search the word at point with Dash" single ((:commit . "ed872b4fcbe02ef1a5bac0337afe19a7a747f34c") (:url . "https://github.com/stanaka/dash-at-point"))]) (dash . [(20171028 854) nil "A modern list library for Emacs" single ((:commit . "91d8cb01e62bab0d6267d3d4dbcabd6da6fdea78") (:keywords "lists"))]) (dart-mode . [(20171024 2137) ((emacs (24 5)) (cl-lib (0 5)) (dash (2 10 0)) (flycheck (0 23)) (s (1 11))) "Major mode for editing Dart files" single ((:commit . "adef2a5b672d503ae3e92b30bb80095879b030d0") (:url . "https://github.com/nex3/dart-mode") (:keywords "language"))]) (darktooth-theme . [(20171206 639) ((autothemer (0 2))) "From the darkness... it watches" single ((:commit . "dc90fc7d526d7e65256e050e3b373908a27b6c45") (:url . "http://github.com/emacsfodder/emacs-theme-darktooth"))]) (darkokai-theme . [(20170728 339) nil "A darker variant on Monokai." single ((:commit . "d881d51acf0a7f806ae68d48305e30941a741a0e") (:url . "http://github.com/sjrmanning/darkokai"))]) (darkmine-theme . [(20160405 2324) nil "Yet another emacs dark color theme." single ((:commit . "7f7e82ca03bcad52911fa41fb3e204e32d6ee63e") (:url . "https://github.com/pierre-lecocq/darkmine-theme"))]) (darkburn-theme . [(20170423 952) nil "A not-so-low contrast color theme for Emacs." single ((:commit . "0af794ff7fac19778ac8a7efb92455c6f6c2158f") (:url . "http://github.com/gorauskas/darkburn-theme"))]) (dark-souls . [(20140314 428) nil "Prepare to die" single ((:commit . "94122b1215423e58dcf18584a2bd022029d54d4b") (:url . "http://github.com/tomjakubowski/dark-souls.el") (:keywords "games"))]) (dark-mint-theme . [(20160301 2242) nil "dark & minty fresh theme" single ((:commit . "95c30a26de31549cd341184ba9ab2be8fdc67eba"))]) (dark-krystal-theme . [(20170808 600) ((emacs (24 0))) "an Emacs 24 theme based on Dark Krystal (tmTheme)" single ((:commit . "79084b99665dc9ffb0ec62cc092349a5ecebebbc") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (darcula-theme . [(20171104 425) nil "Inspired by IntelliJ's Darcula theme" single ((:commit . "2ecd466ffa7a3157b9ddcd7545b6fb8ad308c976") (:url . "https://github.com/fommil/darcula-theme-emacs") (:keywords "faces"))]) (darcsum . [(20140315 2110) nil "a pcl-cvs like interface for managing darcs patches" tar ((:commit . "00c252b51cb24c25fb74f529960ebd631514a4c1") (:keywords "completion" "convenience" "tools" "vc"))]) (dante . [(20171207 1313) ((dash (2 13 0)) (emacs (25 1)) (f (0 19 0)) (flycheck (0 30)) (haskell-mode (13 14)) (s (1 11 0))) "Development mode for Haskell" single ((:commit . "a6b1933118b65b4c5d1ee5dd1a9ceb281af3db4c") (:url . "https://github.com/jyp/dante") (:keywords "haskell" "tools"))]) (danneskjold-theme . [(20171124 1126) nil "Beautiful high-contrast Emacs theme." tar ((:commit . "cb53f004ba30815174a4cfd3dced658b802100e1"))]) (dakrone-theme . [(20170801 1233) nil "dakrone's custom dark theme" single ((:commit . "232ad1be5f3572dcbdf528f1655109aa355a6937") (:url . "https://github.com/dakrone/dakrone-theme") (:keywords "color" "themes" "this" "file" "is" "not" "part" "of" "gnu" "emacs."))]) (dakrone-light-theme . [(20170808 1440) nil "dakrone's custom light theme" single ((:commit . "06f198dc8b4ca7421990b30a23d89c8e0b8c5de4") (:url . "https://github.com/dakrone/dakrone-light-theme") (:keywords "color" "themes" "faces" "this" "file" "is" "not" "part" "of" "gnu" "emacs."))]) (dad-joke . [(20170927 2358) ((emacs (24))) "Get/display dad jokes" single ((:commit . "bee47e7b746b403228fa7d7361cb095de19ac9ba") (:url . "https://github.com/davep/dad-joke.el") (:keywords "games"))]) (dactyl-mode . [(20140906 1025) nil "Major mode for editing Pentadactyl config files" single ((:commit . "cc55fe6b987271d9647492b8df4c812d884f661f") (:url . "https://github.com/luxbock/dactyl-mode") (:keywords "languages" "vim"))]) (d-mode . [(20161022 717) nil "D Programming Language major mode for (X)Emacs" single ((:commit . "a97c92ced57224287a84e7fc48ba9aac6b2afc08") (:keywords "d" "programming" "language" "emacs" "cc-mode"))]) (czech-holidays . [(20160113 952) nil "Adds a list of Czech public holidays to Emacs calendar" single ((:commit . "d136fa09a152b3cd80db6d55c7b4ddfe07b90fbf") (:keywords "calendar"))]) (cython-mode . [(20170907 1648) nil "Major mode for editing Cython files" single ((:commit . "bae7fdc405a0800875824cdc5760948ee009a95b"))]) (cypher-mode . [(20151110 342) nil "major mode for editing cypher scripts" single ((:commit . "ce8543d7877c736c574a17b49874c9dcdc7a06d6") (:url . "http://github.com/fxbois/cypher-mode") (:keywords "cypher" "graph"))]) (cyphejor . [(20171127 753) ((emacs (24 4))) "Shorten major mode names using user-defined rules" single ((:commit . "14838029b2d94878554308abd3a818a6536c5503") (:url . "https://github.com/mrkkrp/cyphejor") (:keywords "mode-line" "major-mode"))]) (cygwin-mount . [(20131111 1346) nil "Teach EMACS about cygwin styles and mount points." single ((:keywords "files" "mount" "cygwin"))]) (cycle-themes . [(20150402 2009) ((cl-lib (0 5))) "A global minor mode to make switching themes easier" single ((:commit . "6e125d11fdbc6b78fc9f219eb2609a5e29815898") (:url . "http://github.com/toroidal-code/cycle-themes.el") (:keywords "themes" "utility" "global minor mode"))]) (cycle-resize . [(20160521 857) nil "Cycle resize the current window horizontally or vertically" single ((:commit . "7d255d6fe85f12c967a0f7fcfcf18633be194c88") (:url . "https://github.com/pierre-lecocq/cycle-resize"))]) (cycbuf . [(20131203 1237) nil "Cycle buffers, inspired by swbuff.el, swbuff-x.el, and bs.el" single ((:commit . "1079b41c3eb27d65b66d4399959bb6253f84858e") (:url . "https://github.com/martinp26/cycbuf") (:keywords "files" "convenience" "buffer switching"))]) (cyberpunk-theme . [(20170724 924) nil "Cyberpunk Color Theme" single ((:commit . "88eff8a42d6ed8ba7782ae003ec9597aed4fd019") (:keywords "color" "theme" "cyberpunk"))]) (cwl-mode . [(20171205 145) ((yaml-mode (0 0 13)) (emacs (24 4))) "A major mode for editing CWL" single ((:commit . "2fa8c8db68a8665ed555126975edd8749bcfc009") (:url . "https://github.com/tom-tan/cwl-mode") (:keywords "languages" "cwl" "common workflow language"))]) (cus-edit+ . [(20170604 1000) nil "Enhancements to `cus-edit.el'." single ((:url . "http://www.emacswiki.org/cus-edit+.el") (:keywords "help" "customize" "help" "faces"))]) (cursor-test . [(20131207 932) ((emacs (24))) "testing library for cursor position in emacs." single ((:commit . "e09956e048b88fd2ee8dd90b5678baed8b04d31b") (:url . "https://github.com/ainame/cursor-test.el"))]) (cursor-in-brackets . [(20160603 416) nil "move cursor in brackets/quotes when right bracket/quote is inserted" single ((:keywords "cursor" "bracket" "quote"))]) (cursor-chg . [(20170221 1610) nil "Change cursor dynamically, depending on the context." single ((:url . "https://www.emacswiki.org/emacs/download/cursor-chg.el") (:keywords "cursor" "accessibility"))]) (cuda-mode . [(20151213 1921) nil "NVIDIA CUDA Major Mode" single ((:commit . "9ae9eacfdba3559b5456342d0d03296290df8ff5") (:keywords "c" "languages"))]) (cucumber-goto-step . [(20131209 2119) ((pcre2el (1 5))) "Jump to cucumber step definition" single ((:commit . "f2713ffb26ebe1b757d1f2ea80e900b55e5895aa") (:url . "http://orthogonal.me"))]) (cubicle-mode . [(20171009 1257) nil "Major mode for the Cubicle model checker" single ((:commit . "9d108b900e0123236b4991c2d06b5061f34feee8"))]) (cubicaltt . [(20171108 602) ((emacs (24 1)) (cl-lib (0 5))) "Mode for cubical type theory" single ((:commit . "682e9f66ce16daf166549c1a16dd3a110894a8ea") (:url . "https://github.com/mortberg/cubicaltt") (:keywords "languages"))]) (ctxmenu . [(20140303 1342) ((popup (20140205 103)) (log4e (0 2 0)) (yaxception (0 1))) "Provide a context menu like right-click." tar ((:commit . "5c2376859562b98c07c985d2b483658e4c0e888e") (:url . "https://github.com/aki2o/emacs-ctxmenu") (:keywords "popup"))]) (ctl-mode . [(20151202 206) nil "Major mode for editing GrADS script files" single ((:commit . "1a13051db21b999c7682a015b33a03096ff9d891") (:keywords "grads" "script" "major-mode"))]) (ctags-update . [(20170728 58) nil "(auto) update TAGS in parent directory using exuberant-ctags" single ((:commit . "783bf91eba1cd27cbb739067a24e15e5e04564e6") (:url . "https://github.com/jixiuf/ctags-update") (:keywords "exuberant-ctags" "etags"))]) (ctable . [(20171005 1711) nil "Table component for Emacs Lisp" single ((:commit . "b8830d1ca95abb100a81bc32011bd17d5ecba000") (:url . "https://github.com/kiwanami/emacs-ctable") (:keywords "table"))]) (csv-nav . [(20130407 1120) nil "navigate and edit CSV files" single nil]) (csv . [(20161113 710) nil "Functions for reading and parsing CSV files." single ((:commit . "aa1dfa1263565d5fac3879c21d8ddf5f8915e411") (:keywords "extensions" "data" "csv"))]) (cssh . [(20150810 1009) nil "clusterssh implementation for emacs" single ((:commit . "2fe2754235225a59b63f08b130cfd4352e2e1c3f") (:url . "http://tapoueh.org/emacs/cssh.html") (:keywords "clusterssh" "ssh" "cssh"))]) (css-eldoc . [(20150124 1923) nil "an eldoc-mode plugin for CSS source code" tar ((:commit . "c558ac4c470742c98a37290e6b409db28183df30"))]) (css-comb . [(20160415 2259) nil "Sort CSS properties in a particular order using CSS Comb" single ((:commit . "6fa45e5af8a8bd3af6c1154cde3540e32c4206ee") (:url . "https://github.com/channikhabra/css-comb.el"))]) (csound-mode . [(20171201 1636) ((emacs (25)) (shut-up (0 3 2)) (multi (2 0 1))) "A major mode for interacting and coding Csound" tar ((:commit . "c6c7390faeddb8db11828e1636c0b479dc62f53f"))]) (csharp-mode . [(20171211 2238) nil "C# mode derived mode" single ((:commit . "ba7a81a85ee5fd234f24333ab156ce897cb20cc7") (:url . "https://github.com/josteink/csharp-mode") (:keywords "c#" "languages" "oop" "mode"))]) (csgo-conf-mode . [(20161209 819) nil "CS:GO Configuration files syntax highlighting" single ((:commit . "57e7224f87a3ccc76b5564cc95fa0ff43bb6807c") (:url . "https://github.com/wynro/emacs-csgo-conf-mode") (:keywords "languages"))]) (crystal-mode . [(20171207 1556) ((emacs (24 3))) "Major mode for editing Crystal files" single ((:commit . "5ffeae2b5798543ca0a2dc747e397359949850d1") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode") (:keywords "languages" "crystal"))]) (cryptsy-public-api . [(20141008 528) ((json (1 2))) "Library for working with the Cryptsy public API" single ((:commit . "795c204452f880c0087663e7c35faf26ea34af4d") (:keywords "cryptsy" "bitcoin" "litecoin" "dogecoin"))]) (cryptol-mode . [(20160819 1444) nil "Cryptol major mode for Emacs" single ((:commit . "9bf28f865d30d23b8b4fdef16a79ab66abbcc41f") (:url . "http://github.com/thoughtpolice/cryptol-mode") (:keywords "cryptol" "cryptography"))]) (crux . [(20170801 1334) ((seq (1 11))) "A Collection of Ridiculously Useful eXtensions" single ((:commit . "4f5c8fefd5a6aa52e128c4a0401cc86410d6ac8f") (:url . "https://github.com/bbatsov/crux") (:keywords "convenience"))]) (crosshairs . [(20170626 1548) ((hl-line+ (0)) (col-highlight (0)) (vline (0))) "Highlight the current line and column." single ((:url . "http://www.emacswiki.org/emacs/download/crosshairs.el") (:keywords "faces" "frames" "emulation" "highlight" "cursor" "accessibility"))]) (crm-custom . [(20160116 1606) ((cl-lib (0 5))) "Alternate `completing-read-multiple' that uses `completing-read'" single ((:commit . "f1aaccf64306a5f99d9bf7ba815d7ea41c15518d") (:url . "https://github.com/DarwinAwardWinner/crm-custom") (:keywords "completion" "minibuffer" "multiple elements"))]) (cricbuzz . [(20170726 504) ((enlive (0 0 1)) (dash (2 13 0)) (s (1 11 0))) "Cricket scores from cricbuzz in emacs" single ((:commit . "62c86b1aa6e0779c4f6d8fb9d31d75bf81994f69") (:url . "https://github.com/lepisma/cricbuzz.el") (:keywords "cricket" "score"))]) (creole-mode . [(20130721 1750) nil "a markup mode for creole" single ((:commit . "b5e79b2ec5f19fb5aacf689b5febc3e0b61515c4") (:url . "https://github.com/nicferrier/creole-mode") (:keywords "hypermedia" "wp"))]) (creole . [(20140924 800) ((noflet (0 0 3)) (kv (0 0 17))) "A parser for the Creole Wiki language" single ((:commit . "7d5cffe93857f6c75ca09ac79c0e47b8d4410e53") (:keywords "lisp" "creole" "wiki"))]) (creds . [(20140510 1006) ((s (1 9 0)) (dash (2 5 0))) "A parser credentials file library (not limited to credentials entries)" tar ((:commit . "b059397a7d59481f05fbb1bb9c8d3c2c69226482"))]) (creamsody-theme . [(20170222 258) ((autothemer (0 2))) "Straight from the soda fountain." single ((:commit . "32fa3f4e461da92700523b1b20e7b28974c19a26") (:url . "http://github.com/emacsfodder/emacs-theme-creamsody"))]) (crappy-jsp-mode . [(20140311 231) nil "A pretty crappy major-mode for jsp." single ((:commit . "6c45ab92b452411cc0fab9bcee2f456276b4fc40") (:keywords "jsp" "major" "mode"))]) (cql-mode . [(20160720 2039) ((emacs (24))) "Major mode for editting CQLs" single ((:commit . "2529ade55c125a89d8215f096a74733a90611c5d") (:url . "https://github.com/Yuki-Inoue/cql-mode") (:keywords "cql" "cassandra"))]) (cpputils-cmake . [(20170819 259) nil "Easy realtime C++ syntax check and IntelliSense with CMake." single ((:commit . "4fa37dd075c716f98b67b96f3b6e022730df1c1b") (:url . "http://github.com/redguardtoo/cpputils-cmake") (:keywords "cmake" "intellisense" "flymake" "flycheck"))]) (cpanfile-mode . [(20161001 10) ((emacs (24 4))) "Major mode for cpanfiles" single ((:commit . "eda675703525198df1f76ddf250bffa40217ec5d") (:url . "https://github.com/zakame/cpanfile-mode") (:keywords "perl"))]) (cp5022x . [(20120323 1635) nil "cp50220, cp50221, cp50222 coding system" single ((:commit . "ea7327dd75e54539576916f592ae1be98179ae35") (:keywords "languages" "cp50220" "cp50221" "cp50222" "cp51932" "cp932"))]) (coverlay . [(20160507 955) ((emacs (24 1)) (cl-lib (0 5))) "Test coverage overlays" single ((:commit . "11068e2e4ed971b757ac0294528d4beb91124e58") (:url . "https://github.com/twada/coverlay.el") (:keywords "coverage" "overlay"))]) (coverage . [(20160222 114) ((ov (1 0)) (cl-lib (0 5))) "Code coverage line highlighting" single ((:commit . "d68e5d20108e280b11a802a671bd009c7dcfff89") (:url . "https://github.com/trezona-lecomte/coverage") (:keywords "coverage" "metrics" "simplecov" "ruby" "rspec"))]) (cov . [(20170405 1508) ((emacs (24 4)) (f (0 18 2)) (s (1 11 0))) "Show coverage stats in the fringe." single ((:commit . "519239cc37d3ad0204fecac99f42e1694ce57d3d") (:url . "https://github.com/AdamNiederer/cov") (:keywords "coverage" "gcov" "c"))]) (counsel-world-clock . [(20171201 2337) ((ivy (0 9 0)) (s (1 12 0))) "Display world clock using Ivy." single ((:commit . "fa1101711bcb2b0fc880b7c6eebb5c4db577d01b") (:url . "https://github.com/kchenphy/counsel-world-clock"))]) (counsel-spotify . [(20170612 1132) ((emacs (25)) (ivy (0 9 0))) "Control Spotify search and select music with Ivy." single ((:commit . "dba8c1bf92e15f34f12a9e22b5958a93f10b46c5"))]) (counsel-pydoc . [(20171018 1342) ((emacs (24 3)) (ivy (0 9 1))) "run pydoc with counsel" single ((:commit . "1d8ff8ca3b9d69453cde423b1887fbb490a95c9e") (:url . "https://github.com/co-dh/pydoc_utils") (:keywords "completion" "matching"))]) (counsel-projectile . [(20171201 1224) ((counsel (0 8 0)) (projectile (0 14 0))) "Ivy integration for Projectile" single ((:commit . "162cdc2655c58a75bb51e939f3688b1a4dd7632a") (:url . "https://github.com/ericdanan/counsel-projectile") (:keywords "project" "convenience"))]) (counsel-osx-app . [(20160821 109) ((ivy (0 8 0)) (emacs (24 3))) "launch osx applications via ivy interface" single ((:commit . "b1c54cbc033c4939966910d85ce035503079e108") (:url . "https://github.com/d12frosted/counsel-osx-app"))]) (counsel-gtags . [(20170326 559) ((emacs (24 3)) (counsel (0 8 0))) "ivy for GNU global" single ((:commit . "220ebb48419ee6891ecbf9ea8fe130b494b17ee2") (:url . "https://github.com/syohex/emacs-counsel-gtags"))]) (counsel-etags . [(20171121 1515) ((emacs (24 3)) (counsel (0 9 1))) "Fast and complete Ctags/Etags solution using ivy" single ((:commit . "0e3169b5b476ce5c1548ecc2731c7090695b4779") (:url . "http://github.com/redguardtoo/counsel-etags") (:keywords "tools" "convenience"))]) (counsel-dash . [(20160729 829) ((emacs (24 4)) (dash (2 12 1)) (dash-functional (1 2 0)) (helm-dash (1 3 0)) (counsel (0 8 0))) "Browse dash docsets using Ivy" single ((:commit . "07fa74a94ff4da5b6c8c4810f5e143e701b480d2") (:url . "https://github.com/nathankot/counsel-dash") (:keywords "dash" "ivy" "counsel"))]) (counsel-bbdb . [(20171129 1737) ((ivy (0 8 0)) (emacs (24 3))) "Quick search&input email from BBDB based on ivy" single ((:commit . "c86f4b9ef99c9db0b2c4196a300d61300dc2d0c1") (:url . "https://github.com/redguard/counsel-bbdb") (:keywords "mail" "abbrev" "convenience" "matching"))]) (counsel . [(20171211 1033) ((emacs (24 3)) (swiper (0 9 0))) "Various completion functions using Ivy" single ((:commit . "620a9668cbf85f3e701ea46a009f68ebe8e88f1a") (:url . "https://github.com/abo-abo/swiper") (:keywords "completion" "matching"))]) (cosmo . [(20170922 44) ((emacs (24 4))) "Cosmological Calculator" single ((:commit . "dd83b09a49a2843606b28279b674b2207040b36b") (:url . "https://gitlab.com/montanari/cosmo-el") (:keywords "tools"))]) (corral . [(20160502 1) nil "Quickly surround text with delimiters" single ((:commit . "e7ab6aa118e46b93d4933d1364bc273f57cd6911") (:url . "http://github.com/nivekuil/corral"))]) (coq-commenter . [(20170822 1609) ((dash (2 13 0)) (s (1 11 0)) (cl-lib (0 5))) "Coq commenting minor mode for proof" single ((:commit . "7fe9a2cc0ebdb0b1e54a24eb7971d757fb588ac3") (:url . "http://github.com/ailrun/coq-commenter") (:keywords "comment" "coq" "proof"))]) (copyit-pandoc . [(20160624 1328) ((emacs (24)) (copyit (0 0 1)) (pandoc (0 0 1))) "Copy it, yank anything!" single ((:commit . "f50d033b129d467fb517a351adf3f16cabd82a62") (:url . "https://github.com/zonuexe/emacs-copyit") (:keywords "convinience" "yank" "clipboard"))]) (copyit . [(20161126 429) ((emacs (24)) (cl-lib (0 5)) (s (1 9 0))) "Copy it, yank anything!" single ((:commit . "f50d033b129d467fb517a351adf3f16cabd82a62") (:url . "https://github.com/zonuexe/emacs-copyit") (:keywords "convenience" "yank" "clipboard"))]) (copy-file-on-save . [(20171211 1744) ((emacs (24 3)) (cl-lib (0 5)) (f (0 17)) (s (1 7 0))) "Copy file on save, automatic deployment it." single ((:commit . "11c2004947e0200e88991e265a5ae971adfbd7b2") (:url . "https://github.com/emacs-php/emacs-auto-deployment") (:keywords "files" "comm" "deploy"))]) (copy-as-format . [(20170603 945) ((cl-lib (0 5))) "Copy buffer locations as GitHub/Slack/JIRA/HipChat/... formatted code" single ((:commit . "fba9fe57a310a71c5aac90a26434df4c08214833") (:url . "https://github.com/sshaw/copy-as-format") (:keywords "github" "slack" "jira" "hipchat" "gitlab" "bitbucket" "org-mode" "pod" "rst" "tools" "convenience"))]) (control-mode . [(20160624 1010) nil "A \"control\" mode, similar to vim's \"normal\" mode" single ((:commit . "72d6179b60adc438aada74083b2bf4264b575de3") (:url . "https://github.com/stephendavidmarsh/control-mode") (:keywords "convenience" "emulations"))]) (contrast-color . [(20160903 1107) ((emacs (24 3)) (cl-lib (0 5))) "Pick best contrast color for you" single ((:commit . "c5fb77a211ebbef3185ada37bea7420534c33f94") (:url . "https://github.com/yuutayamada/contrast-color-el") (:keywords "color" "convenience"))]) (contextual-menubar . [(20170908 408) nil "display the menubar only on a graphical display" single ((:commit . "67ddb1c8eec62e2b26524c09585a4f25f03ebb11") (:url . "https://github.com/aaronjensen/contextual-menubar"))]) (contextual . [(20160131 1037) ((emacs (24)) (dash (2 12 1)) (cl-lib (0 5))) "Contextual profile management system" single ((:commit . "9e009614fb72ef14964d7107abd44de5aed21659") (:url . "https://github.com/lshift-de/contextual") (:keywords "convenience" "tools"))]) (connection . [(20140717 2029) nil "TCP-based client connection" single ((:commit . "a23b8f4a422d0de69a006ed010eff5795319db98") (:keywords "network"))]) (conkeror-minor-mode . [(20150114 804) nil "Mode for editing conkeror javascript files." single ((:commit . "476e81c27b056e21c192391fe674a2bf875466b0") (:url . "http://github.com/Bruce-Connor/conkeror-minor-mode") (:keywords "programming" "tools"))]) (confluence . [(20151020 1828) ((xml-rpc (1 6 4))) "Emacs mode for interacting with confluence wikis" tar ((:commit . "4518d270a07760644c4204985c83d234ece4738b") (:url . "http://code.google.com/p/confluence-el/") (:keywords "confluence" "wiki" "xmlrpc"))]) (config-parser . [(20160426 519) ((emacs (24 4))) "a library for parsing config file" single ((:commit . "85d559e7889d8f5b98b8794b79426ae25ec3caa5") (:url . "https://github.com/lujun9972/el-config-parser") (:keywords "convenience" "config"))]) (config-general-mode . [(20171024 1140) nil "Config::General config file mode" single ((:commit . "b4a8e6ba0bb027a77e4a0f701409f3e57bb2e4c0") (:url . "https://github.com/tlinden/config-general-mode") (:keywords "files"))]) (conda . [(20171122 716) ((emacs (24 4)) (pythonic (0 1 0)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2))) "Work with your conda environments" single ((:commit . "0bba56d80bb959a20838a024b174d1cf1e2cfd07") (:url . "http://github.com/necaris/conda.el") (:keywords "python" "environment" "conda"))]) (concurrent . [(20161228 1930) ((emacs (24 3)) (deferred (0 5 0))) "Concurrent utility functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:url . "https://github.com/kiwanami/emacs-deferred/blob/master/README-concurrent.markdown") (:keywords "deferred" "async" "concurrent"))]) (composer . [(20170304 1647) ((emacs (24)) (s (1 9 0)) (f (0 17)) (request (0 2 0)) (seq (1 9))) "Interface to PHP Composer" single ((:commit . "43e50a5e626bedb3c46c875ac765daf615f18ce9") (:url . "https://github.com/zonuexe/composer.el") (:keywords "tools" "php" "dependency" "manager"))]) (composable . [(20170723 2347) ((emacs (24 4))) "composable editing" tar ((:commit . "ac981974f89607393cc61314aaa19672d45b0650") (:keywords "lisp"))]) (company-ycmd . [(20171010 2258) ((ycmd (1 3)) (company (0 9 3)) (deferred (0 5 1)) (s (1 11 0)) (dash (2 13 0)) (let-alist (1 0 5)) (f (0 19 0))) "company-mode backend for ycmd" single ((:commit . "7f394d02f6f3149b215adcc96043c78d5f32d612") (:url . "https://github.com/abingham/emacs-ycmd"))]) (company-ycm . [(20140904 1117) ((ycm (0 1))) "company-ycm" single ((:commit . "4da8a14abcd0f4fa3235042ade2e12b5068c0601") (:keywords "abbrev"))]) (company-web . [(20171111 1049) ((company (0 8 0)) (dash (2 8 0)) (cl-lib (0 5 0)) (web-completion-data (0 1 0))) "Company version of ac-html, complete for web,html,emmet,jade,slim modes" tar ((:commit . "935c65de0411ebbcb4f2223f31e756e093eaae07") (:url . "https://github.com/osv/company-web") (:keywords "html" "company"))]) (company-try-hard . [(20150902 1506) ((emacs (24 3)) (company (0 8 0)) (dash (2 0))) "get all completions from company backends" single ((:commit . "70b94cfc40c576af404e743133979048e1bd2610") (:keywords "matching"))]) (company-terraform . [(20170812 722) ((emacs (24 4)) (company (0 8 12)) (terraform-mode (0 6))) "A company backend for terraform" tar ((:commit . "bd97342fa1b3b77bd19a3ff202a5ce5cbead36d4") (:url . "https://github.com/rafalcieslak/company-terraform") (:keywords "abbrev" "convenience" "terraform" "company"))]) (company-tern . [(20161004 1147) ((company (0 8 0)) (tern (0 0 1)) (dash (2 8 0)) (dash-functional (2 8 0)) (s (1 9 0)) (cl-lib (0 5 0))) "Tern backend for company-mode" single ((:commit . "10ac058b065ae73c1f30e9fb7d969dd1a79387be") (:url . "https://github.com/proofit404/company-tern"))]) (company-statistics . [(20170210 1133) ((emacs (24 3)) (company (0 8 5))) "Sort candidates using completion history" single ((:commit . "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c") (:url . "https://github.com/company-mode/company-statistics") (:keywords "abbrev" "convenience" "matching"))]) (company-sourcekit . [(20170126 353) ((emacs (24 3)) (company (0 8 12)) (dash (2 12 1)) (dash-functional (1 2 0)) (sourcekit (0 2 0))) "company-mode completion backend for SourceKit" single ((:commit . "8ba62ac25bf533b7f148f333bcb5c1db799f749b") (:url . "https://github.com/nathankot/company-sourcekit") (:keywords "abbrev"))]) (company-shell . [(20170517 2241) ((emacs (24 4)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for shell functions" single ((:commit . "6ae625f80d90e0779c79de38e8f83a336c1d00fa") (:url . "https://github.com/Alexander-Miller/company-shell") (:keywords "company" "shell" "auto-completion"))]) (company-rtags . [(20170924 2244) ((emacs (24 3)) (company (0 8 1)) (rtags (2 10))) "RTags back-end for company" single ((:commit . "324f256acfdac2582c684e757078b1ca73ba28ec") (:url . "http://rtags.net"))]) (company-restclient . [(20151202 401) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24)) (know-your-http-well (0 2 0)) (restclient (0 0 0))) "company-mode completion back-end for restclient-mode" single ((:commit . "ef67ba2f613ce3d61b70011c9d0a303a754ffc5b") (:url . "https://github.com/iquiw/company-restclient"))]) (company-racer . [(20171204 1910) ((emacs (24 4)) (cl-lib (0 5)) (company (0 8 0)) (deferred (0 3 1))) "Company integration for racer" single ((:commit . "a00381c9d416f375f783fcb6ae8d40669ce1f567") (:url . "https://github.com/emacs-pe/company-racer") (:keywords "convenience"))]) (company-quickhelp . [(20170429 1052) ((emacs (24 3)) (company (0 8 9)) (pos-tip (0 4 6))) "Popup documentation for completion candidates" single ((:commit . "432c62f034a5097d3f85d7f54afcdc016d7afa12") (:url . "https://www.github.com/expez/company-quickhelp") (:keywords "company" "popup" "documentation" "quickhelp"))]) (company-qml . [(20170428 1008) ((qml-mode (0 1)) (company (0 8 12))) "Company backend for QML files" tar ((:commit . "4af4f32a7ad86d86bb9293fb0b675aec513b5736") (:keywords "extensions"))]) (company-pollen . [(20160812 810) ((company (0 9 0)) (pollen-mode (1 0))) "company-mode completion backend for pollen" single ((:commit . "de762bd7f9760185dae8ef025ca9a9126ae78de0") (:url . "https://github.com/lijunsong/pollen-mode") (:keywords "languages" "pollen" "pollenpub" "company"))]) (company-plsense . [(20171114 2316) ((company (0 9 3)) (cl-lib (0 5 0)) (dash (2 12 0)) (s (1 12)) (emacs (24))) "Company backend for Perl" single ((:commit . "00f0baa70502b8412627316f72fc8b27ae7a1106") (:url . "https://github.com/CeleritasCelery/company-plsense"))]) (company-php . [(20171209 2243) ((cl-lib (0 5)) (ac-php-core (1)) (company (0 9))) "company completion source for php" single ((:commit . "0bea9c7d800864b55d807c755254d03c796b1594") (:url . "https://github.com/xcwen/ac-php") (:keywords "completion" "convenience" "intellisense"))]) (company-nixos-options . [(20160215 57) ((company (0 8 0)) (nixos-options (0 0 1)) (cl-lib (0 5 0))) "Company Backend for nixos-options" single ((:commit . "7007363e773a419203a69798fb0e0731b2eb0f73") (:url . "http://www.github.com/travisbhartwell/nix-emacs/") (:keywords "unix"))]) (company-ngram . [(20170129 1113) ((cl-lib (0 5)) (company (0 8 0))) "N-gram based completion" tar ((:commit . "09a68b802e64799e95f205b438d469bbd78cd2e6") (:url . "https://github.com/kshramt/company-ngram"))]) (company-nand2tetris . [(20171201 1013) ((nand2tetris (1 1 0)) (company (0 5)) (cl-lib (0 5 0))) "Company backend for nand2tetris major mode" single ((:commit . "33acee34d24b1c6a87db833b7d23449cf858f64f") (:url . "http://www.github.com/CestDiego/nand2tetris.el/") (:keywords "nand2tetris" "hdl" "company"))]) (company-math . [(20171016 814) ((company (0 8 0)) (math-symbol-lists (1 2))) "Completion backends for unicode math symbols and latex tags" single ((:commit . "3481f03ebb6a613ff85b71ca8edd2d5842c49012") (:url . "https://github.com/vspinu/company-math") (:keywords "unicode" "symbols" "completion"))]) (company-lua . [(20171108 1506) ((company (0 8 12)) (s (1 10 0)) (f (0 17 0)) (lua-mode (20151025))) "Company backend for Lua" tar ((:commit . "29f6819de4d691e5fd0b62893a9f4fbc1c6fcb52"))]) (company-lsp . [(20171211 1017) ((emacs (25 1)) (lsp-mode (3 4)) (company (0 9 0)) (s (1 2 0)) (dash (2 11 0))) "Company completion backend for lsp-mode." single ((:commit . "35d46dd3c6ac71c8baa0fc7798810e7fa64076ee") (:url . "https://github.com/tigersoldier/company-lsp"))]) (company-lean . [(20171102 754) ((emacs (24 3)) (dash (2 12 0)) (dash-functional (1 2 0)) (s (1 10 0)) (f (0 19 0)) (company (0 9 3)) (lean-mode (3 3 0))) "A company backend for lean-mode" single ((:commit . "c0af876c967fc969d67c467bc6767210d19c5d87") (:url . "https://github.com/leanprover/lean-mode") (:keywords "languages"))]) (company-jedi . [(20151216 1921) ((emacs (24)) (cl-lib (0 5)) (company (0 8 11)) (jedi-core (0 2 7))) "company-mode completion back-end for Python JEDI" single ((:commit . "2f54e791e10f5dc0ff164bfe97f1878359fab6f6"))]) (company-irony-c-headers . [(20151018 209) ((cl-lib (0 5)) (company (0 9 0)) (irony (0 2 0))) "Company mode backend for C/C++ header files with Irony" single ((:commit . "5bbd427a2d3d4445e3413f7516def9aa80543b2a") (:url . "https://github.com/hotpxl/company-irony-c-headers") (:keywords "c" "company"))]) (company-irony . [(20170905 1346) ((emacs (24 1)) (company (0 8 0)) (irony (1 1 0)) (cl-lib (0 5))) "company-mode completion back-end for irony-mode" single ((:commit . "52aca45bcd0f2cb0648fcafa2bbb4f8ad4b2fee7") (:url . "https://github.com/Sarcasm/company-irony/") (:keywords "convenience"))]) (company-inf-ruby . [(20140805 1354) ((company (0 6 10)) (inf-ruby (2 2 7)) (emacs (24 1))) "company-mode completion back-end for inf-ruby" single ((:commit . "fe3e4863bc971fbb81edad447efad5795ead1b17") (:url . "https://github.com/company-mode/company-inf-ruby"))]) (company-go . [(20170825 943) ((company (0 8 0)) (go-mode (1 0 0))) "company-mode backend for Go (using gocode)" single ((:commit . "e990796e68a2ebfc099afed20b99e26d6b64061a") (:keywords "languages"))]) (company-glsl . [(20171015 1049) ((company (0 9 4)) (glsl-mode (2 0)) (emacs (24 4))) "Support glsl in company-mode" single ((:commit . "a262c12c3bcd0807718c4edcaf2b054e30ef0e26") (:url . "https://github.com/guidoschmidt/company-glsl"))]) (company-ghci . [(20160310 1800) ((company (0 8 11)) (haskell-mode (13))) "company backend which uses the current ghci process." single ((:commit . "c2d74a41166e76de2e78c87f582ba3a1179b2aa6"))]) (company-ghc . [(20170918 133) ((cl-lib (0 5)) (company (0 8 0)) (ghc (5 4 0 0)) (emacs (24))) "company-mode ghc-mod backend" single ((:commit . "dab111cb5067c545ccdc6b2d0ba70c1c4bbce060") (:url . "https://github.com/iquiw/company-ghc") (:keywords "haskell" "completion"))]) (company-flx . [(20161228 1736) ((emacs (24)) (company (0 8 12)) (flx (0 5))) "flx based fuzzy matching for company" single ((:commit . "0c9fddf7c11c918ed42bd6a5108f8969b37704d5") (:url . "https://github.com/PythonNut/company-flx") (:keywords "convenience" "company" "fuzzy" "flx"))]) (company-flow . [(20170325 810) ((company (0 8 0)) (dash (2 13 0))) "Flow backend for company-mode" single ((:commit . "339f502e46e7d9214b61498d539b17f8f0322d17") (:url . "https://github.com/aaronjensen/company-flow"))]) (company-eshell-autosuggest . [(20171209 1109) ((emacs (24 4)) (company (0 9 4))) "History autosuggestions for eshell" single ((:commit . "2ae70dd521c797f1673cd0f0ff6da6fbfce77dac") (:url . "http://github.com/dieggsy/company-eshell-autosuggest") (:keywords "completion" "company" "matching" "convenience" "abbrev"))]) (company-erlang . [(20170122 2138) ((emacs (24 4)) (ivy-erlang-complete (0 1)) (company (0 9 2))) "company backend based on ivy-erlang-complete" single ((:commit . "bc0524a16f17b66c7397690e4ca0e004f09ea6c5") (:keywords "tools"))]) (company-emoji . [(20161230 1937) ((cl-lib (0 5)) (company (0 8 0))) "company-mode backend for emoji" tar ((:commit . "8dc88ffe0773ef44321f245d39430c14a1bc2b82") (:url . "https://github.com/dunn/company-emoji.git") (:keywords "emoji" "company"))]) (company-emacs-eclim . [(20170104 743) ((eclim (0 3)) (company (0 7)) (cl-lib (0 5))) "company-mode backend for eclim" single ((:commit . "4f27d04c30a026f24c0ff18c3a7d36e3fb5b57a5"))]) (company-edbi . [(20160221 1123) ((company (0 8 5)) (edbi (0 1 3)) (cl-lib (0 5 0)) (s (1 9 0))) "Edbi backend for company-mode" single ((:commit . "ffaeff75d0457285d16d11db772881542a6026ad") (:url . "https://github.com/proofit404/company-edbi"))]) (company-distel . [(20161002 2339) ((distel-completion-lib (1 0 0))) "Erlang/distel completion backend for company-mode" single ((:commit . "2ba4eea51cecfa75cf62f58180460ee9ff43131f") (:url . "github.com/sebastiw/distel-completion") (:keywords "erlang" "distel" "company"))]) (company-dict . [(20160528 53) ((emacs (24 4)) (company (0 8 12)) (parent-mode (2 3))) "A backend that emulates ac-source-dictionary" single ((:commit . "0589c2c3980a8f0df1705e3c0e5e075557eaac75") (:url . "https://github.com/hlissner/emacs-company-dict") (:keywords "company" "dictionary" "ac-source-dictionary"))]) (company-dcd . [(20170516 210) ((company (0 9)) (flycheck-dmd-dub (0 7)) (yasnippet (0 8)) (popwin (0 7)) (cl-lib (0 5)) (ivy (20160804 326))) "Company backend for Dlang using DCD." single ((:commit . "4832188a9e42287539a69c372fe1643166a6a7aa") (:url . "http://github.com/tsukimizake/company-dcd") (:keywords "languages"))]) (company-coq . [(20171202 1243) ((company-math (1 1)) (company (0 8 12)) (yasnippet (0 11 0)) (dash (2 12 1)) (cl-lib (0 5))) "A collection of extensions for Proof General's Coq mode" tar ((:commit . "dcad9c07ecbd90d261520ac09251eaa3480ea98a"))]) (company-cabal . [(20170917 617) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24))) "company-mode cabal backend" tar ((:commit . "62112a7259e24bd6c08885629a185afe512b7d3d") (:url . "https://github.com/iquiw/company-cabal"))]) (company-c-headers . [(20170531 1330) ((emacs (24 1)) (company (0 8))) "Company mode backend for C/C++ header files" single ((:commit . "e959d43bebf0a524f7378669983a39ee1379cc21") (:keywords "development" "company"))]) (company-bibtex . [(20171104 2344) ((company (0 9 0)) (cl-lib (0 5)) (parsebib (1 0))) "Company completion for bibtex keys" single ((:commit . "225c6f5c0c070c94c8cdbbd452ea548cd94d76f4") (:url . "https://github.com/gbgar/company-bibtex") (:keywords "company-mode" "bibtex"))]) (company-axiom . [(20171024 1310) ((emacs (24)) (company (0 9)) (axiom-environment (20171021))) "A company-mode backend for the axiom-environment system" single ((:commit . "b4f0fa9cd013e107d2af8e2ebedff8a7f40be7b5") (:keywords "axiom" "openaxiom" "fricas" "axiom-environment"))]) (company-auctex . [(20161025 24) ((yasnippet (0 8 0)) (company (0 8 0)) (auctex (11 87))) "Company-mode auto-completion for AUCTeX" single ((:commit . "d3727c9f5bb13c52b4a345bc8f895d3dbd9178b3") (:url . "https://github.com/alexeyr/company-auctex/"))]) (company-arduino . [(20160306 939) ((emacs (24 1)) (company (0 8 0)) (irony (0 1 0)) (cl-lib (0 5)) (company-irony (0 1 0)) (company-c-headers (20140930)) (arduino-mode (1 0))) "company-mode for Arduino" single ((:commit . "d7e369702b8eee63e6dfdeba645ce28b6dc66fb1") (:url . "https://github.com/yuutayamada/company-arduino") (:keywords "convenience" "development" "company"))]) (company-ansible . [(20170430 53) ((emacs (24 4)) (company (0 8 12))) "A company back-end for ansible" tar ((:commit . "2c30c3bdb8316b27d5c1832b944cb146d00de456") (:url . "https://github.com/krzysztof-magosa/company-ansible") (:keywords "ansible"))]) (company-anaconda . [(20160809 705) ((company (0 8 0)) (anaconda-mode (0 1 1)) (cl-lib (0 5 0)) (dash (2 6 0)) (s (1 9))) "Anaconda backend for company-mode" single ((:commit . "b268a00821c79d7e4c5da0d7035356afb389b3a7") (:url . "https://github.com/proofit404/anaconda-mode"))]) (company . [(20171206 352) ((emacs (24 3))) "Modular text completion framework" tar ((:commit . "a4e14ed869a99ca8772f32b884b79ea573bccbb8") (:url . "http://company-mode.github.io/") (:keywords "abbrev" "convenience" "matching"))]) (common-lisp-snippets . [(20170918 356) ((yasnippet (0 8 0))) "Yasnippets for Common Lisp" tar ((:commit . "cd46223fbc6ee99372a25ba455ffec4354895e45") (:url . "https://github.com/mrkkrp/common-lisp-snippets") (:keywords "snippets"))]) (commify . [(20161106 1534) ((s (1 9 0))) "Toggle grouping commas in numbers" single ((:commit . "78732c2fa6c1a10288b7436d7c561ec9ebdd41be") (:url . "https://github.com/ddoherty03/commify") (:keywords "convenience" "editing" "numbers" "grouping" "commas"))]) (commenter . [(20160219 827) ((emacs (24 4)) (let-alist (1 0 4))) "multiline-comment support package" single ((:commit . "6d1885419434ba779270c6fda0e30d390bb074bd") (:url . "https://github.com/yuutayamada/commenter") (:keywords "comment"))]) (comment-tags . [(20170910 1035) ((emacs (24 5))) "Highlight & navigate comment tags like 'TODO'." single ((:commit . "7d914097f0a03484af71e621db533737fc692f58") (:url . "https://github.com/vincekd/comment-tags") (:keywords "convenience" "comments" "tags"))]) (comment-dwim-2 . [(20170809 1354) nil "An all-in-one comment command to rule them all" single ((:commit . "8da8aba4cab4a0a1eef3aea2de219227526876e4") (:url . "https://github.com/remyferre/comment-dwim-2") (:keywords "convenience"))]) (commander . [(20140120 1052) ((s (1 6 0)) (dash (2 0 0)) (cl-lib (0 3)) (f (0 6 1))) "Emacs command line parser" single ((:commit . "c93985dc318fe89e5a29abc21d19fb41e2fd14d2") (:url . "http://github.com/rejeep/commander.el") (:keywords "cli" "argv"))]) (command-queue . [(20160328 1025) ((emacs (24 3))) "shell command queue" single ((:commit . "f327c6f852592229a755ec6de0c62c6aeafd6659") (:url . "https://github.com/Yuki-Inoue/command-queue"))]) (command-log-mode . [(20160412 2147) nil "log keyboard commands to buffer" single ((:commit . "af600e6b4129c8115f464af576505ea8e789db27") (:url . "https://github.com/lewang/command-log-mode") (:keywords "help"))]) (comint-intercept . [(20170317 528) ((emacs (24 3))) "Intercept input in comint-mode" single ((:commit . "a329abf01fa8e0c6b02b46b29bcb421a21120dc5") (:url . "https://github.com/hying-caritas/comint-intercept") (:keywords "processes" "terminals"))]) (column-marker . [(20121128 43) nil "Highlight certain character columns" single ((:keywords "tools" "convenience" "highlight"))]) (column-enforce-mode . [(20171030 1200) nil "Highlight text that extends beyond a column" single ((:commit . "2341a2b6a33d4b8b74c35062ec9cfe1bffd61944") (:url . "www.github.com/jordonbiondo/column-enforce-mode"))]) (colormaps . [(20171008 1524) ((emacs (25))) "Hex colormaps" single ((:commit . "19fbb64a6288d505b9cf45c9b5a3eed0bfb135e2") (:url . "https://github.com/lepisma/colormaps.el") (:keywords "tools"))]) (color-theme-x . [(20160924 854) ((cl-lib (0 5))) "convert color themes to X11 resource settings" single ((:commit . "7cba227f8bd4c82269405848550a4f4475057c65") (:url . "https://github.com/ajsquared/color-theme-x") (:keywords "convenience" "faces" "frames"))]) (color-theme-solarized . [(20171024 825) ((color-theme (6 5 5))) "Solarized themes for Emacs" tar ((:commit . "f3ca8902ea056fb8e46cb09f09c96294e31cd4ee"))]) (color-theme-sanityinc-tomorrow . [(20171202 1759) nil "A version of Chris Kempson's various Tomorrow themes" tar ((:commit . "e3e051f88734593d4b7b92f157e618ebfe63693b"))]) (color-theme-sanityinc-solarized . [(20160429 1903) nil "A version of Ethan Schoonover's Solarized themes" tar ((:commit . "74a7065808f82dbdd9638ae33ed0e4f7a55da35c"))]) (color-theme-modern . [(20161219 344) ((emacs (24))) "Reimplement colortheme with Emacs 24 theme framework." tar ((:commit . "42a79266f1d7b473e9328e67a455e505e6c3eff5") (:url . "https://github.com/emacs-jp/replace-colorthemes/"))]) (color-theme-buffer-local . [(20170125 2201) ((color-theme (0))) "Install color-themes by buffer." single ((:commit . "e606dec66f16a06140b9aad625a4fd52bca4f936") (:url . "http://github.com/vic/color-theme-buffer-local") (:keywords "faces"))]) (color-theme-approximate . [(20140227 2036) nil "Makes Emacs theme works on terminal transparently" single ((:commit . "f54301ca39bc5d2ffb000f233f8114184a3e7d71"))]) (color-theme . [(20080305 34) nil "install color themes" tar ((:url . "http://www.emacswiki.org/cgi-bin/wiki.pl?ColorTheme") (:keywords "faces"))]) (color-moccur . [(20141222 1635) nil "multi-buffer occur (grep) mode" single ((:commit . "4f1c59ffd1ccc2ab1a171cd6b721e8cb9e002fb7") (:url . "http://www.bookshelf.jp/elc/color-moccur.el") (:keywords "convenience"))]) (color-identifiers-mode . [(20170814 1121) ((dash (2 5 0)) (emacs (24))) "Color identifiers based on their names" single ((:commit . "5750ee9e1ab8a6890381bb461982113b1eb98879") (:url . "https://github.com/ankurdave/color-identifiers-mode") (:keywords "faces" "languages"))]) (colonoscopy-theme . [(20170808 609) ((emacs (24 0))) "an Emacs 24 theme based on Colonoscopy (tmTheme)" single ((:commit . "64bbb322b13dae91ce9f1e3581f836f94f800ead") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (colemak-evil . [(20171015 1607) ((evil (20170323 1140))) "Colemak-friendly keybindings for Evil." single ((:commit . "192c779281ae1fbf2405dcdb55b3c5b2a1d0b3d1") (:url . "https://github.com/patbl/colemak-evil"))]) (col-highlight . [(20170510 1541) ((vline (0))) "Highlight the current column." single ((:url . "https://www.emacswiki.org/emacs/download/col-highlight.el") (:keywords "faces" "frames" "emulation" "highlight" "cursor" "accessibility"))]) (coin-ticker . [(20170611 27) ((request (0 3 0)) (emacs (25))) "Show a cryptocurrency price ticker" single ((:commit . "9efab90fe4e6f29464af14e0d8fd1e20c0147b80") (:url . "https://github.com/eklitzke/coin-ticker-mode") (:keywords "news"))]) (coffee-mode . [(20170324 240) ((emacs (24 3))) "Major mode for CoffeeScript code" single ((:commit . "86ab8aae8662e8eff54d3013010b9c693b16eac5") (:url . "http://github.com/defunkt/coffee-mode") (:keywords "coffeescript" "major" "mode"))]) (coffee-fof . [(20131012 530) ((coffee-mode (0 4 1))) "A coffee-mode configuration for `ff-find-other-file'." single ((:commit . "211529594bc074721c6cbc4edb73a63cc05f89ac") (:url . "http://github.com/yasuyk/coffee-fof") (:keywords "coffee-mode"))]) (codic . [(20150926 427) ((emacs (24)) (cl-lib (0 5))) "Search Codic (codic.jp) naming dictionaries" tar ((:commit . "52bbb6997ef4ab9fb7fea43bbfff7f04671aa557") (:url . "https://github.com/syohex/emacs-codic"))]) (codesearch . [(20171122 431) ((elog (0 1))) "Core support for managing codesearch tools" tar ((:commit . "203da6dc3d22c795792525091b85d26f587202b1") (:url . "https://github.com/abingham/emacs-codesearch") (:keywords "tools" "development" "search"))]) (codebug . [(20140929 1437) nil "Interact with codebug" single ((:commit . "ac0e4331ba94ccb5203fa492570e1ca6b90c3d52") (:url . "http://www.shanedowling.com/"))]) (code-library . [(20160426 518) ((gist (1 3 1))) "use org-mode to collect code snippets" single ((:commit . "32d59c5c845d6dbdda18f9bd1c03a58d55417fc5") (:keywords "lisp" "code"))]) (cobra-mode . [(20140116 1316) nil "Major mode for .NET-based Cobra language" single ((:commit . "acd6e53f6286af5176471d01f25257e5ddb6dd01") (:url . "http://github.com/Nekroze/cobra-mode") (:keywords "languages"))]) (cnfonts . [(20171205 111) ((emacs (24))) "A simple Chinese fonts config tool" tar ((:commit . "4583e30d5058773606b830072df38a038d40203a") (:url . "https://github.com/tumashu/cnfonts") (:keywords "convenience" "chinese" "font"))]) (cmm-mode . [(20150224 2346) nil "Major mode for C-- source code" single ((:commit . "c3ad514dff3eb30434f6b20d953276d4c00de1ee"))]) (cmds-menu . [(20170221 1557) nil "`Recent Commands' submenu for the menu-bar `Tools' menu." single ((:url . "https://www.emacswiki.org/emacs/download/cmds-menu.el") (:keywords "convenience" "command" "menu"))]) (cmd-to-echo . [(20161203 1333) ((emacs (24 4)) (s (1 11 0)) (shell-split-string (20151224 208))) "Show the output of long-running commands in the echo area" single ((:commit . "e0e874fc0e1ad6d291e39ed76023445297ad438a"))]) (cmake-project . [(20171121 315) nil "Integrates CMake build process with Emacs" single ((:commit . "d3f408f226eff3f77f7e00dd519f4efc78fd292d") (:url . "http://github.com/alamaison/emacs-cmake-project") (:keywords "c" "cmake" "languages" "tools"))]) (cmake-mode . [(20160928 505) nil "major-mode for editing CMake sources" single ((:commit . "62d8bff146b28c10c11ad7ef8114f8d06f2fcad8"))]) (cmake-ide . [(20171211 1457) ((emacs (24 4)) (cl-lib (0 5)) (seq (1 11)) (levenshtein (0)) (s (1 11 0))) "Calls CMake to find out include paths and other compiler flags" single ((:commit . "45ae352ca302828086b89936047baf806eb01868") (:url . "http://github.com/atilaneves/cmake-ide") (:keywords "languages"))]) (cmake-font-lock . [(20170117 1225) ((cmake-mode (0 0))) "Advanced, type aware, highlight support for CMake" single ((:commit . "8be491b4b13338078e524e2fe6213c93e18a101e") (:url . "https://github.com/Lindydancer/cmake-font-lock") (:keywords "faces" "languages"))]) (cm-mode . [(20170203 1307) ((cl-lib (0 5))) "Minor mode for CriticMarkup" single ((:commit . "276d49c859822265070ae5dfbb403fd7d8d06436") (:keywords "text" "markdown"))]) (clues-theme . [(20161213 327) ((emacs (24 0))) "an Emacs 24 theme which may well be fully awesome..." single ((:commit . "abd61f2b7f3e98de58ca26e6d1230e70c6406cc7") (:url . "https://github.com/emacsfodder/emacs-clues-theme"))]) (cloud-to-butt-erc . [(20130627 1608) nil "Replace 'the cloud' with 'my butt'" single ((:commit . "6710c03d1bc91736435cbfe845924940cae34e5c") (:url . "http://www.github.com/leathekd/cloud-to-butt-erc"))]) (closure-lint-mode . [(20101118 1324) nil "minor mode for the Closure Linter" single ((:commit . "bc3d2fd5c35580bf1b8af43b12484c95a343b4b5") (:url . "https://github.com/r0man/closure-lint-mode") (:keywords "tools" "closure" "javascript" "lint" "flymake"))]) (closql . [(20171015 822) ((emacs (25 1)) (emacsql-sqlite (2 0 2))) "store EIEIO objects using EmacSQL" single ((:commit . "49862bfdd1540d443d278fadef16a83388b360cb") (:url . "https://github.com/emacscollective/closql") (:keywords "extensions"))]) (clomacs . [(20170726 436) ((emacs (24 3)) (cider (0 11)) (s (1 10 0))) "Simplifies Emacs Lisp interaction with Clojure." single ((:commit . "8d3e12a2f73e81499fa18f30adaea8c861e4a9b1") (:url . "https://github.com/clojure-emacs/clomacs") (:keywords "clojure" "interaction"))]) (clojure-snippets . [(20170713 2310) ((yasnippet (0 10 0))) "Yasnippets for clojure" tar ((:commit . "36207f9d8738851f5b686dfe0225ad0553bf8e68"))]) (clojure-quick-repls . [(20150814 36) ((cider (0 8 1)) (dash (2 9 0))) "Quickly create Clojure and ClojureScript repls for a project." single ((:commit . "730311dd3ac4e0aceb0204f818b422017873467f") (:url . "https://github.com/symfrog/clojure-quick-repls") (:keywords "languages" "clojure" "cider" "clojurescript"))]) (clojure-mode-extra-font-locking . [(20171102 1020) ((clojure-mode (3 0))) "Extra font-locking for Clojure mode" single ((:commit . "118c19700c904ae6a45fb409ca795bb93ff8dbd8") (:url . "http://github.com/clojure-emacs/clojure-mode") (:keywords "languages" "lisp"))]) (clojure-mode . [(20171103 1150) ((emacs (24 4))) "Major mode for Clojure code" single ((:commit . "118c19700c904ae6a45fb409ca795bb93ff8dbd8") (:url . "http://github.com/clojure-emacs/clojure-mode") (:keywords "languages" "clojure" "clojurescript" "lisp"))]) (clojure-cheatsheet . [(20161004 2328) ((helm (1 7 7)) (cider (0 9 0))) "The Clojure Cheatsheet for Emacs" single ((:commit . "57e877d9466934b5319989b542f93b42dffec9ae") (:url . "https://github.com/clojure-emacs/clojure-cheatsheet") (:keywords "clojure" "cider" "cheatsheet" "helm"))]) (clojars . [(20161109 1448) ((request-deferred (0 2 0))) "clojars.org search interface" single ((:commit . "8f4ca8a283d4e9acaab912bb7217ffb5800b01a7") (:url . "https://github.com/joshuamiller/clojars.el") (:keywords "docs" "help" "tools"))]) (clocker . [(20160125 1505) ((projectile (0 11 0)) (dash (2 10))) "Note taker and clock-in enforcer" single ((:commit . "4a4831ed4e42e18976edd16b844cb16cb78f3c17") (:keywords "org"))]) (cloc . [(20170728 1124) ((cl-lib (0 5))) "count lines of code over emacs buffers" single ((:commit . "f30f0472e465cc8d433d2473e9d3b8dfe2c94491") (:url . "https://github.com/cosmicexplorer/cloc-emacs") (:keywords "cloc" "count" "source" "code" "lines"))]) (clmemo . [(20160326 923) nil "Change Log MEMO" tar ((:commit . "846a81b984d71edf8278a4d9f9b886e44d5b8365") (:url . "https://github.com/ataka/clmemo") (:keywords "convenience"))]) (cljsbuild-mode . [(20160402 1000) nil "A minor mode for the ClojureScript 'lein cljsbuild' command" single ((:commit . "fa2315660cb3ce944b5e16c679dcf5afd6a97f4c") (:url . "http://github.com/kototama/cljsbuild-mode") (:keywords "clojure" "clojurescript" "leiningen" "compilation"))]) (cljr-helm . [(20160913 128) ((clj-refactor (0 13 0)) (helm-core (1 7 7)) (cl-lib (0 5))) "Wraps clojure refactor commands with helm" single ((:commit . "f2fc7b698a56e4a44d5dfbc6a55d77a93c0fa9a4") (:url . "https://github.com/philjackson/cljr-helm") (:keywords "helm" "clojure" "refactor"))]) (clj-refactor . [(20171117 317) ((emacs (24 4)) (s (1 8 0)) (seq (2 19)) (yasnippet (0 6 1)) (paredit (24)) (multiple-cursors (1 2 2)) (clojure-mode (5 6 1)) (cider (0 15 0)) (edn (1 1 2)) (inflections (2 3)) (hydra (0 13 2))) "A collection of clojure refactoring functions" tar ((:commit . "408ab1f13b8d956dd8d2c839bea5197175ef5a93") (:keywords "convenience" "clojure" "cider"))]) (clips-mode . [(20170909 123) nil "Major mode for editing CLIPS code and REPL" tar ((:commit . "dd38e2822640a38f7d8bfec4f69d8dd24be27074"))]) (clippy . [(20161028 1254) ((pos-tip (1 0))) "Show tooltip with function documentation at point" single ((:commit . "ad4b5dba4cede6d4b21533186303d3d3e9a2510f") (:url . "https://github.com/Fuco1/clippy.el") (:keywords "docs"))]) (clipmon . [(20160926 329) nil "Clipboard monitor - watch system clipboard, add changes to kill ring/autoinsert" tar ((:commit . "3f985aa2a55fbfd8566425c90e1968998f57b8ee") (:url . "https://github.com/bburns/clipmon") (:keywords "convenience"))]) (cliphist . [(20171112 2138) ((emacs (24 3)) (ivy (0 9 0))) "Read data from clipboard managers at Linux and Mac" tar ((:commit . "e454254f8bd9dbaea28e95c786d7297a2d4e920a") (:url . "http://github.com/redguardtoo/cliphist") (:keywords "clipboard" "manager" "history"))]) (click-mode . [(20170105 20) ((emacs (24))) "Major mode for the Click Modular Router Project" single ((:commit . "3c31e65b0b8476a15a3e2394fa05477ce42ea790") (:url . "https://github.com/bmalehorn/click-mode") (:keywords "click" "router"))]) (clevercss . [(20131228 1755) nil "A major mode for editing CleverCSS files" single ((:commit . "b8a3c0dd674367c62b1a1ffec84d88fe0c0219bc") (:keywords "languages" "css"))]) (clear-text . [(20160406 1343) nil "Make you use clear text" tar ((:commit . "b50669b6077d6948f72cb3c649281d206e0c2f2b") (:url . "https://github.com/xuchunyang/clear-text.el") (:keywords "convenience"))]) (clean-buffers . [(20160529 1559) ((cl-lib (0 5))) "clean useless buffers" single ((:commit . "1be6c54e3095761b6b64bf749faae3dfce94e72a") (:keywords "convenience" "usability" "buffers"))]) (clean-aindent-mode . [(20171017 1343) nil "Simple indent and unindent, trims indent white-space" single ((:commit . "a97bcae8f43a9ff64e95473e4ef0d8bafe829211") (:url . "https://github.com/pmarinov/clean-aindent-mode") (:keywords "indentation" "whitespace" "backspace"))]) (clang-format . [(20171202 1318) ((cl-lib (0 3))) "Format code using clang-format" single ((:commit . "dee259662042ea4f7f339fd95970bb504e440cca") (:keywords "tools" "c"))]) (cl-lib-highlight . [(20140127 1312) ((cl-lib (0 3))) "full cl-lib font-lock highlighting" single ((:commit . "fd1b308e6e989791d1df14438efa6b77d20f7c7e") (:url . "https://github.com/skeeto/cl-lib-highlight"))]) (cl-format . [(20160412 1745) nil "CL format routine." tar ((:commit . "4380cb8009c47cc6d9098b383082b93b1aefa460"))]) (circe-notifications . [(20171203 1746) ((emacs (24 4)) (circe (2 3)) (alert (1 2))) "Add desktop notifications to Circe." single ((:commit . "a21417f0ee82c922e017cc301503539cdd65aa1c") (:url . "https://github.com/eqyiel/circe-notifications"))]) (circe . [(20171210 1400) ((cl-lib (0 5))) "Client for IRC in Emacs" tar ((:commit . "e71a66df56008baa97e657f4fdf1e7d3daf4e578") (:url . "https://github.com/jorgenschaefer/circe"))]) (circadian . [(20171022 724) ((emacs (24 4))) "Theme-switching based on daytime" single ((:commit . "feec308591b43e7869d7a018d5c6fc7e943d53ee") (:url . "https://github.com/GuidoSchmidt/circadian") (:keywords "circadian" "themes"))]) (cinspect . [(20150715 1933) ((emacs (24)) (cl-lib (0 5)) (deferred (0 3 1)) (python-environment (0 0 2))) "Use cinspect to look at the CPython source of builtins and other C objects!" single ((:commit . "4e199a90f89b335cccda1518aa0963e0a1d4fbab") (:url . "https://github.com/inlinestyle/cinspect-mode") (:keywords "python"))]) (cil-mode . [(20160622 730) nil "Common Intermediate Language mode" single ((:commit . "a78a88ca9a66a82f069329a96e34b67478ae2d9b") (:url . "https://github.com/ForNeVeR/cil-mode") (:keywords "languages"))]) (ciel . [(20170330 526) ((emacs (24))) "A command that is clone of \"ci\" in vim." single ((:commit . "8c73f78d60ef52d3c395a9629963a63439b8a83e") (:url . "https://github.com/cs14095/ciel.el") (:keywords "convinience"))]) (cider-spy . [(20160313 740) ((emacs (24 4)) (cider (0 10 0)) (dash (2 5 0)) (cl-lib (0 5)) (noflet (0 0 15))) "Spy on CIDER to get info" single ((:commit . "0224608d240e9900e588b6df049c2a87c24fc936") (:url . "http://www.github.com/jonpither/cider-spy") (:keywords "languages" "clojure" "cider" "nrepl"))]) (cider-profile . [(20141120 625) ((cider (0 8 0))) "CIDER profiling support" single ((:commit . "9aa7e404f53f5136ac8d15301ce8ca2924785cb3") (:url . "http://github.com/thunknyc/nrepl-profile") (:keywords "cider" "clojure" "profiling"))]) (cider-hydra . [(20161018 2254) ((cider (0 14 0)) (hydra (0 13 0))) "Hydras for CIDER." single ((:commit . "6bb341143fe16f12be2262b2bcd003a246962676") (:url . "https://github.com/clojure-emacs/cider-hydra") (:keywords "convenience" "tools"))]) (cider-eval-sexp-fu . [(20160907 100) ((emacs (24)) (highlight (0)) (eval-sexp-fu (0 4 0))) "Briefly highlights an evaluated sexp." single ((:commit . "5687e7b33e17f2be40b036dac82da4a5bc6705fb") (:keywords "languages" "clojure" "cider"))]) (cider-decompile . [(20151121 2137) ((cider (0 3 0)) (javap-mode (9))) "decompilation extension for cider" single ((:commit . "5d87035f3c3c14025e8f01c0c53d0ce2c8f56651") (:url . "http://www.github.com/clojure-emacs/cider-decompile") (:keywords "languages" "clojure" "cider"))]) (cider . [(20171211 846) ((emacs (24 4)) (clojure-mode (5 6 0)) (pkg-info (0 4)) (queue (0 1 1)) (spinner (1 7)) (seq (2 16))) "Clojure Interactive Development Environment that Rocks" tar ((:commit . "8143c4afd79e165ff1bec43536839f1a27c67d33") (:url . "http://www.github.com/clojure-emacs/cider") (:keywords "languages" "clojure" "cider"))]) (chruby . [(20170509 700) ((cl-lib (0 5))) "Emacs integration for chruby" single ((:commit . "3eddd2f5fc2ac979b496394c74e4aee436b64a28") (:url . "https://github.com/plexus/chruby.el") (:keywords "languages"))]) (chronos . [(20150602 829) nil "multiple simultaneous countdown / countup timers" tar ((:commit . "b360d9dae57aa553cf2a14ffa0756a51ad71de09") (:url . "http://github.com/dxknight/chronos") (:keywords "calendar"))]) (choice-program . [(20171004 931) ((emacs (25)) (cl-lib (1 0))) "parameter based program" tar ((:commit . "27607ec1fe241c58fbc1f861454a8e2ec1fd7b15") (:url . "https://github.com/plandes/choice-program") (:keywords "exec" "execution" "parameter" "option"))]) (chm-view . [(20110616 1019) nil "View CHM file." single ((:url . "http://www.emacswiki.org/emacs/download/chm-view.el") (:keywords "chm" "chm-view"))]) (chinese-yasdcv . [(20171014 1844) ((cl-lib (0 5)) (pyim (1 6 0))) "Yet another StarDict frontend" tar ((:commit . "5ab830daf1273d5a5cddcb94b56a9737f12d996f") (:url . "https://github.com/tumashu/chinese-yasdcv") (:keywords "convenience" "chinese" "dictionary"))]) (chinese-word-at-point . [(20170811 241) ((cl-lib (0 5))) "Add `chinese-word' thing to `thing-at-point'" single ((:commit . "8223d7439e005555b86995a005b225ae042f0538") (:url . "https://github.com/xuchunyang/chinese-word-at-point.el") (:keywords "convenience" "chinese"))]) (chinese-wbim . [(20150623 2050) nil "Enable Wubi Input Method in Emacs." tar ((:commit . "57ff61ff3895d77335709d24b40cefc4d10b0095"))]) (chinese-number . [(20161007 2209) nil "Convert numbers between Arabic and Chinese formats" single ((:commit . "7311c2a0c5eea5f016a90d733dfe75144c302fb2") (:url . "https://github.com/zhcosin/chinese-number"))]) (chinese-conv . [(20170807 1428) ((cl-lib (0 5))) "Conversion between Chinese Characters with opencc or cconv" single ((:commit . "b56815bbb163d642e97fa73093b5a7e87cc32574") (:url . "https://github.com/gucong/emacs-chinese-conv"))]) (chicken-scheme . [(20141116 1139) nil "Scheme-mode extensions for Chicken Scheme" single ((:commit . "19b0b08b5592063e852cae094b394c7d1f923639") (:url . "http://github.com/dleslie/chicken-scheme"))]) (cherry-blossom-theme . [(20150621 2042) ((emacs (24 0))) "a soothing color theme for Emacs24." single ((:commit . "eea7653e00f35973857ee23b27bc2fae5e753e50") (:url . "https://github.com/inlinestyle/emacs-cherry-blossom-theme"))]) (chef-mode . [(20111121 700) nil "minor mode for editing an opscode chef repository" single ((:commit . "c333dd3f9229c4f35fe8c4495b21049ba730cc42") (:keywords "chef" "knife"))]) (cheerilee . [(20160313 1135) ((xelb (0 1))) "Toolkit library" tar ((:commit . "41bd81b5b0bb657241ceda5be6af5e07254d7376") (:keywords "tools"))]) (chee . [(20171123 1433) ((dash (2 12 1)) (s (1 10 0)) (f (0 18 2))) "Interface to chee using dired and image-dired" tar ((:commit . "669ff9ee429f24c3c2d03b83d9cb9aec5f86bb8b") (:url . "https://github.com/eikek/chee/tree/release/0.3.0/emacs"))]) (checkbox . [(20141116 1658) ((emacs (24)) (cl-lib (0 5))) "Quick manipulation of textual checkboxes" single ((:commit . "335afa4404adf72973195a580458927004664d98") (:url . "http://github.com/camdez/checkbox.el") (:keywords "convenience"))]) (cheatsheet . [(20170126 1350) ((emacs (24)) (cl-lib (0 5))) "create your own cheatsheet" single ((:commit . "e4f8e0110167ea16a17a74517d1f10cb7ff805b8") (:url . "http://github.com/darksmile/cheatsheet/") (:keywords "convenience" "usability"))]) (cheat-sh . [(20170802 418) ((emacs (24))) "Interact with cheat.sh" single ((:commit . "e90445124f3f145a047779e42d070a3c5e150f70") (:url . "https://github.com/davep/cheat-sh.el") (:keywords "docs" "help"))]) (chatwork . [(20170510 2142) nil "ChatWork client for Emacs" single ((:commit . "fea231d479f06bf40dbfcf45de143eecc9ed744c") (:url . "https://github.com/ataka/chatwork") (:keywords "web"))]) (charmap . [(20160309 146) nil "Unicode table for Emacs" single ((:commit . "bd4b3e466d7a9433cf35167e3a68ec74fe631bb2") (:url . "https://github.com/lateau/charmap") (:keywords "unicode" "character" "ucs"))]) (char-menu . [(20170518 2247) ((emacs (24 3)) (avy-menu (0 1))) "Create your own menu for fast insertion of arbitrary symbols" single ((:commit . "b4542123e8c9bc40de1328f9a8078a0704a9a98d") (:url . "https://github.com/mrkkrp/char-menu") (:keywords "convenience" "editing"))]) (chapel-mode . [(20160504 108) nil "a CC Mode for Chapel derived from derived-mode-ex.el" single ((:commit . "6e095edd7639f5f0a81e14d6412410b49466697e") (:keywords "chapel" "languages" "oop"))]) (change-inner . [(20150707 844) ((expand-region (0 7))) "Change contents based on semantic units" single ((:commit . "52c543a4b9808c0d15b565fcdf646c9779de33e8") (:keywords "convenience" "extensions"))]) (challenger-deep-theme . [(20171118 437) ((emacs (24))) "challenger-deep Theme" single ((:commit . "08985cc17302f0e90a532fd5d67cfe2429b22444") (:url . "https://github.com/MaxSt/challenger-deep"))]) (cg . [(20171123 301) nil "major mode for editing Constraint Grammar files" single ((:commit . "e19f3bf60b9c8dbcff053b008fa3ace17fc073fe") (:url . "https://visl.sdu.dk/constraint_grammar.html") (:keywords "languages"))]) (cftag-mode . [(20170811 2240) ((emacs (25))) "Emacs mode for editing tag-based CFML files" single ((:commit . "86e77dcbb583191a3e755bdc29534f33d82bfc56") (:url . "https://github.com/am2605/cftag-mode"))]) (cframe . [(20170917 1509) ((emacs (25)) (buffer-manage (0 6)) (dash (2 13 0))) "customize a frame and fast switch size and positions" single ((:commit . "bb99672502046e87c8f029ce98c637f762a4fc54") (:url . "https://github.com/plandes/cframe") (:keywords "frame" "customize"))]) (cfml-mode . [(20170903 1949) ((emacs (25)) (mmm-mode (0 5 4)) (cftag-mode (1 0 0))) "Emacs mode for editing CFML files" single ((:commit . "86e77dcbb583191a3e755bdc29534f33d82bfc56") (:url . "https://github.com/am2605/cfml-mode"))]) (cff . [(20160118 1218) ((cl-lib (0 5)) (emacs (24))) "Search of the C/C++ file header by the source and vice versa" single ((:commit . "b6ab2a28e64ef06f281ec74cfe3114e450644dfa") (:url . "https://github.com/fourier/cff") (:keywords "find-file"))]) (cfengine-code-style . [(20171115 1308) nil "C code style for CFEngine project." single ((:commit . "3f52ffb3276111b68482d90d80f3d93c2ee66d3b") (:url . "https://github.com/cfengine/core"))]) (ceylon-mode . [(20170806 919) ((emacs (25))) "Major mode for editing Ceylon source code" single ((:commit . "1267447a38648502627005bfad0a3aef3572ef7d") (:url . "https://github.com/lucaswerkmeister/ceylon-mode") (:keywords "languages" "ceylon"))]) (cerbere . [(20140418 715) ((s (1 9 0)) (f (0 16 0)) (pkg-info (0 5))) "Unit testing in Emacs for several programming languages" tar ((:commit . "dd2105c372b469954e665a5aa0c3766b4922ce6a") (:url . "https://github.com/nlamirault/cerbere") (:keywords "python" "go" "php" "tests" "tdd"))]) (centimacro . [(20140306 627) nil "Assign multiple macros as global key bindings" single ((:commit . "1b97a9b558ed9c49d5da1bfbf29b2506575c2742") (:url . "https://github.com/abo-abo/centimacro") (:keywords "macros"))]) (centered-window-mode . [(20170528 25) ((emacs (24 4))) "Center the text when there's only one window" single ((:commit . "6f9e873f5a98f356cee41367f2eaf1f5f5cd96fc") (:url . "https://github.com/anler/centered-window-mode") (:keywords "faces" "windows"))]) (centered-cursor-mode . [(20151001 634) nil "cursor stays vertically centered" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/centered-cursor-mode.el") (:keywords "convenience"))]) (celestial-mode-line . [(20171210 1045) ((emacs (24))) "Show lunar phase and sunrise/-set time in modeline" single ((:commit . "018b5eb215be58fbae971d9013599966eaa569dc") (:url . "https://github.com/ecraven/celestial-mode-line") (:keywords "extensions"))]) (celery . [(20170225 124) ((emacs (24)) (dash-functional (2 11 0)) (s (1 9 0)) (deferred (0 3 2))) "a minor mode to draw stats from celery and more?" single ((:commit . "51197d74f5eaa8ae09144af7663a2f4277f07d16") (:url . "https://github.com/ardumont/emacs-celery") (:keywords "celery" "convenience"))]) (cedit . [(20141231 814) nil "paredit-like commands for c-like languages" single ((:commit . "0878d851b6307c162bfbddd2bb02789e5e27bc2c") (:url . "http://hins11.yu-yake.com/"))]) (cdnjs . [(20161031 822) ((dash (2 13 0)) (deferred (0 4)) (f (0 17 2)) (pkg-info (0 5))) "A front end for http://cdnjs.com" single ((:commit . "ce19880d3ec3d81e6c665d0b1dfea99cc7a3f908") (:url . "https://github.com/yasuyk/cdnjs.el") (:keywords "tools"))]) (cdlatex . [(20140707 426) nil "Fast input methods for LaTeX environments and math" single ((:commit . "ff534912b93fc2c7a6b191b1c8d6d699a46bbb01") (:keywords "tex"))]) (cdb . [(20151205 543) nil "constant database (cdb) reader for Emacs Lisp" single ((:commit . "16d156562aef72f02ced58087335ed72d520d878") (:keywords "cdb"))]) (cd-compile . [(20141108 1157) nil "run compile in a specific directory" single ((:commit . "10284ccae86afda4a37b09ba90acd1e2efedec9f"))]) (ccc . [(20151205 543) nil "buffer local cursor color control library" single ((:commit . "16d156562aef72f02ced58087335ed72d520d878") (:url . "https://github.com/skk-dev/ddskk/blob/master/READMEs/README.ccc.org") (:keywords "cursor"))]) (cbm . [(20171116 440) ((cl-lib (0 5))) "Switch to similar buffers." single ((:commit . "5b41c936ba9f6d170309a85ffebc9939c1050b31") (:url . "http://github.com/akermu/cbm.el") (:keywords "buffers"))]) (catmacs . [(20170826 457) ((emacs (24))) "Simple CAT interface for Yaesu Transceivers." single ((:commit . "65d3e0563abe6ff9577202cf2278074d4130fbdd") (:url . "https://bitbucket.org/pymaximus/catmacs") (:keywords "comm" "hardware"))]) (caskxy . [(20140513 839) ((log4e (0 2 0)) (yaxception (0 1))) "Control Cask in Emacs" single ((:commit . "dc18dcab7ed526070ab76de071c9c5272e6ac40e") (:url . "https://github.com/aki2o/caskxy") (:keywords "convenience"))]) (cask-package-toolset . [(20170921 1556) ((emacs (24)) (cl-lib (0 3)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0)) (commander (0 2 0)) (ansi (0 1 0)) (shut-up (0 1 0))) "Toolsettize your package" tar ((:commit . "2c74cd827e88c7f8360581a841e45f0b794510e7") (:url . "http://github.com/AdrieanKhisbe/cask-package-toolset.el") (:keywords "convenience" "tools"))]) (cask-mode . [(20160410 749) ((emacs (24 3))) "major mode for editing Cask files" single ((:commit . "7c6719d3bb4fe552958634bd5a11abc56681f3a7"))]) (cask . [(20170917 1107) ((s (1 8 0)) (dash (2 2 0)) (f (0 16 0)) (epl (0 5)) (shut-up (0 1 0)) (cl-lib (0 3)) (package-build (0 1))) "Cask: Project management for Emacs package development" tar ((:commit . "eea660b78c05d70159067f5be8cd3bddb55df4c5") (:url . "http://github.com/cask/cask") (:keywords "speed" "convenience"))]) (caseformat . [(20160115 815) ((emacs (24)) (cl-lib (0 5)) (dash (2 12 1)) (s (1 10 0))) "Format based letter case converter" single ((:commit . "92a31f6a7cae0b4e2af106cd6f2b0abe6c2d8921") (:url . "https://github.com/HKey/caseformat") (:keywords "convenience"))]) (caroline-theme . [(20160317 2220) ((emacs (24))) "A trip down to New Orleans..." single ((:commit . "222fd483db304509f9e422dc82883d808e023ceb") (:url . "https://github.com/xjackk/carolines-theme"))]) (cargo . [(20171118 132) ((emacs (24 3)) (rust-mode (0 2 0))) "Emacs Minor Mode for Cargo, Rust's Package Manager." tar ((:commit . "ae6b0523a9f3ca035da642913cb72858cb3926e9") (:keywords "tools"))]) (capture . [(20130828 944) nil "screencasting with \"avconv\" or \"ffmpeg\"" tar ((:commit . "1bb26060311da76767f70096218313fc93b0c806"))]) (caml . [(20171209 1232) nil "OCaml code editing commands for Emacs" tar ((:commit . "ca71bda2ac7e5143f58fa9a1693f97e709a91332") (:url . "https://github.com/ocaml/ocaml/") (:keywords "ocaml"))]) (camcorder . [(20160404 2134) ((emacs (24)) (names (20150000)) (cl-lib (0 5))) "Record screencasts in gif or other formats." single ((:commit . "b13d939990e6709492efefc0945798adc1c0fcb9") (:url . "http://github.com/Bruce-Connor/camcorder.el") (:keywords "multimedia" "screencast"))]) (calmer-forest-theme . [(20130925 2210) nil "Darkish theme with green/orange tint" single ((:commit . "87ba7bae389084d13fe3bc34e0c923017eda6ba0") (:url . "https://github.com/caldwell/calmer-forest-theme"))]) (calfw-org . [(20160302 1858) nil "calendar view for org-agenda" single ((:commit . "3415d8673e2b8ce7ab3a76943bb07cda626b6278") (:keywords "calendar" "org"))]) (calfw-ical . [(20150703 119) nil "calendar view for ical format" single ((:commit . "3415d8673e2b8ce7ab3a76943bb07cda626b6278") (:keywords "calendar"))]) (calfw-howm . [(20170703 1704) nil "calendar view for howm" single ((:commit . "3415d8673e2b8ce7ab3a76943bb07cda626b6278") (:keywords "calendar"))]) (calfw-gcal . [(20120111 200) nil "edit Google calendar for calfw.el." tar ((:commit . "14aab20687d6cc9e6c5ddb9e11984c4e14c3d870") (:url . "https://github.com/myuhe/calfw-gcal.el") (:keywords "convenience" "calendar" "calfw.el"))]) (calfw-cal . [(20170320 506) nil "calendar view for emacs diary" single ((:commit . "3415d8673e2b8ce7ab3a76943bb07cda626b6278") (:keywords "calendar"))]) (calfw . [(20170714 840) nil "Calendar view framework on Emacs" single ((:commit . "3415d8673e2b8ce7ab3a76943bb07cda626b6278") (:url . "https://github.com/kiwanami/emacs-calfw") (:keywords "calendar"))]) (calendar-norway . [(20160827 1316) nil "Norwegian calendar" single ((:commit . "8501b2ee515e995f345365391b03f44c812cabdf") (:keywords "calendar" "norwegian" "localization"))]) (cal-china-x . [(20170122 1100) ((cl-lib (0 5))) "Chinese localization, lunar/horoscope/zodiac info and more..." tar ((:commit . "2e9f8e17969a32268fa1c69b500d28590338a98e") (:url . "https://github.com/xwl/cal-china-x"))]) (cake2 . [(20140626 542) ((dash (2 6 0)) (s (1 9 0)) (f (0 16 2)) (ht (2 0)) (json (1 2)) (cake-inflector (1 1 0)) (historyf (0 0 8)) (anything (1 3 9))) "CakePHP2 Minor Mode" tar ((:commit . "caffb646c86333b8747cefeba070d57ac4fbaf00") (:url . "http://code.101000lab.org"))]) (cake-inflector . [(20140415 158) ((s (1 9 0))) "Lazy porting CakePHP infrector.php to el" single ((:commit . "a1d338ec4840b1b1bc14f7f9298c07e2c1d2d8fc") (:url . "https://github.com/k1LoW/emacs-cake-inflector"))]) (cake . [(20140603 2131) ((cake-inflector (1 1 0)) (historyf (0 0 8)) (anything (1 3 9))) "CakePHP Minor Mode" tar ((:commit . "a7c9f3bee71eb3865060123d4d98e5397c2f967e") (:url . "https://github.com/k1LoW/emacs-cake"))]) (cacoo . [(20120319 1659) ((concurrent (0 3 1))) "Minor mode for Cacoo : http://cacoo.com" tar ((:commit . "c9fa04fbe97639b24698709530361c2bb5f3273c"))]) (cache . [(20111019 1600) nil "implementation of a hash table whose key-value pairs expire" single ((:commit . "7499586b6c8224df9f5c5bc4dec96b008258d580"))]) (cabledolphin . [(20160204 138) ((emacs (24 4)) (seq (1 0))) "capture Emacs network traffic" single ((:commit . "fffc192cafa61558e924323d6da8166fe5f2a6f9") (:keywords "comm"))]) (c0-mode . [(20151110 1052) nil "Major mode for editing C0 files" tar ((:commit . "c214093c36864d6208fcb9e6a72413ed17ed5d60") (:url . "http://c0.typesafety.net/") (:keywords "c0" "languages"))]) (c-eldoc . [(20170917 1502) nil "helpful description of the arguments to C functions" single ((:commit . "79d09769362228058246f5e6fa183d121f7fb322") (:url . "http://github.com/nflath/c-eldoc"))]) (c-c-combo . [(20151223 1855) nil "Make stuff happen when you reach a target wpm" tar ((:commit . "a261a833499a7fdc29610863b3aafc74818770ba") (:url . "https://www.github.com/CestDiego/c-c-combo.el"))]) (button-lock . [(20150223 554) nil "Clickable text defined by regular expression" single ((:commit . "f9082feb329432fcf2ac49a95e64bed9fda24d58") (:url . "http://github.com/rolandwalker/button-lock") (:keywords "mouse" "button" "hypermedia" "extensions"))]) (buttercup . [(20171029 1011) nil "Behavior-Driven Emacs Lisp Testing" tar ((:commit . "bbbf6924ff214b518718687ead96ceec92bdbaba"))]) (butler . [(20150811 1708) ((deferred (0 3 2)) (json (1 2)) (emacs (24))) "Emacs client for Jenkins" tar ((:commit . "8ceb35737107572455cca9a61ff46b3ff78f1016"))]) (busybee-theme . [(20170719 228) nil "port of vim's mustang theme" single ((:commit . "66b2315b030582d0ebee605cf455d386d8c30fcd") (:url . "http://github.com/mswift42/busybee-theme"))]) (buster-snippets . [(20151125 210) ((yasnippet (0 8 0))) "Yasnippets for the Buster javascript testing framework" tar ((:commit . "bb8769dae132659858e74d52f3f4e8790399423a") (:keywords "snippets"))]) (buster-mode . [(20140928 513) nil "Minor mode to speed up development when writing tests with Buster.js" single ((:commit . "de6958ef8369400922618b8d1e99abfa91b97ac5") (:keywords "buster" "testing" "javascript"))]) (bury-successful-compilation . [(20150328 1728) nil "Bury the *compilation* buffer after successful compilation" single ((:commit . "52da2c07419beceab9b4d426d76adb3dcf2548d1") (:keywords "compilation"))]) (bundler . [(20160815 215) ((inf-ruby (2 1)) (cl-lib (0 5))) "Interact with Bundler from Emacs" single ((:commit . "f981f67c33b42243e57a78c358dffff70022b56b") (:url . "http://github.com/endofunky/bundler.el") (:keywords "bundler" "ruby"))]) (build-status . [(20171111 1147) ((cl-lib (0 5))) "Mode line build status indicator" single ((:commit . "ef44185d9dd748ea578d68398f3f729a8adb45b5") (:url . "http://github.com/sshaw/build-status") (:keywords "mode-line" "ci" "circleci" "travis-ci"))]) (build-helper . [(20161009 1055) ((projectile (0 9 0))) "Utilities to help build code" single ((:commit . "7a6fe71125a26ed1c492dab77cc688a7fe1d68ac") (:url . "http://github.com/afonso360/build-helper") (:keywords "convenience"))]) (bui . [(20170125 14) ((emacs (24 3)) (dash (2 11 0))) "Buffer interface library" tar ((:commit . "2742bd1cd9e232cac68d5843e05c043827a2669f") (:url . "https://github.com/alezost/bui.el") (:keywords "tools"))]) (bug-reference-github . [(20131202 1303) nil "Automatically set `bug-reference-url-format' in Github repositories." tar ((:commit . "6f693e1f659d9a75abea3f23e95946c7f67138cd") (:url . "https://github.com/arnested/bug-reference-github") (:keywords "programming" "tools"))]) (bufshow . [(20130726 1138) ((emacs (24 1))) "A simple presentation tool for Emacs." single ((:commit . "d60a554e7239e6f7520d9c3436d5ecdbc9cf6957") (:url . "https://github.com/pjones/bufshow"))]) (buffer-watcher . [(20170913 139) ((f (0 16 2)) (cl-lib (0 5))) "Easily run shell scripts per filetype/directory when a buffer is saved" single ((:commit . "b32c67c8a5d724257d759f4c903d0dedc32246ef"))]) (buffer-utils . [(20140512 700) nil "Buffer-manipulation utility functions" single ((:commit . "685b13457e3a2085b7584e41365d2aa0779a1b6f") (:url . "http://github.com/rolandwalker/buffer-utils") (:keywords "extensions"))]) (buffer-stack . [(20101223 220) nil "Enhanced intelligent switch-to-other-buffer replacement." single ((:url . "http://www.sixfingeredman.net/proj/xemacs") (:keywords "buffer" "buffers" "switching buffers"))]) (buffer-sets . [(20170717 2040) ((cl-lib (0 5))) "Sets of Buffers for Buffer Management" single ((:commit . "4a4ccb0d6916c3e9fba737bb7b48e8aac921954e") (:url . "http://github.com/swflint/buffer-sets") (:keywords "buffer-management"))]) (buffer-move . [(20160615 1103) nil "easily swap buffers" single ((:commit . "cb517ecf8409b5fdcda472d7190c6021f0c49751") (:url . "https://github.com/lukhas/buffer-move") (:keywords "lisp" "convenience"))]) (buffer-manage . [(20170916 957) ((emacs (25)) (choice-program (0 3)) (dash (2 13 0))) "manage buffers" tar ((:commit . "4a0d526ca45264971796efe67c6e41d8aa659e4c") (:url . "https://github.com/plandes/buffer-manage") (:keywords "interactive" "buffer" "management"))]) (buffer-flip . [(20160811 713) ((key-chord (20150808))) "Use key-chord to cycle through buffers like Alt-Tab in Windows" single ((:commit . "386067141ca77848b266e068f8c6baf6b4c2ab5b") (:url . "https://github.com/killdash9/buffer-flip.el") (:keywords "convenience"))]) (buffer-buttons . [(20150106 639) nil "Define, save, and load code-safe buttons in files for emacs" single ((:commit . "2feb8494fa7863b98256bc85da670d74a3a8a975") (:url . "https://github.com/rpav/buffer-buttons"))]) (bubbleberry-theme . [(20141017 244) ((emacs (24 1))) "A theme based on LightTable for Emacs24" single ((:commit . "22e9adf4586414024e4592972022ec297321b320") (:url . "https://github.com/jasonm23/emacs-bubbleberry-theme"))]) (bts-github . [(20170401 549) ((bts (0 0 1)) (gh (0 8 2))) "A plugin of bts.el for GitHub" single ((:commit . "ef2cf9202dc2128e5efdb613bfde9276a8cd95ad") (:url . "https://github.com/aki2o/emacs-bts-github") (:keywords "convenience" "git" "github"))]) (bts . [(20151109 533) ((widget-mvc (0 0 2)) (log4e (0 3 0)) (yaxception (0 3 3)) (dash (2 9 0)) (s (1 9 0)) (pos-tip (0 4 5))) "A unified UI for various bug tracking systems" single ((:commit . "df42d58a36447697f93b56e69f5e700b2baef1f9") (:url . "https://github.com/aki2o/emacs-bts") (:keywords "convenience"))]) (btc-ticker . [(20151113 659) ((json (1 2)) (request (0 2 0))) "Shows latest bitcoin price" single ((:commit . "845235b545f070d0812cd1654cbaa4997565824f") (:keywords "news"))]) (bshell . [(20170903 1137) ((emacs (25)) (buffer-manage (0 5))) "manage and track multiple inferior shells" single ((:commit . "884a8b906617d305e9d5d2c3750618d2f86f9aed") (:url . "https://github.com/plandes/bshell") (:keywords "interactive" "shell" "management"))]) (bs-ext . [(20130824 459) nil "Extensions to emacs buffer-selection library (bs.el)" single ((:url . "http://www.emacswiki.org/emacs/download/bs-ext.el") (:keywords "convenience" "files"))]) (browse-url-dwim . [(20140731 1222) ((string-utils (0 3 2))) "Context-sensitive external browse URL or Internet search" single ((:commit . "3d611dbb167c286109ac53995ad68286d87aafb9") (:url . "http://github.com/rolandwalker/browse-url-dwim") (:keywords "hypermedia"))]) (browse-kill-ring . [(20171016 1312) nil "interactively insert items from kill-ring" single ((:commit . "b746d01c888262e81d76f8949869cf9e02759b6a") (:url . "https://github.com/browse-kill-ring/browse-kill-ring") (:keywords "convenience"))]) (browse-kill-ring+ . [(20170221 757) ((browse-kill-ring (0))) "Extensions to `browse-kill-ring.el'." single ((:url . "https://www.emacswiki.org/emacs/download/browse-kill-ring%2b.el") (:keywords "convenience"))]) (browse-at-remote . [(20171115 210) ((f (0 17 2)) (s (1 9 0)) (cl-lib (0 5))) "Open github/gitlab/bitbucket/stash page from Emacs" single ((:commit . "31dcf77d7c89a12f230e2b2332585db2c44530ef") (:keywords "github" "gitlab" "bitbucket" "convenience"))]) (broadcast . [(20151204 1812) ((emacs (24 4))) "Links buffers together for simultaneous editing." single ((:commit . "f6f9cd2e0e3f8c31d6b8e7446c27eb0e50b25f16") (:url . "https://github.com/killdash9/broadcast.el") (:keywords "convenience" "frames" "link" "cursors"))]) (brainfuck-mode . [(20150113 42) ((langdoc (20130601 1450))) "Brainfuck mode for Emacs" single ((:commit . "36e69552bb3b97a4f888d362c59845651bd0d492") (:url . "https://github.com/tom-tan/brainfuck-mode/") (:keywords "brainfuck" "langdoc"))]) (bracketed-paste . [(20160407 1648) ((emacs (24 3))) "bracketed paste mode support within emacs -nw" single ((:commit . "843ce3bbb63d560face889e13a57a2f7543957d5") (:keywords "terminals"))]) (bpr . [(20170930 642) ((emacs (24))) "Background Process Runner" tar ((:commit . "314b0d6f69ff5a9c2d25a1ce5a2109d67d4d9bb3") (:url . "https://github.com/ilya-babanov/emacs-bpr") (:keywords "background" "async" "process" "management"))]) (bpe . [(20141228 1405) ((emacs (24 1))) "Blog from Org mode to Blogger" single ((:commit . "7b5b25f83506e6c9f4075d3803fa32404943a189") (:url . "https://github.com/yuutayamada/bpe") (:keywords "blogger" "blog"))]) (boxquote . [(20170802 417) ((cl-lib (0 5))) "Quote text with a semi-box." single ((:commit . "7e47e0e2853bc1215739b2e28f260e9eed93b2c5") (:url . "https://github.com/davep/boxquote.el") (:keywords "quoting"))]) (boron-theme . [(20170808 608) ((emacs (24 0))) "an Emacs 24 theme based on Boron (tmTheme)" single ((:commit . "87ae1a765e07429fec25d2f29b004f84b52d2e0a") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (borland-blue-theme . [(20160117 521) ((emacs (24 1))) "Blue/yellow theme based on old DOS Borland/Turbo C IDE" single ((:commit . "db74eefebbc89d3c62575f8f50b319e87b4a3470") (:url . "http://github.com/fourier/borland-blue-theme") (:keywords "themes"))]) (boon . [(20170825 416) ((emacs (25 1)) (expand-region (0 10 0)) (dash (2 12 0)) (multiple-cursors (1 3 0))) "Ergonomic Command Mode for Emacs." tar ((:commit . "13fca1929639e2239e9b4be060cbd4befd7921b4"))]) (bool-flip . [(20161215 739) ((emacs (24 3))) "flip the boolean under the point" single ((:commit . "f58a9a7b9ab875bcfbd57c8262697ae404eb4485") (:url . "http://github.com/michaeljb/bool-flip/") (:keywords "boolean" "convenience" "usability"))]) (bookmark+ . [(20170731 1658) nil "Bookmark+: extensions to standard library `bookmark.el'." tar ((:url . "https://www.emacswiki.org/emacs/download/bookmark%2b.el") (:keywords "bookmarks" "bookmark+" "projects" "placeholders" "annotations" "search" "info" "url" "eww" "w3m" "gnus"))]) (boogie-friends . [(20171024 1955) ((cl-lib (0 5)) (dash (2 10 0)) (flycheck (0 23)) (yasnippet (0 9 0 1)) (company (0 8 12))) "A collection of programming modes for Boogie, Dafny, and Z3 (SMTLIB v2)." tar ((:commit . "ff9903783013f3598b6f44c99d47b25c5cdbed00"))]) (bonjourmadame . [(20170919 434) nil "Say \"Hello ma'am!\"" single ((:commit . "d3df185fce78aefa689fded8e56a654f0fde4ac0"))]) (bongo . [(20171118 1842) ((cl-lib (0 5)) (emacs (24 1))) "play music with Emacs" tar ((:commit . "3d246be1e8d14865f5253567ab8fee5d4e9c470c"))]) (bog . [(20161109 1647) ((cl-lib (0 5))) "Extensions for research notes in Org mode" single ((:commit . "88f69fe61955d655b774427ca95ce359f52d5e21") (:url . "https://github.com/kyleam/bog") (:keywords "bib" "outlines"))]) (bnfc . [(20160605 1227) ((emacs (24 3))) "Define context-free grammars for the BNFC tool" single ((:commit . "1b58df1dd0cb9b81900632fb2843a03b94f56fdb") (:url . "https://github.com/jmitchell/bnfc-mode") (:keywords "languages" "tools"))]) (bm . [(20170815 1609) nil "Visible bookmarks in buffer." tar ((:commit . "b1bc10b1e9f01c48a7eedb9b08a22d05e7baed3c") (:url . "https://github.com/joodland/bm") (:keywords "bookmark" "highlight" "faces" "persistent"))]) (blog-minimal . [(20170311 555) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (s (1 11 0)) (org (9 0 3))) "a very simple static site generator based on org mode" tar ((:commit . "d679d74039ecc114b037800c8a94303265b9542a") (:url . "https://github.com/thiefuniverse/blog-minimal") (:keywords "blog" "org"))]) (blog-admin . [(20170923 709) ((ctable (0 1 1)) (s (1 10 0)) (f (0 17 3)) (names (20151201 0)) (cl-lib (0 5))) "Blog admin for emacs with hexo/org-page supported" tar ((:commit . "b5f2e1dad7d68ec903619f7280bb0bcb7e398a1e") (:keywords "tools" "blog" "org" "hexo" "org-page"))]) (blockdiag-mode . [(20160426 2224) ((emacs (24 3))) "Major mode for editing blockdiag files" single ((:commit . "f3b21ba433d60327cebd103ae4492200750e24a9") (:url . "https://github.com/xcezx/xdiag-mode"))]) (bln-mode . [(20170112 527) nil "binary line navigation minor mode for cursor movement in long lines" single ((:commit . "6c20b3269e88952c19ca9ad151221c7e2e27b465") (:url . "https://github.com/mgrachten/bln-mode") (:keywords "motion" "location" "cursor" "convenience"))]) (bliss-theme . [(20170808 607) ((emacs (24 0))) "an Emacs 24 theme based on Bliss (tmTheme)" single ((:commit . "c3cf6d8a666ab26909b7da158f9e94df71a5fbbf") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) (blgrep . [(20150401 716) ((clmemo (20140321 715))) "Block grep" tar ((:commit . "605beda210610a5829750a987f5fcebea97af546") (:keywords "tools" "convenience"))]) (blank-mode . [(20130824 459) nil "minor mode to visualize TAB, (HARD) SPACE, NEWLINE" single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre") (:keywords "data" "wp"))]) (blackboard-theme . [(20161215 2256) ((emacs (24))) "TextMate Blackboard Theme" single ((:commit . "d8b984f2541bb86eb4363a2b4c94631e49843d4a") (:url . "https://github.com/don9z/blackboard-theme"))]) (blackboard-bold-mode . [(20160812 1906) ((cl-lib (0 5))) "Easily insert Unicode mathematical double-struck characters" single ((:commit . "5299cb064ba71baa3e331b8560bf8dd38cbbc4ed") (:url . "https://github.com/grettke/blackboard-bold-mode") (:keywords "unicode" "double struck" "blackboard bold" "math" "mathematical"))]) (bitlbee . [(20151202 1600) nil "Help get Bitlbee (http://www.bitlbee.org) up and running." single ((:commit . "3a92a4119e0c007df2c7dcf1b1c3a5f23ee40e05"))]) (bitbucket . [(20170404 2146) ((emacs (24)) (request (0 1 0)) (s (1 9 0))) "Bitbucket API wrapper" tar ((:commit . "5e663da1bd38a14c1ecf4d66a79d4321ac833bcf") (:url . "http://github.com/tjaartvdwalt/bitbucket.el/") (:keywords "bitbucket"))]) (bitbake . [(20160613 156) ((emacs (24 1)) (dash (2 6 0)) (mmm-mode (0 5 4)) (s (1 10 0))) "Running bitbake from emacs" single ((:commit . "4d9f0a4ffb7b9c6cd4d8271f1b429ca1bb7e9130") (:url . "https://github.com/canatella/bitbake-el") (:keywords "convenience"))]) (bison-mode . [(20160616 2252) nil "Major mode for editing bison, yacc and lex files." single ((:commit . "314af3b7af7eb897fd3932616cb8600a85228cea") (:keywords "bison-mode" "yacc-mode"))]) (birds-of-paradise-plus-theme . [(20130419 1429) nil "A brown/orange light-on-dark theme for Emacs 24 (deftheme)." single ((:commit . "bb9f9d4ef7f7872a388ec4eee1253069adcadb6f") (:url . "https://github.com/jimeh/birds-of-paradise-plus-theme.el") (:keywords "themes"))]) (bing-dict . [(20170604 1831) nil "Minimalists' English-Chinese Bing dictionary" single ((:commit . "d4b261739e53e8ed8fa5db3d3946de82c0ab8e34") (:url . "https://github.com/cute-jumper/bing-dict.el") (:keywords "extensions"))]) (bind-map . [(20161207 711) ((emacs (24 3))) "Bind personal keymaps in multiple locations" single ((:commit . "bf4181e3a41463684adfffc6c5c305b30480e30f") (:url . "https://github.com/justbur/emacs-bind-map"))]) (bind-key . [(20171210 2125) nil "A simple way to manage personal keybindings" single ((:commit . "33e9a4b74042e46161bff70e19b87317b1781fc5") (:url . "https://github.com/jwiegley/use-package") (:keywords "keys" "keybinding" "config" "dotemacs"))]) (bind-chord . [(20171204 1210) ((bind-key (1 0)) (key-chord (0 6))) "key-chord binding helper for use-package-chords" single ((:commit . "8a82221a395619ba325a611b50938f6bbca0ebed") (:url . "https://github.com/waymondo/use-package-chords") (:keywords "convenience" "tools" "extensions"))]) (binclock . [(20170802 416) ((cl-lib (0 5))) "Display the current time using a binary clock." single ((:commit . "87042230d7f3fe3e9a77fae0dbab7d8f7e7794ad") (:url . "https://github.com/davep/binclock.el") (:keywords "games" "time" "display"))]) (bifocal . [(20171004 1124) ((emacs (24 4))) "Split-screen scrolling for comint-mode buffers" single ((:commit . "a8b222b069a6bd64531b4780905989797bad8abe") (:url . "https://github.com/riscy/bifocal-mode") (:keywords "frames" "processes" "tools"))]) (bibtex-utils . [(20170817 1219) nil "Provides utilities for extending BibTeX mode" single ((:commit . "ed5ccce46c2088a28a2f0c49caa679d2f20567f0") (:url . "https://github.com/plantarum/bibtex-utils") (:keywords "bibtex"))]) (bibslurp . [(20151202 1546) ((s (1 6 0)) (dash (1 5 0))) "retrieve BibTeX entries from NASA ADS" single ((:commit . "aeba96368f2a06959e4fe945375ce2a54d34b189") (:url . "https://github.com/mkmcc/bibslurp") (:keywords "bibliography" "nasa ads"))]) (bibretrieve . [(20171125 727) ((auctex (11 87)) (emacs (24 3))) "Retrieve BibTeX entries from the internet" tar ((:commit . "da7b8c49e723e2327ab1d8625824389fb5324a80") (:url . "https://github.com/pzorin/bibretrieve") (:keywords "bibtex" "bibliography" "mathscinet" "arxiv" "zbmath"))]) (biblio-core . [(20160901 1115) ((emacs (24 3)) (let-alist (1 0 4)) (seq (1 11)) (dash (2 12 1))) "A framework for looking up and displaying bibliographic entries" single ((:commit . "a5a68fcf677f286f205f32dc7486f6c9f66aa6af") (:url . "http://github.com/cpitclaudel/biblio.el") (:keywords "bib" "tex" "convenience" "hypermedia"))]) (biblio . [(20161014 1604) ((emacs (24 3)) (biblio-core (0 2))) "Browse and import bibliographic references from CrossRef, arXiv, DBLP, HAL, Dissemin, and doi.org" tar ((:commit . "a5a68fcf677f286f205f32dc7486f6c9f66aa6af"))]) (bfbuilder . [(20150924 950) ((cl-lib (0 3))) "A brainfuck development environment with interactive debugger" single ((:commit . "49560bdef131fa5672dab660e0c62376dbdcd906") (:url . "http://hins11.yu-yake.com/"))]) (bf-mode . [(20130403 742) nil "Browse file persistently on dired" single ((:commit . "7cc4d09aed64d9db6be95646f5f5067de68f8895") (:url . "https://github.com/emacs-jp/bf-mode") (:keywords "convenience"))]) (better-shell . [(20170215 1020) ((emacs (24 4))) "Better shell management" single ((:commit . "4ee06b8791f7363a19109d9ea6c5ee95ce998d33") (:url . "https://github.com/killdash9/better-shell") (:keywords "convenience"))]) (better-registers . [(20140813 119) nil "facilities for more powerful registers" single ((:keywords "register" "macro"))]) (better-defaults . [(20170613 2104) nil "Fixing weird quirks and poor defaults" single ((:commit . "12d9e6dbf24a8a3369b19650d74471b17b27f78d") (:url . "https://github.com/technomancy/better-defaults") (:keywords "convenience"))]) (bert . [(20131117 214) nil "BERT serialization library for Emacs" single ((:commit . "a3eec6980a725aa4abd2019e4c00246450260490") (:keywords "comm" "data"))]) (benchstat . [(20171013 2012) nil "proper benchmarking made simple" single ((:commit . "a5b67cf7972ca2bbc9f5bc6a0f521ab02b76d4f0") (:url . "https://github.com/Quasilyte/benchstat.el") (:keywords "lisp"))]) (benchmark-init . [(20150905 238) nil "Benchmarks Emacs require and load calls" tar ((:commit . "7a0f263282bbc86b01b662636306f22813082647") (:keywords "benchmark"))]) (beginend . [(20171003 548) ((emacs (24 4))) "Redefine M-< and M-> for some modes" single ((:commit . "2762796b54c7fd8613b02c041b2b9afeb13eb9fa") (:url . "https://github.com/DamienCassou/beginend"))]) (beeminder . [(20160209 1903) ((org (7))) "Emacs interface for Beeminder" single ((:commit . "a4e159250bac89bc25ced8523a5eac2a951cd5b6") (:url . "http://www.philnewton.net/code/beeminder-el/") (:keywords "beeminder"))]) (beacon . [(20171017 1540) ((seq (2 14))) "Highlight the cursor whenever the window scrolls" single ((:commit . "729338b02a0e331a4faf475da9f54771a3470106") (:url . "https://github.com/Malabarba/beacon") (:keywords "convenience"))]) (bdo . [(20140126 101) nil "Do things to a browser page from Emacs. BETA!" tar ((:commit . "c96cb6aa9e97fa3491185c50dee0f77a13241010") (:keywords "development"))]) (bbyac . [(20171007 722) ((browse-kill-ring (1 3)) (cl-lib (0 5))) "Type a little Bit, and Bang! You Are Completed." tar ((:commit . "584af0efa4809252bb37cf165df029410198327e") (:url . "https://github.com/baohaojun/bbyac") (:keywords "abbrev"))]) (bbdb2erc . [(20170221 554) ((bbdb (3 0))) "make bbdb show if pal is online with ERC, click i to chat" single ((:commit . "15db2bd29df0f6ee32c499fdeffb960b6a7f97a0") (:keywords "irc" "contacts" "chat" "client" "internet"))]) (bbdb-vcard . [(20150713 1350) ((bbdb (3 0))) "vCard import/export for BBDB" tar ((:commit . "c3aafd4160854a38fd92afcdade32b9a13abe82c") (:url . "http://github.com/vgeddes/bbdb-vcard") (:keywords "data" "calendar" "mail" "news"))]) (bbdb-ext . [(20151220 1213) ((bbdb (2 36))) "Extra commands for BBDB" single ((:commit . "fee97b1b3faa83edaea00fbc5ad3cbca5e791a55") (:url . "https://github.com/vapniks/bbdb-ext") (:keywords "extensions"))]) (bbdb-csv-import . [(20140802 442) ((pcsv (1 3 3)) (dash (2 5 0)) (bbdb (20140412 1949))) "import csv to bbdb version 3+" single ((:commit . "dc9e722d1c1fcd55b71625ee3f05a4921851d186") (:url . "https://gitlab.com/iankelling/bbdb-csv-import") (:keywords "csv" "util" "bbdb"))]) (bbdb . [(20171017 817) nil "The Insidious Big Brother Database for GNU Emacs" tar ((:commit . "339aa15f20e1f542db97a3f3d2d65a61ce5c0e93"))]) (bbdb- . [(20140221 1554) ((bbdb (20140123 1541)) (log4e (0 2 0)) (yaxception (0 1))) "provide interface for more easily search/choice than BBDB." single ((:commit . "2839e84c894de2513af41053e80a277a1b483d22") (:url . "https://github.com/aki2o/bbdb-") (:keywords "bbdb" "news" "mail"))]) (bbcode-mode . [(20141103 1341) nil "Major mode for writing BBCode markup" single ((:commit . "b6ff1bfb8041b1435ebfc0a7d8e5e34eeb1b6aae") (:url . "https://github.com/ejmr/bbcode-mode"))]) (bats-mode . [(20160513 2315) nil "Emacs mode for editing and running Bats tests" single ((:commit . "d519f7c89f5ae17dfc33400596df4564b478315f") (:url . "https://github.com/dougm/bats-mode") (:keywords "bats" "tests"))]) (batch-mode . [(20140807 1350) nil "major mode for editing ESRI batch scrips" single nil]) (basic-theme . [(20160817 127) ((emacs (24))) "Minimalistic light color theme" single ((:commit . "e2a855bd39f4b78296228d4b790f9123156f7d7e") (:url . "http://github.com/fgeller/basic-theme.el") (:keywords "theme" "basic" "minimal" "colors"))]) (basic-mode . [(20171204 1217) ((seq (2 20)) (emacs (24 3))) "major mode for editing BASIC code" single ((:commit . "b7e851f844e9a5264e44936d1675133b4c3ed39c") (:url . "https://github.com/dykstrom/basic-mode") (:keywords "basic" "languages"))]) (basic-c-compile . [(20170302 312) ((cl-lib (0 5)) (f (0 19 0))) "Quickly create a Makefile, compile and run C." single ((:commit . "0129786aeee50d7bb0020d9fc2b7508875d403e8") (:url . "https://github.com/nick96/basic-c-compile") (:keywords "c" "makefile" "compilation" "convenience"))]) (bash-completion . [(20170924 1021) nil "BASH completion for the shell buffer" single ((:commit . "31bc1c1c21691668c6cc16a46361490d5bec303a"))]) (base16-theme . [(20171211 1435) nil "Collection of themes built on combinations of 16 base colors" tar ((:commit . "38123b2542794894c932ee63eb16e485579db1c2") (:url . "https://github.com/belak/base16-emacs"))]) (bar-cursor . [(20160923 920) nil "package used to switch block cursor to a bar" single ((:commit . "afa1d4bc1937610cc30575d71aab85ea20ebf2ea") (:url . "https://github.com/ajsquared/bar-cursor") (:keywords "files"))]) (badwolf-theme . [(20161004 15) ((emacs (24))) "Bad Wolf color theme" single ((:commit . "ea01a3d9358e968f75e3ed15dec6a2a96ce3d9a1") (:url . "https://github.com/bkruczyk/badwolf-emacs") (:keywords "themes"))]) (badger-theme . [(20140716 1932) nil "A dark theme for Emacs 24." single ((:commit . "80fb9f8ace37b2e8807da639f7da499a53ffefd4") (:url . "https://github.com/ccann/badger-theme"))]) (backward-forward . [(20161228 2150) ((emacs (24 5))) "navigation backwards and forwards across marks" single ((:commit . "58489957a62a0da25dfb5df902624d2548d800b4") (:url . "https://gitlab.com/vancan1ty/emacs-backward-forward/tree/master") (:keywords "navigation" "convenience" "backward" "forward"))]) (backup-walker . [(20130720 816) nil "quickly traverse all backups of a file" single ((:commit . "934a4128c122972ac32bb9952addf279a60a94da") (:url . "https://github.com/lewang/backup-walker") (:keywords "backup"))]) (backup-each-save . [(20130704 732) nil "backup each savepoint of a file" single nil]) (back-button . [(20150804 1304) ((nav-flash (1 0 0)) (smartrep (0 0 3)) (ucs-utils (0 7 2)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Visual navigation through mark rings" single ((:commit . "98d92984a740acd1547bd7ed05cca0affdb21c3e") (:url . "http://github.com/rolandwalker/back-button") (:keywords "convenience" "navigation" "interface"))]) (babel-repl . [(20160504 1501) ((emacs (24))) "Run babel REPL" single ((:commit . "e619c16e349a1ee7bd0ee0d7f3650d33bff73fc3") (:url . "https://github.com/hung-phan/babel-repl/") (:keywords "babel" "javascript" "es6"))]) (babel . [(20161122 2340) nil "interface to web translation services such as Babelfish" single ((:commit . "d4212e25fcbd22b8e38be13936f937a2963d34a9") (:url . "http://github.com/juergenhoetzel/babel") (:keywords "translation" "web"))]) (axiom-environment . [(20171111 1152) ((emacs (24 2))) "An environment for using Axiom/OpenAxiom/FriCAS" tar ((:commit . "b4f0fa9cd013e107d2af8e2ebedff8a7f40be7b5") (:keywords "axiom" "openaxiom" "fricas"))]) (aws-ec2 . [(20161007 1214) ((emacs (24 4)) (dash (2 12 1)) (tblui (0 1 0))) "Manage AWS EC2 instances" single ((:commit . "5601d4f268fc34b86a02ca90cde7d3771619a368") (:url . "https://github.com/Yuki-Inoue/aws.el"))]) (awk-it . [(20130917 1148) nil "Run AWK interactively on region!" single ((:keywords "awk"))]) (avy-zap . [(20160921 1444) ((avy (0 2 0))) "Zap to char using `avy'" single ((:commit . "6081738668ab726099ce1c711c580d9745dfaede") (:url . "https://github.com/cute-jumper/avy-zap") (:keywords "extensions"))]) (avy-migemo . [(20171031 915) ((emacs (24 4)) (avy (0 4 0)) (migemo (1 9))) "avy with migemo" tar ((:commit . "5598fd25e483d8521e6d5f691802fa125947d7cf") (:url . "https://github.com/momomo5717/avy-migemo") (:keywords "avy" "migemo"))]) (avy-menu . [(20170518 2245) ((emacs (24 3)) (avy (0 3 0))) "Library providing avy-powered popup menu" single ((:commit . "c36e28cabbcea8fdd2ada723b9a28ecc35a2d6c0") (:url . "https://github.com/mrkkrp/avy-menu") (:keywords "popup" "menu"))]) (avy-flycheck . [(20160720 800) ((emacs (24 1)) (flycheck (0 14)) (seq (1 11)) (avy (0 4 0))) "Jump to and fix syntax errors using `flycheck' with `avy' interface" single ((:commit . "5522f3bbbed1801d9278ed696ec0cbba38352985") (:url . "https://github.com/magicdirac/avy-flycheck") (:keywords "tools" "convenience" "avy" "flycheck"))]) (avy . [(20171211 923) ((emacs (24 1)) (cl-lib (0 5))) "Jump to arbitrary positions in visible text and select text quickly." single ((:commit . "869261ae812723c0c6549202734a4135c3474ec1") (:url . "https://github.com/abo-abo/avy") (:keywords "point" "location"))]) (avk-emacs-themes . [(20171206 258) nil "Collection of avk themes" tar ((:commit . "9664858d7f34a9072e35c579bf2fc26d5d1404c4") (:url . "https://github.com/avkoval/avk-emacs-themes"))]) (avandu . [(20170101 1103) nil "Gateway to Tiny Tiny RSS" tar ((:commit . "f44588d8e747fa880411cb4542cc39962252b90a") (:keywords "net"))]) (autumn-light-theme . [(20150515 747) nil "A light color theme with muted, autumnal colors." single ((:commit . "1e3b2a43a3001e4a97a5ff073ba3f0d2ea3888f9") (:url . "http://github.com/aalpern/emacs-color-theme-autumn-light") (:keywords "color" "theme"))]) (autothemer . [(20170112 1324) ((dash (2 10 0)) (emacs (24)) (cl-lib (0 5))) "Conveniently define themes." single ((:commit . "8c467f57571c154129d660dfccebd151c998f2d9") (:url . "https://github.com/sebastiansturm/autothemer"))]) (autotetris-mode . [(20141114 846) ((cl-lib (0 5))) "automatically play tetris" single ((:commit . "dd490d5ad6d84bd964ab349484f6a2d05651ede1") (:url . "https://github.com/skeeto/autotetris-mode"))]) (autotest . [(20171128 1812) nil "ZenTest's autotest integration with emacs." single ((:commit . "c1b59448e103e32202423a56c873967033778a92") (:url . "https://github.com/zenspider/elisp/blob/master/autotest.el") (:keywords "testing" "ruby" "convenience"))]) (autopair . [(20160304 437) ((cl-lib (0 3))) "Automagically pair braces and quotes like TextMate" single ((:commit . "2b6d72bccb0ebba6e7e711528872b898b0c65b0a") (:url . "https://github.com/capitaomorte/autopair") (:keywords "convenience" "emulations"))]) (automargin . [(20131112 14) nil "add margins to windows not-splitted, and center them" single ((:commit . "4901d969ad69f5244e6300baab4ba04efed800c3") (:url . "http://hins11.yu-yake.com/"))]) (autofit-frame . [(20170221 752) ((fit-frame (0))) "Automatically resize one-window frames to fit" single ((:url . "https://www.emacswiki.org/emacs/download/autofit-frame.el") (:keywords "internal" "extensions" "convenience" "local"))]) (autodisass-llvm-bitcode . [(20150410 1825) nil "Automatically disassemble LLVM bitcode" tar ((:commit . "d2579e3a1427af2dc947c343e49eb3434078bf04"))]) (autodisass-java-bytecode . [(20151005 912) nil "Automatically disassemble Java bytecode" tar ((:commit . "3d61dbe266133c950b39e880f78d142751c7dc4c"))]) (autobookmarks . [(20171021 1532) ((dash (2 10 0)) (cl-lib (0 5))) "Save recently visited files and buffers" single ((:commit . "b40c69f2d1c419adad516bee81b07b99110e5cc3") (:keywords "files"))]) (auto-yasnippet . [(20160925 225) ((yasnippet (0 8 0))) "Quickly create disposable yasnippets" single ((:commit . "d1ccfea87312c6dd8cf8501ab5b71b1d3d44d95b") (:url . "https://github.com/abo-abo/auto-yasnippet"))]) (auto-virtualenvwrapper . [(20170916 1304) ((cl-lib (0 6)) (s (1 10 0)) (virtualenvwrapper (0))) "Lightweight auto activate python virtualenvs" single ((:commit . "0f2cc8ea8f211c7b88f852ae6ffe677914652b92") (:keywords "python" "virtualenv" "tools"))]) (auto-virtualenv . [(20170125 1117) ((cl-lib (0 5)) (pyvenv (1 9)) (s (1 10 0))) "Auto activate python virtualenvs" single ((:commit . "3826db66b417788e2b2eb138717255b1f52a55c3") (:url . "http://github.com/marcwebbie/auto-virtualenv") (:keywords "python" "virtualenv" "tools"))]) (auto-shell-command . [(20160603 1938) ((deferred (20130312)) (popwin (20130329))) "Run the shell command asynchronously that you specified when you save the file." single ((:commit . "454b75a07b663095334381d5bf5625c7f136f743") (:keywords "shell" "save" "async" "deferred" "auto"))]) (auto-save-buffers-enhanced . [(20161108 2310) nil "Automatically save buffers in a decent way" single ((:commit . "461e8c816c1b7c650be5f209078b381fe55da8c6"))]) (auto-read-only . [(20170305 2043) ((cl-lib (0 5))) "Automatically make the buffer to read-only" single ((:commit . "79654f8fc024f383ae7af05487c1345738236500") (:url . "https://github.com/zonuexe/auto-read-only.el") (:keywords "files" "convenience"))]) (auto-pause . [(20160426 516) ((emacs (24 4))) "Run processes which will be paused when Emacs is idle" single ((:commit . "a4d778de774ca3895542cb559a953e0d98657338") (:url . "https://github.com/lujun9972/auto-pause") (:keywords "convenience" "menu"))]) (auto-package-update . [(20170803 1005) ((emacs (24 4)) (dash (2 1 0))) "Automatically update Emacs packages." single ((:commit . "0b296970d09d7deb7f780cb041fcbc313d39aa5d") (:url . "http://github.com/rranelli/auto-package-update.el") (:keywords "package" "update"))]) (auto-org-md . [(20160923 708) ((org (8 0)) (emacs (24 4))) "export a markdown file automatically when you save an org-file" single ((:commit . "7604c06c1b2f1d01c2e88f114bb0d2d00f21dabb") (:url . "https://github.com/jamcha-aa/auto-org-md") (:keywords "org" "markdown"))]) (auto-minor-mode . [(20170917 1437) ((emacs (25))) "Enable minor modes by file name and contents" single ((:commit . "07ea9df59c5364d1938beef3dfbba24afd46c230") (:url . "https://github.com/joewreschnig/auto-minor-mode") (:keywords "convenience"))]) (auto-install . [(20150418 1702) nil "Auto install elisp file" single ((:url . "http://www.emacswiki.org/emacs/download/auto-install.el") (:keywords "auto-install"))]) (auto-indent-mode . [(20161118 1458) nil "Auto indent Minor mode" tar ((:commit . "7e939f3a7b092c6c32c97d63fd88aef6cc355cdb") (:url . "https://github.com/mlf176f2/auto-indent-mode.el/") (:keywords "auto" "indentation"))]) (auto-highlight-symbol . [(20130313 243) nil "Automatic highlighting current symbol minor mode" single ((:commit . "26573de912d760e04321b350897aea70958cee8b") (:url . "http://github.com/gennad/auto-highlight-symbol/raw/master/auto-highlight-symbol.el") (:keywords "highlight" "face" "match" "convenience"))]) (auto-dim-other-buffers . [(20170925 1208) nil "Makes non-current buffers less prominent" single ((:commit . "d1ee176652d7f5a77608e54175b7e67c31d41381") (:url . "https://github.com/mina86/auto-dim-other-buffers.el"))]) (auto-dictionary . [(20150410 910) nil "automatic dictionary switcher for flyspell" single ((:commit . "b364e08009fe0062cf0927d8a0582fad5a12b8e7") (:url . "http://nschum.de/src/emacs/auto-dictionary/") (:keywords "wp"))]) (auto-complete-sage . [(20160514 51) ((auto-complete (1 5 1)) (sage-shell-mode (0 1 0))) "An auto-complete source for sage-shell-mode." single ((:commit . "51b8e3905196d266e1f8aa47881189833151b398") (:url . "https://github.com/stakemori/auto-complete-sage") (:keywords "sage" "math" "auto-complete"))]) (auto-complete-rst . [(20140225 144) ((auto-complete (1 4))) "Auto-complete extension for ReST and Sphinx" tar ((:commit . "4803ce41a96224e6fa54e6741a5b5f40ebed7351") (:url . "https://github.com/tkf/auto-complete-rst"))]) (auto-complete-pcmp . [(20140226 2251) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "Provide auto-complete sources using pcomplete results" single ((:commit . "2595d3dab1ef3549271ca922f212928e9d830eec") (:url . "https://github.com/aki2o/auto-complete-pcmp") (:keywords "completion"))]) (auto-complete-nxml . [(20140220 2058) ((auto-complete (1 4))) "do completion by auto-complete.el on nXML-mode" single ((:commit . "ac7b09a23e45f9bd02affb31847263de4180163a") (:url . "https://github.com/aki2o/auto-complete-nxml") (:keywords "completion" "html" "xml"))]) (auto-complete-exuberant-ctags . [(20140320 24) ((auto-complete (1 4 0))) "Exuberant ctags auto-complete.el source" single ((:commit . "ff6121ff8b71beb5aa606d28fd389c484ed49765") (:url . "http://code.101000lab.org") (:keywords "anto-complete" "exuberant ctags"))]) (auto-complete-distel . [(20160815 2300) ((auto-complete (1 4)) (distel-completion-lib (1 0 0))) "Erlang/distel completion backend for auto-complete-mode" single ((:commit . "2ba4eea51cecfa75cf62f58180460ee9ff43131f") (:url . "github.com/sebastiw/distel-completion") (:keywords "erlang" "distel" "auto-complete"))]) (auto-complete-clang-async . [(20130526 814) nil "Auto Completion source for clang for GNU Emacs" single ((:commit . "5d9c5cabbb6b31e0ac3637631c0c8b25184aa8b4") (:keywords "completion" "convenience"))]) (auto-complete-clang . [(20140409 52) ((auto-complete (1 3 1))) "Auto Completion source for clang for GNU Emacs" single ((:commit . "a195db1d0593b4fb97efe50885e12aa6764d998c") (:url . "https://github.com/brianjcj/auto-complete-clang") (:keywords "completion" "convenience"))]) (auto-complete-chunk . [(20140225 146) ((auto-complete (1 4))) "Auto-completion for dot.separated.words." single ((:commit . "a9aa77ffb84a1037984a7ce4dda25074272f13fe") (:url . "https://github.com/tkf/auto-complete-chunk"))]) (auto-complete-c-headers . [(20150911 2023) ((auto-complete (1 4))) "An auto-complete source for C/C++ header files" single ((:commit . "52fef720c6f274ad8de52bef39a343421006c511") (:keywords "c"))]) (auto-complete-auctex . [(20140223 958) ((yasnippet (0 6 1)) (auto-complete (1 4))) "auto-completion for auctex" single ((:commit . "855633f668bcc4b9408396742a7cb84e0c4a2f77"))]) (auto-complete . [(20170124 1845) ((popup (0 5 0)) (cl-lib (0 5))) "Auto Completion for GNU Emacs" tar ((:commit . "2e83566ddfa758c69afe50b8a1c62a66f47471e3"))]) (auto-compile . [(20170817 1437) ((emacs (24 3)) (packed (2 0 0))) "automatically compile Emacs Lisp libraries" single ((:commit . "a31819a1b75a2320edb0f7f25d6c6faf528bf41a") (:url . "https://github.com/emacscollective/auto-compile") (:keywords "compile" "convenience" "lisp"))]) (auto-capitalize . [(20160415 1403) nil "Automatically capitalize (or upcase) words" single ((:keywords "text" "wp" "convenience rcs $id: auto-capitalize.el" "v 2.21 2016/04/15 18:47:22 oub exp $"))]) (auto-auto-indent . [(20131106 1103) ((es-lib (0 1)) (cl-lib (1 0))) "Indents code as you type" single ((:commit . "0139378577f936d34b20276af6f022fb457af490") (:url . "https://github.com/sabof/auto-auto-indent"))]) (auto-async-byte-compile . [(20160915 2154) nil "Automatically byte-compile when saved" single ((:commit . "8681e74ddb8481789c5dbb3cafabb327db4c4484") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/auto-async-byte-compile.el") (:keywords "lisp" "convenience"))]) (auth-password-store . [(20171109 1045) ((emacs (24 4)) (password-store (0 1)) (seq (1 9)) (cl-lib (0 5))) "Integrate auth-source with password-store" single ((:commit . "57c4bb749eb0fad9188c870098a61b03af346b75") (:keywords "pass" "password-store" "auth-source" "username" "password" "login"))]) (aurel . [(20170114 137) ((emacs (24 3)) (bui (1 1 0)) (dash (2 11 0))) "Search, get info, vote for and download AUR packages" single ((:commit . "fc7ad208f43f8525f84a18941c9b55f956df8961") (:url . "https://github.com/alezost/aurel") (:keywords "tools"))]) (audio-notes-mode . [(20170611 1459) nil "Play audio notes synced from somewhere else." single ((:commit . "fa38350829c7e97257efc746a010471d33748a68") (:url . "http://github.com/Bruce-Connor/audio-notes-mode") (:keywords "hypermedia" "convenience"))]) (auctex-lua . [(20151121 810) ((auctex (11 86)) (lua-mode (20130419))) "Lua editing support for AUCTeX" single ((:commit . "799cd8ac10c96991bb63d9aa60528ae5d8c786b5") (:url . "http://github.com/vermiculus/auctex-lua") (:keywords "latex" "lua"))]) (auctex-latexmk . [(20170618 936) ((auctex (11 87))) "Add LatexMk support to AUCTeX" single ((:commit . "4d353522650d7685acbf1d38f7dbc504f734bd84") (:url . "https://github.com/tom-tan/auctex-latexmk/") (:keywords "tex"))]) (atomic-chrome . [(20171116 2332) ((emacs (24 3)) (let-alist (1 0 4)) (websocket (1 4))) "Edit Chrome text area with Emacs using Atomic Chrome" single ((:commit . "7dd8a45ebccb9b5bbbfd2e822bd914b38dad6008") (:url . "https://github.com/alpha22jp/atomic-chrome") (:keywords "chrome" "edit" "textarea"))]) (atom-one-dark-theme . [(20170803 916) nil "Atom One Dark color theme" single ((:commit . "6ad96e25f8b46942380afbc33e3659a5e9fa09b1") (:url . "https://github.com/jonathanchu/atom-one-dark-theme"))]) (atom-dark-theme . [(20170710 1612) nil "An Emacs port of the Atom Dark theme from Atom.io." single ((:commit . "7fb37fd953e417acbcf7dd3f36e3167bed9bc887") (:url . "https://github.com/whitlockjc/atom-dark-theme-emacs") (:keywords "themes" "atom" "dark"))]) (async-await . [(20170208 350) ((emacs (25)) (promise (1 0))) "Async/Await" single ((:commit . "56ab90e4019ed1f81fd4ad9e8701b5cec7ffa795") (:url . "https://github.com/chuntaro/emacs-async-await") (:keywords "async" "await" "convenience"))]) (async . [(20171015 2239) nil "Asynchronous processing in Emacs" tar ((:commit . "424ecd8a28cd59fe7d2de3cb4b37a4224e34c123") (:keywords "async") (:url . "https://github.com/jwiegley/emacs-async"))]) (assess . [(20170504 657) ((emacs (24 1)) (m-buffer (0 15))) "Test support functions" tar ((:commit . "e5b0415126c6bd24bd220759ff04220d963a0195"))]) (asn1-mode . [(20170728 1926) ((emacs (24 3)) (s (1 10 0))) "ASN.1/GDMO mode for GNU Emacs" single ((:commit . "d5d4a8259daf708411699bcea85d322f18beb972") (:url . "https://github.com/kawabata/asn1-mode/") (:keywords "languages" "processes" "tools"))]) (asilea . [(20150105 725) ((emacs (24)) (cl-lib (0 5))) "Find best compiler options using simulated annealing" single ((:commit . "2aab1cc63b64ef08d12e84fd7ba5c94065f6039f") (:url . "https://github.com/Fanael/asilea"))]) (ascii . [(20130824 500) nil "ASCII code display." single ((:url . "http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre") (:keywords "data" "ascii"))]) (arview . [(20160419 1409) nil "extract and view archives in the temporary directory" single ((:commit . "5437b4221b64b238c273a651d4792c577dba6d45") (:url . "https://github.com/afainer/arview") (:keywords "files"))]) (artbollocks-mode . [(20170523 2122) nil "Improve your writing (especially about art)" single ((:commit . "4a907e470bf345b88c3802c1241ce2b8cf4123ee") (:url . "https://github.com/sachac/artbollocks-mode"))]) (arjen-grey-theme . [(20170522 1347) nil "A soothing dark grey theme" single ((:commit . "4cd0be72b65d42390e2105cfdaa408a1ead8d8d1") (:url . "https://github.com/credmp/arjen-grey") (:keywords "faces"))]) (ariadne . [(20131117 911) ((bert (0 1))) "Ariadne plugin for Emacs" single ((:commit . "6fe401c7f996bcbc2f685e7971324c6f5e5eaf15") (:keywords "comm" "convenience" "processes"))]) (aria2 . [(20141107 1517) ((emacs (24 4))) "Control aria2c commandline tool from Emacs" single ((:commit . "3c54254e424c6c8b4eb0d8e7c4907b094c27a3f0") (:url . "https://bitbucket.org/ukaszg/aria2-mode") (:keywords "download" "bittorrent" "aria2"))]) (arduino-mode . [(20151017 2335) nil "Major mode for the Arduino language" single ((:commit . "3e2bad4569ad26e929e6db2cbcff0d6d36812698") (:keywords "languages" "arduino"))]) (archive-rpm . [(20171016 112) ((emacs (24 4))) "RPM and CPIO support for archive-mode" tar ((:commit . "e2fac6c018c19001f1f28e7c80721724684f8941"))]) (archive-region . [(20140201 1542) nil "Move region to archive file instead of killing" single ((:commit . "0d357d4c42a6a248c457f358f81b20fd20fede2f") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/archive-region.el") (:keywords "languages"))]) (arch-packer . [(20170730 621) ((emacs (25 1)) (s (1 11 0)) (async (1 9 2)) (dash (2 12 0))) "Arch Linux package management frontend" single ((:commit . "940e96f7d357c6570b675a0f942181c787f1bfd7") (:url . "https://github.com/brotzeitmacher/arch-packer"))]) (apu . [(20170221 750) nil "Apropos Unicode characters." single ((:url . "https://www.emacswiki.org/emacs/download/apu.el") (:keywords "unicode" "characters" "encoding" "commands" "ucs-names"))]) (apt-sources-list . [(20171004 1143) ((emacs (24 4))) "Mode for editing APT source.list files" single ((:commit . "842c3896f660295e4c16938aa1fd195e5d377460") (:url . "https://git.korewanetadesu.com/apt-sources-list.git"))]) (apropospriate-theme . [(20171010 1420) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name." tar ((:commit . "b4d5a2fedec176d3562943668609766fab0b23ff") (:keywords "color" "theme") (:url . "https://github.com/waymondo/apropospriate-theme"))]) (apropos-fn+var . [(20170221 748) nil "Apropos for functions and variables" single ((:url . "https://www.emacswiki.org/emacs/download/apropos-fn%2bvar.el") (:keywords "apropos"))]) (aproject . [(20150605 206) nil "Basic project framework for Emacs" tar ((:commit . "3c7d23c341862dfd77fd0a64775df12ddb44ab54") (:url . "https://github.com/vietor/aproject") (:keywords "environment" "project"))]) (applescript-mode . [(20120205 307) nil "Major mode for editing AppleScript source" single ((:keywords "applescript" "languages"))]) (apples-mode . [(20110120 2018) nil "Major mode for editing and executing AppleScript code" tar ((:commit . "83a9ab0d6ba82496e2f7df386909b1a55701fccb") (:keywords "applescript" "languages"))]) (apiwrap . [(20171202 1653) ((emacs (25))) "api-wrapping macros" single ((:commit . "5363671b6a8fe8ecd4674497664974e089b2b035") (:url . "https://github.com/vermiculus/apiwrap.el") (:keywords "tools" "maint" "convenience"))]) (apib-mode . [(20170520 658) ((markdown-mode (2 1))) "Major mode for API Blueprint files" single ((:commit . "6cc7c6f21b8e415b1718bb6a07ab2182e9e9dde6") (:url . "http://github.com/w-vi/apib-mode") (:keywords "tools" "api-blueprint"))]) (apel . [(20170122 1458) nil "APEL (A Portable Emacs Library) provides support for portable Emacs Lisp programs" tar ((:commit . "339eb28ffae3165255a79de9b1fd362f43cd37c3"))]) (apache-mode . [(20170711 913) nil "major mode for editing Apache configuration files" single ((:commit . "0906559e0cb2997405d98ea6b2195954e3935d3b") (:keywords "languages" "faces"))]) (aozora-view . [(20140310 617) nil "Aozora Bunko text Emacs viewer." tar ((:commit . "b0390616d19e45f15f9a2f5d5688274831e721fd") (:url . "https://github.com/kawabata/aozora-view") (:keywords "text"))]) (aok . [(20130824 427) nil "various useful ways to do `multi-occur'" single nil]) (anzu . [(20161017 907) ((emacs (24 3))) "Show number of matches in mode-line while searching" single ((:commit . "e6c56ca8b23ac433f7be58b6f3f50801dd4164e4") (:url . "https://github.com/syohex/emacs-anzu"))]) (anything-tramp . [(20171208 2032) ((emacs (24 3)) (anything (1 0))) "Tramp with anything for ssh and docker and vagrant" single ((:commit . "21b585dca5c1a6d0e36881b2166cf18a4e7c2a4a") (:url . "https://github.com/masasam/emacs-anything-tramp"))]) (anything-sage . [(20141005 413) ((cl-lib (0 5)) (anything (1 3 9)) (sage-shell-mode (0 0 1))) "An anything extension for sage-shell-mode." single ((:commit . "370b4248935dd4527127954788a028399644f578") (:url . "https://github.com/stakemori/anything-sage") (:keywords "sage" "math" "anything"))]) (anything-replace-string . [(20140317 336) ((anything (1 3 9))) "`replace-string' and `query-replace' `anything.el' interface" single ((:commit . "1962f24243d6013bcef7e8d23136277d42e13130") (:url . "http://code.101000lab.org"))]) (anything-prosjekt . [(20140129 4) ((prosjekt (0 3)) (anything (0))) "Anything integration for prosjekt." single ((:commit . "a864a8be5842223043702395f311e3350c28e9db") (:url . "https://github.com/abingham/prosjekt"))]) (anything-milkode . [(20140518 743) ((milkode (0 3)) (anything (1 3 9))) "Command line search with Milkode" single ((:commit . "d6b2be13a351c41793e9cc13c1320953939d3ac9") (:keywords "milkode" "anything" "search" "grep" "jump" "keyword"))]) (anything-git-grep . [(20130608 1940) ((anything (1 3 9))) "anything for git grep" tar ((:commit . "6ee26e68bb8ec23ffacf5c5f9698c451a4bc905c") (:url . "https://github.com/mechairoi/anything-git-grep") (:keywords "anything" "git"))]) (anything-git-files . [(20130609 243) ((anything (1 3 9))) "anything for git files" single ((:commit . "efeec4f8001e2a95f36a9c31181bb30f7561015c") (:keywords "anything" "git"))]) (anything-exuberant-ctags . [(20140316 1637) ((anything (1 3 9))) "Exuberant ctags anything.el interface" single ((:commit . "8ed688fd526751e044435bb77135f5315c8167e5") (:url . "http://code.101000lab.org") (:keywords "anything" "exuberant ctags"))]) (anything . [(20170125 1710) nil "open anything / QuickSilver-like candidate-selection framework" tar ((:commit . "9e2259fc779eef1a3e947e74cc7d301d1cea0ca6") (:url . "http://repo.or.cz/w/anything-config.git") (:keywords "files" "frames" "help" "matching" "outlines"))]) (anyins . [(20131229 241) nil "Insert content at multiple places from shell command or kill-ring" single ((:commit . "83844c17ac9b5b6c7655ee556b75689e4c8ea663") (:url . "http://github.com/antham/anyins") (:keywords "insert" "rectangular"))]) (anybar . [(20160816 721) nil "Control AnyBar from Emacs" single ((:commit . "7a0743e0d31bcb36ab1bb2e351f3e7139c422ac5") (:keywords "anybar"))]) (anx-api . [(20140208 714) nil "Interact with the AppNexus API from Emacs." single ((:commit . "b2411ebc966ac32c3ffc61bc22bf183834df0fa0") (:keywords "convenience" "json" "rest" "api" "appnexus"))]) (anti-zenburn-theme . [(20160725 1559) nil "Low-contrast Zenburn-inverted theme" single ((:commit . "164122ebb7a39c41b953e90fe05cf440c5335d9e") (:url . "https://github.com/m00natic/anti-zenburn-theme"))]) (ant . [(20160211 743) nil "helpers for compiling with ant" single ((:commit . "510b5a3f57ee4b2855422d88d359a28922c1ab70") (:keywords "compilation" "ant" "java"))]) (ansible-vault . [(20170111 1318) ((emacs (24 3))) "Minor mode for editing ansible vault files" single ((:commit . "71d1df3b1c2d1569b6c3091a9d54baf2ebc7019d") (:url . "http://github.com/zellio/ansible-vault-mode") (:keywords "ansible" "ansible-vault" "tools"))]) (ansible-doc . [(20160924 124) ((emacs (24 3))) "Ansible documentation Minor Mode" single ((:commit . "86083a7bb2ed0468ca64e52076b06441a2f8e9e0") (:url . "https://github.com/lunaryorn/ansible-doc.el") (:keywords "tools" "help"))]) (ansible . [(20170926 1951) ((s (1 9 0)) (f (0 16 2))) "Ansible minor mode" tar ((:commit . "9da54a2a426dca259ec9c2a8a60fb58e954be5bc") (:url . "http://101000lab.org"))]) (ansi . [(20150703 126) ((s (1 6 1)) (dash (1 5 0))) "Turn string into ansi strings" single ((:commit . "12b4c5d91b3da1902838f421e5af6d40e2cd57dd") (:url . "http://github.com/rejeep/ansi") (:keywords "color" "ansi"))]) (annoying-arrows-mode . [(20161023 2346) ((cl-lib (0 5))) "Ring the bell if using arrows too much" single ((:commit . "3c42e9807d7696da2da2a21b63beebf9cdb3f5dc"))]) (annotate-depth . [(20160520 1340) nil "Annotate buffer if indentation depth is beyond threshold." single ((:commit . "fcb24fa36287250e40d195590c4ca4a8a696277b") (:url . "https://github.com/netromdk/annotate-depth") (:keywords "convenience"))]) (annotate . [(20171110 2336) nil "annotate files without changing them" single ((:commit . "dedbd9e5d5286f1ca8ad73e489d408a20f06156c") (:url . "https://github.com/bastibe/annotate.el"))]) (angular-snippets . [(20140513 2223) ((s (1 4 0)) (dash (1 2 0))) "Yasnippets for AngularJS" tar ((:commit . "af5ae0a4a8603b040446c28afcf6ca01a8b4bd7b"))]) (angular-mode . [(20151201 1327) nil "Major mode for Angular.js" tar ((:commit . "8720cde86af0f1859ccc8580571e8d0ad1c52cff") (:url . "https://github.com/omouse/angularjs-mode") (:keywords "languages" "javascript"))]) (angry-police-captain . [(20120829 552) nil "Show quote from http://theangrypolicecaptain.com in the minibuffer" single ((:commit . "d11931c5cb63368dcc4a48797962428cca6d3e9d") (:keywords "games" "web" "fun"))]) (android-mode . [(20170323 115) nil "Minor mode for Android application development" single ((:commit . "f274da87429617b0b9c5889d46b36de64d982da4") (:url . "https://github.com/remvee/android-mode") (:keywords "tools" "processes"))]) (anchored-transpose . [(20080904 2254) nil "Transposes a phrase around an anchor phrase" single ((:keywords "tools" "convenience"))]) (anaphora . [(20140728 1536) nil "anaphoric macros providing implicit temp variables" single ((:commit . "ed99ad4502e6fccde76050496984c6454676a410") (:url . "http://github.com/rolandwalker/anaphora") (:keywords "extensions"))]) (anaconda-mode . [(20170924 704) ((emacs (24)) (pythonic (0 1 0)) (dash (2 6 0)) (s (1 9)) (f (0 16 2))) "Code navigation, documentation lookup and completion for Python" single ((:commit . "89fc16d50b889a17521084347b28f3011b84e113") (:url . "https://github.com/proofit404/anaconda-mode"))]) (amx . [(20170923 835) ((emacs (24 4))) "Alternative M-x with extra features." single ((:commit . "88ab7ccb2a88b5cd3ecc4d703ae9373df3e4971c") (:url . "http://github.com/DarwinAwardWinner/amx/") (:keywords "convenience" "usability"))]) (ample-zen-theme . [(20150119 1354) nil "AmpleZen Theme for Emacs 24" single ((:commit . "b277bb7abd4b6624e8d59f02474b79af50a007bd") (:url . "https://github.com/mjwall/ample-zen") (:keywords "theme" "dark" "emacs 24"))]) (ample-theme . [(20161213 912) nil "Calm Dark Theme for Emacs" tar ((:commit . "8fbae3a9965f933c487f4cfdf2d881753d9feeb1") (:url . "https://github.com/jordonbiondo/ample-theme") (:keywords "theme" "dark"))]) (ample-regexps . [(20151023 300) nil "ample regular expressions for Emacs" tar ((:commit . "cbe91e148cac1ee8e223874dc956ed4cf607f046") (:keywords "regexps" "extensions" "tools"))]) (amd-mode . [(20161124 550) ((emacs (25)) (projectile (20161008 47)) (s (1 9 0)) (f (0 16 2)) (seq (2 16)) (makey (0 3)) (js2-mode (20140114)) (js2-refactor (0 6 1))) "Minor mode for handling JavaScript AMD module requirements." single ((:commit . "11e27444692bbf0eb38ec28af6bd041618c5c091") (:keywords "javascript" "amd" "projectile"))]) (all-the-icons-ivy . [(20170508 25) ((emacs (24 4)) (all-the-icons (2 4 0)) (ivy (0 8 0))) "Shows icons while using ivy and counsel" single ((:commit . "5357bccddfd30580d5859f3794248efb86a8a054") (:keywords "faces"))]) (all-the-icons-gnus . [(20170726 619) ((emacs (24 4)) (dash (2 12 0)) (all-the-icons (3 1 0))) "Shows icons for in Gnus" single ((:commit . "45560293e42d02c17c332894f3764dd624d25444") (:keywords "mail" "tools"))]) (all-the-icons-dired . [(20170418 1431) ((emacs (24 4)) (all-the-icons (2 2 0))) "Shows icons for each file in dired mode" single ((:commit . "980b7747d6c4a7992a1ec56afad908956db0a519") (:keywords "files" "icons" "dired"))]) (all-the-icons . [(20171011 324) ((emacs (24 3)) (font-lock+ (0)) (memoize (1 0 1))) "A library for inserting Developer icons" tar ((:commit . "b93707e3a3a7a4968b3e212b890edfe265dcd57d") (:url . "https://github.com/domtronn/all-the-icons.el") (:keywords "convenient" "lisp"))]) (all-ext . [(20170114 1805) ((all (1 0))) "M-x all with helm-swoop/anything/multiple-cursors/line-number" single ((:commit . "9f4ef84a147cf4e0af6ef45826d6cb3558db6b88") (:url . "https://github.com/rubikitch/all-ext") (:keywords "all" "search" "replace" "anything" "helm" "helm-swoop" "occur"))]) (align-cljlet . [(20160112 1301) ((clojure-mode (1 11 5))) "Space align various Clojure forms" single ((:commit . "602d72a7ad52788a0265e3c6da519464a98166b8") (:url . "https://github.com/gstamp/align-cljlet"))]) (alert . [(20171129 1408) ((gntp (0 1)) (log4e (0 3 0))) "Growl-style notification system for Emacs" single ((:commit . "644e4a1797ab52effc9cc2a7530f96d99f081a4e") (:url . "https://github.com/jwiegley/alert") (:keywords "notification" "emacs" "message"))]) (alect-themes . [(20170825 1009) ((emacs (24 0))) "Configurable light, dark and black themes for Emacs 24 or later" tar ((:commit . "ded94ab1421994aa863a4d7538ec7453768ec235") (:url . "https://github.com/alezost/alect-themes") (:keywords "color" "theme"))]) (alda-mode . [(20171103 1548) ((emacs (24 0))) "An Alda major mode" single ((:commit . "ea0d3a25ca2b45d08c510ad55b3d8a5374b2ec43") (:url . "http://github.com/jgkamat/alda-mode") (:keywords "alda" "highlight"))]) (alchemist . [(20171029 2307) ((elixir-mode (2 2 5)) (dash (2 11 0)) (emacs (24 4)) (company (0 8 0)) (pkg-info (0 4)) (s (1 11 0))) "Elixir tooling integration into Emacs" tar ((:commit . "4beb4c9ceee0534a36f7669aa35fcbdfd6bef7b7") (:url . "http://www.github.com/tonini/alchemist.el") (:keywords "languages" "elixir" "elixirc" "mix" "hex" "alchemist"))]) (airplay . [(20130212 426) ((request (20130110 2144)) (simple-httpd (1 4 1)) (deferred (0 3 1))) "Airplay bindings to Emacs" tar ((:commit . "bd690aafcae3a887946e1bba8327597932d964ad") (:url . "https://github.com/gongo/airplay-el") (:keywords "appletv" "airplay"))]) (airline-themes . [(20170623 958) ((powerline (2 3))) "vim-airline themes for emacs powerline" tar ((:commit . "0c0f8efbeaefa49ef04c0c4405b1ef79ecc5433e") (:url . "http://github.com/AnthonyDiGirolamo/airline-themes") (:keywords "evil" "mode-line" "powerline" "airline" "themes"))]) (ahungry-theme . [(20171103 2238) ((emacs (24))) "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." single ((:commit . "9ec7fca8002b213c7eee1168258e36a683190d18") (:url . "https://github.com/ahungry/color-theme-ahungry") (:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme"))]) (ahk-mode . [(20160320 1521) ((emacs (24 3))) "Major mode for editing AHK (AutoHotkey and AutoHotkey_L)" single ((:commit . "9cfc4840507f6cc8016fdede84ad90df53285359") (:url . "https://github.com/ralesi/ahk-mode") (:keywords "ahk" "autohotkey" "hotkey" "keyboard shortcut" "automation"))]) (ahg . [(20171123 201) nil "Alberto's Emacs interface for Mercurial (Hg)" single ((:url . "https://bitbucket.org/agriggio/ahg"))]) (aggressive-indent . [(20171012 1107) ((emacs (24 1)) (cl-lib (0 5))) "Minor mode to aggressively keep your code always indented" single ((:commit . "1d7185d27020c3e91a7da21800716079297938ac") (:url . "https://github.com/Malabarba/aggressive-indent-mode") (:keywords "indent" "lisp" "maint" "tools"))]) (aggressive-fill-paragraph . [(20170902 705) ((dash (2 10 0))) "A mode to automatically keep paragraphs filled" single ((:commit . "bcbc63d1c93cd8dc5bf2fc6eb4988fa76375c631") (:url . "https://github.com/davidshepherd7/aggressive-fill-paragraph-mode") (:keywords "fill-paragraph" "automatic" "comments"))]) (ag . [(20171209 450) ((dash (2 8 0)) (s (1 9 0)) (cl-lib (0 5))) "A front-end for ag ('the silver searcher'), the C ack replacement." single ((:commit . "8e547fcda57184963bcfdbfb48ca6d0d478ea213"))]) (afternoon-theme . [(20140104 1059) ((emacs (24 1))) "Dark color theme with a deep blue background" single ((:commit . "89b1d778a1f8b385775c122f2bd1c62f0fbf931a") (:url . "http://github.com/osener/emacs-afternoon-theme") (:keywords "themes"))]) (aes . [(20171028 2323) nil "Implementation of AES" single ((:commit . "b7d5da89c3443292e4f0b1c9d254d459933cf5af") (:url . "https://github.com/Sauermann/emacs-aes") (:keywords "data" "tools"))]) (adoc-mode . [(20160314 1430) ((markup-faces (1 0 0))) "a major-mode for editing AsciiDoc files in Emacs" single ((:commit . "745884359a1b8826ede2c4cfd2f0b5478953ac40") (:url . "https://github.com/sensorflo/adoc-mode/wiki") (:keywords "wp" "asciidoc"))]) (addressbook-bookmark . [(20171107 2234) ((emacs (24))) "An address book based on Standard Emacs bookmarks." single ((:commit . "4f560af8397a46772e4b39f74f44a9ec9309a224") (:url . "https://github.com/thierryvolpiatto/addressbook-bookmark"))]) (add-node-modules-path . [(20170914 1912) nil "Add node_modules to your exec-path" single ((:commit . "d9266c0e2707a3cd3ecddbbc1e378b9eb56e06c0") (:url . "https://github.com/codesuki/add-node-modules-path") (:keywords "javascript" "node" "node_modules" "eslint"))]) (add-hooks . [(20170705 2205) nil "Functions for setting multiple hooks" single ((:commit . "5e18cc3887477aeec41a34f608d9aa55bfa92d0e") (:url . "https://github.com/nickmccurdy/add-hooks") (:keywords "lisp"))]) (adafruit-wisdom . [(20171115 1228) ((emacs (24))) "Get/display adafruit.com quotes" single ((:commit . "ce6a354f6d32e9700615ce3879936d05cc2c8c33") (:url . "https://github.com/gonewest818/adafruit-wisdom.el") (:keywords "games"))]) (actionscript-mode . [(20160820 1731) nil "A simple mode for editing Actionscript 3 files" single ((:commit . "39287f00465559a58df1ea71a9dc5b15d4ac882a") (:keywords "language" "modes"))]) (ack-menu . [(20150504 1322) ((mag-menu (0 1 0))) "A menu-based front-end for ack" single ((:commit . "f77be93a4697926ecf3195a355eb69580f695f4d") (:url . "https://github.com/chumpage/ack-menu") (:keywords "tools" "matching" "convenience"))]) (achievements . [(20150530 1126) ((keyfreq (0 0 3))) "Achievements for emacs usage." tar nil]) (ace-window . [(20171211 921) ((avy (0 2 0))) "Quickly switch windows." single ((:commit . "6c52b0bbcfa2a6f62236050bacd9d915f99732b7") (:url . "https://github.com/abo-abo/ace-window") (:keywords "window" "location"))]) (ace-popup-menu . [(20170518 2244) ((emacs (24 3)) (avy-menu (0 1))) "Replace GUI popup menu with something more efficient" single ((:commit . "eae1b0ea1a56cc1da2543e95570867a1a026669d") (:url . "https://github.com/mrkkrp/ace-popup-menu") (:keywords "convenience" "popup" "menu"))]) (ace-pinyin . [(20170430 2326) ((avy (0 2 0)) (pinyinlib (0 1 0))) "Jump to Chinese characters using avy or ace-jump-mode" single ((:commit . "a9df88c1e6a32a4f4895acbb8c45383693c494c1") (:url . "https://github.com/cute-jumper/ace-pinyin") (:keywords "extensions"))]) (ace-mc . [(20160408 1737) ((ace-jump-mode (1 0)) (multiple-cursors (1 0)) (dash (2 10 0))) "Add multiple cursors quickly using ace jump" single ((:commit . "b106bf6a6c78c3e026fbe9a99a34d6239adce4fd") (:url . "https://github.com/mm--/ace-mc") (:keywords "motion" "location" "cursor"))]) (ace-link . [(20171109 1250) ((avy (0 4 0))) "Quickly follow links" single ((:commit . "3bc7a61a9d7923bb71066906e17cb8a0db415c24") (:url . "https://github.com/abo-abo/ace-link") (:keywords "convenience" "links" "avy"))]) (ace-jump-zap . [(20170717 1149) ((ace-jump-mode (1 0)) (dash (2 10 0))) "Character zapping, `ace-jump-mode` style" single ((:commit . "52b5d4c6c73bd0fc833a0dcb4e803a5287d8cae8") (:url . "https://github.com/waymondo/ace-jump-zap") (:keywords "convenience" "tools" "extensions"))]) (ace-jump-mode . [(20140616 115) nil "a quick cursor location minor mode for emacs" single ((:commit . "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac") (:url . "https://github.com/winterTTr/ace-jump-mode/") (:keywords "motion" "location" "cursor"))]) (ace-jump-helm-line . [(20160918 1136) ((avy (0 4 0)) (helm (1 6 3))) "Ace-jump to a candidate in helm window" single ((:commit . "1483055255df3f8ae349f7520f05b1e43ea3ed37") (:url . "https://github.com/cute-jumper/ace-jump-helm-line") (:keywords "extensions"))]) (ace-jump-buffer . [(20171031 850) ((avy (0 4 0)) (dash (2 4 0))) "fast buffer switching extension to `avy'" single ((:commit . "ae5be0415c823f7bb66833aa4af2180d4cf99cef") (:url . "https://github.com/waymondo/ace-jump-buffer"))]) (ace-isearch . [(20170506 12) ((emacs (24))) "A seamless bridge between isearch, ace-jump-mode, avy, helm-swoop and swiper" single ((:commit . "0502f95e333c8059a678745e5a112542965661d1") (:url . "https://github.com/tam17aki/ace-isearch"))]) (ace-flyspell . [(20170308 2109) ((avy (0 4 0))) "Jump to and correct spelling errors using `ace-jump-mode' and flyspell" single ((:commit . "538d4f8508d305262ba0228dfe7c819fb65b53c9") (:url . "https://github.com/cute-jumper/ace-flyspell") (:keywords "extensions"))]) (ac-sly . [(20170728 327) ((sly (1 0 0 -3)) (auto-complete (1 4)) (cl-lib (0 5))) "An auto-complete source using sly completions" single ((:commit . "bf69c687c4ecf1994349d20c182e9b567399912e") (:url . "https://github.com/qoocku/ac-sly"))]) (ac-slime . [(20171027 1400) ((auto-complete (1 4)) (slime (2 9)) (cl-lib (0 5))) "An auto-complete source using slime completions" single ((:commit . "6c80cb602ddad46486288f94ad7546396c6e4b1a") (:url . "https://github.com/purcell/ac-slime"))]) (ac-skk . [(20141229 1719) ((auto-complete (1 3 1)) (ddskk (16 0 50)) (tinysegmenter (0)) (cl-lib (0 5))) "auto-complete-mode source for DDSKK a.k.a Japanese input method" single ((:commit . "d25a265930430d080329789fb253d786c01dfa24") (:url . "https://github.com/myuhe/ac-skk.el") (:keywords "convenience" "auto-complete"))]) (ac-rtags . [(20170522 2154) ((auto-complete (1 4 0)) (rtags (2 10))) "auto-complete back-end for RTags" single ((:commit . "324f256acfdac2582c684e757078b1ca73ba28ec") (:url . "http://rtags.net"))]) (ac-racer . [(20170114 9) ((emacs (24 3)) (auto-complete (1 5 0)) (racer (0 0 2))) "auto-complete source of racer" single ((:commit . "4408c2d652dec0432e20c05e001db8222d778c6b") (:url . "https://github.com/syohex/emacs-ac-racer"))]) (ac-php-core . [(20171209 2145) ((emacs (24)) (dash (1)) (php-mode (1)) (xcscope (1)) (s (1)) (f (0 17 0)) (popup (0 5 0))) "gen tags for php" tar ((:commit . "0bea9c7d800864b55d807c755254d03c796b1594") (:url . "https://github.com/xcwen/ac-php") (:keywords "completion" "convenience" "intellisense"))]) (ac-php . [(20171201 134) ((ac-php-core (1)) (auto-complete (1 4 0)) (yasnippet (0 8 0))) "auto-completion source for php" single ((:commit . "67585f13841b70da298f2cfbf7d0343c4ceb41f1") (:url . "https://github.com/xcwen/ac-php") (:keywords "completion" "convenience" "intellisense"))]) (ac-octave . [(20171122 943) ((auto-complete (1 4 0))) "An auto-complete source for Octave" single ((:commit . "6d09b94a86f43de84c60e9a699b5e1be61c0f138") (:url . "https://github.com/coldnew/ac-octave") (:keywords "octave" "auto-complete" "completion"))]) (ac-mozc . [(20150227 819) ((cl-lib (0 5)) (auto-complete (1 4)) (mozc (0))) "auto-complete sources for Japanese input using Mozc" single ((:commit . "4c6c8be4701010d9362184437c0f783e0335c631") (:url . "https://github.com/igjit/ac-mozc"))]) (ac-math . [(20141116 1327) ((auto-complete (1 4)) (math-symbol-lists (1 0))) "Auto-complete sources for input of mathematical symbols and latex tags" single ((:commit . "c012a8f620a48cb18db7d78995035d65eae28f11") (:url . "https://github.com/vitoshka/ac-math") (:keywords "latex" "auto-complete" "unicode" "symbols"))]) (ac-js2 . [(20140906 442) ((js2-mode (20090723)) (skewer-mode (1 4))) "Auto-complete source for Js2-mode, with navigation" tar ((:commit . "721c482e1d4a08f4a29a74437257d573e8f69969") (:url . "https://github.com/ScottyB/ac-js2"))]) (ac-ispell . [(20151031 1926) ((auto-complete (1 4)) (cl-lib (0 5))) "ispell completion source for auto-complete" single ((:commit . "22bace7387e9012002a6a444922f75f9913077b0") (:url . "https://github.com/syohex/emacs-ac-ispell"))]) (ac-inf-ruby . [(20131115 350) ((inf-ruby (2 3 2)) (auto-complete (1 4))) "Enable auto-complete in inf-ruby sessions" single ((:commit . "ee53fc9c61950da9a96df3ff5ef186f9a9faf151") (:keywords "languages" "tools"))]) (ac-html-csswatcher . [(20151208 1313) ((web-completion-data (0 1))) "css/less class/id completion with `ac-html' or `company-web'" single ((:commit . "b0f3e7e1a3fe49e88b6eb6432377232fc715f221") (:url . "https://github.com/osv/ac-html-csswatcher") (:keywords "html" "css" "less" "auto-complete"))]) (ac-html-bootstrap . [(20160302 901) ((web-completion-data (0 1))) "auto complete bootstrap3/fontawesome classes for `ac-html' and `company-web'" tar ((:commit . "481e6e441cd566554ce71cd8cb28c9e7ebb1c24b") (:url . "https://github.com/osv/ac-html-bootstrap") (:keywords "html" "auto-complete" "bootstrap" "cssx"))]) (ac-html-angular . [(20151224 2319) ((web-completion-data (0 1))) "auto complete angular15 data for `ac-html' and `company-web'" tar ((:commit . "6bafe09afe03112ca4183d58461c1a6f6c2b3c67") (:url . "https://github.com/osv/ac-html-bootstrap") (:keywords "html" "auto-complete" "angular"))]) (ac-html . [(20151005 31) ((auto-complete (1 4)) (s (1 9)) (f (0 17)) (dash (2 10))) "auto complete source for html tags and attributes" tar ((:commit . "668154cba123c321d1b07c2dc8b26d14092253b8") (:url . "https://github.com/cheunghy/ac-html") (:keywords "html" "auto-complete" "slim" "haml" "jade"))]) (ac-helm . [(20160318 1933) ((helm (1 6 3)) (auto-complete (1 4 0)) (popup (0 5 0)) (cl-lib (0 5))) "Helm interface for auto-complete" single ((:commit . "baf2b1e04bcffa835084389c0fab415f26efbf32") (:keywords "completion" "convenience" "helm"))]) (ac-haskell-process . [(20150423 702) ((auto-complete (1 4)) (haskell-mode (13))) "Haskell auto-complete source which uses the current haskell process" single ((:commit . "0362d4323511107ec70e7165cb612f3ab01b712f") (:keywords "languages"))]) (ac-geiser . [(20130928 2347) ((geiser (0 5)) (auto-complete (1 4))) "Auto-complete backend for geiser" tar ((:commit . "502d18a8a0bd4b5fdd495a99299ba2a632c5cd9a"))]) (ac-etags . [(20161001 807) ((auto-complete (1 4))) "etags/ctags completion source for auto-complete" single ((:commit . "7983e631c226fe0fa53af3b2d56bf4eca3d785ce") (:url . "https://github.com/syohex/emacs-ac-etags"))]) (ac-emoji . [(20150823 11) ((auto-complete (1 5 0)) (cl-lib (0 5))) "auto-complete source of Emoji" tar ((:commit . "40a639764eb654f1b4bb705c817b66032a26ff2b") (:url . "https://github.com/syohex/emacs-ac-emoji"))]) (ac-emmet . [(20131015 858) ((emmet-mode (1 0 2)) (auto-complete (1 4))) "auto-complete sources for emmet-mode's snippets" single ((:commit . "88f24876ee3b759978d4614a758280b5d512d543") (:url . "https://github.com/yasuyk/ac-emmet") (:keywords "completion" "convenience" "emmet"))]) (ac-emacs-eclim . [(20170924 1339) ((eclim (0 3)) (auto-complete (1 5))) "auto-complete source for eclim" single ((:commit . "4f27d04c30a026f24c0ff18c3a7d36e3fb5b57a5"))]) (ac-dcd . [(20170323 601) ((auto-complete (1 3 1)) (flycheck-dmd-dub (0 7))) "Auto Completion source for dcd for GNU Emacs" single ((:commit . "1614aa624252e3445b0392c8a9b7197084f3e422") (:url . "http://github.com/atilaneves/ac-dcd") (:keywords "languages"))]) (ac-dabbrev . [(20130905 2218) nil "auto-complete.el source for dabbrev" single nil]) (ac-clang . [(20171209 240) ((emacs (24)) (cl-lib (0 5)) (auto-complete (1 4 0)) (pos-tip (0 4 6)) (yasnippet (0 8 0))) "Auto Completion source by libclang for GNU Emacs" tar ((:commit . "f11f17382646e13a0c794821ed5efe1692f96652") (:url . "https://github.com/yaruopooner/ac-clang") (:keywords "completion" "convenience" "intellisense"))]) (ac-cider . [(20161006 19) ((cider (0 8 0)) (auto-complete (1 4)) (cl-lib (0 3))) "Clojure auto-complete sources using CIDER" single ((:commit . "d8670939bbf88079263d5ace2b8bc04cf325be36") (:url . "https://github.com/clojure-emacs/ac-cider") (:keywords "languages" "clojure" "nrepl" "cider" "compliment"))]) (ac-capf . [(20151031 1917) ((auto-complete (1 4)) (cl-lib (0 5))) "auto-complete source with completion-at-point" single ((:commit . "17571dba0a8f98111f2ab758e9bea285b263781b") (:url . "https://github.com/syohex/emacs-ac-capf"))]) (ac-cake2 . [(20140320 8) ((cake2 (1 1 2)) (auto-complete (1 4 0))) "CakePHP 2 Minor Mode auto-complete.el source" single ((:commit . "ffbb679c0d5c261b05abde06d8d1d1e5d5990b6a") (:url . "http://code.101000lab.org"))]) (ac-cake . [(20140315 929) ((cake (1 4 2)) (auto-complete (1 4 0))) "CakePHP Minor Mode auto-complete.el source" single ((:commit . "f34c9e3ba8cb962e4708c8f53b623e1922500176") (:url . "http://code.101000lab.org"))]) (ac-c-headers . [(20151021 134) ((auto-complete (1 3 1))) "auto-complete source for C headers" single ((:commit . "de13a1d35b311e6601556d8ef163de102057deea") (:url . "http://hins11.yu-yake.com/"))]) (ac-anaconda . [(20160221 1123) ((auto-complete (1 4 0)) (anaconda-mode (0 1 1)) (dash (2 6 0))) "Anaconda sources for auto-complete-mode" single ((:commit . "94f66b4d4bf0fd9683ee77511833b1eceace0462") (:url . "https://github.com/proofit404/ac-anaconda"))]) (ac-alchemist . [(20150907 2356) ((auto-complete (1 5 0)) (alchemist (1 5 0)) (cl-lib (0 5))) "auto-complete source for alchemist" single ((:commit . "b1891c3d41aed83f61d78a609ea97be5cc2758d9") (:url . "https://github.com/syohex/emacs-ac-alchemist"))]) (abyss-theme . [(20170808 645) ((emacs (24))) "A dark theme with contrasting colours." single ((:commit . "18791c6e8d9cc2b4815c9f08627a2e94fc0eeb14") (:url . "https://github.com/mgrbyte/emacs-abyss-theme") (:keywords "theme" "dark" "contrasting colours"))]) (abl-mode . [(20170604 1309) nil "Python TDD minor mode" single ((:commit . "9aff997fe7b4caded60150a832e3704ac55e69e5") (:url . "http://github.com/afroisalreadyinu/abl-mode"))]) (abgaben . [(20171118 2246) ((pdf-tools (0 80)) (f (0 19 0)) (s (1 11 0))) "review and correct assignments received by mail" single ((:commit . "20d14830f07d66e2a04bcad1498a4a6fbf4b4451") (:url . "http://arne.chark.eu/") (:keywords "mail" "outlines" "convenience"))]) (abc-mode . [(20171020 319) nil "Major mode for editing abc music files" single ((:commit . "238deedeb6c90df168045552eb463cfae9e1f88f") (:keywords "local" "docs"))]) (aa-edit-mode . [(20170118 1920) ((emacs (24 3)) (navi2ch (2 0 0))) "Major mode for editing AA(S_JIS Art) and .mlt file" single ((:commit . "1dd801225b7ad3c23ad09698f5e77f0df7012a65") (:keywords "wp" "text" "shiftjis" "mlt" "yaruo"))]) (a . [(20170720 553) ((emacs (25))) "Associative data structure functions" single ((:commit . "d50b953cb0a7402107cdd6275cff9d31d09835a3") (:url . "https://github.com/plexus/a.el") (:keywords "lisp"))]) (@ . [(20140707 520) ((queue (0 1)) (emacs (24))) "multiple-inheritance prototype-based objects DSL" tar ((:commit . "114dfe3761bf0c9dd89f794106c3a6a436ed06cc") (:url . "https://github.com/skeeto/at-el"))]) (4clojure . [(20131014 1507) ((json (1 2)) (request (0 2 0))) "Open and evaluate 4clojure.com questions" single ((:commit . "3cdfd356c24cd3518397d29ae833f56a4d20b4ca") (:keywords "languages" "data"))]) (2048-game . [(20151026 1233) nil "play 2048 in Emacs" single ((:url . "https://bitbucket.org/zck/2048.el"))]) (0xc . [(20170125 1953) ((emacs (24 4)) (s (1 11 0))) "Base conversion made easy" single ((:commit . "31890af88234e4e098f1c340a5990515b934c7f7") (:url . "http://github.com/AdamNiederer/0xc") (:keywords "base" "conversion"))]) (0blayout . [(20161007 2307) nil "Layout grouping with ease" single ((:commit . "873732ddb99a3ec18845a37467ee06bce4e61d87") (:url . "https://github.com/etu/0blayout") (:keywords "convenience" "window-management"))]))
diff --git a/.emacs.d/elpa/evil-20171210.501/dir b/.emacs.d/elpa/evil-20171210.501/dir
new file mode 100644
index 0000000..b0c316e
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/dir
@@ -0,0 +1,18 @@
+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<Return>" 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
+* Evil: (evil). Extensible vi layer for Emacs.
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-autoloads.el b/.emacs.d/elpa/evil-20171210.501/evil-autoloads.el
new file mode 100644
index 0000000..cb43870
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-autoloads.el
@@ -0,0 +1,26 @@
+;;; evil-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
+
+;;;### (autoloads nil "evil-core" "evil-core.el" (23088 12574 534076
+;;;;;; 292000))
+;;; Generated autoloads from evil-core.el
+ (autoload 'evil-mode "evil" nil t)
+
+;;;***
+
+;;;### (autoloads nil nil ("evil-command-window.el" "evil-commands.el"
+;;;;;; "evil-common.el" "evil-digraphs.el" "evil-ex.el" "evil-integration.el"
+;;;;;; "evil-jumps.el" "evil-macros.el" "evil-maps.el" "evil-pkg.el"
+;;;;;; "evil-repeat.el" "evil-search.el" "evil-states.el" "evil-types.el"
+;;;;;; "evil-vars.el" "evil.el") (23088 12574 547409 626000))
+
+;;;***
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
+;;; evil-autoloads.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-command-window.el b/.emacs.d/elpa/evil-20171210.501/evil-command-window.el
new file mode 100644
index 0000000..62ed189
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-command-window.el
@@ -0,0 +1,168 @@
+;;; evil-command-window.el --- Evil command line window implementation
+;; Author: Emanuel Evans <emanuel.evans at gmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This provides an implementation of the vim command line window for
+;; editing and repeating past ex commands and searches.
+
+;;; Code:
+
+(require 'evil-vars)
+(require 'evil-common)
+(require 'evil-search)
+(require 'evil-ex)
+
+(defvar evil-search-module)
+
+(define-derived-mode evil-command-window-mode fundamental-mode "Evil-cmd"
+ "Major mode for the Evil command line window."
+ (auto-fill-mode 0)
+ (setq-local after-change-functions (cons 'evil-command-window-draw-prefix
+ after-change-functions)))
+
+(defun evil-command-window (hist cmd-key execute-fn)
+ "Open a command line window for HIST with CMD-KEY and EXECUTE-FN.
+HIST should be a list of commands. CMD-KEY should be the string of
+the key whose history is being shown (one of \":\", \"/\", or
+\"?\"). EXECUTE-FN should be a function of one argument to
+execute on the result that the user selects."
+ (when (eq major-mode 'evil-command-window-mode)
+ (user-error "Cannot recursively open command line window"))
+ (dolist (win (window-list))
+ (when (equal (buffer-name (window-buffer win))
+ "*Command Line*")
+ (kill-buffer (window-buffer win))
+ (delete-window win)))
+ (split-window nil
+ (unless (zerop evil-command-window-height)
+ evil-command-window-height)
+ 'above)
+ (setq evil-command-window-current-buffer (current-buffer))
+ (ignore-errors (kill-buffer "*Command Line*"))
+ (switch-to-buffer "*Command Line*")
+ (setq-local evil-command-window-execute-fn execute-fn)
+ (setq-local evil-command-window-cmd-key cmd-key)
+ (evil-command-window-mode)
+ (evil-command-window-insert-commands hist))
+
+(defun evil-command-window-ex (&optional current-command)
+ "Open a command line window for editing and executing ex commands.
+If CURRENT-COMMAND is present, it will be inserted under the
+cursor as the current command to be edited."
+ (interactive)
+ (evil-command-window (cons (or current-command "") evil-ex-history)
+ ":"
+ 'evil-command-window-ex-execute))
+
+(defun evil-command-window-execute ()
+ "Execute the command under the cursor in the appropriate buffer.
+The local var `evil-command-window-execute-fn' determines which
+function to execute."
+ (interactive)
+ (let ((result (buffer-substring (line-beginning-position)
+ (line-end-position)))
+ (execute-fn evil-command-window-execute-fn)
+ (command-window (get-buffer-window)))
+ (select-window (previous-window))
+ (unless (equal evil-command-window-current-buffer (current-buffer))
+ (user-error "Originating buffer is no longer active"))
+ (kill-buffer "*Command Line*")
+ (delete-window command-window)
+ (funcall execute-fn result)
+ (setq evil-command-window-current-buffer nil)))
+
+(defun evil-command-window-ex-execute (result)
+ "Execute RESULT as an ex command in the appropriate buffer."
+ (unless (string-match-p "^ *$" result)
+ (unless (equal result (car evil-ex-history))
+ (setq evil-ex-history (cons result evil-ex-history)))
+ (let ((evil-ex-current-buffer evil-command-window-current-buffer))
+ (evil-ex-execute result))))
+
+(defun evil-command-window-search-forward ()
+ "Open a command line window for forward searches."
+ (interactive)
+ (evil-command-window (cons ""
+ (if (eq evil-search-module 'evil-search)
+ evil-ex-search-history
+ evil-search-forward-history))
+ "/"
+ (lambda (result)
+ (evil-command-window-search-execute result t))))
+
+(defun evil-command-window-search-backward ()
+ "Open a command line window for backward searches."
+ (interactive)
+ (evil-command-window (cons ""
+ (if (eq evil-search-module 'evil-search)
+ evil-ex-search-history
+ evil-search-backward-history))
+ "?"
+ (lambda (result)
+ (evil-command-window-search-execute result nil))))
+
+(defun evil-command-window-search-execute (result forward)
+ "Search for RESULT using FORWARD to determine direction."
+ (unless (zerop (length result))
+
+ (if (eq evil-search-module 'evil-search)
+ (progn
+ (setq evil-ex-search-pattern (evil-ex-make-search-pattern result)
+ evil-ex-search-direction (if forward 'forward 'backward))
+ (unless (equal result (car-safe evil-ex-search-history))
+ (push result evil-ex-search-history))
+ (evil-ex-search))
+ (if forward
+ (unless (equal result (car-safe evil-search-forward-history))
+ (push result evil-search-forward-history))
+ (unless (equal result (car-safe evil-search-backward-history))
+ (push result evil-search-backward-history)))
+ (evil-search result forward evil-regexp-search))))
+
+(defun evil-command-window-draw-prefix (&rest ignored)
+ "Display `evil-command-window-cmd-key' as a prefix to the current line.
+Parameters passed in through IGNORED are ignored."
+ (let ((prefix (propertize evil-command-window-cmd-key
+ 'font-lock-face 'minibuffer-prompt)))
+ (set-text-properties (line-beginning-position) (line-beginning-position 2)
+ (list 'line-prefix prefix))))
+
+(defun evil-command-window-insert-commands (hist)
+ "Insert the commands in HIST."
+ (let ((inhibit-modification-hooks t))
+ (mapc #'(lambda (cmd) (insert cmd) (newline)) hist)
+ (reverse-region (point-min) (point-max)))
+ (let ((prefix (propertize evil-command-window-cmd-key
+ 'font-lock-face 'minibuffer-prompt)))
+ (set-text-properties (point-min) (point-max) (list 'line-prefix prefix)))
+ (goto-char (point-max))
+ (when (and (bolp) (not (bobp))) (backward-char))
+ (evil-adjust-cursor))
+
+(provide 'evil-command-window)
+
+;;; evil-command-window.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-command-window.elc b/.emacs.d/elpa/evil-20171210.501/evil-command-window.elc
new file mode 100644
index 0000000..ce53b7d
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-command-window.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-commands.el b/.emacs.d/elpa/evil-20171210.501/evil-commands.el
new file mode 100644
index 0000000..4def324
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-commands.el
@@ -0,0 +1,4453 @@
+;;; evil-commands.el --- Evil commands and operators
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-common)
+(require 'evil-digraphs)
+(require 'evil-search)
+(require 'evil-ex)
+(require 'evil-types)
+(require 'evil-command-window)
+(require 'evil-jumps)
+(require 'flyspell)
+(require 'cl-lib)
+
+;;; Motions
+
+;; Movement commands, or motions, are defined with the macro
+;; `evil-define-motion'. A motion is a command with an optional
+;; argument COUNT (interactively accessed by the code "<c>").
+;; It may specify the :type command property (e.g., :type line),
+;; which determines how it is handled by an operator command.
+;; Furthermore, the command must have the command properties
+;; :keep-visual t and :repeat motion; these are automatically
+;; set by the `evil-define-motion' macro.
+
+;;; Code:
+
+(evil-define-motion evil-forward-char (count &optional crosslines noerror)
+ "Move cursor to the right by COUNT characters.
+Movement is restricted to the current line unless CROSSLINES is non-nil.
+If NOERROR is non-nil, don't signal an error upon reaching the end
+of the line or the buffer; just return nil."
+ :type exclusive
+ (interactive "<c>" (list evil-cross-lines
+ (evil-kbd-macro-suppress-motion-error)))
+ (cond
+ (noerror
+ (condition-case nil
+ (evil-forward-char count crosslines nil)
+ (error nil)))
+ ((not crosslines)
+ ;; for efficiency, narrow the buffer to the projected
+ ;; movement before determining the current line
+ (evil-with-restriction
+ (point)
+ (save-excursion
+ (evil-forward-char (1+ (or count 1)) t t)
+ (point))
+ (condition-case err
+ (evil-narrow-to-line
+ (evil-forward-char count t noerror))
+ (error
+ ;; Restore the previous command (this one never happend).
+ ;; Actually, this preserves the current column if the
+ ;; previous command was `evil-next-line' or
+ ;; `evil-previous-line'.
+ (setq this-command last-command)
+ (signal (car err) (cdr err))))))
+ (t
+ (evil-motion-loop (nil (or count 1))
+ (forward-char)
+ ;; don't put the cursor on a newline
+ (when (and evil-move-cursor-back
+ (not evil-move-beyond-eol)
+ (not (evil-visual-state-p))
+ (not (evil-operator-state-p))
+ (eolp) (not (eobp)) (not (bolp)))
+ (forward-char))))))
+
+(evil-define-motion evil-backward-char (count &optional crosslines noerror)
+ "Move cursor to the left by COUNT characters.
+Movement is restricted to the current line unless CROSSLINES is non-nil.
+If NOERROR is non-nil, don't signal an error upon reaching the beginning
+of the line or the buffer; just return nil."
+ :type exclusive
+ (interactive "<c>" (list evil-cross-lines
+ (evil-kbd-macro-suppress-motion-error)))
+ (cond
+ (noerror
+ (condition-case nil
+ (evil-backward-char count crosslines nil)
+ (error nil)))
+ ((not crosslines)
+ ;; restrict movement to the current line
+ (evil-with-restriction
+ (save-excursion
+ (evil-backward-char (1+ (or count 1)) t t)
+ (point))
+ (1+ (point))
+ (condition-case err
+ (evil-narrow-to-line
+ (evil-backward-char count t noerror))
+ (error
+ ;; Restore the previous command (this one never happened).
+ ;; Actually, this preserves the current column if the
+ ;; previous command was `evil-next-line' or
+ ;; `evil-previous-line'.
+ (setq this-command last-command)
+ (signal (car err) (cdr err))))))
+ (t
+ (evil-motion-loop (nil (or count 1))
+ (backward-char)
+ ;; don't put the cursor on a newline
+ (unless (or (evil-visual-state-p) (evil-operator-state-p))
+ (evil-adjust-cursor))))))
+
+(evil-define-motion evil-next-line (count)
+ "Move the cursor COUNT lines down."
+ :type line
+ (let (line-move-visual)
+ (evil-line-move (or count 1))))
+
+(evil-define-motion evil-previous-line (count)
+ "Move the cursor COUNT lines up."
+ :type line
+ (let (line-move-visual)
+ (evil-line-move (- (or count 1)))))
+
+(evil-define-motion evil-next-visual-line (count)
+ "Move the cursor COUNT screen lines down."
+ :type exclusive
+ (let ((line-move-visual t))
+ (evil-line-move (or count 1))))
+
+(evil-define-motion evil-previous-visual-line (count)
+ "Move the cursor COUNT screen lines up."
+ :type exclusive
+ (let ((line-move-visual t))
+ (evil-line-move (- (or count 1)))))
+
+;; used for repeated commands like "dd"
+(evil-define-motion evil-line (count)
+ "Move COUNT - 1 lines down."
+ :type line
+ (let (line-move-visual)
+ ;; Catch bob and eob errors. These are caused when not moving
+ ;; point starting in the first or last line, respectively. In this
+ ;; case the current line should be selected.
+ (condition-case err
+ (evil-line-move (1- (or count 1)))
+ ((beginning-of-buffer end-of-buffer)))))
+
+(evil-define-motion evil-beginning-of-line ()
+ "Move the cursor to the beginning of the current line."
+ :type exclusive
+ (move-beginning-of-line nil))
+
+(evil-define-motion evil-end-of-line (count)
+ "Move the cursor to the end of the current line.
+If COUNT is given, move COUNT - 1 lines downward first."
+ :type inclusive
+ (move-end-of-line count)
+ (when evil-track-eol
+ (setq temporary-goal-column most-positive-fixnum
+ this-command 'next-line))
+ (unless (evil-visual-state-p)
+ (evil-adjust-cursor)
+ (when (eolp)
+ ;; prevent "c$" and "d$" from deleting blank lines
+ (setq evil-this-type 'exclusive))))
+
+(evil-define-motion evil-beginning-of-visual-line ()
+ "Move the cursor to the first character of the current screen line."
+ :type exclusive
+ (if (fboundp 'beginning-of-visual-line)
+ (beginning-of-visual-line)
+ (beginning-of-line)))
+
+(evil-define-motion evil-end-of-visual-line (count)
+ "Move the cursor to the last character of the current screen line.
+If COUNT is given, move COUNT - 1 screen lines downward first."
+ :type inclusive
+ (if (fboundp 'end-of-visual-line)
+ (end-of-visual-line count)
+ (end-of-line count)))
+
+(evil-define-motion evil-middle-of-visual-line ()
+ "Move the cursor to the middle of the current visual line."
+ :type exclusive
+ (beginning-of-visual-line)
+ (evil-with-restriction
+ nil
+ (save-excursion (end-of-visual-line) (point))
+ (move-to-column (+ (current-column)
+ -1
+ (/ (with-no-warnings (window-body-width)) 2)))))
+
+(evil-define-motion evil-beginning-of-line-or-digit-argument ()
+ "Move the cursor to the beginning of the current line.
+This function passes its command to `digit-argument' (usually a 0)
+if it is not the first event."
+ :type exclusive
+ (cond
+ (current-prefix-arg
+ (setq this-command #'digit-argument)
+ (call-interactively #'digit-argument))
+ (t
+ (setq this-command #'evil-beginning-of-line)
+ (call-interactively #'evil-beginning-of-line))))
+
+(evil-define-motion evil-first-non-blank ()
+ "Move the cursor to the first non-blank character of the current line."
+ :type exclusive
+ (evil-narrow-to-line (back-to-indentation)))
+
+(evil-define-motion evil-last-non-blank (count)
+ "Move the cursor to the last non-blank character of the current line.
+If COUNT is given, move COUNT - 1 lines downward first."
+ :type inclusive
+ (goto-char
+ (save-excursion
+ (evil-move-beginning-of-line count)
+ (if (re-search-forward "[ \t]*$")
+ (max (line-beginning-position)
+ (1- (match-beginning 0)))
+ (line-beginning-position)))))
+
+(evil-define-motion evil-first-non-blank-of-visual-line ()
+ "Move the cursor to the first non blank character
+of the current screen line."
+ :type exclusive
+ (evil-beginning-of-visual-line)
+ (skip-chars-forward " \t\r"))
+
+(evil-define-motion evil-next-line-first-non-blank (count)
+ "Move the cursor COUNT lines down on the first non-blank character."
+ :type line
+ (let ((this-command this-command))
+ (evil-next-line (or count 1)))
+ (evil-first-non-blank))
+
+(evil-define-motion evil-next-line-1-first-non-blank (count)
+ "Move the cursor COUNT-1 lines down on the first non-blank character."
+ :type line
+ (let ((this-command this-command))
+ (evil-next-line (1- (or count 1))))
+ (evil-first-non-blank))
+
+(evil-define-motion evil-previous-line-first-non-blank (count)
+ "Move the cursor COUNT lines up on the first non-blank character."
+ :type line
+ (let ((this-command this-command))
+ (evil-previous-line (or count 1)))
+ (evil-first-non-blank))
+
+(evil-define-motion evil-goto-line (count)
+ "Go to the first non-blank character of line COUNT.
+By default the last line."
+ :jump t
+ :type line
+ (if (null count)
+ (with-no-warnings (end-of-buffer))
+ (goto-char (point-min))
+ (forward-line (1- count)))
+ (evil-first-non-blank))
+
+(evil-define-motion evil-goto-first-line (count)
+ "Go to the first non-blank character of line COUNT.
+By default the first line."
+ :jump t
+ :type line
+ (evil-goto-line (or count 1)))
+
+(evil-define-motion evil-forward-word-begin (count &optional bigword)
+ "Move the cursor to the beginning of the COUNT-th next word.
+If BIGWORD is non-nil, move by WORDS.
+
+If this command is called in operator-pending state it behaves
+differently. If point reaches the beginning of a word on a new
+line point is moved back to the end of the previous line.
+
+If called after a change operator, i.e. cw or cW,
+`evil-want-change-word-to-end' is non-nil and point is on a word,
+then both behave like ce or cE.
+
+If point is at the end of the buffer and cannot be moved signal
+'end-of-buffer is raised.
+"
+ :type exclusive
+ (let ((thing (if bigword 'evil-WORD 'evil-word))
+ (orig (point))
+ (count (or count 1)))
+ (evil-signal-at-bob-or-eob count)
+ (cond
+ ;; default motion, beginning of next word
+ ((not (evil-operator-state-p))
+ (evil-forward-beginning thing count))
+ ;; the evil-change operator, maybe behave like ce or cE
+ ((and evil-want-change-word-to-end
+ (memq evil-this-operator evil-change-commands)
+ (< orig (or (cdr-safe (bounds-of-thing-at-point thing)) orig)))
+ ;; forward-thing moves point to the correct position because
+ ;; this is an exclusive motion
+ (forward-thing thing count))
+ ;; operator state
+ (t
+ (prog1 (evil-forward-beginning thing count)
+ ;; if we reached the beginning of a word on a new line in
+ ;; Operator-Pending state, go back to the end of the previous
+ ;; line
+ (when (and (> (line-beginning-position) orig)
+ (looking-back "^[[:space:]]*" (line-beginning-position)))
+ ;; move cursor back as long as the line contains only
+ ;; whitespaces and is non-empty
+ (evil-move-end-of-line 0)
+ ;; skip non-empty lines containing only spaces
+ (while (and (looking-back "^[[:space:]]+$" (line-beginning-position))
+ (not (<= (line-beginning-position) orig)))
+ (evil-move-end-of-line 0))
+ ;; but if the previous line is empty, delete this line
+ (when (bolp) (forward-char))))))))
+
+(evil-define-motion evil-forward-word-end (count &optional bigword)
+ "Move the cursor to the end of the COUNT-th next word.
+If BIGWORD is non-nil, move by WORDS."
+ :type inclusive
+ (let ((thing (if bigword 'evil-WORD 'evil-word))
+ (count (or count 1)))
+ (evil-signal-at-bob-or-eob count)
+ ;; Evil special behaviour: e or E on a one-character word in
+ ;; operator state does not move point
+ (unless (and (evil-operator-state-p)
+ (= 1 count)
+ (let ((bnd (bounds-of-thing-at-point thing)))
+ (and bnd
+ (= (car bnd) (point))
+ (= (cdr bnd) (1+ (point)))))
+ (looking-at "[[:word:]]"))
+ (evil-forward-end thing count))))
+
+(evil-define-motion evil-backward-word-begin (count &optional bigword)
+ "Move the cursor to the beginning of the COUNT-th previous word.
+If BIGWORD is non-nil, move by WORDS."
+ :type exclusive
+ (let ((thing (if bigword 'evil-WORD 'evil-word)))
+ (evil-signal-at-bob-or-eob (- (or count 1)))
+ (evil-backward-beginning thing count)))
+
+(evil-define-motion evil-backward-word-end (count &optional bigword)
+ "Move the cursor to the end of the COUNT-th previous word.
+If BIGWORD is non-nil, move by WORDS."
+ :type inclusive
+ (let ((thing (if bigword 'evil-WORD 'evil-word)))
+ (evil-signal-at-bob-or-eob (- (or count 1)))
+ (evil-backward-end thing count)))
+
+(evil-define-motion evil-forward-WORD-begin (count)
+ "Move the cursor to the beginning of the COUNT-th next WORD."
+ :type exclusive
+ (evil-forward-word-begin count t))
+
+(evil-define-motion evil-forward-WORD-end (count)
+ "Move the cursor to the end of the COUNT-th next WORD."
+ :type inclusive
+ (evil-forward-word-end count t))
+
+(evil-define-motion evil-backward-WORD-begin (count)
+ "Move the cursor to the beginning of the COUNT-th previous WORD."
+ :type exclusive
+ (evil-backward-word-begin count t))
+
+(evil-define-motion evil-backward-WORD-end (count)
+ "Move the cursor to the end of the COUNT-th previous WORD."
+ :type inclusive
+ (evil-backward-word-end count t))
+
+;; section movement
+(evil-define-motion evil-forward-section-begin (count)
+ "Move the cursor to the beginning of the COUNT-th next section."
+ :jump t
+ :type exclusive
+ (evil-signal-at-bob-or-eob count)
+ (evil-forward-beginning 'evil-defun count))
+
+(evil-define-motion evil-forward-section-end (count)
+ "Move the cursor to the end of the COUNT-th next section."
+ :jump t
+ :type inclusive
+ (evil-signal-at-bob-or-eob count)
+ (evil-forward-end 'evil-defun count)
+ (unless (eobp) (forward-line)))
+
+(evil-define-motion evil-backward-section-begin (count)
+ "Move the cursor to the beginning of the COUNT-th previous section."
+ :jump t
+ :type exclusive
+ (evil-signal-at-bob-or-eob (- (or count 1)))
+ (evil-backward-beginning 'evil-defun count))
+
+(evil-define-motion evil-backward-section-end (count)
+ "Move the cursor to the end of the COUNT-th previous section."
+ :jump t
+ :type inclusive
+ (evil-signal-at-bob-or-eob (- (or count 1)))
+ (end-of-line -1)
+ (evil-backward-end 'evil-defun count)
+ (unless (eobp) (forward-line)))
+
+(evil-define-motion evil-forward-sentence-begin (count)
+ "Move to the next COUNT-th beginning of a sentence or end of a paragraph."
+ :jump t
+ :type exclusive
+ (evil-signal-at-bob-or-eob count)
+ (evil-forward-nearest count
+ #'(lambda (cnt)
+ (evil-forward-beginning 'evil-sentence))
+ #'evil-forward-paragraph))
+
+(evil-define-motion evil-backward-sentence-begin (count)
+ "Move to the previous COUNT-th beginning of a sentence or paragraph."
+ :jump t
+ :type exclusive
+ (evil-signal-at-bob-or-eob (- (or count 1)))
+ (evil-forward-nearest (- (or count 1))
+ #'(lambda (cnt)
+ (evil-backward-beginning 'evil-sentence))
+ #'(lambda (cnt)
+ (evil-backward-paragraph))))
+
+(evil-define-motion evil-forward-paragraph (count)
+ "Move to the end of the COUNT-th next paragraph."
+ :jump t
+ :type exclusive
+ (evil-signal-at-bob-or-eob count)
+ (evil-forward-end 'evil-paragraph count)
+ (unless (eobp) (forward-line)))
+
+(evil-define-motion evil-backward-paragraph (count)
+ "Move to the beginning of the COUNT-th previous paragraph."
+ :jump t
+ :type exclusive
+ (evil-signal-at-bob-or-eob (- (or count 1)))
+ (unless (eobp) (forward-line))
+ (evil-backward-beginning 'evil-paragraph count)
+ (unless (bobp) (forward-line -1)))
+
+(evil-define-motion evil-jump-item (count)
+ "Find the next item in this line after or under the cursor
+and jump to the corresponding one."
+ :jump t
+ :type inclusive
+ (cond
+ ;; COUNT% jumps to a line COUNT percentage down the file
+ (count
+ (goto-char
+ (evil-normalize-position
+ (let ((size (- (point-max) (point-min))))
+ (+ (point-min)
+ (if (> size 80000)
+ (* count (/ size 100))
+ (/ (* count size) 100))))))
+ (back-to-indentation)
+ (setq evil-this-type 'line))
+ ((and (evil-looking-at-start-comment t)
+ (let ((pnt (point)))
+ (forward-comment 1)
+ (or (not (bolp))
+ (prog1 nil (goto-char pnt)))))
+ (backward-char))
+ ((and (not (eolp)) (evil-looking-at-end-comment t))
+ (forward-comment -1))
+ ((and
+ (memq major-mode '(c-mode c++-mode))
+ (require 'hideif nil t)
+ (with-no-warnings
+ (let* ((hif-else-regexp (concat hif-cpp-prefix "\\(?:else\\|elif[ \t]+\\)"))
+ (hif-ifx-else-endif-regexp
+ (concat hif-ifx-regexp "\\|" hif-else-regexp "\\|" hif-endif-regexp)))
+ (cond
+ ((save-excursion (beginning-of-line) (or (hif-looking-at-ifX) (hif-looking-at-else)))
+ (hif-find-next-relevant)
+ (while (hif-looking-at-ifX)
+ (hif-ifdef-to-endif)
+ (hif-find-next-relevant))
+ t)
+ ((save-excursion (beginning-of-line) (hif-looking-at-endif))
+ (hif-endif-to-ifdef)
+ t))))))
+ (t
+ (let* ((open (point-max))
+ (close (point-max))
+ (open-pair (condition-case nil
+ (save-excursion
+ ;; consider the character right before eol given that
+ ;; point may be placed there, e.g. in visual state
+ (when (and (eolp) (not (bolp)))
+ (backward-char))
+ (setq open (1- (scan-lists (point) 1 -1)))
+ (when (< open (line-end-position))
+ (goto-char open)
+ (forward-list)
+ (1- (point))))
+ (error nil)))
+ (close-pair (condition-case nil
+ (save-excursion
+ ;; consider the character right before eol given that
+ ;; point may be placed there, e.g. in visual state
+ (when (and (eolp) (not (bolp)))
+ (backward-char))
+ (setq close (1- (scan-lists (point) 1 1)))
+ (when (< close (line-end-position))
+ (goto-char (1+ close))
+ (backward-list)
+ (point)))
+ (error nil))))
+ (cond
+ ((not (or open-pair close-pair))
+ ;; nothing found, check if we are inside a string
+ (let ((pnt (point))
+ (state (syntax-ppss (point)))
+ (bnd (bounds-of-thing-at-point 'evil-string)))
+ (if (not (and bnd (< (point) (cdr bnd))))
+ ;; no, then we really failed
+ (user-error "No matching item found on the current line")
+ ;; yes, go to the end of the string and try again
+ (let ((endstr (cdr bnd)))
+ (when (or (save-excursion
+ (goto-char endstr)
+ (let ((b (bounds-of-thing-at-point 'evil-string)))
+ (and b (< (point) (cdr b))))) ; not at end of string
+ (condition-case nil
+ (progn
+ (goto-char endstr)
+ (evil-jump-item)
+ nil)
+ (error t)))
+ ;; failed again, go back to original point
+ (goto-char pnt)
+ (user-error "No matching item found on the current line"))))))
+ ((< open close) (goto-char open-pair))
+ (t (goto-char close-pair)))))))
+
+(defun evil--flyspell-overlays-in-p (beg end)
+ (let ((ovs (overlays-in beg end))
+ done)
+ (while (and ovs (not done))
+ (when (flyspell-overlay-p (car ovs))
+ (setq done t))
+ (setq ovs (cdr ovs)))
+ done))
+
+(defun evil--flyspell-overlay-at (pos forwardp)
+ (when (not forwardp)
+ (setq pos (max (1- pos) (point-min))))
+ (let ((ovs (overlays-at pos))
+ done)
+ (while (and ovs (not done))
+ (if (flyspell-overlay-p (car ovs))
+ (setq done t)
+ (setq ovs (cdr ovs))))
+ (when done
+ (car ovs))))
+
+(defun evil--flyspell-overlay-after (pos limit forwardp)
+ (let (done)
+ (while (and (if forwardp
+ (< pos limit)
+ (> pos limit))
+ (not done))
+ (let ((ov (evil--flyspell-overlay-at pos forwardp)))
+ (when ov
+ (setq done ov)))
+ (setq pos (if forwardp
+ (next-overlay-change pos)
+ (previous-overlay-change pos))))
+ done))
+
+(defun evil--next-flyspell-error (forwardp)
+ (when (evil--flyspell-overlays-in-p (point-min) (point-max))
+ (let ((pos (point))
+ limit
+ ov)
+ (when (evil--flyspell-overlay-at pos forwardp)
+ (if (/= pos (point-min))
+ (setq pos (save-excursion (goto-char pos)
+ (forward-word (if forwardp 1 -1))
+ (point)))
+ (setq pos (point-max))))
+ (setq limit (if forwardp (point-max) (point-min))
+ ov (evil--flyspell-overlay-after pos limit forwardp))
+ (if ov
+ (goto-char (overlay-start ov))
+ (when evil-search-wrap
+ (setq limit pos
+ pos (if forwardp (point-min) (point-max))
+ ov (evil--flyspell-overlay-after pos limit forwardp))
+ (when ov
+ (goto-char (overlay-start ov))))))))
+
+(evil-define-motion evil-next-flyspell-error (count)
+ "Go to the COUNT'th spelling mistake after point."
+ (interactive "p")
+ (dotimes (_ count)
+ (evil--next-flyspell-error t)))
+
+(evil-define-motion evil-prev-flyspell-error (count)
+ "Go to the COUNT'th spelling mistake preceding point."
+ (interactive "p")
+ (dotimes (_ count)
+ (evil--next-flyspell-error nil)))
+
+(evil-define-motion evil-previous-open-paren (count)
+ "Go to [count] previous unmatched '('."
+ :type exclusive
+ (evil-up-paren ?\( ?\) (- (or count 1))))
+
+(evil-define-motion evil-next-close-paren (count)
+ "Go to [count] next unmatched ')'."
+ :type exclusive
+ (forward-char)
+ (evil-up-paren ?\( ?\) (or count 1))
+ (backward-char))
+
+(evil-define-motion evil-previous-open-brace (count)
+ "Go to [count] previous unmatched '{'."
+ :type exclusive
+ (evil-up-paren ?{ ?} (- (or count 1))))
+
+(evil-define-motion evil-next-close-brace (count)
+ "Go to [count] next unmatched '}'."
+ :type exclusive
+ (forward-char)
+ (evil-up-paren ?{ ?} (or count 1))
+ (backward-char))
+
+(evil-define-motion evil-find-char (count char)
+ "Move to the next COUNT'th occurrence of CHAR.
+Movement is restricted to the current line unless `evil-cross-lines' is non-nil."
+ :type inclusive
+ (interactive "<c><C>")
+ (setq count (or count 1))
+ (let ((fwd (> count 0)))
+ (setq evil-last-find (list #'evil-find-char char fwd))
+ (when fwd (forward-char))
+ (let ((case-fold-search nil))
+ (unless (prog1
+ (search-forward (char-to-string char)
+ (unless evil-cross-lines
+ (if fwd
+ (line-end-position)
+ (line-beginning-position)))
+ t count)
+ (when fwd (backward-char)))
+ (user-error "Can't find %c" char)))))
+
+(evil-define-motion evil-find-char-backward (count char)
+ "Move to the previous COUNT'th occurrence of CHAR."
+ :type exclusive
+ (interactive "<c><C>")
+ (evil-find-char (- (or count 1)) char))
+
+(evil-define-motion evil-find-char-to (count char)
+ "Move before the next COUNT'th occurrence of CHAR."
+ :type inclusive
+ (interactive "<c><C>")
+ (unwind-protect
+ (progn
+ (evil-find-char count char)
+ (if (> (or count 1) 0)
+ (backward-char)
+ (forward-char)))
+ (setcar evil-last-find #'evil-find-char-to)))
+
+(evil-define-motion evil-find-char-to-backward (count char)
+ "Move before the previous COUNT'th occurrence of CHAR."
+ :type exclusive
+ (interactive "<c><C>")
+ (evil-find-char-to (- (or count 1)) char))
+
+(evil-define-motion evil-repeat-find-char (count)
+ "Repeat the last find COUNT times."
+ :type inclusive
+ (setq count (or count 1))
+ (if evil-last-find
+ (let ((cmd (car evil-last-find))
+ (char (nth 1 evil-last-find))
+ (fwd (nth 2 evil-last-find))
+ evil-last-find)
+ ;; ensure count is non-negative
+ (when (< count 0)
+ (setq count (- count)
+ fwd (not fwd)))
+ ;; skip next character when repeating t or T
+ (and (eq cmd #'evil-find-char-to)
+ evil-repeat-find-to-skip-next
+ (= count 1)
+ (or (and fwd (= (char-after (1+ (point))) char))
+ (and (not fwd) (= (char-before) char)))
+ (setq count (1+ count)))
+ (funcall cmd (if fwd count (- count)) char)
+ (unless (nth 2 evil-last-find)
+ (setq evil-this-type 'exclusive)))
+ (user-error "No previous search")))
+
+(evil-define-motion evil-repeat-find-char-reverse (count)
+ "Repeat the last find COUNT times in the opposite direction."
+ :type inclusive
+ (evil-repeat-find-char (- (or count 1))))
+
+;; ceci n'est pas une pipe
+(evil-define-motion evil-goto-column (count)
+ "Go to column COUNT on the current line.
+Columns are counted from zero."
+ :type exclusive
+ (move-to-column (or count 0)))
+
+(evil-define-command evil-goto-mark (char &optional noerror)
+ "Go to the marker specified by CHAR."
+ :keep-visual t
+ :repeat nil
+ :type exclusive
+ (interactive (list (read-char)))
+ (let ((marker (evil-get-marker char)))
+ (cond
+ ((markerp marker)
+ (switch-to-buffer (marker-buffer marker))
+ (goto-char (marker-position marker)))
+ ((numberp marker)
+ (goto-char marker))
+ ((consp marker)
+ (when (or (find-buffer-visiting (car marker))
+ (and (y-or-n-p (format "Visit file %s again? "
+ (car marker)))
+ (find-file (car marker))))
+ (goto-char (cdr marker))))
+ ((not noerror)
+ (user-error "Marker `%c' is not set%s" char
+ (if (evil-global-marker-p char) ""
+ " in this buffer"))))))
+
+(evil-define-command evil-goto-mark-line (char &optional noerror)
+ "Go to the line of the marker specified by CHAR."
+ :keep-visual t
+ :repeat nil
+ :type line
+ (interactive (list (read-char)))
+ (evil-goto-mark char noerror)
+ (evil-first-non-blank))
+
+(evil-define-motion evil-jump-backward (count)
+ "Go to older position in jump list.
+To go the other way, press \
+\\<evil-motion-state-map>\\[evil-jump-forward]."
+ (evil--jump-backward count))
+
+(evil-define-motion evil-jump-forward (count)
+ "Go to newer position in jump list.
+To go the other way, press \
+\\<evil-motion-state-map>\\[evil-jump-backward]."
+ (evil--jump-forward count))
+
+(evil-define-motion evil-jump-backward-swap (count)
+ "Go to the previous position in jump list.
+The current position is placed in the jump list."
+ (let ((pnt (point)))
+ (evil--jump-backward 1)
+ (evil-set-jump pnt)))
+
+(evil-define-motion evil-jump-to-tag (arg)
+ "Jump to tag under point.
+If called with a prefix argument, provide a prompt
+for specifying the tag."
+ :jump t
+ (interactive "P")
+ (if arg (call-interactively #'find-tag)
+ (let ((tag (funcall (or find-tag-default-function
+ (get major-mode 'find-tag-default-function)
+ #'find-tag-default))))
+ (unless tag (user-error "No tag candidate found around point"))
+ (find-tag tag))))
+
+(evil-define-motion evil-lookup ()
+ "Look up the keyword at point.
+Calls `evil-lookup-func'."
+ (funcall evil-lookup-func))
+
+(defun evil-ret-gen (count indent?)
+ (let* ((field (get-char-property (point) 'field))
+ (button (get-char-property (point) 'button))
+ (doc (get-char-property (point) 'widget-doc))
+ (widget (or field button doc)))
+ (cond
+ ((and widget
+ (fboundp 'widget-type)
+ (fboundp 'widget-button-press)
+ (or (and (symbolp widget)
+ (get widget 'widget-type))
+ (and (consp widget)
+ (get (widget-type widget) 'widget-type))))
+ (when (evil-operator-state-p)
+ (setq evil-inhibit-operator t))
+ (when (fboundp 'widget-button-press)
+ (widget-button-press (point))))
+ ((and (fboundp 'button-at)
+ (fboundp 'push-button)
+ (button-at (point)))
+ (when (evil-operator-state-p)
+ (setq evil-inhibit-operator t))
+ (push-button))
+ ((or (evil-emacs-state-p)
+ (and (evil-insert-state-p)
+ (not buffer-read-only)))
+ (if (not indent?)
+ (newline count)
+ (delete-horizontal-space t)
+ (newline count)
+ (indent-according-to-mode)))
+ (t
+ (evil-next-line-first-non-blank count)))))
+
+(evil-define-motion evil-ret (count)
+ "Move the cursor COUNT lines down.
+If point is on a widget or a button, click on it.
+In Insert state, insert a newline."
+ :type line
+ (evil-ret-gen count nil))
+
+(evil-define-motion evil-ret-and-indent (count)
+ "Move the cursor COUNT lines down.
+If point is on a widget or a button, click on it.
+In Insert state, insert a newline and indent."
+ :type line
+ (evil-ret-gen count t))
+
+(evil-define-motion evil-window-top (count)
+ "Move the cursor to line COUNT from the top of the window
+on the first non-blank character."
+ :jump t
+ :type line
+ (move-to-window-line (max (or count 0)
+ (if (= (point-min) (window-start))
+ 0
+ scroll-margin)))
+ (back-to-indentation))
+
+(evil-define-motion evil-window-middle ()
+ "Move the cursor to the middle line in the window
+on the first non-blank character."
+ :jump t
+ :type line
+ (move-to-window-line
+ (/ (1+ (save-excursion (move-to-window-line -1))) 2))
+ (back-to-indentation))
+
+(evil-define-motion evil-window-bottom (count)
+ "Move the cursor to line COUNT from the bottom of the window
+on the first non-blank character."
+ :jump t
+ :type line
+ (move-to-window-line (- (max (or count 1) (1+ scroll-margin))))
+ (back-to-indentation))
+
+;; scrolling
+(evil-define-command evil-scroll-line-up (count)
+ "Scrolls the window COUNT lines upwards."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (let ((scroll-preserve-screen-position nil))
+ (scroll-down count)))
+
+(evil-define-command evil-scroll-line-down (count)
+ "Scrolls the window COUNT lines downwards."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (let ((scroll-preserve-screen-position nil))
+ (scroll-up count)))
+
+(evil-define-command evil-scroll-count-reset ()
+ "Sets `evil-scroll-count' to 0.
+`evil-scroll-up' and `evil-scroll-down' will scroll
+for a half of the screen(default)."
+ :repeat nil
+ :keep-visual t
+ (interactive)
+ (setq evil-scroll-count 0))
+
+(evil-define-command evil-scroll-up (count)
+ "Scrolls the window and the cursor COUNT lines upwards.
+If COUNT is not specified the function scrolls down
+`evil-scroll-count', which is the last used count.
+If the scroll count is zero the command scrolls half the screen."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (evil-save-column
+ (setq count (or count (max 0 evil-scroll-count)))
+ (setq evil-scroll-count count)
+ (when (= (point-min) (line-beginning-position))
+ (signal 'beginning-of-buffer nil))
+ (when (zerop count)
+ (setq count (/ (1- (window-height)) 2)))
+ (let ((xy (posn-x-y (posn-at-point))))
+ (condition-case nil
+ (progn
+ (scroll-down count)
+ (goto-char (posn-point (posn-at-x-y (car xy) (cdr xy)))))
+ (beginning-of-buffer
+ (condition-case nil
+ (with-no-warnings (previous-line count))
+ (beginning-of-buffer)))))))
+
+(evil-define-command evil-scroll-down (count)
+ "Scrolls the window and the cursor COUNT lines downwards.
+If COUNT is not specified the function scrolls down
+`evil-scroll-count', which is the last used count.
+If the scroll count is zero the command scrolls half the screen."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (evil-save-column
+ (setq count (or count (max 0 evil-scroll-count)))
+ (setq evil-scroll-count count)
+ (when (eobp) (signal 'end-of-buffer nil))
+ (when (zerop count)
+ (setq count (/ (1- (window-height)) 2)))
+ ;; BUG #660: First check whether the eob is visible.
+ ;; In that case we do not scroll but merely move point.
+ (if (<= (point-max) (window-end))
+ (with-no-warnings (next-line count nil))
+ (let ((xy (posn-x-y (posn-at-point))))
+ (condition-case nil
+ (progn
+ (scroll-up count)
+ (let* ((wend (window-end nil t))
+ (p (posn-at-x-y (car xy) (cdr xy)))
+ (margin (max 0 (- scroll-margin
+ (cdr (posn-col-row p))))))
+ (goto-char (posn-point p))
+ ;; ensure point is not within the scroll-margin
+ (when (> margin 0)
+ (with-no-warnings (next-line margin))
+ (recenter scroll-margin))
+ (when (<= (point-max) wend)
+ (save-excursion
+ (goto-char (point-max))
+ (recenter (- (max 1 scroll-margin)))))))
+ (end-of-buffer
+ (goto-char (point-max))
+ (recenter (- (max 1 scroll-margin)))))))))
+
+(evil-define-command evil-scroll-page-up (count)
+ "Scrolls the window COUNT pages upwards."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (evil-save-column
+ (dotimes (i count)
+ (condition-case err
+ (scroll-down nil)
+ (beginning-of-buffer
+ (if (and (bobp) (zerop i))
+ (signal (car err) (cdr err))
+ (goto-char (point-min))))))))
+
+(evil-define-command evil-scroll-page-down (count)
+ "Scrolls the window COUNT pages downwards."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (evil-save-column
+ (dotimes (i count)
+ (condition-case err
+ (scroll-up nil)
+ (end-of-buffer
+ (if (and (eobp) (zerop i))
+ (signal (car err) (cdr err))
+ (goto-char (point-max))))))))
+
+(evil-define-command evil-scroll-line-to-top (count)
+ "Scrolls line number COUNT (or the cursor line) to the top of the window."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (evil-save-column
+ (let ((line (or count (line-number-at-pos (point)))))
+ (goto-char (point-min))
+ (forward-line (1- line)))
+ (recenter (1- (max 1 scroll-margin)))))
+
+(evil-define-command evil-scroll-line-to-center (count)
+ "Scrolls line number COUNT (or the cursor line) to the center of the window."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (evil-save-column
+ (when count
+ (goto-char (point-min))
+ (forward-line (1- count)))
+ (recenter nil)))
+
+(evil-define-command evil-scroll-line-to-bottom (count)
+ "Scrolls line number COUNT (or the cursor line) to the bottom of the window."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (evil-save-column
+ (let ((line (or count (line-number-at-pos (point)))))
+ (goto-char (point-min))
+ (forward-line (1- line)))
+ (recenter (- (max 1 scroll-margin)))))
+
+(evil-define-command evil-scroll-bottom-line-to-top (count)
+ "Scrolls the line right below the window,
+or line COUNT to the top of the window."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (if count
+ (progn
+ (goto-char (point-min))
+ (forward-line (1- count)))
+ (goto-char (window-end))
+ (evil-move-cursor-back))
+ (recenter (1- (max 0 scroll-margin)))
+ (evil-first-non-blank))
+
+(evil-define-command evil-scroll-top-line-to-bottom (count)
+ "Scrolls the line right below the window,
+or line COUNT to the top of the window."
+ :repeat nil
+ :keep-visual t
+ (interactive "<c>")
+ (if count
+ (progn
+ (goto-char (point-min))
+ (forward-line (1- count)))
+ (goto-char (window-start)))
+ (recenter (- (max 1 scroll-margin)))
+ (evil-first-non-blank))
+
+(evil-define-command evil-scroll-left (count)
+ "Scrolls the window COUNT half-screenwidths to the left."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (evil-with-hproject-point-on-window
+ (scroll-right (* count (/ (window-width) 2)))))
+
+(evil-define-command evil-scroll-right (count)
+ "Scrolls the window COUNT half-screenwidths to the right."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (evil-with-hproject-point-on-window
+ (scroll-left (* count (/ (window-width) 2)))))
+
+(evil-define-command evil-scroll-column-left (count)
+ "Scrolls the window COUNT columns to the left."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (evil-with-hproject-point-on-window
+ (scroll-right count)))
+
+(evil-define-command evil-scroll-column-right (count)
+ "Scrolls the window COUNT columns to the right."
+ :repeat nil
+ :keep-visual t
+ (interactive "p")
+ (evil-with-hproject-point-on-window
+ (scroll-left count)))
+
+;;; Text objects
+
+;; Text objects are defined with `evil-define-text-object'. In Visual
+;; state, they modify the current selection; in Operator-Pending
+;; state, they return a pair of buffer positions. Outer text objects
+;; are bound in the keymap `evil-outer-text-objects-map', and inner
+;; text objects are bound in `evil-inner-text-objects-map'.
+;;
+;; Common text objects like words, WORDS, paragraphs and sentences are
+;; defined via a corresponding move-function. This function must have
+;; the following properties:
+;;
+;; 1. Take exactly one argument, the count.
+;; 2. When the count is positive, move point forward to the first
+;; character after the end of the next count-th object.
+;; 3. When the count is negative, move point backward to the first
+;; character of the count-th previous object.
+;; 4. If point is placed on the first character of an object, the
+;; backward motion does NOT count that object.
+;; 5. If point is placed on the last character of an object, the
+;; forward motion DOES count that object.
+;; 6. The return value is "count left", i.e., in forward direction
+;; count is decreased by one for each successful move and in
+;; backward direction count is increased by one for each
+;; successful move, returning the final value of count.
+;; Therefore, if the complete move is successful, the return
+;; value is 0.
+;;
+;; A useful macro in this regard is `evil-motion-loop', which quits
+;; when point does not move further and returns the count difference.
+;; It also provides a "unit value" of 1 or -1 for use in each
+;; iteration. For example, a hypothetical "foo-bar" move could be
+;; written as such:
+;;
+;; (defun foo-bar (count)
+;; (evil-motion-loop (var count)
+;; (forward-foo var) ; `var' is 1 or -1 depending on COUNT
+;; (forward-bar var)))
+;;
+;; If "forward-foo" and "-bar" didn't accept negative arguments,
+;; we could choose their backward equivalents by inspecting `var':
+;;
+;; (defun foo-bar (count)
+;; (evil-motion-loop (var count)
+;; (cond
+;; ((< var 0)
+;; (backward-foo 1)
+;; (backward-bar 1))
+;; (t
+;; (forward-foo 1)
+;; (forward-bar 1)))))
+;;
+;; After a forward motion, point has to be placed on the first
+;; character after some object, unless no motion was possible at all.
+;; Similarly, after a backward motion, point has to be placed on the
+;; first character of some object. This implies that point should
+;; NEVER be moved to eob or bob, unless an object ends or begins at
+;; eob or bob. (Usually, Emacs motions always move as far as possible.
+;; But we want to use the motion-function to identify certain objects
+;; in the buffer, and thus exact movement to object boundaries is
+;; required.)
+
+(evil-define-text-object evil-a-word (count &optional beg end type)
+ "Select a word."
+ (evil-select-an-object 'evil-word beg end type count))
+
+(evil-define-text-object evil-inner-word (count &optional beg end type)
+ "Select inner word."
+ (evil-select-inner-object 'evil-word beg end type count))
+
+(evil-define-text-object evil-a-WORD (count &optional beg end type)
+ "Select a WORD."
+ (evil-select-an-object 'evil-WORD beg end type count))
+
+(evil-define-text-object evil-inner-WORD (count &optional beg end type)
+ "Select inner WORD."
+ (evil-select-inner-object 'evil-WORD beg end type count))
+
+(evil-define-text-object evil-a-symbol (count &optional beg end type)
+ "Select a symbol."
+ (evil-select-an-object 'evil-symbol beg end type count))
+
+(evil-define-text-object evil-inner-symbol (count &optional beg end type)
+ "Select inner symbol."
+ (evil-select-inner-object 'evil-symbol beg end type count))
+
+(evil-define-text-object evil-a-sentence (count &optional beg end type)
+ "Select a sentence."
+ (evil-select-an-object 'evil-sentence beg end type count))
+
+(evil-define-text-object evil-inner-sentence (count &optional beg end type)
+ "Select inner sentence."
+ (evil-select-inner-object 'evil-sentence beg end type count))
+
+(evil-define-text-object evil-a-paragraph (count &optional beg end type)
+ "Select a paragraph."
+ :type line
+ (evil-select-an-object 'evil-paragraph beg end type count t))
+
+(evil-define-text-object evil-inner-paragraph (count &optional beg end type)
+ "Select inner paragraph."
+ :type line
+ (evil-select-inner-object 'evil-paragraph beg end type count t))
+
+(evil-define-text-object evil-a-paren (count &optional beg end type)
+ "Select a parenthesis."
+ :extend-selection nil
+ (evil-select-paren ?\( ?\) beg end type count t))
+
+(evil-define-text-object evil-inner-paren (count &optional beg end type)
+ "Select inner parenthesis."
+ :extend-selection nil
+ (evil-select-paren ?\( ?\) beg end type count))
+
+(evil-define-text-object evil-a-bracket (count &optional beg end type)
+ "Select a square bracket."
+ :extend-selection nil
+ (evil-select-paren ?\[ ?\] beg end type count t))
+
+(evil-define-text-object evil-inner-bracket (count &optional beg end type)
+ "Select inner square bracket."
+ :extend-selection nil
+ (evil-select-paren ?\[ ?\] beg end type count))
+
+(evil-define-text-object evil-a-curly (count &optional beg end type)
+ "Select a curly bracket (\"brace\")."
+ :extend-selection nil
+ (evil-select-paren ?{ ?} beg end type count t))
+
+(evil-define-text-object evil-inner-curly (count &optional beg end type)
+ "Select inner curly bracket (\"brace\")."
+ :extend-selection nil
+ (evil-select-paren ?{ ?} beg end type count))
+
+(evil-define-text-object evil-an-angle (count &optional beg end type)
+ "Select an angle bracket."
+ :extend-selection nil
+ (evil-select-paren ?< ?> beg end type count t))
+
+(evil-define-text-object evil-inner-angle (count &optional beg end type)
+ "Select inner angle bracket."
+ :extend-selection nil
+ (evil-select-paren ?< ?> beg end type count))
+
+(evil-define-text-object evil-a-single-quote (count &optional beg end type)
+ "Select a single-quoted expression."
+ :extend-selection t
+ (evil-select-quote ?' beg end type count t))
+
+(evil-define-text-object evil-inner-single-quote (count &optional beg end type)
+ "Select inner single-quoted expression."
+ :extend-selection nil
+ (evil-select-quote ?' beg end type count))
+
+(evil-define-text-object evil-a-double-quote (count &optional beg end type)
+ "Select a double-quoted expression."
+ :extend-selection t
+ (evil-select-quote ?\" beg end type count t))
+
+(evil-define-text-object evil-inner-double-quote (count &optional beg end type)
+ "Select inner double-quoted expression."
+ :extend-selection nil
+ (evil-select-quote ?\" beg end type count))
+
+(evil-define-text-object evil-a-back-quote (count &optional beg end type)
+ "Select a back-quoted expression."
+ :extend-selection t
+ (evil-select-quote ?\` beg end type count t))
+
+(evil-define-text-object evil-inner-back-quote (count &optional beg end type)
+ "Select inner back-quoted expression."
+ :extend-selection nil
+ (evil-select-quote ?\` beg end type count))
+
+(evil-define-text-object evil-a-tag (count &optional beg end type)
+ "Select a tag block."
+ :extend-selection nil
+ (evil-select-xml-tag beg end type count t))
+
+(evil-define-text-object evil-inner-tag (count &optional beg end type)
+ "Select inner tag block."
+ :extend-selection nil
+ (evil-select-xml-tag beg end type count))
+
+(evil-define-text-object evil-next-match (count &optional beg end type)
+ "Select next match."
+ (unless (and (boundp 'evil-search-module)
+ (eq evil-search-module 'evil-search))
+ (user-error "next-match text objects only work with Evil search module."))
+ (let ((pnt (point)))
+ (cond
+ ((eq evil-ex-search-direction 'forward)
+ (unless (eobp) (forward-char))
+ (evil-ex-search-previous 1)
+ (when (and (<= evil-ex-search-match-beg pnt)
+ (> evil-ex-search-match-end pnt)
+ (not (evil-visual-state-p)))
+ (setq count (1- count)))
+ (if (> count 0) (evil-ex-search-next count)))
+ (t
+ (unless (eobp) (forward-char))
+ (evil-ex-search-next count))))
+ ;; active visual state if command is executed in normal state
+ (when (evil-normal-state-p)
+ (evil-visual-select evil-ex-search-match-beg evil-ex-search-match-end 'inclusive +1 t))
+ (list evil-ex-search-match-beg evil-ex-search-match-end))
+
+(evil-define-text-object evil-previous-match (count &optional beg end type)
+ "Select next match."
+ (unless (and (boundp 'evil-search-module)
+ (eq evil-search-module 'evil-search))
+ (user-error "previous-match text objects only work with Evil search module."))
+ (let ((evil-ex-search-direction
+ (if (eq evil-ex-search-direction 'backward)
+ 'forward
+ 'backward)))
+ (evil-next-match count beg end type)))
+
+;;; Operator commands
+
+(evil-define-operator evil-yank (beg end type register yank-handler)
+ "Saves the characters in motion into the kill-ring."
+ :move-point nil
+ :repeat nil
+ (interactive "<R><x><y>")
+ (let ((evil-was-yanked-without-register
+ (and evil-was-yanked-without-register (not register))))
+ (cond
+ ((and (fboundp 'cua--global-mark-active)
+ (fboundp 'cua-copy-region-to-global-mark)
+ (cua--global-mark-active))
+ (cua-copy-region-to-global-mark beg end))
+ ((eq type 'block)
+ (evil-yank-rectangle beg end register yank-handler))
+ ((eq type 'line)
+ (evil-yank-lines beg end register yank-handler))
+ (t
+ (evil-yank-characters beg end register yank-handler)))))
+
+(evil-define-operator evil-yank-line (beg end type register)
+ "Saves whole lines into the kill-ring."
+ :motion evil-line
+ :move-point nil
+ (interactive "<R><x>")
+ (when (evil-visual-state-p)
+ (unless (memq type '(line block))
+ (let ((range (evil-expand beg end 'line)))
+ (setq beg (evil-range-beginning range)
+ end (evil-range-end range)
+ type (evil-type range))))
+ (evil-exit-visual-state))
+ (evil-yank beg end type register))
+
+(evil-define-operator evil-delete (beg end type register yank-handler)
+ "Delete text from BEG to END with TYPE.
+Save in REGISTER or in the kill-ring with YANK-HANDLER."
+ (interactive "<R><x><y>")
+ (unless register
+ (let ((text (filter-buffer-substring beg end)))
+ (unless (string-match-p "\n" text)
+ ;; set the small delete register
+ (evil-set-register ?- text))))
+ (let ((evil-was-yanked-without-register nil))
+ (evil-yank beg end type register yank-handler))
+ (cond
+ ((eq type 'block)
+ (evil-apply-on-block #'delete-region beg end nil))
+ ((and (eq type 'line)
+ (= end (point-max))
+ (or (= beg end)
+ (/= (char-before end) ?\n))
+ (/= beg (point-min))
+ (= (char-before beg) ?\n))
+ (delete-region (1- beg) end))
+ (t
+ (delete-region beg end)))
+ ;; place cursor on beginning of line
+ (when (and (called-interactively-p 'any)
+ (eq type 'line))
+ (evil-first-non-blank)))
+
+(evil-define-operator evil-delete-line (beg end type register yank-handler)
+ "Delete to end of line."
+ :motion nil
+ :keep-visual t
+ (interactive "<R><x>")
+ ;; act linewise in Visual state
+ (let* ((beg (or beg (point)))
+ (end (or end beg)))
+ (when (evil-visual-state-p)
+ (unless (memq type '(line block))
+ (let ((range (evil-expand beg end 'line)))
+ (setq beg (evil-range-beginning range)
+ end (evil-range-end range)
+ type (evil-type range))))
+ (evil-exit-visual-state))
+ (cond
+ ((eq type 'block)
+ ;; equivalent to $d, i.e., we use the block-to-eol selection and
+ ;; call `evil-delete'. In this case we fake the call to
+ ;; `evil-end-of-line' by setting `temporary-goal-column' and
+ ;; `last-command' appropriately as `evil-end-of-line' would do.
+ (let ((temporary-goal-column most-positive-fixnum)
+ (last-command 'next-line))
+ (evil-delete beg end 'block register yank-handler)))
+ ((eq type 'line)
+ (evil-delete beg end type register yank-handler))
+ (t
+ (evil-delete beg (line-end-position) type register yank-handler)))))
+
+(evil-define-operator evil-delete-whole-line
+ (beg end type register yank-handler)
+ "Delete whole line."
+ :motion evil-line
+ (interactive "<R><x>")
+ (evil-delete beg end type register yank-handler))
+
+(evil-define-operator evil-delete-char (beg end type register)
+ "Delete next character."
+ :motion evil-forward-char
+ (interactive "<R><x>")
+ (evil-delete beg end type register))
+
+(evil-define-operator evil-delete-backward-char (beg end type register)
+ "Delete previous character."
+ :motion evil-backward-char
+ (interactive "<R><x>")
+ (evil-delete beg end type register))
+
+(evil-define-command evil-delete-backward-char-and-join (count)
+ "Delete previous character and join lines.
+If point is at the beginning of a line then the current line will
+be joined with the previous line if and only if
+`evil-backspace-join-lines'."
+ (interactive "p")
+ (if (or evil-backspace-join-lines (not (bolp)))
+ (call-interactively 'delete-backward-char)
+ (user-error "Beginning of line")))
+
+(evil-define-command evil-delete-backward-word ()
+ "Delete previous word."
+ (if (and (bolp) (not (bobp)))
+ (progn
+ (unless evil-backspace-join-lines (user-error "Beginning of line"))
+ (delete-char -1))
+ (delete-region (max
+ (save-excursion
+ (evil-backward-word-begin)
+ (point))
+ (line-beginning-position))
+ (point))))
+
+(defun evil-ex-delete-or-yank (should-delete beg end type register count yank-handler)
+ "Execute evil-delete or evil-yank on the given region.
+If SHOULD-DELETE is t, evil-delete will be executed, otherwise
+evil-yank.
+The region specified by BEG and END will be adjusted if COUNT is
+given."
+ (when count
+ ;; with COUNT, the command should go the end of the region and delete/yank
+ ;; COUNT lines from there
+ (setq beg (save-excursion
+ (goto-char end)
+ (forward-line -1)
+ (point))
+ end (save-excursion
+ (goto-char end)
+ (point-at-bol count))
+ type 'line))
+ (funcall (if should-delete 'evil-delete 'evil-yank) beg end type register yank-handler))
+
+(evil-define-operator evil-ex-delete (beg end type register count yank-handler)
+ "The Ex delete command.
+\[BEG,END]delete [REGISTER] [COUNT]"
+ (interactive "<R><xc/><y>")
+ (evil-ex-delete-or-yank t beg end type register count yank-handler))
+
+(evil-define-operator evil-ex-yank (beg end type register count yank-handler)
+ "The Ex yank command.
+\[BEG,END]yank [REGISTER] [COUNT]"
+ (interactive "<R><xc/><y>")
+ (evil-ex-delete-or-yank nil beg end type register count yank-handler))
+
+(evil-define-operator evil-change
+ (beg end type register yank-handler delete-func)
+ "Change text from BEG to END with TYPE.
+Save in REGISTER or the kill-ring with YANK-HANDLER.
+DELETE-FUNC is a function for deleting text, default `evil-delete'.
+If TYPE is `line', insertion starts on an empty line.
+If TYPE is `block', the inserted text in inserted at each line
+of the block."
+ (interactive "<R><x><y>")
+ (let ((delete-func (or delete-func #'evil-delete))
+ (nlines (1+ (evil-count-lines beg end)))
+ (opoint (save-excursion
+ (goto-char beg)
+ (line-beginning-position))))
+ (unless (eq evil-want-fine-undo t)
+ (evil-start-undo-step))
+ (funcall delete-func beg end type register yank-handler)
+ (cond
+ ((eq type 'line)
+ (if ( = opoint (point))
+ (evil-open-above 1)
+ (evil-open-below 1)))
+ ((eq type 'block)
+ (evil-insert 1 nlines))
+ (t
+ (evil-insert 1)))))
+
+(evil-define-operator evil-change-line (beg end type register yank-handler)
+ "Change to end of line."
+ :motion evil-end-of-line
+ (interactive "<R><x><y>")
+ (evil-change beg end type register yank-handler #'evil-delete-line))
+
+(evil-define-operator evil-change-whole-line
+ (beg end type register yank-handler)
+ "Change whole line."
+ :motion evil-line
+ (interactive "<R><x>")
+ (evil-change beg end type register yank-handler #'evil-delete-whole-line))
+
+(evil-define-command evil-copy (beg end address)
+ "Copy lines in BEG END below line given by ADDRESS."
+ :motion evil-line
+ (interactive "<r><addr>")
+ (goto-char (point-min))
+ (forward-line address)
+ (let* ((txt (buffer-substring-no-properties beg end))
+ (len (length txt)))
+ ;; ensure text consists of complete lines
+ (when (or (zerop len) (/= (aref txt (1- len)) ?\n))
+ (setq txt (concat txt "\n")))
+ (when (and (eobp) (not (bolp))) (newline)) ; incomplete last line
+ (insert txt)
+ (forward-line -1)))
+
+(evil-define-command evil-move (beg end address)
+ "Move lines in BEG END below line given by ADDRESS."
+ :motion evil-line
+ (interactive "<r><addr>")
+ (goto-char (point-min))
+ (forward-line address)
+ (let* ((m (set-marker (make-marker) (point)))
+ (txt (buffer-substring-no-properties beg end))
+ (len (length txt)))
+ (delete-region beg end)
+ (goto-char m)
+ (set-marker m nil)
+ ;; ensure text consists of complete lines
+ (when (or (zerop len) (/= (aref txt (1- len)) ?\n))
+ (setq txt (concat txt "\n")))
+ (when (and (eobp) (not (bolp))) (newline)) ; incomplete last line
+ (when (evil-visual-state-p)
+ (move-marker evil-visual-mark (point)))
+ (insert txt)
+ (forward-line -1)
+ (when (evil-visual-state-p)
+ (move-marker evil-visual-point (point)))))
+
+(evil-define-operator evil-substitute (beg end type register)
+ "Change a character."
+ :motion evil-forward-char
+ (interactive "<R><x>")
+ (evil-change beg end type register))
+
+(evil-define-operator evil-upcase (beg end type)
+ "Convert text to upper case."
+ (if (eq type 'block)
+ (evil-apply-on-block #'evil-upcase beg end nil)
+ (upcase-region beg end)))
+
+(evil-define-operator evil-downcase (beg end type)
+ "Convert text to lower case."
+ (if (eq type 'block)
+ (evil-apply-on-block #'evil-downcase beg end nil)
+ (downcase-region beg end)))
+
+(evil-define-operator evil-invert-case (beg end type)
+ "Invert case of text."
+ (let (char)
+ (if (eq type 'block)
+ (evil-apply-on-block #'evil-invert-case beg end nil)
+ (save-excursion
+ (goto-char beg)
+ (while (< beg end)
+ (setq char (following-char))
+ (delete-char 1 nil)
+ (if (eq (upcase char) char)
+ (insert-char (downcase char) 1)
+ (insert-char (upcase char) 1))
+ (setq beg (1+ beg)))))))
+
+(evil-define-operator evil-invert-char (beg end type)
+ "Invert case of character."
+ :motion evil-forward-char
+ (if (eq type 'block)
+ (evil-apply-on-block #'evil-invert-case beg end nil)
+ (evil-invert-case beg end)
+ (when evil-this-motion
+ (goto-char end)
+ (when (and evil-cross-lines
+ evil-move-cursor-back
+ (not evil-move-beyond-eol)
+ (not (evil-visual-state-p))
+ (not (evil-operator-state-p))
+ (eolp) (not (eobp)) (not (bolp)))
+ (forward-char)))))
+
+(evil-define-operator evil-rot13 (beg end type)
+ "ROT13 encrypt text."
+ (if (eq type 'block)
+ (evil-apply-on-block #'evil-rot13 beg end nil)
+ (rot13-region beg end)))
+
+(evil-define-operator evil-join (beg end)
+ "Join the selected lines."
+ :motion evil-line
+ (let ((count (count-lines beg end)))
+ (when (> count 1)
+ (setq count (1- count)))
+ (goto-char beg)
+ (dotimes (var count)
+ (join-line 1))))
+
+(evil-define-operator evil-join-whitespace (beg end)
+ "Join the selected lines without changing whitespace.
+\\<evil-normal-state-map>Like \\[evil-join], \
+but doesn't insert or remove any spaces."
+ :motion evil-line
+ (let ((count (count-lines beg end)))
+ (when (> count 1)
+ (setq count (1- count)))
+ (goto-char beg)
+ (dotimes (var count)
+ (evil-move-end-of-line 1)
+ (unless (eobp)
+ (delete-char 1)))))
+
+(evil-define-operator evil-ex-join (beg end &optional count bang)
+ "Join the selected lines with optional COUNT and BANG."
+ (interactive "<r><a><!>")
+ (if (and count (not (string-match-p "^[1-9][0-9]*$" count)))
+ (user-error "Invalid count")
+ (let ((join-fn (if bang 'evil-join-whitespace 'evil-join)))
+ (cond
+ ((not count)
+ ;; without count - just join the given region
+ (funcall join-fn beg end))
+ (t
+ ;; emulate vim's :join when count is given - start from the
+ ;; end of the region and join COUNT lines from there
+ (let* ((count-num (string-to-number count))
+ (beg-adjusted (save-excursion
+ (goto-char end)
+ (forward-line -1)
+ (point)))
+ (end-adjusted (save-excursion
+ (goto-char end)
+ (point-at-bol count-num))))
+ (funcall join-fn beg-adjusted end-adjusted)))))))
+
+(evil-define-operator evil-fill (beg end)
+ "Fill text."
+ :move-point nil
+ :type line
+ (save-excursion
+ (condition-case nil
+ (fill-region beg end)
+ (error nil))))
+
+(evil-define-operator evil-fill-and-move (beg end)
+ "Fill text and move point to the end of the filled region."
+ :move-point nil
+ :type line
+ (let ((marker (make-marker)))
+ (move-marker marker (1- end))
+ (condition-case nil
+ (progn
+ (fill-region beg end)
+ (goto-char marker)
+ (evil-first-non-blank))
+ (error nil))))
+
+(evil-define-operator evil-indent (beg end)
+ "Indent text."
+ :move-point nil
+ :type line
+ (if (and (= beg (line-beginning-position))
+ (= end (line-beginning-position 2)))
+ ;; since some Emacs modes can only indent one line at a time,
+ ;; implement "==" as a call to `indent-according-to-mode'
+ (indent-according-to-mode)
+ (goto-char beg)
+ (indent-region beg end))
+ ;; We also need to tabify or untabify the leading white characters
+ (when evil-indent-convert-tabs
+ (let* ((beg-line (line-number-at-pos beg))
+ (end-line (line-number-at-pos end))
+ (ln beg-line)
+ (convert-white (if indent-tabs-mode 'tabify 'untabify)))
+ (save-excursion
+ (while (<= ln end-line)
+ (goto-char (point-min))
+ (forward-line (- ln 1))
+ (back-to-indentation)
+ ;; Whether tab or space should be used is determined by indent-tabs-mode
+ (funcall convert-white (line-beginning-position) (point))
+ (setq ln (1+ ln)))))
+ (back-to-indentation)))
+
+(evil-define-operator evil-indent-line (beg end)
+ "Indent the line."
+ :motion evil-line
+ (evil-indent beg end))
+
+(evil-define-operator evil-shift-left (beg end &optional count preserve-empty)
+ "Shift text from BEG to END to the left.
+The text is shifted to the nearest multiple of `evil-shift-width'
+\(the rounding can be disabled by setting `evil-shift-round').
+If PRESERVE-EMPTY is non-nil, lines that contain only spaces are
+indented, too, otherwise they are ignored. The relative column
+of point is preserved if this function is not called
+interactively. Otherwise, if the function is called as an
+operator, point is moved to the first non-blank character.
+See also `evil-shift-right'."
+ :type line
+ (interactive "<r><vc>")
+ (evil-shift-right beg end (- (or count 1)) preserve-empty))
+
+(evil-define-operator evil-shift-right (beg end &optional count preserve-empty)
+ "Shift text from BEG to END to the right.
+The text is shifted to the nearest multiple of `evil-shift-width'
+\(the rounding can be disabled by setting `evil-shift-round').
+If PRESERVE-EMPTY is non-nil, lines that contain only spaces are
+indented, too, otherwise they are ignored. The relative column
+of point is preserved if this function is not called
+interactively. Otherwise, if the function is called as an
+operator, point is moved to the first non-blank character.
+See also `evil-shift-left'."
+ :type line
+ (interactive "<r><vc>")
+ (setq count (or count 1))
+ (let ((beg (set-marker (make-marker) beg))
+ (end (set-marker (make-marker) end))
+ (pnt-indent (current-column))
+ first-shift) ; shift of first line
+ (save-excursion
+ (goto-char beg)
+ (while (< (point) end)
+ (let* ((indent (current-indentation))
+ (new-indent
+ (max 0
+ (if (not evil-shift-round)
+ (+ indent (* count evil-shift-width))
+ (* (+ (/ indent evil-shift-width)
+ count
+ (cond
+ ((> count 0) 0)
+ ((zerop (mod indent evil-shift-width)) 0)
+ (t 1)))
+ evil-shift-width)))))
+ (unless first-shift
+ (setq first-shift (- new-indent indent)))
+ (when (or preserve-empty
+ (save-excursion
+ (skip-chars-forward " \t")
+ (not (eolp))))
+ (indent-to new-indent 0))
+ (delete-region (point) (progn (skip-chars-forward " \t") (point)))
+ (forward-line 1))))
+ ;; assuming that point is in the first line, adjust its position
+ (if (called-interactively-p 'any)
+ (evil-first-non-blank)
+ (move-to-column (max 0 (+ pnt-indent first-shift))))))
+
+(evil-define-command evil-shift-right-line (count)
+ "Shift the current line COUNT times to the right.
+The text is shifted to the nearest multiple of
+`evil-shift-width'. Like `evil-shift-right' but always works on
+the current line."
+ (interactive "<c>")
+ (evil-shift-right (line-beginning-position) (line-beginning-position 2) count t))
+
+(evil-define-command evil-shift-left-line (count)
+ "Shift the current line COUNT times to the left.
+The text is shifted to the nearest multiple of
+`evil-shift-width'. Like `evil-shift-left' but always works on
+the current line."
+ (interactive "<c>")
+ (evil-shift-left (line-beginning-position) (line-beginning-position 2) count t))
+
+(evil-define-operator evil-align-left (beg end type &optional width)
+ "Right-align lines in the region at WIDTH columns.
+The default for width is the value of `fill-column'."
+ :motion evil-line
+ :type line
+ (interactive "<R><a>")
+ (evil-justify-lines beg end 'left (if width
+ (string-to-number width)
+ 0)))
+
+(evil-define-operator evil-align-right (beg end type &optional width)
+ "Right-align lines in the region at WIDTH columns.
+The default for width is the value of `fill-column'."
+ :motion evil-line
+ :type line
+ (interactive "<R><a>")
+ (evil-justify-lines beg end 'right (if width
+ (string-to-number width)
+ fill-column)))
+
+(evil-define-operator evil-align-center (beg end type &optional width)
+ "Centers lines in the region between WIDTH columns.
+The default for width is the value of `fill-column'."
+ :motion evil-line
+ :type line
+ (interactive "<R><a>")
+ (evil-justify-lines beg end 'center (if width
+ (string-to-number width)
+ fill-column)))
+
+(evil-define-operator evil-replace (beg end type char)
+ "Replace text from BEG to END with CHAR."
+ :motion evil-forward-char
+ (interactive "<R>"
+ (unwind-protect
+ (let ((evil-force-cursor 'replace))
+ (evil-refresh-cursor)
+ (list (evil-read-key)))
+ (evil-refresh-cursor)))
+ (when char
+ (if (eq type 'block)
+ (save-excursion
+ (evil-apply-on-rectangle
+ #'(lambda (begcol endcol char)
+ (let ((maxcol (evil-column (line-end-position))))
+ (when (< begcol maxcol)
+ (setq endcol (min endcol maxcol))
+ (let ((beg (evil-move-to-column begcol nil t))
+ (end (evil-move-to-column endcol nil t)))
+ (delete-region beg end)
+ (insert (make-string (- endcol begcol) char))))))
+ beg end char))
+ (goto-char beg)
+ (cond
+ ((eq char ?\n)
+ (delete-region beg end)
+ (newline)
+ (when evil-auto-indent
+ (indent-according-to-mode)))
+ (t
+ (while (< (point) end)
+ (if (eq (char-after) ?\n)
+ (forward-char)
+ (delete-char 1)
+ (insert-char char 1)))
+ (goto-char (max beg (1- end))))))))
+
+(evil-define-command evil-paste-before
+ (count &optional register yank-handler)
+ "Pastes the latest yanked text before the cursor position.
+The return value is the yanked text."
+ :suppress-operator t
+ (interactive "P<x>")
+ (if (evil-visual-state-p)
+ (evil-visual-paste count register)
+ (evil-with-undo
+ (let* ((text (if register
+ (evil-get-register register)
+ (current-kill 0)))
+ (yank-handler (or yank-handler
+ (when (stringp text)
+ (car-safe (get-text-property
+ 0 'yank-handler text)))))
+ (opoint (point)))
+ (when text
+ (if (functionp yank-handler)
+ (let ((evil-paste-count count)
+ ;; for non-interactive use
+ (this-command #'evil-paste-before))
+ (push-mark opoint t)
+ (insert-for-yank text))
+ ;; no yank-handler, default
+ (when (vectorp text)
+ (setq text (evil-vector-to-string text)))
+ (set-text-properties 0 (length text) nil text)
+ (push-mark opoint t)
+ (dotimes (i (or count 1))
+ (insert-for-yank text))
+ (setq evil-last-paste
+ (list #'evil-paste-before
+ count
+ opoint
+ opoint ; beg
+ (point))) ; end
+ (evil-set-marker ?\[ opoint)
+ (evil-set-marker ?\] (1- (point)))
+ (when (and evil-move-cursor-back
+ (> (length text) 0))
+ (backward-char))))
+ ;; no paste-pop after pasting from a register
+ (when register
+ (setq evil-last-paste nil))
+ (and (> (length text) 0) text)))))
+
+(evil-define-command evil-paste-after
+ (count &optional register yank-handler)
+ "Pastes the latest yanked text behind point.
+The return value is the yanked text."
+ :suppress-operator t
+ (interactive "P<x>")
+ (if (evil-visual-state-p)
+ (evil-visual-paste count register)
+ (evil-with-undo
+ (let* ((text (if register
+ (evil-get-register register)
+ (current-kill 0)))
+ (yank-handler (or yank-handler
+ (when (stringp text)
+ (car-safe (get-text-property
+ 0 'yank-handler text)))))
+ (opoint (point)))
+ (when text
+ (if (functionp yank-handler)
+ (let ((evil-paste-count count)
+ ;; for non-interactive use
+ (this-command #'evil-paste-after))
+ (insert-for-yank text))
+ ;; no yank-handler, default
+ (when (vectorp text)
+ (setq text (evil-vector-to-string text)))
+ (set-text-properties 0 (length text) nil text)
+ (unless (eolp) (forward-char))
+ (push-mark (point) t)
+ ;; TODO: Perhaps it is better to collect a list of all
+ ;; (point . mark) pairs to undo the yanking for COUNT > 1.
+ ;; The reason is that this yanking could very well use
+ ;; `yank-handler'.
+ (let ((beg (point)))
+ (dotimes (i (or count 1))
+ (insert-for-yank text))
+ (setq evil-last-paste
+ (list #'evil-paste-after
+ count
+ opoint
+ beg ; beg
+ (point))) ; end
+ (evil-set-marker ?\[ beg)
+ (evil-set-marker ?\] (1- (point)))
+ (when (evil-normal-state-p)
+ (evil-move-cursor-back)))))
+ (when register
+ (setq evil-last-paste nil))
+ (and (> (length text) 0) text)))))
+
+(evil-define-command evil-visual-paste (count &optional register)
+ "Paste over Visual selection."
+ :suppress-operator t
+ (interactive "P<x>")
+ ;; evil-visual-paste is typically called from evil-paste-before or
+ ;; evil-paste-after, but we have to mark that the paste was from
+ ;; visual state
+ (setq this-command 'evil-visual-paste)
+ (let* ((text (if register
+ (evil-get-register register)
+ (current-kill 0)))
+ (yank-handler (car-safe (get-text-property
+ 0 'yank-handler text)))
+ new-kill
+ paste-eob)
+ (evil-with-undo
+ (let* ((kill-ring (list (current-kill 0)))
+ (kill-ring-yank-pointer kill-ring))
+ (when (evil-visual-state-p)
+ (evil-visual-rotate 'upper-left)
+ ;; if we replace the last buffer line that does not end in a
+ ;; newline, we use `evil-paste-after' because `evil-delete'
+ ;; will move point to the line above
+ (when (and (= evil-visual-end (point-max))
+ (/= (char-before (point-max)) ?\n))
+ (setq paste-eob t))
+ (evil-delete evil-visual-beginning evil-visual-end
+ (evil-visual-type))
+ (when (and (eq yank-handler #'evil-yank-line-handler)
+ (not (eq (evil-visual-type) 'line))
+ (not (= evil-visual-end (point-max))))
+ (insert "\n"))
+ (evil-normal-state)
+ (setq new-kill (current-kill 0))
+ (current-kill 1))
+ (if paste-eob
+ (evil-paste-after count register)
+ (evil-paste-before count register)))
+ (when evil-kill-on-visual-paste
+ (kill-new new-kill))
+ ;; mark the last paste as visual-paste
+ (setq evil-last-paste
+ (list (nth 0 evil-last-paste)
+ (nth 1 evil-last-paste)
+ (nth 2 evil-last-paste)
+ (nth 3 evil-last-paste)
+ (nth 4 evil-last-paste)
+ t)))))
+
+(defun evil-paste-from-register (register)
+ "Paste from REGISTER."
+ (interactive
+ (let ((overlay (make-overlay (point) (point)))
+ (string "\""))
+ (unwind-protect
+ (progn
+ ;; display " in the buffer while reading register
+ (put-text-property 0 1 'face 'minibuffer-prompt string)
+ (put-text-property 0 1 'cursor t string)
+ (overlay-put overlay 'after-string string)
+ (list (or evil-this-register (read-char))))
+ (delete-overlay overlay))))
+ (when (evil-paste-before nil register t)
+ ;; go to end of pasted text
+ (unless (eobp)
+ (forward-char))))
+
+(defun evil-paste-last-insertion ()
+ "Paste last insertion."
+ (interactive)
+ (evil-paste-from-register ?.))
+
+(evil-define-command evil-use-register (register)
+ "Use REGISTER for the next command."
+ :keep-visual t
+ :repeat ignore
+ (interactive "<C>")
+ (setq evil-this-register register))
+
+(defvar evil-macro-buffer nil
+ "The buffer that has been active on macro recording.")
+
+(evil-define-command evil-record-macro (register)
+ "Record a keyboard macro into REGISTER.
+If REGISTER is :, /, or ?, the corresponding command line window
+will be opened instead."
+ :keep-visual t
+ :suppress-operator t
+ (interactive
+ (list (unless (and evil-this-macro defining-kbd-macro)
+ (or evil-this-register (evil-read-key)))))
+ (cond
+ ((eq register ?\C-g)
+ (keyboard-quit))
+ ((and evil-this-macro defining-kbd-macro)
+ (setq evil-macro-buffer nil)
+ (condition-case nil
+ (end-kbd-macro)
+ (error nil))
+ (when last-kbd-macro
+ (when (member last-kbd-macro '("" []))
+ (setq last-kbd-macro nil))
+ (evil-set-register evil-this-macro last-kbd-macro))
+ (setq evil-this-macro nil))
+ ((eq register ?:)
+ (evil-command-window-ex))
+ ((eq register ?/)
+ (evil-command-window-search-forward))
+ ((eq register ??)
+ (evil-command-window-search-backward))
+ ((or (and (>= register ?0) (<= register ?9))
+ (and (>= register ?a) (<= register ?z))
+ (and (>= register ?A) (<= register ?Z)))
+ (when defining-kbd-macro (end-kbd-macro))
+ (setq evil-this-macro register)
+ (evil-set-register evil-this-macro nil)
+ (start-kbd-macro nil)
+ (setq evil-macro-buffer (current-buffer)))
+ (t (error "Invalid register"))))
+
+(evil-define-command evil-execute-macro (count macro)
+ "Execute keyboard macro MACRO, COUNT times.
+When called with a non-numerical prefix \
+\(such as \\[universal-argument]),
+COUNT is infinite. MACRO is read from a register
+when called interactively."
+ :keep-visual t
+ :suppress-operator t
+ (interactive
+ (let (count macro register)
+ (setq count (if current-prefix-arg
+ (if (numberp current-prefix-arg)
+ current-prefix-arg
+ 0) 1)
+ register (or evil-this-register (read-char)))
+ (cond
+ ((or (and (eq register ?@) (eq evil-last-register ?:))
+ (eq register ?:))
+ (setq macro (lambda () (evil-ex-repeat nil))
+ evil-last-register ?:))
+ ((eq register ?@)
+ (unless evil-last-register
+ (user-error "No previously executed keyboard macro."))
+ (setq macro (evil-get-register evil-last-register t)))
+ (t
+ (setq macro (evil-get-register register t)
+ evil-last-register register)))
+ (list count macro)))
+ (cond
+ ((functionp macro)
+ (evil-repeat-abort)
+ (dotimes (i (or count 1))
+ (funcall macro)))
+ ((or (and (not (stringp macro))
+ (not (vectorp macro)))
+ (member macro '("" [])))
+ ;; allow references to currently empty registers
+ ;; when defining macro
+ (unless evil-this-macro
+ (user-error "No previous macro")))
+ (t
+ (condition-case err
+ (evil-with-single-undo
+ (execute-kbd-macro macro count))
+ ;; enter Normal state if the macro fails
+ (error
+ (evil-normal-state)
+ (evil-normalize-keymaps)
+ (signal (car err) (cdr err)))))))
+
+;;; Visual commands
+
+(evil-define-motion evil-visual-restore ()
+ "Restore previous selection."
+ (let* ((point (point))
+ (mark (or (mark t) point))
+ (dir evil-visual-direction)
+ (type (evil-visual-type))
+ range)
+ (unless (evil-visual-state-p)
+ (cond
+ ;; No previous selection.
+ ((or (null evil-visual-selection)
+ (null evil-visual-mark)
+ (null evil-visual-point)))
+ ;; If the type was one-to-one, it is preferable to infer
+ ;; point and mark from the selection's boundaries. The reason
+ ;; is that a destructive operation may displace the markers
+ ;; inside the selection.
+ ((evil-type-property type :one-to-one)
+ (setq range (evil-contract-range (evil-visual-range))
+ mark (evil-range-beginning range)
+ point (evil-range-end range))
+ (when (< dir 0)
+ (evil-swap mark point)))
+ ;; If the type wasn't one-to-one, we have to restore the
+ ;; selection on the basis of the previous point and mark.
+ (t
+ (setq mark evil-visual-mark
+ point evil-visual-point)))
+ (evil-visual-make-selection mark point type t))))
+
+(evil-define-motion evil-visual-exchange-corners ()
+ "Rearrange corners in Visual Block mode.
+
+ M---+ +---M
+ | | <=> | |
+ +---P P---+
+
+For example, if mark is in the upper left corner and point
+in the lower right, this function puts mark in the upper right
+corner and point in the lower left."
+ (cond
+ ((eq evil-visual-selection 'block)
+ (let* ((point (point))
+ (mark (or (mark t) point))
+ (point-col (evil-column point))
+ (mark-col (evil-column mark))
+ (mark (save-excursion
+ (goto-char mark)
+ (evil-move-to-column point-col)
+ (point)))
+ (point (save-excursion
+ (goto-char point)
+ (evil-move-to-column mark-col)
+ (point))))
+ (evil-visual-refresh mark point)))
+ (t
+ (evil-exchange-point-and-mark)
+ (evil-visual-refresh))))
+
+(evil-define-command evil-visual-rotate (corner &optional beg end type)
+ "In Visual Block selection, put point in CORNER.
+Corner may be one of `upper-left', `upper-right', `lower-left'
+and `lower-right':
+
+ upper-left +---+ upper-right
+ | |
+ lower-left +---+ lower-right
+
+When called interactively, the selection is rotated blockwise."
+ :keep-visual t
+ (interactive
+ (let ((corners '(upper-left upper-right lower-right lower-left)))
+ (list (or (cadr (memq (evil-visual-block-corner) corners))
+ 'upper-left))))
+ (let* ((beg (or beg (point)))
+ (end (or end (mark t) beg))
+ (type (or type evil-this-type))
+ range)
+ (cond
+ ((memq type '(rectangle block))
+ (setq range (evil-block-rotate beg end :corner corner)
+ beg (pop range)
+ end (pop range))
+ (unless (eq corner (evil-visual-block-corner corner beg end))
+ (evil-swap beg end))
+ (goto-char beg)
+ (when (evil-visual-state-p)
+ (evil-move-mark end)
+ (evil-visual-refresh nil nil nil :corner corner)))
+ ((memq corner '(upper-right lower-right))
+ (goto-char (max beg end))
+ (when (evil-visual-state-p)
+ (evil-move-mark (min beg end))))
+ (t
+ (goto-char (min beg end))
+ (when (evil-visual-state-p)
+ (evil-move-mark (max beg end)))))))
+
+;;; Insertion commands
+
+(defun evil-insert (count &optional vcount skip-empty-lines)
+ "Switch to Insert state just before point.
+The insertion will be repeated COUNT times and repeated once for
+the next VCOUNT - 1 lines starting at the same column.
+If SKIP-EMPTY-LINES is non-nil, the insertion will not be performed
+on lines on which the insertion point would be after the end of the
+lines. This is the default behaviour for Visual-state insertion."
+ (interactive
+ (list (prefix-numeric-value current-prefix-arg)
+ (and (evil-visual-state-p)
+ (memq (evil-visual-type) '(line block))
+ (save-excursion
+ (let ((m (mark)))
+ ;; go to upper-left corner temporarily so
+ ;; `count-lines' yields accurate results
+ (evil-visual-rotate 'upper-left)
+ (prog1 (count-lines evil-visual-beginning evil-visual-end)
+ (set-mark m)))))
+ (evil-visual-state-p)))
+ (if (and (called-interactively-p 'any)
+ (evil-visual-state-p))
+ (cond
+ ((eq (evil-visual-type) 'line)
+ (evil-visual-rotate 'upper-left)
+ (evil-insert-line count vcount))
+ ((eq (evil-visual-type) 'block)
+ (let ((column (min (evil-column evil-visual-beginning)
+ (evil-column evil-visual-end))))
+ (evil-visual-rotate 'upper-left)
+ (move-to-column column t)
+ (evil-insert count vcount skip-empty-lines)))
+ (t
+ (evil-visual-rotate 'upper-left)
+ (evil-insert count vcount skip-empty-lines)))
+ (setq evil-insert-count count
+ evil-insert-lines nil
+ evil-insert-vcount (and vcount
+ (> vcount 1)
+ (list (line-number-at-pos)
+ (current-column)
+ vcount))
+ evil-insert-skip-empty-lines skip-empty-lines)
+ (evil-insert-state 1)))
+
+(defun evil-append (count &optional vcount skip-empty-lines)
+ "Switch to Insert state just after point.
+The insertion will be repeated COUNT times and repeated once for
+the next VCOUNT - 1 lines starting at the same column. If
+SKIP-EMPTY-LINES is non-nil, the insertion will not be performed
+on lines on which the insertion point would be after the end of
+the lines."
+ (interactive
+ (list (prefix-numeric-value current-prefix-arg)
+ (and (evil-visual-state-p)
+ (memq (evil-visual-type) '(line block))
+ (save-excursion
+ (let ((m (mark)))
+ ;; go to upper-left corner temporarily so
+ ;; `count-lines' yields accurate results
+ (evil-visual-rotate 'upper-left)
+ (prog1 (count-lines evil-visual-beginning evil-visual-end)
+ (set-mark m)))))))
+ (if (and (called-interactively-p 'any)
+ (evil-visual-state-p))
+ (cond
+ ((or (eq (evil-visual-type) 'line)
+ (and (eq (evil-visual-type) 'block)
+ (memq last-command '(next-line previous-line))
+ (numberp temporary-goal-column)
+ (= temporary-goal-column most-positive-fixnum)))
+ (evil-visual-rotate 'upper-left)
+ (evil-append-line count vcount))
+ ((eq (evil-visual-type) 'block)
+ (let ((column (max (evil-column evil-visual-beginning)
+ (evil-column evil-visual-end))))
+ (evil-visual-rotate 'upper-left)
+ (move-to-column column t)
+ (evil-insert count vcount skip-empty-lines)))
+ (t
+ (evil-visual-rotate 'lower-right)
+ (evil-append count)))
+ (unless (eolp) (forward-char))
+ (evil-insert count vcount skip-empty-lines)
+ (add-hook 'post-command-hook #'evil-maybe-remove-spaces)))
+
+(defun evil-insert-resume (count)
+ "Switch to Insert state at previous insertion point.
+The insertion will be repeated COUNT times. If called from visual
+state, only place point at the previous insertion position but do not
+switch to insert state."
+ (interactive "p")
+ (evil-goto-mark ?^ t)
+ (unless (evil-visual-state-p)
+ (evil-insert count)))
+
+(defun evil-open-above (count)
+ "Insert a new line above point and switch to Insert state.
+The insertion will be repeated COUNT times."
+ (interactive "p")
+ (unless (eq evil-want-fine-undo t)
+ (evil-start-undo-step))
+ (evil-insert-newline-above)
+ (setq evil-insert-count count
+ evil-insert-lines t
+ evil-insert-vcount nil)
+ (evil-insert-state 1)
+ (when evil-auto-indent
+ (indent-according-to-mode)))
+
+(defun evil-open-below (count)
+ "Insert a new line below point and switch to Insert state.
+The insertion will be repeated COUNT times."
+ (interactive "p")
+ (unless (eq evil-want-fine-undo t)
+ (evil-start-undo-step))
+ (push (point) buffer-undo-list)
+ (evil-insert-newline-below)
+ (setq evil-insert-count count
+ evil-insert-lines t
+ evil-insert-vcount nil)
+ (evil-insert-state 1)
+ (when evil-auto-indent
+ (indent-according-to-mode)))
+
+(defun evil-insert-line (count &optional vcount)
+ "Switch to insert state at beginning of current line.
+Point is placed at the first non-blank character on the current
+line. The insertion will be repeated COUNT times. If VCOUNT is
+non nil it should be number > 0. The insertion will be repeated
+in the next VCOUNT - 1 lines below the current one."
+ (interactive "p")
+ (push (point) buffer-undo-list)
+ (back-to-indentation)
+ (setq evil-insert-count count
+ evil-insert-lines nil
+ evil-insert-vcount
+ (and vcount
+ (> vcount 1)
+ (list (line-number-at-pos)
+ #'evil-first-non-blank
+ vcount)))
+ (evil-insert-state 1))
+
+(defun evil-append-line (count &optional vcount)
+ "Switch to Insert state at the end of the current line.
+The insertion will be repeated COUNT times. If VCOUNT is non nil
+it should be number > 0. The insertion will be repeated in the
+next VCOUNT - 1 lines below the current one."
+ (interactive "p")
+ (evil-move-end-of-line)
+ (setq evil-insert-count count
+ evil-insert-lines nil
+ evil-insert-vcount
+ (and vcount
+ (> vcount 1)
+ (list (line-number-at-pos)
+ #'end-of-line
+ vcount)))
+ (evil-insert-state 1))
+
+(evil-define-command evil-insert-digraph (count)
+ "Insert COUNT digraphs."
+ :repeat change
+ (interactive "p")
+ (let ((digraph (evil-read-digraph-char 0)))
+ (insert-char digraph count)))
+
+(evil-define-command evil-ex-show-digraphs ()
+ "Shows a list of all available digraphs."
+ :repeat nil
+ (let ((columns 3))
+ (evil-with-view-list
+ :name "evil-digraphs"
+ :mode-name "Evil Digraphs"
+ :format
+ (cl-loop repeat columns
+ vconcat [("Digraph" 8 nil)
+ ("Sequence" 16 nil)])
+ :entries
+ (let* ((digraphs (mapcar #'(lambda (digraph)
+ (cons (cdr digraph)
+ (car digraph)))
+ (append evil-digraphs-table
+ evil-digraphs-table-user)))
+ (entries (cl-loop for digraph in digraphs
+ collect `(,(concat (char-to-string (nth 1 digraph))
+ (char-to-string (nth 2 digraph)))
+ ,(char-to-string (nth 0 digraph)))))
+ (row)
+ (rows)
+ (clength (* columns 2)))
+ (cl-loop for e in entries
+ do
+ (push (nth 0 e) row)
+ (push (nth 1 e) row)
+ (when (eq (length row) clength)
+ (push `(nil ,(apply #'vector row)) rows)
+ (setq row nil)))
+ rows))))
+
+(defun evil--self-insert-string (string)
+ "Insert STRING as if typed interactively."
+ (let ((chars (append string nil)))
+ (dolist (char chars)
+ (let ((last-command-event char))
+ (self-insert-command 1)))))
+
+(defun evil-copy-from-above (arg)
+ "Copy characters from preceding non-blank line.
+The copied text is inserted before point.
+ARG is the number of lines to move backward.
+See also \\<evil-insert-state-map>\\[evil-copy-from-below]."
+ (interactive
+ (cond
+ ;; if a prefix argument was given, repeat it for subsequent calls
+ ((and (null current-prefix-arg)
+ (eq last-command #'evil-copy-from-above))
+ (setq current-prefix-arg last-prefix-arg)
+ (list (prefix-numeric-value current-prefix-arg)))
+ (t
+ (list (prefix-numeric-value current-prefix-arg)))))
+ (evil--self-insert-string (evil-copy-chars-from-line arg -1)))
+
+(defun evil-copy-from-below (arg)
+ "Copy characters from following non-blank line.
+The copied text is inserted before point.
+ARG is the number of lines to move forward.
+See also \\<evil-insert-state-map>\\[evil-copy-from-above]."
+ (interactive
+ (cond
+ ((and (null current-prefix-arg)
+ (eq last-command #'evil-copy-from-below))
+ (setq current-prefix-arg last-prefix-arg)
+ (list (prefix-numeric-value current-prefix-arg)))
+ (t
+ (list (prefix-numeric-value current-prefix-arg)))))
+ (evil--self-insert-string (evil-copy-chars-from-line arg 1)))
+
+;; adapted from `copy-from-above-command' in misc.el
+(defun evil-copy-chars-from-line (n num &optional col)
+ "Return N characters from line NUM, starting at column COL.
+NUM is relative to the current line and can be negative.
+COL defaults to the current column."
+ (interactive "p")
+ (let ((col (or col (current-column))) prefix)
+ (save-excursion
+ (forward-line num)
+ (when (looking-at "[[:space:]]*$")
+ (if (< num 0)
+ (skip-chars-backward " \t\n")
+ (skip-chars-forward " \t\n")))
+ (evil-move-beginning-of-line)
+ (move-to-column col)
+ ;; if the column winds up in middle of a tab,
+ ;; return the appropriate number of spaces
+ (when (< col (current-column))
+ (if (eq (preceding-char) ?\t)
+ (let ((len (min n (- (current-column) col))))
+ (setq prefix (make-string len ?\s)
+ n (- n len)))
+ ;; if in middle of a control char, return the whole char
+ (backward-char 1)))
+ (concat prefix
+ (buffer-substring (point)
+ (min (line-end-position)
+ (+ n (point))))))))
+
+;; completion
+(evil-define-command evil-complete-next (&optional arg)
+ "Complete to the nearest following word.
+Search backward if a match isn't found.
+Calls `evil-complete-next-func'."
+ :repeat change
+ (interactive "P")
+ (if (minibufferp)
+ (funcall evil-complete-next-minibuffer-func)
+ (funcall evil-complete-next-func arg)))
+
+(evil-define-command evil-complete-previous (&optional arg)
+ "Complete to the nearest preceding word.
+Search forward if a match isn't found.
+Calls `evil-complete-previous-func'."
+ :repeat change
+ (interactive "P")
+ (if (minibufferp)
+ (funcall evil-complete-previous-minibuffer-func)
+ (funcall evil-complete-previous-func arg)))
+
+(evil-define-command evil-complete-next-line (&optional arg)
+ "Complete a whole line.
+Calls `evil-complete-next-line-func'."
+ :repeat change
+ (interactive "P")
+ (if (minibufferp)
+ (funcall evil-complete-next-minibuffer-func)
+ (funcall evil-complete-next-line-func arg)))
+
+(evil-define-command evil-complete-previous-line (&optional arg)
+ "Complete a whole line.
+Calls `evil-complete-previous-line-func'."
+ :repeat change
+ (interactive "P")
+ (if (minibufferp)
+ (funcall evil-complete-previous-minibuffer-func)
+ (funcall evil-complete-previous-line-func arg)))
+
+;;; Search
+
+(defun evil-repeat-search (flag)
+ "Called to record a search command.
+FLAG is either 'pre or 'post if the function is called before resp.
+after executing the command."
+ (cond
+ ((and (evil-operator-state-p) (eq flag 'pre))
+ (evil-repeat-record (this-command-keys))
+ (evil-clear-command-keys))
+ ((and (evil-operator-state-p) (eq flag 'post))
+ ;; The value of (this-command-keys) at this point should be the
+ ;; key-sequence that called the last command that finished the
+ ;; search, usually RET. Therefore this key-sequence will be
+ ;; recorded in the post-command of the operator. Alternatively we
+ ;; could do it here.
+ (evil-repeat-record (if evil-regexp-search
+ (car-safe regexp-search-ring)
+ (car-safe search-ring))))
+ (t (evil-repeat-motion flag))))
+
+(evil-define-motion evil-search-forward ()
+ (format "Search forward for user-entered text.
+Searches for regular expression if `evil-regexp-search' is t.%s"
+ (if (and (fboundp 'isearch-forward)
+ (documentation 'isearch-forward))
+ (format "\n\nBelow is the documentation string \
+for `isearch-forward',\nwhich lists available keys:\n\n%s"
+ (documentation 'isearch-forward)) ""))
+ :jump t
+ :type exclusive
+ :repeat evil-repeat-search
+ (evil-search-incrementally t evil-regexp-search))
+
+(evil-define-motion evil-search-backward ()
+ (format "Search backward for user-entered text.
+Searches for regular expression if `evil-regexp-search' is t.%s"
+ (if (and (fboundp 'isearch-forward)
+ (documentation 'isearch-forward))
+ (format "\n\nBelow is the documentation string \
+for `isearch-forward',\nwhich lists available keys:\n\n%s"
+ (documentation 'isearch-forward)) ""))
+ :jump t
+ :type exclusive
+ :repeat evil-repeat-search
+ (evil-search-incrementally nil evil-regexp-search))
+
+(evil-define-motion evil-search-next (count)
+ "Repeat the last search."
+ :jump t
+ :type exclusive
+ (let ((orig (point))
+ (search-string (if evil-regexp-search
+ (car-safe regexp-search-ring)
+ (car-safe search-ring))))
+ (goto-char
+ ;; Wrap in `save-excursion' so that multiple searches have no visual effect.
+ (save-excursion
+ (evil-search search-string isearch-forward evil-regexp-search)
+ (when (and (> (point) orig)
+ (save-excursion
+ (evil-adjust-cursor)
+ (= (point) orig)))
+ ;; Point won't move after first attempt and `evil-adjust-cursor' takes
+ ;; effect, so start again.
+ (evil-search search-string isearch-forward evil-regexp-search))
+ (point)))
+ (when (and count (> count 1))
+ (dotimes (var (1- count))
+ (evil-search search-string isearch-forward evil-regexp-search)))))
+
+(evil-define-motion evil-search-previous (count)
+ "Repeat the last search in the opposite direction."
+ :jump t
+ :type exclusive
+ (dotimes (var (or count 1))
+ (evil-search (if evil-regexp-search
+ (car-safe regexp-search-ring)
+ (car-safe search-ring))
+ (not isearch-forward) evil-regexp-search)))
+
+(evil-define-motion evil-search-word-backward (count &optional symbol)
+ "Search backward for symbol under point."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (dotimes (var (or count 1))
+ (evil-search-word nil nil symbol)))
+
+(evil-define-motion evil-search-word-forward (count &optional symbol)
+ "Search forward for symbol under point."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (dotimes (var (or count 1))
+ (evil-search-word t nil symbol)))
+
+(evil-define-motion evil-search-unbounded-word-backward (count &optional symbol)
+ "Search backward for symbol under point.
+The search is unbounded, i.e., the pattern is not wrapped in
+\\<...\\>."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (dotimes (var (or count 1))
+ (evil-search-word nil t symbol)))
+
+(evil-define-motion evil-search-unbounded-word-forward (count &optional symbol)
+ "Search forward for symbol under point.
+The search is unbounded, i.e., the pattern is not wrapped in
+\\<...\\>."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (dotimes (var (or count 1))
+ (evil-search-word t t symbol)))
+
+(evil-define-motion evil-goto-definition ()
+ "Go to definition or first occurrence of symbol under point."
+ :jump t
+ :type exclusive
+ (let* ((string (evil-find-symbol t))
+ (search (format "\\_<%s\\_>" (regexp-quote string)))
+ ientry ipos)
+ ;; load imenu if available
+ (unless (featurep 'imenu)
+ (condition-case nil
+ (require 'imenu)
+ (error nil)))
+ (if (null string)
+ (user-error "No symbol under cursor")
+ (setq isearch-forward t)
+ ;; if imenu is available, try it
+ (cond
+ ((fboundp 'imenu--make-index-alist)
+ (condition-case nil
+ (setq ientry (imenu--make-index-alist))
+ (error nil))
+ (setq ientry (assoc string ientry))
+ (setq ipos (cdr ientry))
+ (when (and (markerp ipos)
+ (eq (marker-buffer ipos) (current-buffer)))
+ (setq ipos (marker-position ipos)))
+ (cond
+ ;; imenu found a position, so go there and
+ ;; highlight the occurrence
+ ((numberp ipos)
+ (evil-search search t t ipos))
+ ;; imenu failed, try semantic
+ ((and (fboundp 'semantic-ia-fast-jump)
+ (ignore-errors (semantic-ia-fast-jump ipos)))
+ ()) ;; noop, already jumped
+ ((fboundp 'xref-find-definitions) ;; semantic failed, try the generic func
+ (xref-find-definitions string))))
+ ;; otherwise just go to first occurrence in buffer
+ (t
+ (evil-search search t t (point-min)))))))
+
+;;; Folding
+(defun evil-fold-action (list action)
+ "Perform fold ACTION for each matching major or minor mode in LIST.
+
+ACTION will be performed for the first matching handler in LIST. For more
+information on its features and format, see the documentation for
+`evil-fold-list'.
+
+If no matching ACTION is found in LIST, an error will signaled.
+
+Handler errors will be demoted, so a problem in one handler will (hopefully)
+not interfere with another."
+ (if (null list)
+ (user-error
+ "Enable one of the following modes for folding to work: %s"
+ (mapconcat 'symbol-name (mapcar 'caar evil-fold-list) ", "))
+ (let* ((modes (caar list)))
+ (if (evil--mode-p modes)
+ (let* ((actions (cdar list))
+ (fn (plist-get actions action)))
+ (when fn
+ (with-demoted-errors (funcall fn))))
+ (evil-fold-action (cdr list) action)))))
+
+(defun evil--mode-p (modes)
+ "Determines whether any symbol in MODES represents the current
+buffer's major mode or any of its minors."
+ (unless (eq modes '())
+ (let ((mode (car modes)))
+ (or (eq major-mode mode)
+ (and (boundp mode) (symbol-value mode))
+ (evil--mode-p (cdr modes))))))
+
+(evil-define-command evil-toggle-fold ()
+ "Open or close a fold under point.
+See also `evil-open-fold' and `evil-close-fold'."
+ (evil-fold-action evil-fold-list :toggle))
+
+(evil-define-command evil-open-folds ()
+ "Open all folds.
+See also `evil-close-folds'."
+ (evil-fold-action evil-fold-list :open-all))
+
+(evil-define-command evil-close-folds ()
+ "Close all folds.
+See also `evil-open-folds'."
+ (evil-fold-action evil-fold-list :close-all))
+
+(evil-define-command evil-open-fold ()
+ "Open fold at point.
+See also `evil-close-fold'."
+ (evil-fold-action evil-fold-list :open))
+
+(evil-define-command evil-open-fold-rec ()
+ "Open fold at point recursively.
+See also `evil-open-fold' and `evil-close-fold'."
+ (evil-fold-action evil-fold-list :open-rec))
+
+(evil-define-command evil-close-fold ()
+ "Close fold at point.
+See also `evil-open-fold'."
+ (evil-fold-action evil-fold-list :close))
+
+;;; Ex
+
+(evil-define-operator evil-write (beg end type file-or-append &optional bang)
+ "Save the current buffer, from BEG to END, to FILE-OR-APPEND.
+If FILE-OR-APPEND is of the form \">> FILE\", append to FILE
+instead of overwriting. The current buffer's filename is not
+changed unless it has no associated file and no region is
+specified. If the file already exists and the BANG argument is
+non-nil, it is overwritten without confirmation."
+ :motion nil
+ :move-point nil
+ :type line
+ :repeat nil
+ (interactive "<R><fsh><!>")
+ (let* ((append-and-filename (evil-extract-append file-or-append))
+ (append (car append-and-filename))
+ (filename (cdr append-and-filename))
+ (bufname (buffer-file-name (buffer-base-buffer))))
+ (when (zerop (length filename))
+ (setq filename bufname))
+ (cond
+ ((zerop (length filename))
+ (user-error "Please specify a file name for the buffer"))
+ ;; execute command on region
+ ((eq (aref filename 0) ?!)
+ (shell-command-on-region beg end (substring filename 1)))
+ ;; with region or append, always save to file without resetting
+ ;; modified flag
+ ((or append (and beg end))
+ (write-region beg end filename append nil nil (not (or append bang))))
+ ;; no current file
+ ((null bufname)
+ (write-file filename (not bang)))
+ ;; save current buffer to its file
+ ((string= filename bufname)
+ (if (not bang) (save-buffer) (write-file filename)))
+ ;; save to another file
+ (t
+ (write-region nil nil filename
+ nil (not bufname) nil
+ (not bang))))))
+
+(evil-define-command evil-write-all (bang)
+ "Saves all buffers visiting a file.
+If BANG is non nil then read-only buffers are saved, too,
+otherwise they are skipped. "
+ :repeat nil
+ :move-point nil
+ (interactive "<!>")
+ (if bang
+ (save-some-buffers t)
+ ;; save only buffer that are not read-only and
+ ;; that are visiting a file
+ (save-some-buffers t
+ #'(lambda ()
+ (and (not buffer-read-only)
+ (buffer-file-name))))))
+
+(evil-define-command evil-save (filename &optional bang)
+ "Save the current buffer to FILENAME.
+Changes the file name of the current buffer to FILENAME. If no
+FILENAME is given, the current file name is used."
+ :repeat nil
+ :move-point nil
+ (interactive "<f><!>")
+ (when (zerop (length filename))
+ (setq filename (buffer-file-name (buffer-base-buffer))))
+ (write-file filename (not bang)))
+
+(evil-define-command evil-edit (file &optional bang)
+ "Open FILE.
+If no FILE is specified, reload the current buffer from disk."
+ :repeat nil
+ (interactive "<f><!>")
+ (if file
+ (find-file file)
+ (revert-buffer bang (or bang (not (buffer-modified-p))) t)))
+
+(evil-define-command evil-read (count file)
+ "Inserts the contents of FILE below the current line or line COUNT."
+ :repeat nil
+ :move-point nil
+ (interactive "P<fsh>")
+ (when (and file (not (zerop (length file))))
+ (when count (goto-char (point-min)))
+ (when (or (not (zerop (forward-line (or count 1))))
+ (not (bolp)))
+ (insert "\n"))
+ (if (/= (aref file 0) ?!)
+ (let ((result (insert-file-contents file)))
+ (save-excursion
+ (forward-char (cadr result))
+ (unless (bolp) (insert "\n"))))
+ (shell-command (substring file 1) t)
+ (save-excursion
+ (goto-char (mark))
+ (unless (bolp) (insert "\n"))))))
+
+(evil-define-command evil-show-files ()
+ "Shows the file-list.
+The same as `buffer-menu', but shows only buffers visiting
+files."
+ :repeat nil
+ (buffer-menu 1))
+
+(evil-define-command evil-goto-error (count)
+ "Go to error number COUNT.
+
+If no COUNT supplied, move to the current error.
+
+Acts like `first-error' other than when given no counts, goes
+to the current error instead of the first, like in Vim's :cc
+command."
+ :repeat nil
+ (interactive "<c>")
+ (if count
+ (first-error (if (eql 0 count) 1 count))
+ (next-error 0)))
+
+(evil-define-command evil-buffer (buffer)
+ "Switches to another buffer."
+ :repeat nil
+ (interactive "<b>")
+ (cond
+ ;; no buffer given, switch to "other" buffer
+ ((null buffer) (switch-to-buffer (other-buffer)))
+ ;; we are given the name of an existing buffer
+ ((get-buffer buffer) (switch-to-buffer buffer))
+ ;; try to complete the buffer
+ ((let ((all-buffers (internal-complete-buffer buffer nil t)))
+ (when (= (length all-buffers) 1)
+ (switch-to-buffer (car all-buffers)))))
+ (t
+ (when (y-or-n-p
+ (format "No buffer with name \"%s\" exists. Create new buffer? "
+ buffer))
+ (switch-to-buffer buffer)))))
+
+(evil-define-command evil-next-buffer (&optional count)
+ "Goes to the `count'-th next buffer in the buffer list."
+ :repeat nil
+ (interactive "p")
+ (dotimes (i (or count 1))
+ (next-buffer)))
+
+(evil-define-command evil-prev-buffer (&optional count)
+ "Goes to the `count'-th prev buffer in the buffer list."
+ :repeat nil
+ (interactive "p")
+ (dotimes (i (or count 1))
+ (previous-buffer)))
+
+(evil-define-command evil-delete-buffer (buffer &optional bang)
+ "Deletes a buffer.
+All windows currently showing this buffer will be closed except
+for the last window in each frame."
+ (interactive "<b><!>")
+ (with-current-buffer (or buffer (current-buffer))
+ (when bang
+ (set-buffer-modified-p nil)
+ (dolist (process (process-list))
+ (when (eq (process-buffer process) (current-buffer))
+ (set-process-query-on-exit-flag process nil))))
+ ;; get all windows that show this buffer
+ (let ((wins (get-buffer-window-list (current-buffer) nil t)))
+ ;; if the buffer which was initiated by emacsclient,
+ ;; call `server-edit' from server.el to avoid
+ ;; "Buffer still has clients" message
+ (if (and (fboundp 'server-edit)
+ (boundp 'server-buffer-clients)
+ server-buffer-clients)
+ (server-edit)
+ (kill-buffer nil))
+ ;; close all windows that showed this buffer
+ (mapc #'(lambda (w)
+ (condition-case nil
+ (delete-window w)
+ (error nil)))
+ wins))))
+
+(evil-define-command evil-quit (&optional force)
+ "Closes the current window, current frame, Emacs.
+If the current frame belongs to some client the client connection
+is closed."
+ :repeat nil
+ (interactive "<!>")
+ (condition-case nil
+ (delete-window)
+ (error
+ (if (and (boundp 'server-buffer-clients)
+ (fboundp 'server-edit)
+ (fboundp 'server-buffer-done)
+ server-buffer-clients)
+ (if force
+ (server-buffer-done (current-buffer))
+ (server-edit))
+ (condition-case nil
+ (delete-frame)
+ (error
+ (if force
+ (kill-emacs)
+ (save-buffers-kill-emacs))))))))
+
+(evil-define-command evil-quit-all (&optional bang)
+ "Exits Emacs, asking for saving."
+ :repeat nil
+ (interactive "<!>")
+ (if (null bang)
+ (save-buffers-kill-terminal)
+ (let ((proc (frame-parameter (selected-frame) 'client)))
+ (if proc
+ (with-no-warnings
+ (server-delete-client proc))
+ (dolist (process (process-list))
+ (set-process-query-on-exit-flag process nil))
+ (kill-emacs)))))
+
+(evil-define-command evil-quit-all-with-error-code (&optional force)
+ "Exits Emacs without saving, returning an non-zero error code.
+The FORCE argument is only there for compatibility and is ignored.
+This function fails with an error if Emacs is run in server mode."
+ :repeat nil
+ (interactive "<!>")
+ (if (and (boundp 'server-buffer-clients)
+ (fboundp 'server-edit)
+ (fboundp 'server-buffer-done)
+ server-buffer-clients)
+ (user-error "Cannot exit client process with error code.")
+ (kill-emacs 1)))
+
+(evil-define-command evil-save-and-quit ()
+ "Save all buffers and exit Emacs."
+ (save-buffers-kill-terminal t))
+
+(evil-define-command evil-save-and-close (file &optional bang)
+ "Saves the current buffer and closes the window."
+ :repeat nil
+ (interactive "<f><!>")
+ (evil-write nil nil nil file bang)
+ (evil-quit))
+
+(evil-define-command evil-save-modified-and-close (file &optional bang)
+ "Saves the current buffer and closes the window."
+ :repeat nil
+ (interactive "<f><!>")
+ (when (buffer-modified-p)
+ (evil-write nil nil nil file bang))
+ (evil-quit))
+
+(evil-define-operator evil-shell-command
+ (beg end type command &optional previous)
+ "Execute a shell command.
+If BEG, END and TYPE is specified, COMMAND is executed on the region,
+which is replaced with the command's output. Otherwise, the
+output is displayed in its own buffer. If PREVIOUS is non-nil,
+the previous shell command is executed instead."
+ (interactive "<R><sh><!>")
+ (if (not (evil-ex-p))
+ (let ((evil-ex-initial-input
+ (if (and beg
+ (not (evil-visual-state-p))
+ (not current-prefix-arg))
+ (let ((range (evil-range beg end type)))
+ (evil-contract-range range)
+ ;; TODO: this is not exactly the same as Vim, which
+ ;; uses .,+count as range. However, this is easier
+ ;; to achieve with the current implementation and
+ ;; the very inconvenient range interface.
+ ;;
+ ;; TODO: the range interface really needs some
+ ;; rework!
+ (format
+ "%d,%d!"
+ (line-number-at-pos (evil-range-beginning range))
+ (line-number-at-pos (evil-range-end range))))
+ "!")))
+ (call-interactively 'evil-ex))
+ (when command
+ (setq command (evil-ex-replace-special-filenames command)))
+ (if (zerop (length command))
+ (when previous (setq command evil-previous-shell-command))
+ (setq evil-previous-shell-command command))
+ (cond
+ ((zerop (length command))
+ (if previous (user-error "No previous shell command")
+ (user-error "No shell command")))
+ (evil-ex-range
+ (if (not evil-display-shell-error-in-message)
+ (shell-command-on-region beg end command nil t)
+ (let ((output-buffer (generate-new-buffer " *temp*"))
+ (error-buffer (generate-new-buffer " *temp*")))
+ (unwind-protect
+ (if (zerop (shell-command-on-region beg end
+ command
+ output-buffer nil
+ error-buffer))
+ (progn
+ (delete-region beg end)
+ (insert-buffer-substring output-buffer)
+ (goto-char beg)
+ (evil-first-non-blank))
+ (display-message-or-buffer error-buffer))
+ (kill-buffer output-buffer)
+ (kill-buffer error-buffer)))))
+ (t
+ (shell-command command)))))
+
+(evil-define-command evil-make (arg)
+ "Call a build command in the current directory.
+If ARG is nil this function calls `recompile', otherwise it calls
+`compile' passing ARG as build command."
+ (interactive "<sh>")
+ (if (and (fboundp 'recompile)
+ (not arg))
+ (recompile)
+ (compile arg)))
+
+;; TODO: escape special characters (currently only \n) ... perhaps
+;; there is some Emacs function doing this?
+(evil-define-command evil-show-registers ()
+ "Shows the contents of all registers."
+ :repeat nil
+ (evil-with-view-list
+ :name "evil-registers"
+ :mode-name "Evil Registers"
+ :format
+ [("Register" 10 nil)
+ ("Value" 1000 nil)]
+ :entries
+ (cl-loop for (key . val) in (evil-register-list)
+ collect `(nil [,(char-to-string key)
+ ,(or (and val
+ (stringp val)
+ (replace-regexp-in-string "\n" "^J" val))
+ "")]))))
+
+(evil-define-command evil-show-marks (mrks)
+ "Shows all marks.
+If MRKS is non-nil it should be a string and only registers
+corresponding to the characters of this string are shown."
+ :repeat nil
+ (interactive "<a>")
+ ;; To get markers and positions, we can't rely on 'global-mark-ring'
+ ;; provided by Emacs (although it will be much simpler and faster),
+ ;; because 'global-mark-ring' does not store mark characters, but
+ ;; only buffer name and position. Instead, 'evil-markers-alist' is
+ ;; used; this is list maintained by Evil for each buffer.
+ (let ((all-markers
+ ;; get global and local marks
+ (append (cl-remove-if (lambda (m)
+ (or (evil-global-marker-p (car m))
+ (not (markerp (cdr m)))))
+ evil-markers-alist)
+ (cl-remove-if (lambda (m)
+ (or (not (evil-global-marker-p (car m)))
+ (not (markerp (cdr m)))))
+ (default-value 'evil-markers-alist)))))
+ (when mrks
+ (setq mrks (string-to-list mrks))
+ (setq all-markers (cl-delete-if (lambda (m)
+ (not (member (car m) mrks)))
+ all-markers)))
+ ;; map marks to list of 4-tuples (char row col file)
+ (setq all-markers
+ (mapcar (lambda (m)
+ (with-current-buffer (marker-buffer (cdr m))
+ (save-excursion
+ (goto-char (cdr m))
+ (list (car m)
+ (line-number-at-pos (point))
+ (current-column)
+ (buffer-name)))))
+ all-markers))
+ (evil-with-view-list
+ :name "evil-marks"
+ :mode-name "Evil Marks"
+ :format [("Mark" 8 nil)
+ ("Line" 8 nil)
+ ("Column" 8 nil)
+ ("Buffer" 1000 nil)]
+ :entries (cl-loop for m in (sort all-markers (lambda (a b) (< (car a) (car b))))
+ collect `(nil [,(char-to-string (nth 0 m))
+ ,(number-to-string (nth 1 m))
+ ,(number-to-string (nth 2 m))
+ (,(nth 3 m))]))
+ :select-action #'evil--show-marks-select-action)))
+
+(defun evil--show-marks-select-action (entry)
+ (kill-buffer)
+ (switch-to-buffer (car (elt entry 3)))
+ (evil-goto-mark (string-to-char (elt entry 0))))
+
+(evil-define-command evil-delete-marks (marks &optional force)
+ "Delete all marks.
+MARKS is a string denoting all marks to be deleted. Mark names are
+either single characters or a range of characters in the form A-Z.
+
+If FORCE is non-nil all local marks except 0-9 are removed.
+"
+ (interactive "<a><!>")
+ (cond
+ ;; delete local marks except 0-9
+ (force
+ (setq evil-markers-alist
+ (cl-delete-if (lambda (m)
+ (not (and (>= (car m) ?0) (<= (car m) ?9))))
+ evil-markers-alist)))
+ (t
+ (let ((i 0)
+ (n (length marks))
+ delmarks)
+ (while (< i n)
+ (cond
+ ;; skip spaces
+ ((= (aref marks i) ?\s) (cl-incf i))
+ ;; ranges of marks
+ ((and (< (+ i 2) n)
+ (= (aref marks (1+ i)) ?-)
+ (or (and (>= (aref marks i) ?a)
+ (<= (aref marks i) ?z)
+ (>= (aref marks (+ 2 i)) ?a)
+ (<= (aref marks (+ 2 i)) ?z))
+ (and (>= (aref marks i) ?A)
+ (<= (aref marks i) ?Z)
+ (>= (aref marks (+ 2 i)) ?A)
+ (<= (aref marks (+ 2 i)) ?Z))))
+ (let ((m (aref marks i)))
+ (while (<= m (aref marks (+ 2 i)))
+ (push m delmarks)
+ (cl-incf m)))
+ (cl-incf i 2))
+ ;; single marks
+ (t
+ (push (aref marks i) delmarks)
+ (cl-incf i))))
+ ;; now remove all marks
+ (setq evil-markers-alist
+ (cl-delete-if (lambda (m) (member (car m) delmarks))
+ evil-markers-alist))
+ (set-default 'evil-markers-alist
+ (cl-delete-if (lambda (m) (member (car m) delmarks))
+ (default-value 'evil-markers-alist)))))))
+
+(eval-when-compile (require 'ffap))
+(evil-define-command evil-find-file-at-point-with-line ()
+ "Opens the file at point and goes to line-number."
+ (require 'ffap)
+ (let ((fname (with-no-warnings (ffap-file-at-point))))
+ (if fname
+ (let ((line
+ (save-excursion
+ (goto-char (cadr ffap-string-at-point-region))
+ (and (re-search-backward ":\\([0-9]+\\)\\="
+ (line-beginning-position) t)
+ (string-to-number (match-string 1))))))
+ (with-no-warnings (ffap-other-window))
+ (when line
+ (goto-char (point-min))
+ (forward-line (1- line))))
+ (user-error "File does not exist."))))
+
+(evil-ex-define-argument-type state
+ "Defines an argument type which can take state names."
+ :collection
+ (lambda (arg predicate flag)
+ (let ((completions
+ (append '("nil")
+ (mapcar #'(lambda (state)
+ (format "%s" (car state)))
+ evil-state-properties))))
+ (when arg
+ (cond
+ ((eq flag nil)
+ (try-completion arg completions predicate))
+ ((eq flag t)
+ (all-completions arg completions predicate))
+ ((eq flag 'lambda)
+ (test-completion arg completions predicate))
+ ((eq (car-safe flag) 'boundaries)
+ (cons 'boundaries
+ (completion-boundaries arg
+ completions
+ predicate
+ (cdr flag)))))))))
+
+(evil-define-interactive-code "<state>"
+ "A valid evil state."
+ :ex-arg state
+ (list (when (and (evil-ex-p) evil-ex-argument)
+ (intern evil-ex-argument))))
+
+;; TODO: should we merge this command with `evil-set-initial-state'?
+(evil-define-command evil-ex-set-initial-state (state)
+ "Set the initial state for the current major mode to STATE.
+This is the state the buffer comes up in. See `evil-set-initial-state'."
+ :repeat nil
+ (interactive "<state>")
+ (if (not (or (assq state evil-state-properties)
+ (null state)))
+ (user-error "State %s cannot be set as initial Evil state" state)
+ (let ((current-initial-state (evil-initial-state major-mode)))
+ (unless (eq current-initial-state state)
+ ;; only if we selected a new mode
+ (when (y-or-n-p (format "Major-mode `%s' has initial mode `%s'. \
+Change to `%s'? "
+ major-mode
+ (or current-initial-state "DEFAULT")
+ (or state "DEFAULT")))
+ (evil-set-initial-state major-mode state)
+ (when (y-or-n-p "Save setting in customization file? ")
+ (dolist (s (list current-initial-state state))
+ (when s
+ (let ((var (intern (format "evil-%s-state-modes" s))))
+ (customize-save-variable var (symbol-value var)))))))))))
+
+(evil-define-command evil-force-normal-state ()
+ "Switch to normal state without recording current command."
+ :repeat abort
+ :suppress-operator t
+ (evil-normal-state))
+
+(evil-define-motion evil-ex-search-next (count)
+ "Goes to the next occurrence."
+ :jump t
+ :type exclusive
+ (evil-ex-search count))
+
+(evil-define-motion evil-ex-search-previous (count)
+ "Goes the the previous occurrence."
+ :jump t
+ :type exclusive
+ (let ((evil-ex-search-direction
+ (if (eq evil-ex-search-direction 'backward) 'forward 'backward)))
+ (evil-ex-search count)))
+
+(defun evil-repeat-ex-search (flag)
+ "Called to record a search command.
+FLAG is either 'pre or 'post if the function is called before
+resp. after executing the command."
+ (cond
+ ((and (evil-operator-state-p) (eq flag 'pre))
+ (evil-repeat-record (this-command-keys))
+ (evil-clear-command-keys))
+ ((and (evil-operator-state-p) (eq flag 'post))
+ ;; The value of (this-command-keys) at this point should be the
+ ;; key-sequence that called the last command that finished the
+ ;; search, usually RET. Therefore this key-sequence will be
+ ;; recorded in the post-command of the operator. Alternatively we
+ ;; could do it here.
+ (evil-repeat-record (evil-ex-pattern-regex evil-ex-search-pattern)))
+ (t (evil-repeat-motion flag))))
+
+(evil-define-motion evil-ex-search-forward (count)
+ "Starts a forward search."
+ :jump t
+ :type exclusive
+ :repeat evil-repeat-ex-search
+ (evil-ex-start-search 'forward count))
+
+(evil-define-motion evil-ex-search-backward (count)
+ "Starts a forward search."
+ :jump t
+ :repeat evil-repeat-ex-search
+ (evil-ex-start-search 'backward count))
+
+(evil-define-motion evil-ex-search-word-forward (count &optional symbol)
+ "Search for the next occurrence of word under the cursor."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (evil-ex-start-word-search nil 'forward count symbol))
+
+(evil-define-motion evil-ex-search-word-backward (count &optional symbol)
+ "Search for the next occurrence of word under the cursor."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (evil-ex-start-word-search nil 'backward count symbol))
+
+(evil-define-motion evil-ex-search-unbounded-word-forward (count &optional symbol)
+ "Search for the next occurrence of word under the cursor."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (evil-ex-start-word-search t 'forward count symbol))
+
+(evil-define-motion evil-ex-search-unbounded-word-backward (count &optional symbol)
+ "Search for the next occurrence of word under the cursor."
+ :jump t
+ :type exclusive
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ evil-symbol-word-search))
+ (evil-ex-start-word-search t 'backward count symbol))
+
+(evil-define-operator evil-ex-substitute
+ (beg end pattern replacement flags)
+ "The Ex substitute command.
+\[BEG,END]substitute/PATTERN/REPLACEMENT/FLAGS"
+ :repeat nil
+ :jump t
+ :move-point nil
+ :motion evil-line
+ (interactive "<r><s/>")
+ (evil-ex-nohighlight)
+ (unless pattern
+ (user-error "No pattern given"))
+ (setq replacement (or replacement ""))
+ (setq evil-ex-last-was-search nil)
+ (let* ((flags (append flags nil))
+ (count-only (memq ?n flags))
+ (confirm (and (memq ?c flags) (not count-only)))
+ (case-fold-search (evil-ex-pattern-ignore-case pattern))
+ (case-replace case-fold-search)
+ (evil-ex-substitute-regex (evil-ex-pattern-regex pattern))
+ (evil-ex-substitute-nreplaced 0)
+ (evil-ex-substitute-last-point (point))
+ (whole-line (evil-ex-pattern-whole-line pattern))
+ (evil-ex-substitute-overlay (make-overlay (point) (point)))
+ (evil-ex-substitute-hl (evil-ex-make-hl 'evil-ex-substitute))
+ (orig-point-marker (move-marker (make-marker) (point)))
+ (end-marker (move-marker (make-marker) end))
+ zero-length-match
+ match-contains-newline
+ transient-mark-mode)
+ (setq evil-ex-substitute-pattern pattern
+ evil-ex-substitute-replacement replacement
+ evil-ex-substitute-flags flags
+ isearch-string evil-ex-substitute-regex)
+ (isearch-update-ring evil-ex-substitute-regex t)
+ (unwind-protect
+ (progn
+ (evil-ex-hl-change 'evil-ex-substitute pattern)
+ (overlay-put evil-ex-substitute-overlay 'face 'isearch)
+ (overlay-put evil-ex-substitute-overlay 'priority 1001)
+ (goto-char beg)
+ (catch 'exit-search
+ (while (re-search-forward evil-ex-substitute-regex end-marker t)
+ (when (not (and query-replace-skip-read-only
+ (text-property-any (match-beginning 0) (match-end 0) 'read-only t)))
+ (let ((match-str (match-string 0))
+ (match-beg (move-marker (make-marker) (match-beginning 0)))
+ (match-end (move-marker (make-marker) (match-end 0)))
+ (match-data (match-data)))
+ (goto-char match-beg)
+ (setq match-contains-newline
+ (string-match-p "\n" (buffer-substring-no-properties
+ match-beg match-end)))
+ (setq zero-length-match (= match-beg match-end))
+ (when (and (string= "^" evil-ex-substitute-regex)
+ (= (point) end-marker))
+ ;; The range (beg end) includes the final newline which means
+ ;; end-marker is on one line down. With the regex "^" the
+ ;; beginning of this last line will be matched which we don't
+ ;; want, so we abort here.
+ (throw 'exit-search t))
+ (if confirm
+ (let ((prompt
+ (format "Replace %s with %s (y/n/a/q/l/^E/^Y)? "
+ match-str
+ (evil-match-substitute-replacement
+ evil-ex-substitute-replacement
+ (not case-replace))))
+ response)
+ (move-overlay evil-ex-substitute-overlay match-beg match-end)
+ (catch 'exit-read-char
+ (while (setq response (read-char prompt))
+ (when (member response '(?y ?a ?l))
+ (unless count-only
+ (set-match-data match-data)
+ (evil-replace-match evil-ex-substitute-replacement
+ (not case-replace)))
+ (setq evil-ex-substitute-last-point (point))
+ (setq evil-ex-substitute-nreplaced
+ (1+ evil-ex-substitute-nreplaced))
+ (evil-ex-hl-set-region 'evil-ex-substitute
+ (save-excursion
+ (forward-line)
+ (point))
+ (evil-ex-hl-get-max
+ 'evil-ex-substitute)))
+ (cl-case response
+ ((?y ?n) (throw 'exit-read-char t))
+ (?a (setq confirm nil)
+ (throw 'exit-read-char t))
+ ((?q ?l ?\C-\[) (throw 'exit-search t))
+ (?\C-e (evil-scroll-line-down 1))
+ (?\C-y (evil-scroll-line-up 1))))))
+ (setq evil-ex-substitute-nreplaced
+ (1+ evil-ex-substitute-nreplaced))
+ (unless count-only
+ (set-match-data match-data)
+ (evil-replace-match evil-ex-substitute-replacement
+ (not case-replace)))
+ (setq evil-ex-substitute-last-point (point)))
+ (goto-char match-end)
+ (cond ((>= (point) end-marker)
+ ;; Don't want to perform multiple replacements at the end
+ ;; of the search region.
+ (throw 'exit-search t))
+ ((and (not whole-line)
+ (not match-contains-newline))
+ (forward-line)
+ ;; forward-line just moves to the end of the line on the
+ ;; last line of the buffer.
+ (when (or (eobp)
+ (> (point) end-marker))
+ (throw 'exit-search t)))
+ ;; For zero-length matches check to see if point won't
+ ;; move next time. This is a problem when matching the
+ ;; regexp "$" because we can enter an infinite loop,
+ ;; repeatedly matching the same character
+ ((and zero-length-match
+ (let ((pnt (point)))
+ (save-excursion
+ (and
+ (re-search-forward
+ evil-ex-substitute-regex end-marker t)
+ (= pnt (point))))))
+ (if (or (eobp)
+ (>= (point) end-marker))
+ (throw 'exit-search t)
+ (forward-char)))))))))
+ (evil-ex-delete-hl 'evil-ex-substitute)
+ (delete-overlay evil-ex-substitute-overlay)
+
+ (if count-only
+ (goto-char orig-point-marker)
+ (goto-char evil-ex-substitute-last-point))
+
+ (move-marker orig-point-marker nil)
+ (move-marker end-marker nil))
+
+ (message "%s %d occurrence%s"
+ (if count-only "Found" "Replaced")
+ evil-ex-substitute-nreplaced
+ (if (/= evil-ex-substitute-nreplaced 1) "s" ""))
+ (evil-first-non-blank)))
+
+(evil-define-operator evil-ex-repeat-substitute
+ (beg end flags)
+ "Repeat last substitute command.
+This is the same as :s//~/"
+ :repeat nil
+ :jump t
+ :move-point nil
+ :motion evil-line
+ (interactive "<r><a>")
+ (apply #'evil-ex-substitute beg end
+ (evil-ex-get-substitute-info (concat "//~/" flags))))
+
+(evil-define-operator evil-ex-repeat-substitute-with-flags
+ (beg end flags)
+ "Repeat last substitute command with last flags.
+This is the same as :s//~/&"
+ :repeat nil
+ :jump t
+ :move-point nil
+ :motion evil-line
+ (interactive "<r><a>")
+ (apply #'evil-ex-substitute beg end
+ (evil-ex-get-substitute-info (concat "//~/&" flags))))
+
+(evil-define-operator evil-ex-repeat-substitute-with-search
+ (beg end flags)
+ "Repeat last substitute command with last search pattern.
+This is the same as :s//~/r"
+ :repeat nil
+ :jump t
+ :move-point nil
+ :motion evil-line
+ (interactive "<r><a>")
+ (apply #'evil-ex-substitute beg end
+ (evil-ex-get-substitute-info (concat "//~/r" flags))))
+
+(evil-define-operator evil-ex-repeat-substitute-with-search-and-flags
+ (beg end flags)
+ "Repeat last substitute command with last search pattern and last flags.
+This is the same as :s//~/&r"
+ :repeat nil
+ :jump t
+ :move-point nil
+ :motion evil-line
+ (interactive "<r><a>")
+ (apply #'evil-ex-substitute beg end
+ (evil-ex-get-substitute-info (concat "//~/&r" flags))))
+
+(evil-define-operator evil-ex-repeat-global-substitute ()
+ "Repeat last substitute command on the whole buffer.
+This is the same as :%s//~/&"
+ :repeat nil
+ :jump t
+ :move-point nil
+ :motion evil-line
+ (interactive)
+ (apply #'evil-ex-substitute (point-min) (point-max)
+ (evil-ex-get-substitute-info (concat "//~/&"))))
+
+(evil-define-operator evil-ex-global
+ (beg end pattern command &optional invert)
+ "The Ex global command.
+\[BEG,END]global[!]/PATTERN/COMMAND"
+ :motion mark-whole-buffer
+ :move-point nil
+ (interactive "<r><g/><!>")
+ (unless pattern
+ (user-error "No pattern given"))
+ (unless command
+ (user-error "No command given"))
+ ;; TODO: `evil-ex-make-substitute-pattern' should be executed so
+ ;; :substitute can re-use :global's pattern depending on its `r'
+ ;; flag. This isn't supported currently but should be simple to add
+ (evil-with-single-undo
+ (let ((case-fold-search
+ (eq (evil-ex-regex-case pattern 'smart) 'insensitive))
+ match markers)
+ (when (and pattern command)
+ (setq isearch-string pattern)
+ (isearch-update-ring pattern t)
+ (goto-char beg)
+ (evil-move-beginning-of-line)
+ (while (< (point) end)
+ (setq match (re-search-forward pattern (line-end-position) t))
+ (when (or (and match (not invert))
+ (and invert (not match)))
+ (push (move-marker (make-marker)
+ (or (and match (match-beginning 0))
+ (line-beginning-position)))
+ markers))
+ (forward-line))
+ (setq markers (nreverse markers))
+ (unwind-protect
+ (dolist (marker markers)
+ (goto-char marker)
+ (evil-ex-eval command))
+ ;; ensure that all markers are deleted afterwards,
+ ;; even in the event of failure
+ (dolist (marker markers)
+ (set-marker marker nil)))))))
+
+(evil-define-operator evil-ex-global-inverted
+ (beg end pattern command &optional invert)
+ "The Ex vglobal command.
+\[BEG,END]vglobal/PATTERN/COMMAND"
+ :motion mark-whole-buffer
+ :move-point nil
+ (interactive "<r><g/><!>")
+ (evil-ex-global beg end pattern command (not invert)))
+
+(evil-define-operator evil-ex-normal (beg end commands)
+ "The Ex normal command.
+Execute the argument as normal command on each line in the
+range. The given argument is passed straight to
+`execute-kbd-macro'. The default is the current line."
+ :motion evil-line
+ (interactive "<r><a>")
+ (evil-with-single-undo
+ (let (markers evil-ex-current-buffer prefix-arg current-prefix-arg)
+ (goto-char beg)
+ (while
+ (and (< (point) end)
+ (progn
+ (push (move-marker (make-marker) (line-beginning-position))
+ markers)
+ (and (= (forward-line) 0) (bolp)))))
+ (setq markers (nreverse markers))
+ (deactivate-mark)
+ (evil-force-normal-state)
+ ;; replace ^[ by escape
+ (setq commands
+ (vconcat
+ (mapcar #'(lambda (ch) (if (equal ch ?) 'escape ch))
+ (append commands nil))))
+ (dolist (marker markers)
+ (goto-char marker)
+ (condition-case nil
+ (execute-kbd-macro commands)
+ (error nil))
+ (evil-force-normal-state)
+ (set-marker marker nil)))))
+
+(evil-define-command evil-goto-char (position)
+ "Go to POSITION in the buffer.
+Default position is the beginning of the buffer."
+ (interactive "p")
+ (let ((position (evil-normalize-position
+ (or position (point-min)))))
+ (goto-char position)))
+
+(evil-define-operator evil-ex-line-number (beg end)
+ "Print the last line number."
+ :motion mark-whole-buffer
+ :move-point nil
+ (interactive "<r>")
+ (message "%d" (count-lines (point-min) end)))
+
+(evil-define-command evil-show-file-info ()
+ "Shows basic file information."
+ (let* ((nlines (count-lines (point-min) (point-max)))
+ (curr (line-number-at-pos (point)))
+ (perc (if (> nlines 0)
+ (format "%d%%" (* (/ (float curr) (float nlines)) 100.0))
+ "No lines in buffer"))
+ (file (buffer-file-name (buffer-base-buffer)))
+ (writable (and file (file-writable-p file)))
+ (readonly (if (and file (not writable)) "[readonly] " "")))
+ (if file
+ (message "\"%s\" %d %slines --%s--" file nlines readonly perc)
+ (message "%d lines --%s--" nlines perc))))
+
+(evil-define-operator evil-ex-sort (beg end &optional options reverse)
+ "The Ex sort command.
+\[BEG,END]sort[!] [i][u]
+The following additional options are supported:
+
+ * i ignore case
+ * u remove duplicate lines
+
+The 'bang' argument means to sort in reverse order."
+ :motion mark-whole-buffer
+ :move-point nil
+ (interactive "<r><a><!>")
+ (let ((beg (copy-marker beg))
+ (end (copy-marker end))
+ sort-fold-case uniq)
+ (dolist (opt (append options nil))
+ (cond
+ ((eq opt ?i) (setq sort-fold-case t))
+ ((eq opt ?u) (setq uniq t))
+ (t (user-error "Unsupported sort option: %c" opt))))
+ (sort-lines reverse beg end)
+ (when uniq
+ (let (line prev-line)
+ (goto-char beg)
+ (while (and (< (point) end) (not (eobp)))
+ (setq line (buffer-substring-no-properties
+ (line-beginning-position)
+ (line-end-position)))
+ (if (and (stringp prev-line)
+ (eq t (compare-strings line nil nil
+ prev-line nil nil
+ sort-fold-case)))
+ (delete-region (progn (forward-line 0) (point))
+ (progn (forward-line 1) (point)))
+ (setq prev-line line)
+ (forward-line 1)))))
+ (goto-char beg)
+ (set-marker beg nil)
+ (set-marker end nil)))
+
+;;; Window navigation
+
+(defun evil-resize-window (new-size &optional horizontal)
+ "Set the current window's width or height to NEW-SIZE.
+If HORIZONTAL is non-nil the width of the window is changed,
+otherwise its height is changed."
+ (let ((count (- new-size (if horizontal (window-width) (window-height)))))
+ (if (>= emacs-major-version 24)
+ (enlarge-window count horizontal)
+ (let ((wincfg (current-window-configuration))
+ (nwins (length (window-list)))
+ (inhibit-redisplay t))
+ (catch 'done
+ (save-window-excursion
+ (while (not (zerop count))
+ (if (> count 0)
+ (progn
+ (enlarge-window 1 horizontal)
+ (setq count (1- count)))
+ (progn
+ (shrink-window 1 horizontal)
+ (setq count (1+ count))))
+ (if (= nwins (length (window-list)))
+ (setq wincfg (current-window-configuration))
+ (throw 'done t)))))
+ (set-window-configuration wincfg)))))
+
+(defun evil-get-buffer-tree (wintree)
+ "Extracts the buffer tree from a given window tree WINTREE."
+ (if (consp wintree)
+ (cons (car wintree) (mapcar #'evil-get-buffer-tree (cddr wintree)))
+ (window-buffer wintree)))
+
+(defun evil-restore-window-tree (win tree)
+ "Restore the given buffer-tree layout as subwindows of WIN.
+TREE is the tree layout to be restored.
+A tree layout is either a buffer or a list of the form (DIR TREE ...),
+where DIR is t for horizontal split and nil otherwise. All other
+elements of the list are tree layouts itself."
+ (if (bufferp tree)
+ (set-window-buffer win tree)
+ ;; if tree is buffer list with one buffer only, do not split
+ ;; anymore
+ (if (not (cddr tree))
+ (evil-restore-window-tree win (cadr tree))
+ ;; tree is a regular list, split recursively
+ (let ((newwin (split-window win nil (not (car tree)))))
+ (evil-restore-window-tree win (cadr tree))
+ (evil-restore-window-tree newwin (cons (car tree) (cddr tree)))))))
+
+(defun evil-alternate-buffer (&optional window)
+ "Return the last buffer WINDOW has displayed other than the
+current one (equivalent to Vim's alternate buffer).
+
+Returns the first item in `window-prev-buffers' that isn't
+`window-buffer' of WINDOW."
+ ;; If the last buffer visited has been killed, then `window-prev-buffers'
+ ;; returns a list with `current-buffer' at the head, we account for this
+ ;; possibility.
+ (let* ((prev-buffers (window-prev-buffers))
+ (head (car prev-buffers)))
+ (if (eq (car head) (window-buffer window))
+ (cadr prev-buffers)
+ head)))
+
+(evil-define-command evil-switch-to-windows-last-buffer ()
+ "Switch to current windows last open buffer."
+ :repeat nil
+ (let ((previous-place (evil-alternate-buffer)))
+ (when previous-place
+ (switch-to-buffer (car previous-place))
+ (goto-char (car (last previous-place))))))
+
+(evil-define-command evil-window-delete ()
+ "Deletes the current window.
+If `evil-auto-balance-windows' is non-nil then all children of
+the deleted window's parent window are rebalanced."
+ (let ((p (window-parent)))
+ (delete-window)
+ (when evil-auto-balance-windows
+ ;; balance-windows raises an error if the parent does not have
+ ;; any further children (then rebalancing is not necessary anyway)
+ (condition-case nil
+ (balance-windows p)
+ (error)))))
+
+(evil-define-command evil-window-split (&optional count file)
+ "Splits the current window horizontally, COUNT lines height,
+editing a certain FILE. The new window will be created below
+when `evil-split-window-below' is non-nil. If COUNT and
+`evil-auto-balance-windows' are both non-nil then all children
+of the parent of the splitted window are rebalanced."
+ :repeat nil
+ (interactive "P<f>")
+ (split-window (selected-window) count
+ (if evil-split-window-below 'above 'below))
+ (when (and (not count) evil-auto-balance-windows)
+ (balance-windows (window-parent)))
+ (when file
+ (evil-edit file)))
+
+(evil-define-command evil-window-vsplit (&optional count file)
+ "Splits the current window vertically, COUNT columns width,
+editing a certain FILE. The new window will be created to the
+right when `evil-vsplit-window-right' is non-nil. If COUNT and
+`evil-auto-balance-windows'are both non-nil then all children
+of the parent of the splitted window are rebalanced."
+ :repeat nil
+ (interactive "P<f>")
+ (split-window (selected-window) count
+ (if evil-vsplit-window-right 'left 'right))
+ (when (and (not count) evil-auto-balance-windows)
+ (balance-windows (window-parent)))
+ (when file
+ (evil-edit file)))
+
+(evil-define-command evil-split-buffer (buffer)
+ "Splits window and switches to another buffer."
+ :repeat nil
+ (interactive "<b>")
+ (evil-window-split)
+ (evil-buffer buffer))
+
+(evil-define-command evil-split-next-buffer (&optional count)
+ "Splits the window and goes to the COUNT-th next buffer in the buffer list."
+ :repeat nil
+ (interactive "p")
+ (evil-window-split)
+ (evil-next-buffer count))
+
+(evil-define-command evil-split-prev-buffer (&optional count)
+ "Splits window and goes to the COUNT-th prev buffer in the buffer list."
+ :repeat nil
+ (interactive "p")
+ (evil-window-split)
+ (evil-prev-buffer count))
+
+(evil-define-command evil-window-left (count)
+ "Move the cursor to new COUNT-th window left of the current one."
+ :repeat nil
+ (interactive "p")
+ (dotimes (i count)
+ (windmove-left)))
+
+(evil-define-command evil-window-right (count)
+ "Move the cursor to new COUNT-th window right of the current one."
+ :repeat nil
+ (interactive "p")
+ (dotimes (i count)
+ (windmove-right)))
+
+(evil-define-command evil-window-up (count)
+ "Move the cursor to new COUNT-th window above the current one."
+ :repeat nil
+ (interactive "p")
+ (dotimes (i (or count 1))
+ (windmove-up)))
+
+(evil-define-command evil-window-down (count)
+ "Move the cursor to new COUNT-th window below the current one."
+ :repeat nil
+ (interactive "p")
+ (dotimes (i (or count 1))
+ (windmove-down)))
+
+(evil-define-command evil-window-bottom-right ()
+ "Move the cursor to bottom-right window."
+ :repeat nil
+ (let ((last-sibling (frame-root-window)))
+ (while (and last-sibling (not (window-live-p last-sibling)))
+ (setq last-sibling (window-last-child last-sibling)))
+ (when last-sibling
+ (select-window last-sibling))))
+
+(evil-define-command evil-window-top-left ()
+ "Move the cursor to top-left window."
+ :repeat nil
+ (let ((first-child (window-child (frame-root-window))))
+ (while (and first-child (not (window-live-p first-child)))
+ (setq first-child (window-child first-child)))
+ (when first-child
+ (select-window
+ first-child))))
+
+(evil-define-command evil-window-mru ()
+ "Move the cursor to the previous (last accessed) buffer in another window.
+More precisely, it selects the most recently used buffer that is
+shown in some other window, preferably of the current frame, and
+is different from the current one."
+ :repeat nil
+ (catch 'done
+ (dolist (buf (buffer-list (selected-frame)))
+ (let ((win (get-buffer-window buf)))
+ (when (and (not (eq buf (current-buffer)))
+ win
+ (not (eq win (selected-window))))
+ (select-window win)
+ (throw 'done nil))))))
+
+(evil-define-command evil-window-next (count)
+ "Move the cursor to the next window in the cyclic order.
+With COUNT go to the count-th window in the order starting from
+top-left."
+ :repeat nil
+ (interactive "<c>")
+ (if (not count)
+ (select-window (next-window))
+ (evil-window-top-left)
+ (other-window (1- count))))
+
+(evil-define-command evil-window-prev (count)
+ "Move the cursor to the previous window in the cyclic order.
+With COUNT go to the count-th window in the order starting from
+top-left."
+ :repeat nil
+ (interactive "<c>")
+ (if (not count)
+ (select-window (previous-window))
+ (evil-window-top-left)
+ (other-window (1- count))))
+
+(evil-define-command evil-window-new (count file)
+ "Splits the current window horizontally
+and opens a new buffer or edits a certain FILE."
+ :repeat nil
+ (interactive "P<f>")
+ (let ((new-window (split-window (selected-window) count
+ (if evil-split-window-below 'below 'above))))
+ (when (and (not count) evil-auto-balance-windows)
+ (balance-windows (window-parent)))
+ (if file
+ (evil-edit file)
+ (let ((buffer (generate-new-buffer "*new*")))
+ (set-window-buffer new-window buffer)
+ (select-window new-window)
+ (with-current-buffer buffer
+ (funcall (default-value 'major-mode)))))))
+
+(evil-define-command evil-window-vnew (count file)
+ "Splits the current window vertically
+and opens a new buffer name or edits a certain FILE."
+ :repeat nil
+ (interactive "P<f>")
+ (let ((new-window (split-window (selected-window) count
+ (if evil-vsplit-window-right 'right 'left))))
+ (when (and (not count) evil-auto-balance-windows)
+ (balance-windows (window-parent)))
+ (if file
+ (evil-edit file)
+ (let ((buffer (generate-new-buffer "*new*")))
+ (set-window-buffer new-window buffer)
+ (select-window new-window)
+ (with-current-buffer buffer
+ (funcall (default-value 'major-mode)))))))
+
+(evil-define-command evil-buffer-new (count file)
+ "Creates a new buffer replacing the current window, optionally
+ editing a certain FILE"
+ :repeat nil
+ (interactive "P<f>")
+ (if file
+ (evil-edit file)
+ (let ((buffer (generate-new-buffer "*new*")))
+ (set-window-buffer nil buffer)
+ (with-current-buffer buffer
+ (funcall (default-value 'major-mode))))))
+
+(evil-define-command evil-window-increase-height (count)
+ "Increase current window height by COUNT."
+ :repeat nil
+ (interactive "p")
+ (evil-resize-window (+ (window-height) count)))
+
+(evil-define-command evil-window-decrease-height (count)
+ "Decrease current window height by COUNT."
+ :repeat nil
+ (interactive "p")
+ (evil-resize-window (- (window-height) count)))
+
+(evil-define-command evil-window-increase-width (count)
+ "Increase current window width by COUNT."
+ :repeat nil
+ (interactive "p")
+ (evil-resize-window (+ (window-width) count) t))
+
+(evil-define-command evil-window-decrease-width (count)
+ "Decrease current window width by COUNT."
+ :repeat nil
+ (interactive "p")
+ (evil-resize-window (- (window-width) count) t))
+
+(evil-define-command evil-window-set-height (count)
+ "Sets the height of the current window to COUNT."
+ :repeat nil
+ (interactive "<c>")
+ (evil-resize-window (or count (frame-height)) nil))
+
+(evil-define-command evil-window-set-width (count)
+ "Sets the width of the current window to COUNT."
+ :repeat nil
+ (interactive "<c>")
+ (evil-resize-window (or count (frame-width)) t))
+
+(evil-define-command evil-ex-resize (arg)
+ "The ex :resize command.
+
+If ARG is a signed positive integer, increase the current window
+height by ARG.
+
+If ARG is a signed negative integer, decrease the current window
+height by ARG.
+
+If ARG is a positive integer without explicit sign, set the current
+window height to ARG.
+
+If ARG is empty, maximize the current window height."
+ (interactive "<a>")
+ (if (or (not arg) (= 0 (length arg)))
+ (evil-window-set-height nil)
+ (let ((n (string-to-number arg)))
+ (if (> n 0)
+ (if (= ?+ (aref arg 0))
+ (evil-window-increase-height n)
+ (evil-window-set-height n))
+ (evil-window-decrease-height (- n))))))
+
+(evil-define-command evil-window-rotate-upwards ()
+ "Rotates the windows according to the currenty cyclic ordering."
+ :repeat nil
+ (let ((wlist (window-list))
+ (blist (mapcar #'(lambda (w) (window-buffer w))
+ (window-list))))
+ (setq blist (append (cdr blist) (list (car blist))))
+ (while (and wlist blist)
+ (set-window-buffer (car wlist) (car blist))
+ (setq wlist (cdr wlist)
+ blist (cdr blist)))
+ (select-window (car (last (window-list))))))
+
+(evil-define-command evil-window-rotate-downwards ()
+ "Rotates the windows according to the currenty cyclic ordering."
+ :repeat nil
+ (let ((wlist (window-list))
+ (blist (mapcar #'(lambda (w) (window-buffer w))
+ (window-list))))
+ (setq blist (append (last blist) blist))
+ (while (and wlist blist)
+ (set-window-buffer (car wlist) (car blist))
+ (setq wlist (cdr wlist)
+ blist (cdr blist)))
+ (select-window (cadr (window-list)))))
+
+(evil-define-command evil-window-move-very-top ()
+ "Closes the current window, splits the upper-left one horizontally
+and redisplays the current buffer there."
+ :repeat nil
+ (unless (one-window-p)
+ (save-excursion
+ (let ((b (current-buffer)))
+ (delete-window)
+ (let ((btree (evil-get-buffer-tree (car (window-tree)))))
+ (delete-other-windows)
+ (let ((newwin (selected-window))
+ (subwin (split-window)))
+ (evil-restore-window-tree subwin btree)
+ (set-window-buffer newwin b)
+ (select-window newwin)))))
+ (balance-windows)))
+
+(evil-define-command evil-window-move-far-left ()
+ "Closes the current window, splits the upper-left one vertically
+and redisplays the current buffer there."
+ :repeat nil
+ (unless (one-window-p)
+ (save-excursion
+ (let ((b (current-buffer)))
+ (delete-window)
+ (let ((btree (evil-get-buffer-tree (car (window-tree)))))
+ (delete-other-windows)
+ (let ((newwin (selected-window))
+ (subwin (split-window-horizontally)))
+ (evil-restore-window-tree subwin btree)
+ (set-window-buffer newwin b)
+ (select-window newwin)))))
+ (balance-windows)))
+
+(evil-define-command evil-window-move-far-right ()
+ "Closes the current window, splits the lower-right one vertically
+and redisplays the current buffer there."
+ :repeat nil
+ (unless (one-window-p)
+ (save-excursion
+ (let ((b (current-buffer)))
+ (delete-window)
+ (let ((btree (evil-get-buffer-tree (car (window-tree)))))
+ (delete-other-windows)
+ (let ((subwin (selected-window))
+ (newwin (split-window-horizontally)))
+ (evil-restore-window-tree subwin btree)
+ (set-window-buffer newwin b)
+ (select-window newwin)))))
+ (balance-windows)))
+
+(evil-define-command evil-window-move-very-bottom ()
+ "Closes the current window, splits the lower-right one horizontally
+and redisplays the current buffer there."
+ :repeat nil
+ (unless (one-window-p)
+ (save-excursion
+ (let ((b (current-buffer)))
+ (delete-window)
+ (let ((btree (evil-get-buffer-tree (car (window-tree)))))
+ (delete-other-windows)
+ (let ((subwin (selected-window))
+ (newwin (split-window)))
+ (evil-restore-window-tree subwin btree)
+ (set-window-buffer newwin b)
+ (select-window newwin)))))
+ (balance-windows)))
+
+;;; Mouse handling
+
+;; Large parts of this code are taken from mouse.el which is
+;; distributed with GNU Emacs
+(defun evil-mouse-drag-region (start-event)
+ "Set the region to the text that the mouse is dragged over.
+Highlight the drag area as you move the mouse.
+This must be bound to a button-down mouse event.
+
+If the click is in the echo area, display the `*Messages*' buffer.
+
+START-EVENT should be the event that started the drag."
+ (interactive "e")
+ ;; Give temporary modes such as isearch a chance to turn off.
+ (run-hooks 'mouse-leave-buffer-hook)
+ (evil-mouse-drag-track start-event t))
+(evil-set-command-property 'evil-mouse-drag-region :keep-visual t)
+
+(defun evil-mouse-drag-track (start-event &optional
+ do-mouse-drag-region-post-process)
+ "Track mouse drags by highlighting area between point and cursor.
+The region will be defined with mark and point.
+DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
+`mouse-drag-region'."
+ (mouse-minibuffer-check start-event)
+ (setq mouse-selection-click-count-buffer (current-buffer))
+ (deactivate-mark)
+ (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
+ (original-window (selected-window))
+ ;; We've recorded what we needed from the current buffer and
+ ;; window, now let's jump to the place of the event, where things
+ ;; are happening.
+ (_ (mouse-set-point start-event))
+ (echo-keystrokes 0)
+ (start-posn (event-start start-event))
+ (start-point (posn-point start-posn))
+ (start-window (posn-window start-posn))
+ (start-window-start (window-start start-window))
+ (start-hscroll (window-hscroll start-window))
+ (bounds (window-edges start-window))
+ (make-cursor-line-fully-visible nil)
+ (top (nth 1 bounds))
+ (bottom (if (window-minibuffer-p start-window)
+ (nth 3 bounds)
+ ;; Don't count the mode line.
+ (1- (nth 3 bounds))))
+ (on-link (and mouse-1-click-follows-link
+ (or mouse-1-click-in-non-selected-windows
+ (eq start-window original-window))
+ ;; Use start-point before the intangibility
+ ;; treatment, in case we click on a link inside an
+ ;; intangible text.
+ (mouse-on-link-p start-posn)))
+ (click-count (1- (event-click-count start-event)))
+ (remap-double-click (and on-link
+ (eq mouse-1-click-follows-link 'double)
+ (= click-count 1)))
+ ;; Suppress automatic hscrolling, because that is a nuisance
+ ;; when setting point near the right fringe (but see below).
+ (auto-hscroll-mode-saved auto-hscroll-mode)
+ (auto-hscroll-mode nil)
+ event end end-point)
+
+ (setq mouse-selection-click-count click-count)
+ ;; In case the down click is in the middle of some intangible text,
+ ;; use the end of that text, and put it in START-POINT.
+ (if (< (point) start-point)
+ (goto-char start-point))
+ (setq start-point (point))
+ (if remap-double-click
+ (setq click-count 0))
+
+ (setq click-count (mod click-count 4))
+
+ ;; activate correct visual state
+ (let ((range (evil-mouse-start-end start-point start-point click-count)))
+ (set-mark (nth 0 range))
+ (goto-char (nth 1 range)))
+
+ (cond
+ ((= click-count 0)
+ (when (evil-visual-state-p) (evil-exit-visual-state)))
+ ((= click-count 1)
+ (evil-visual-char)
+ (evil-visual-post-command))
+ ((= click-count 2)
+ (evil-visual-line)
+ (evil-visual-post-command))
+ ((= click-count 3)
+ (evil-visual-block)
+ (evil-visual-post-command)))
+
+ ;; Track the mouse until we get a non-movement event.
+ (track-mouse
+ (while (progn
+ (setq event (read-key))
+ (or (mouse-movement-p event)
+ (memq (car-safe event) '(switch-frame select-window))))
+ (unless (evil-visual-state-p)
+ (cond
+ ((= click-count 0) (evil-visual-char))
+ ((= click-count 1) (evil-visual-char))
+ ((= click-count 2) (evil-visual-line))
+ ((= click-count 3) (evil-visual-block))))
+
+ (evil-visual-pre-command)
+ (unless (memq (car-safe event) '(switch-frame select-window))
+ ;; Automatic hscrolling did not occur during the call to
+ ;; `read-event'; but if the user subsequently drags the
+ ;; mouse, go ahead and hscroll.
+ (let ((auto-hscroll-mode auto-hscroll-mode-saved))
+ (redisplay))
+ (setq end (event-end event)
+ end-point (posn-point end))
+ (if (and (eq (posn-window end) start-window)
+ (integer-or-marker-p end-point))
+ (evil-mouse--drag-set-mark-and-point start-point
+ end-point click-count)
+ (let ((mouse-row (cdr (cdr (mouse-position)))))
+ (cond
+ ((null mouse-row))
+ ((< mouse-row top)
+ (mouse-scroll-subr start-window (- mouse-row top)
+ nil start-point))
+ ((>= mouse-row bottom)
+ (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
+ nil start-point))))))
+ (evil-visual-post-command)))
+
+ ;; Handle the terminating event if possible.
+ (when (consp event)
+ ;; Ensure that point is on the end of the last event.
+ (when (and (setq end-point (posn-point (event-end event)))
+ (eq (posn-window end) start-window)
+ (integer-or-marker-p end-point)
+ (/= start-point end-point))
+ (evil-mouse--drag-set-mark-and-point start-point
+ end-point click-count))
+
+ ;; Find its binding.
+ (let* ((fun (key-binding (vector (car event))))
+ (do-multi-click (and (> (event-click-count event) 0)
+ (functionp fun)
+ (not (memq fun '(mouse-set-point
+ mouse-set-region))))))
+ (if (and (or (/= (mark) (point))
+ (= click-count 1) ; word selection
+ (and (memq (evil-visual-type) '(line block))))
+ (not do-multi-click))
+
+ ;; If point has moved, finish the drag.
+ (let (last-command this-command)
+ (and mouse-drag-copy-region
+ do-mouse-drag-region-post-process
+ (let (deactivate-mark)
+ (evil-visual-expand-region)
+ (copy-region-as-kill (mark) (point))
+ (evil-visual-contract-region))))
+
+ ;; If point hasn't moved, run the binding of the
+ ;; terminating up-event.
+ (if do-multi-click
+ (goto-char start-point)
+ (deactivate-mark))
+ (when (and (functionp fun)
+ (= start-hscroll (window-hscroll start-window))
+ ;; Don't run the up-event handler if the window
+ ;; start changed in a redisplay after the
+ ;; mouse-set-point for the down-mouse event at
+ ;; the beginning of this function. When the
+ ;; window start has changed, the up-mouse event
+ ;; contains a different position due to the new
+ ;; window contents, and point is set again.
+ (or end-point
+ (= (window-start start-window)
+ start-window-start)))
+ (when (and on-link
+ (= start-point (point))
+ (evil-mouse--remap-link-click-p start-event event))
+ ;; If we rebind to mouse-2, reselect previous selected
+ ;; window, so that the mouse-2 event runs in the same
+ ;; situation as if user had clicked it directly. Fixes
+ ;; the bug reported by juri@jurta.org on 2005-12-27.
+ (if (or (vectorp on-link) (stringp on-link))
+ (setq event (aref on-link 0))
+ (select-window original-window)
+ (setcar event 'mouse-2)
+ ;; If this mouse click has never been done by the
+ ;; user, it doesn't have the necessary property to be
+ ;; interpreted correctly.
+ (put 'mouse-2 'event-kind 'mouse-click)))
+ (push event unread-command-events)))))))
+
+;; This function is a plain copy of `mouse--drag-set-mark-and-point',
+;; which is only available in Emacs 24
+(defun evil-mouse--drag-set-mark-and-point (start click click-count)
+ (let* ((range (evil-mouse-start-end start click click-count))
+ (beg (nth 0 range))
+ (end (nth 1 range)))
+ (cond ((eq (mark) beg)
+ (goto-char end))
+ ((eq (mark) end)
+ (goto-char beg))
+ ((< click (mark))
+ (set-mark end)
+ (goto-char beg))
+ (t
+ (set-mark beg)
+ (goto-char end)))))
+
+;; This function is a plain copy of `mouse--remap-link-click-p',
+;; which is only available in Emacs 23
+(defun evil-mouse--remap-link-click-p (start-event end-event)
+ (or (and (eq mouse-1-click-follows-link 'double)
+ (= (event-click-count start-event) 2))
+ (and
+ (not (eq mouse-1-click-follows-link 'double))
+ (= (event-click-count start-event) 1)
+ (= (event-click-count end-event) 1)
+ (or (not (integerp mouse-1-click-follows-link))
+ (let ((t0 (posn-timestamp (event-start start-event)))
+ (t1 (posn-timestamp (event-end end-event))))
+ (and (integerp t0) (integerp t1)
+ (if (> mouse-1-click-follows-link 0)
+ (<= (- t1 t0) mouse-1-click-follows-link)
+ (< (- t0 t1) mouse-1-click-follows-link))))))))
+
+(defun evil-mouse-start-end (start end mode)
+ "Return a list of region bounds based on START and END according to MODE.
+If MODE is not 1 then set point to (min START END), mark to (max
+START END). If MODE is 1 then set point to start of word at (min
+START END), mark to end of word at (max START END)."
+ (evil-sort start end)
+ (setq mode (mod mode 4))
+ (if (/= mode 1) (list start end)
+ (list
+ (save-excursion
+ (goto-char (min (point-max) (1+ start)))
+ (if (zerop (forward-thing evil-mouse-word -1))
+ (let ((bpnt (point)))
+ (forward-thing evil-mouse-word +1)
+ (if (> (point) start) bpnt (point)))
+ (point-min)))
+ (save-excursion
+ (goto-char end)
+ (1-
+ (if (zerop (forward-thing evil-mouse-word +1))
+ (let ((epnt (point)))
+ (forward-thing evil-mouse-word -1)
+ (if (<= (point) end) epnt (point)))
+ (point-max)))))))
+
+;;; State switching
+
+(evil-define-command evil-exit-emacs-state (&optional buffer message)
+ "Exit Emacs state.
+Changes the state to the previous state, or to Normal state
+if the previous state was Emacs state."
+ :keep-visual t
+ :suppress-operator t
+ (interactive '(nil t))
+ (with-current-buffer (or buffer (current-buffer))
+ (when (evil-emacs-state-p)
+ (evil-change-to-previous-state buffer message)
+ (when (evil-emacs-state-p)
+ (evil-normal-state (and message 1))))))
+
+(defun evil-execute-in-normal-state ()
+ "Execute the next command in Normal state."
+ (interactive)
+ (evil-delay '(not (memq this-command
+ '(evil-execute-in-normal-state
+ evil-use-register
+ digit-argument
+ negative-argument
+ universal-argument
+ universal-argument-minus
+ universal-argument-more
+ universal-argument-other-key)))
+ `(progn
+ (with-current-buffer ,(current-buffer)
+ (evil-change-state ',evil-state)
+ (setq evil-move-cursor-back ',evil-move-cursor-back)))
+ 'post-command-hook)
+ (setq evil-move-cursor-back nil)
+ (evil-normal-state)
+ (evil-echo "Switched to Normal state for the next command ..."))
+
+(defun evil-stop-execute-in-emacs-state ()
+ (when (and (not (eq this-command #'evil-execute-in-emacs-state))
+ (not (minibufferp)))
+ (remove-hook 'post-command-hook 'evil-stop-execute-in-emacs-state)
+ (when (buffer-live-p evil-execute-in-emacs-state-buffer)
+ (with-current-buffer evil-execute-in-emacs-state-buffer
+ (if (and (eq evil-previous-state 'visual)
+ (not (use-region-p)))
+ (progn
+ (evil-change-to-previous-state)
+ (evil-exit-visual-state))
+ (evil-change-to-previous-state))))
+ (setq evil-execute-in-emacs-state-buffer nil)))
+
+(evil-define-command evil-execute-in-emacs-state ()
+ "Execute the next command in Emacs state."
+ (add-hook 'post-command-hook #'evil-stop-execute-in-emacs-state t)
+ (setq evil-execute-in-emacs-state-buffer (current-buffer))
+ (cond
+ ((evil-visual-state-p)
+ (let ((mrk (mark))
+ (pnt (point)))
+ (evil-emacs-state)
+ (set-mark mrk)
+ (goto-char pnt)))
+ (t
+ (evil-emacs-state)))
+ (evil-echo "Switched to Emacs state for the next command ..."))
+
+(defun evil-exit-visual-and-repeat (event)
+ "Exit insert state and repeat event.
+This special command should be used if some command called from
+visual state should actually be called in normal-state. The main
+reason for doing this is that the repeat system should *not*
+record the visual state information for some command. This
+command should be bound to exactly the same event in visual state
+as the original command is bound in normal state. EVENT is the
+event that triggered the execution of this command."
+ (interactive "e")
+ (when (evil-visual-state-p)
+ (evil-exit-visual-state)
+ (push event unread-command-events)))
+(evil-declare-ignore-repeat 'evil-exit-visual-and-repeat)
+
+(provide 'evil-commands)
+
+;;; evil-commands.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-commands.elc b/.emacs.d/elpa/evil-20171210.501/evil-commands.elc
new file mode 100644
index 0000000..31c72c3
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-commands.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-common.el b/.emacs.d/elpa/evil-20171210.501/evil-common.el
new file mode 100644
index 0000000..a9d6cd3
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-common.el
@@ -0,0 +1,3882 @@
+;;; evil-common.el --- Common functions and utilities
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-vars)
+(require 'evil-digraphs)
+(require 'rect)
+(require 'thingatpt)
+
+;;; Code:
+
+(declare-function evil-visual-state-p "evil-states")
+(declare-function evil-visual-restore "evil-states")
+(declare-function evil-motion-state "evil-states")
+(declare-function evil-ex-p "evil-ex")
+(declare-function evil-set-jump "evil-jumps")
+
+(condition-case nil
+ (require 'windmove)
+ (error
+ (message "evil: Could not load `windmove', \
+window commands not available.")
+ nil))
+
+;;; Compatibility with different Emacs versions
+
+;; x-set-selection and x-get-selection have been deprecated since 25.1
+;; by gui-set-selection and gui-get-selection
+(defalias 'evil-get-selection
+ (if (fboundp 'gui-get-selection) 'gui-get-selection 'x-get-selection))
+(defalias 'evil-set-selection
+ (if (fboundp 'gui-set-selection) 'gui-set-selection 'x-set-selection))
+
+(defmacro evil-called-interactively-p ()
+ "Wrapper for `called-interactively-p'.
+In older versions of Emacs, `called-interactively-p' takes
+no arguments. In Emacs 23.2 and newer, it takes one argument."
+ (called-interactively-p 'any))
+(make-obsolete 'evil-called-interactively-p
+ "please use (called-interactively-p 'any) instead."
+ "Git commit 222b791")
+
+;; macro helper
+(eval-and-compile
+ (defun evil-unquote (exp)
+ "Return EXP unquoted."
+ (while (eq (car-safe exp) 'quote)
+ (setq exp (cadr exp)))
+ exp))
+
+(defun evil-delay (condition form hook &optional append local name)
+ "Execute FORM when CONDITION becomes true, checking with HOOK.
+NAME specifies the name of the entry added to HOOK. If APPEND is
+non-nil, the entry is appended to the hook. If LOCAL is non-nil,
+the buffer-local value of HOOK is modified."
+ (if (and (not (booleanp condition)) (eval condition))
+ (eval form)
+ (let* ((name (or name (format "evil-delay-form-in-%s" hook)))
+ (fun (make-symbol name))
+ (condition (or condition t)))
+ (fset fun `(lambda (&rest args)
+ (when ,condition
+ (remove-hook ',hook #',fun ',local)
+ ,form)))
+ (put fun 'permanent-local-hook t)
+ (add-hook hook fun append local))))
+(put 'evil-delay 'lisp-indent-function 2)
+
+;;; List functions
+
+(defun evil-add-to-alist (list-var key val &rest elements)
+ "Add the assocation of KEY and VAL to the value of LIST-VAR.
+If the list already contains an entry for KEY, update that entry;
+otherwise add at the end of the list."
+ (let ((tail (symbol-value list-var)))
+ (while (and tail (not (equal (car-safe (car-safe tail)) key)))
+ (setq tail (cdr tail)))
+ (if tail
+ (setcar tail (cons key val))
+ (set list-var (append (symbol-value list-var)
+ (list (cons key val)))))
+ (if elements
+ (apply #'evil-add-to-alist list-var elements)
+ (symbol-value list-var))))
+
+;; custom version of `delete-if'
+(defun evil-filter-list (predicate list &optional pointer)
+ "Delete by side-effect all items satisfying PREDICATE in LIST.
+Stop when reaching POINTER. If the first item satisfies PREDICATE,
+there is no way to remove it by side-effect; therefore, write
+\(setq foo (evil-filter-list 'predicate foo)) to be sure of
+changing the value of `foo'."
+ (let ((tail list) elt head)
+ (while (and tail (not (eq tail pointer)))
+ (setq elt (car tail))
+ (cond
+ ((funcall predicate elt)
+ (setq tail (cdr tail))
+ (if head
+ (setcdr head tail)
+ (setq list tail)))
+ (t
+ (setq head tail
+ tail (cdr tail)))))
+ list))
+
+(defun evil-member-if (predicate list &optional pointer)
+ "Find the first item satisfying PREDICATE in LIST.
+Stop when reaching POINTER, which should point at a link
+in the list."
+ (let (elt)
+ (catch 'done
+ (while (and (consp list) (not (eq list pointer)))
+ (setq elt (car list))
+ (if (funcall predicate elt)
+ (throw 'done elt)
+ (setq list (cdr list)))))))
+
+(defun evil-member-recursive-if (predicate tree)
+ "Find the first item satisfying PREDICATE in TREE."
+ (cond
+ ((funcall predicate tree)
+ tree)
+ ((listp tree)
+ (catch 'done
+ (dolist (elt tree)
+ (when (setq elt (evil-member-recursive-if predicate elt))
+ (throw 'done elt)))))))
+
+(defun evil-concat-lists (&rest sequences)
+ "Concatenate lists, removing duplicates.
+Elements are compared with `eq'."
+ (let (result)
+ (dolist (sequence sequences)
+ (dolist (elt sequence)
+ (add-to-list 'result elt nil #'eq)))
+ (nreverse result)))
+
+(defun evil-concat-alists (&rest sequences)
+ "Concatenate association lists, removing duplicates.
+An alist is a list of cons cells (KEY . VALUE) where each key
+may occur only once. Later values overwrite earlier values."
+ (let (result)
+ (dolist (sequence sequences)
+ (dolist (elt sequence)
+ (setq result (assq-delete-all (car-safe elt) result))
+ (push elt result)))
+ (nreverse result)))
+
+(defun evil-concat-plists (&rest sequences)
+ "Concatenate property lists, removing duplicates.
+A property list is a list (:KEYWORD1 VALUE1 :KEYWORD2 VALUE2...)
+where each keyword may occur only once. Later values overwrite
+earlier values."
+ (let (result)
+ (dolist (sequence sequences result)
+ (while sequence
+ (setq result
+ (plist-put result (pop sequence) (pop sequence)))))))
+
+(defun evil-concat-keymap-alists (&rest sequences)
+ "Concatenate keymap association lists, removing duplicates.
+A keymap alist is a list of cons cells (VAR . MAP) where each keymap
+may occur only once, but where the variables may be repeated
+\(e.g., (VAR . MAP1) (VAR . MAP2) is allowed). The order matters,
+with the highest priority keymaps being listed first."
+ (let (result)
+ (dolist (sequence sequences)
+ (dolist (elt sequence)
+ (unless (rassq (cdr-safe elt) result)
+ (push elt result))))
+ (nreverse result)))
+
+(defun evil-plist-delete (prop plist)
+ "Delete by side effect the property PROP from PLIST.
+If PROP is the first property in PLIST, there is no way
+to remove it by side-effect; therefore, write
+\(setq foo (evil-plist-delete :prop foo)) to be sure of
+changing the value of `foo'."
+ (let ((tail plist) elt head)
+ (while tail
+ (setq elt (car tail))
+ (cond
+ ((eq elt prop)
+ (setq tail (cdr (cdr tail)))
+ (if head
+ (setcdr (cdr head) tail)
+ (setq plist tail)))
+ (t
+ (setq head tail
+ tail (cdr (cdr tail))))))
+ plist))
+
+(defun evil-get-property (alist key &optional prop)
+ "Return property PROP for KEY in ALIST.
+ALIST is an association list with entries of the form
+\(KEY . PLIST), where PLIST is a property list.
+If PROP is nil, return all properties for KEY.
+If KEY is t, return an association list of keys
+and their PROP values."
+ (cond
+ ((null prop)
+ (cdr (assq key alist)))
+ ((eq key t)
+ (let (result val)
+ (dolist (entry alist result)
+ (setq key (car entry)
+ val (cdr entry))
+ (when (plist-member val prop)
+ (setq val (plist-get val prop))
+ (push (cons key val) result)))))
+ (t
+ (plist-get (cdr (assq key alist)) prop))))
+
+(defun evil-put-property (alist-var key prop val &rest properties)
+ "Set PROP to VAL for KEY in ALIST-VAR.
+ALIST-VAR points to an association list with entries of the form
+\(KEY . PLIST), where PLIST is a property list storing PROP and VAL."
+ (set alist-var
+ (let* ((alist (symbol-value alist-var))
+ (plist (cdr (assq key alist))))
+ (setq plist (plist-put plist prop val))
+ (when properties
+ (setq plist (evil-concat-plists plist properties)
+ val (car (last properties))))
+ (setq alist (assq-delete-all key alist))
+ (push (cons key plist) alist)))
+ val)
+
+(defun evil-state-property (state prop &optional value)
+ "Return the value of property PROP for STATE.
+PROP is a keyword as used by `evil-define-state'.
+STATE is the state's symbolic name.
+If VALUE is non-nil and the value is a variable,
+return the value of that variable."
+ (let ((val (evil-get-property evil-state-properties state prop)))
+ (if (and value (symbolp val) (boundp val))
+ (symbol-value val)
+ val)))
+
+(defmacro evil-swap (this that &rest vars)
+ "Swap the values of variables THIS and THAT.
+If three or more arguments are given, the values are rotated.
+E.g., (evil-swap A B C) sets A to B, B to C, and C to A."
+ `(progn
+ (setq ,this (prog1 ,that
+ (setq ,that ,this)))
+ ,@(when vars
+ `((evil-swap ,that ,@vars)))))
+
+(defmacro evil-sort (min max &rest vars)
+ "Place the smallest value in MIN and the largest in MAX.
+If three or more arguments are given, place the smallest
+value in the first argument and the largest in the last,
+sorting in between."
+ (let ((sorted (make-symbol "sortvar")))
+ `(let ((,sorted (sort (list ,min ,max ,@vars) '<)))
+ (setq ,min (pop ,sorted)
+ ,max (pop ,sorted)
+ ,@(apply #'append
+ (mapcar #'(lambda (var)
+ (list var `(pop ,sorted)))
+ vars))))))
+
+(defun evil-vector-to-string (vector)
+ "Turns vector into a string, changing <escape> to '\\e'"
+ (mapconcat (lambda (c)
+ (if (equal c 'escape)
+ "\e"
+ (make-string 1 c)))
+ vector
+ ""))
+
+;;; Command properties
+
+(defmacro evil-define-command (command &rest body)
+ "Define a command COMMAND.
+
+\(fn COMMAND (ARGS...) DOC [[KEY VALUE]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name
+ [&optional lambda-list]
+ [&optional stringp]
+ [&rest keywordp sexp]
+ [&optional ("interactive" [&rest form])]
+ def-body)))
+ (let ((interactive '(interactive))
+ arg args doc doc-form key keys)
+ ;; collect arguments
+ (when (listp (car-safe body))
+ (setq args (pop body)))
+ ;; collect docstring
+ (when (> (length body) 1)
+ (if (eq (car-safe (car-safe body)) 'format)
+ (setq doc-form (pop body))
+ (when (stringp (car-safe body))
+ (setq doc (pop body)))))
+ ;; collect keywords
+ (setq keys (plist-put keys :repeat t))
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body))
+ (unless nil ; TODO: add keyword check
+ (setq keys (plist-put keys key arg))))
+ ;; collect `interactive' form
+ (when (and body (consp (car body))
+ (eq (car (car body)) 'interactive))
+ (let* ((iform (pop body))
+ (result (apply #'evil-interactive-form (cdr iform)))
+ (form (car result))
+ (attrs (cdr result)))
+ (setq interactive `(interactive ,form)
+ keys (evil-concat-plists keys attrs))))
+ `(progn
+ ;; the compiler does not recognize `defun' inside `let'
+ ,(when (and command body)
+ `(defun ,command ,args
+ ,@(when doc `(,doc))
+ ,interactive
+ ,@body))
+ ,(when (and command doc-form)
+ `(put ',command 'function-documentation ,doc-form))
+ ;; set command properties for symbol or lambda function
+ (let ((func ',(if (and (null command) body)
+ `(lambda ,args
+ ,interactive
+ ,@body)
+ command)))
+ (apply #'evil-set-command-properties func ',keys)
+ func))))
+
+;; If no Evil properties are defined for the command, several parts of
+;; Evil apply certain default rules; e.g., the repeat system decides
+;; whether the command is repeatable by monitoring buffer changes.
+(defun evil-has-command-property-p (command property)
+ "Whether COMMAND has Evil PROPERTY.
+See also `evil-has-command-properties-p'."
+ (plist-member (evil-get-command-properties command) property))
+
+(defun evil-has-command-properties-p (command)
+ "Whether Evil properties are defined for COMMAND.
+See also `evil-has-command-property-p'."
+ (and (evil-get-command-properties command) t))
+
+(defun evil-get-command-property (command property &optional default)
+ "Return the value of Evil PROPERTY of COMMAND.
+If the command does not have the property, return DEFAULT.
+See also `evil-get-command-properties'."
+ (if (evil-has-command-property-p command property)
+ (evil-get-property evil-command-properties command property)
+ default))
+
+(defun evil-get-command-properties (command)
+ "Return all Evil properties of COMMAND.
+See also `evil-get-command-property'."
+ (evil-get-property evil-command-properties command))
+
+(defun evil-set-command-property (command property value)
+ "Set PROPERTY to VALUE for COMMAND.
+To set multiple properties at once, see
+`evil-set-command-properties' and `evil-add-command-properties'."
+ (evil-put-property 'evil-command-properties command property value))
+(defalias 'evil-put-command-property 'evil-set-command-property)
+
+(defun evil-add-command-properties (command &rest properties)
+ "Add PROPERTIES to COMMAND.
+PROPERTIES should be a property list.
+To replace all properties at once, use `evil-set-command-properties'."
+ (apply #'evil-put-property
+ 'evil-command-properties command properties))
+
+(defun evil-set-command-properties (command &rest properties)
+ "Replace all of COMMAND's properties with PROPERTIES.
+PROPERTIES should be a property list.
+This erases all previous properties; to only add properties,
+use `evil-set-command-property'."
+ (setq evil-command-properties
+ (assq-delete-all command evil-command-properties))
+ (when properties
+ (apply #'evil-add-command-properties command properties)))
+
+(defun evil-remove-command-properties (command &rest properties)
+ "Remove PROPERTIES from COMMAND.
+PROPERTIES should be a list of properties (:PROP1 :PROP2 ...).
+If PROPERTIES is the empty list, all properties are removed."
+ (let (plist)
+ (when properties
+ (setq plist (evil-get-command-properties command))
+ (dolist (property properties)
+ (setq plist (evil-plist-delete property plist))))
+ (apply #'evil-set-command-properties command plist)))
+
+(defun evil-yank-handler (&optional motion)
+ "Return the yank handler for MOTION.
+MOTION defaults to the current motion."
+ (setq motion (or motion evil-this-motion))
+ (evil-get-command-property motion :yank-handler))
+
+(defun evil-declare-motion (command)
+ "Declare COMMAND to be a movement function.
+This ensures that it behaves correctly in Visual state."
+ (evil-add-command-properties command :keep-visual t :repeat 'motion))
+
+(defun evil-declare-repeat (command)
+ "Declare COMMAND to be repeatable."
+ (evil-add-command-properties command :repeat t))
+
+(defun evil-declare-not-repeat (command)
+ "Declare COMMAND to be nonrepeatable."
+ (evil-add-command-properties command :repeat nil))
+
+(defun evil-declare-ignore-repeat (command)
+ "Declare COMMAND to be nonrepeatable."
+ (evil-add-command-properties command :repeat 'ignore))
+
+(defun evil-declare-change-repeat (command)
+ "Declare COMMAND to be repeatable by buffer changes."
+ (evil-add-command-properties command :repeat 'change))
+
+(defun evil-declare-insert-at-point-repeat (command)
+ "Declare COMMAND to be repeatable by buffer changes."
+ (evil-add-command-properties command :repeat 'insert-at-point))
+
+(defun evil-declare-abort-repeat (command)
+ "Declare COMMAND to be nonrepeatable."
+ (evil-add-command-properties command :repeat 'abort))
+
+(defun evil-delimited-arguments (string &optional num)
+ "Parse STRING as a sequence of delimited arguments.
+Returns a list of NUM strings, or as many arguments as
+the string contains. The first non-blank character is
+taken to be the delimiter. If some arguments are missing
+from STRING, the resulting list is padded with nil values.
+Two delimiters following directly after each other gives
+an empty string."
+ (save-match-data
+ (let ((string (or string ""))
+ (count (or num -1)) (idx 0)
+ argument delim match result)
+ (when (string-match "^[[:space:]]*\\([^[:space:]]\\)" string)
+ (setq delim (match-string 1 string)
+ argument (format "%s\\(\\(?:[\\].\\|[^%s]\\)*\\)"
+ (regexp-quote delim)
+ delim))
+ (while (and (/= count 0) (string-match argument string idx))
+ (setq match (match-string 1 string)
+ idx (match-end 1)
+ count (1- count))
+ (when (= count 0)
+ (unless (save-match-data
+ (string-match
+ (format "%s[[:space:]]*$" delim) string idx))
+ (setq match (substring string (match-beginning 1)))))
+ (unless (and (zerop (length match))
+ (zerop (length (substring string idx))))
+ (push match result))))
+ (when (and num (< (length result) num))
+ (dotimes (i (- num (length result)))
+ (push nil result)))
+ (nreverse result))))
+
+(defun evil-concat-charsets (&rest sets)
+ "Concatenate character sets.
+A character set is the part between [ and ] in a regular expression.
+If any character set is complemented, the result is also complemented."
+ (let ((bracket "") (complement "") (hyphen "") result)
+ (save-match-data
+ (dolist (set sets)
+ (when (string-match "^\\^" set)
+ (setq set (substring set 1)
+ complement "^"))
+ (when (string-match "^]" set)
+ (setq set (substring set 1)
+ bracket "]"))
+ (when (string-match "^-" set)
+ (setq set (substring set 1)
+ hyphen "-"))
+ (setq result (concat result set)))
+ (format "%s%s%s%s" complement bracket hyphen result))))
+
+;;; Key sequences
+
+(defun evil-keypress-parser (&optional input)
+ "Read from keyboard or INPUT and build a command description.
+Returns (CMD COUNT), where COUNT is the numeric prefix argument.
+Both COUNT and CMD may be nil."
+ (let (count negative)
+ (when input (setq unread-command-events (append input unread-command-events)))
+ (catch 'done
+ (while t
+ (let ((seq (read-key-sequence "")))
+ (when seq
+ (let ((cmd (key-binding seq)))
+ (cond
+ ((null cmd) (throw 'done (list nil nil)))
+ ((arrayp cmd) ; keyboard macro, recursive call
+ (let ((cmd (evil-keypress-parser cmd)))
+ (throw 'done
+ (list (car cmd)
+ (if (or count (cadr cmd))
+ (list (car cmd) (* (or count 1)
+ (or (cadr cmd) 1))))))))
+ ((or (eq cmd #'digit-argument)
+ (and (eq cmd 'evil-digit-argument-or-evil-beginning-of-line)
+ count))
+ (let* ((event (aref seq (- (length seq) 1)))
+ (char (or (when (characterp event) event)
+ (when (symbolp event)
+ (get event 'ascii-character))))
+ (digit (if (or (characterp char) (integerp char))
+ (- (logand char ?\177) ?0))))
+ (setq count (+ (* 10 (or count 0)) digit))))
+ ((eq cmd #'negative-argument)
+ (setq negative (not negative)))
+ (t
+ (throw 'done (list cmd
+ (and count
+ (* count
+ (if negative -1 1))))))))))))))
+
+(defun evil-read-key (&optional prompt)
+ "Read a key from the keyboard.
+Translates it according to the input method."
+ (let ((old-global-map (current-global-map))
+ (new-global-map (make-sparse-keymap))
+ (overriding-terminal-local-map nil)
+ (overriding-local-map evil-read-key-map)
+ seq char cmd)
+ (unwind-protect
+ (condition-case nil
+ (progn
+ (define-key new-global-map [menu-bar]
+ (lookup-key global-map [menu-bar]))
+ (define-key new-global-map [tool-bar]
+ (lookup-key global-map [tool-bar]))
+ (add-to-list 'new-global-map
+ (make-char-table 'display-table
+ 'self-insert-command) t)
+ (use-global-map new-global-map)
+ (setq seq (read-key-sequence prompt nil t)
+ char (aref seq 0)
+ cmd (key-binding seq))
+ (while (arrayp cmd)
+ (setq char (aref cmd 0)
+ cmd (key-binding cmd)))
+ (cond
+ ((eq cmd 'self-insert-command)
+ char)
+ (cmd
+ (call-interactively cmd))
+ (t
+ (user-error "No replacement character typed"))))
+ (quit
+ (when (fboundp 'evil-repeat-abort)
+ (evil-repeat-abort))
+ (signal 'quit nil)))
+ (use-global-map old-global-map))))
+
+(defun evil-read-quoted-char ()
+ "Command that calls `read-quoted-char'.
+This command can be used wherever `read-quoted-char' is required
+as a command. Its main use is in the `evil-read-key-map'."
+ (interactive)
+ (read-quoted-char))
+
+(defun evil-read-digraph-char (&optional hide-chars)
+ "Read two keys from keyboard forming a digraph.
+This function creates an overlay at (point), hiding the next
+HIDE-CHARS characters. HIDE-CHARS defaults to 1."
+ (interactive)
+ (let (char1 char2 string overlay)
+ (unwind-protect
+ (progn
+ (setq overlay (make-overlay (point)
+ (min (point-max)
+ (+ (or hide-chars 1)
+ (point)))))
+ (overlay-put overlay 'invisible t)
+ ;; create overlay prompt
+ (setq string "?")
+ (put-text-property 0 1 'face 'minibuffer-prompt string)
+ ;; put cursor at (i.e., right before) the prompt
+ (put-text-property 0 1 'cursor t string)
+ (overlay-put overlay 'after-string string)
+ (setq char1 (read-key))
+ (setq string (string char1))
+ (put-text-property 0 1 'face 'minibuffer-prompt string)
+ (put-text-property 0 1 'cursor t string)
+ (overlay-put overlay 'after-string string)
+ (setq char2 (read-key)))
+ (delete-overlay overlay))
+ (or (evil-digraph (list char1 char2))
+ ;; use the last character if undefined
+ char2)))
+
+(defun evil-read-motion (&optional motion count type modifier)
+ "Read a MOTION, motion COUNT and motion TYPE from the keyboard.
+The type may be overridden with MODIFIER, which may be a type
+or a Visual selection as defined by `evil-define-visual-selection'.
+Return a list (MOTION COUNT [TYPE])."
+ (let ((modifiers '((evil-visual-char . char)
+ (evil-visual-line . line)
+ (evil-visual-block . block)))
+ command prefix)
+ (setq evil-this-type-modified nil)
+ (unless motion
+ (while (progn
+ (setq command (evil-keypress-parser)
+ motion (pop command)
+ prefix (pop command))
+ (when prefix
+ (if count
+ (setq count (string-to-number
+ (concat (number-to-string count)
+ (number-to-string prefix))))
+ (setq count prefix)))
+ ;; if the command is a type modifier, read more
+ (when (rassq motion evil-visual-alist)
+ (setq modifier
+ (or modifier
+ (car (rassq motion evil-visual-alist))))))))
+ (when modifier
+ (setq type (or type (evil-type motion 'exclusive)))
+ (cond
+ ((eq modifier 'char)
+ ;; TODO: this behavior could be less hard-coded
+ (if (eq type 'exclusive)
+ (setq type 'inclusive)
+ (setq type 'exclusive)))
+ (t
+ (setq type modifier)))
+ (setq evil-this-type-modified type))
+ (list motion count type)))
+
+(defun evil-mouse-events-p (keys)
+ "Returns non-nil iff KEYS contains a mouse event."
+ (catch 'done
+ (dotimes (i (length keys))
+ (when (or (and (fboundp 'mouse-event-p)
+ (mouse-event-p (aref keys i)))
+ (mouse-movement-p (aref keys i)))
+ (throw 'done t)))
+ nil))
+
+(defun evil-extract-count (keys)
+ "Splits the key-sequence KEYS into prefix-argument and the rest.
+Returns the list (PREFIX CMD SEQ REST), where PREFIX is the
+prefix count, CMD the command to be executed, SEQ the subsequence
+calling CMD, and REST is all remaining events in the
+key-sequence. PREFIX and REST may be nil if they do not exist.
+If a command is bound to some keyboard macro, it is expanded
+recursively."
+ (catch 'done
+ (let* ((len (length keys))
+ (beg 0)
+ (end 1)
+ (found-prefix nil))
+ (while (and (<= end len))
+ (let ((cmd (key-binding (substring keys beg end))))
+ (cond
+ ((memq cmd '(undefined nil))
+ (user-error "No command bound to %s" (substring keys beg end)))
+ ((arrayp cmd) ; keyboard macro, replace command with macro
+ (setq keys (vconcat (substring keys 0 beg)
+ cmd
+ (substring keys end))
+ end (1+ beg)
+ len (length keys)))
+ ((functionp cmd)
+ (if (or (memq cmd '(digit-argument negative-argument))
+ (and found-prefix
+ (evil-get-command-property
+ cmd :digit-argument-redirection)))
+ ;; skip those commands
+ (setq found-prefix t ; found at least one prefix argument
+ beg end
+ end (1+ end))
+ ;; a real command, finish
+ (throw 'done
+ (list (unless (zerop beg)
+ (string-to-number
+ (concat (substring keys 0 beg))))
+ cmd
+ (substring keys beg end)
+ (when (< end len)
+ (substring keys end))))))
+ (t ; append a further event
+ (setq end (1+ end))))))
+ (user-error "Key sequence contains no complete binding"))))
+
+(defmacro evil-redirect-digit-argument (map keys target)
+ "Bind a wrapper function calling TARGET or `digit-argument'.
+MAP is a keymap for binding KEYS to the wrapper for TARGET.
+The wrapper only calls `digit-argument' if a prefix-argument
+has already been started; otherwise TARGET is called."
+ (let* ((target (eval target))
+ (wrapper (intern (format "evil-digit-argument-or-%s"
+ target))))
+ `(progn
+ (define-key ,map ,keys ',wrapper)
+ (evil-define-command ,wrapper ()
+ :digit-argument-redirection ,target
+ :keep-visual t
+ :repeat nil
+ (interactive)
+ (cond
+ (current-prefix-arg
+ (setq this-command #'digit-argument)
+ (call-interactively #'digit-argument))
+ (t
+ (let ((target (or (command-remapping #',target)
+ #',target)))
+ (setq this-command target)
+ (call-interactively target))))))))
+
+(defun evil-extract-append (file-or-append)
+ "Return an (APPEND . FILENAME) pair based on FILE-OR-APPEND.
+FILE-OR-APPEND should either be a filename or a \">> FILE\"
+directive. APPEND will be t if FILE-OR-APPEND is an append
+directive and nil otherwise. FILENAME will be the extracted
+filename."
+ (if (and (stringp file-or-append)
+ (string-match "\\(>> *\\)" file-or-append))
+ (cons t (substring file-or-append(match-end 1)))
+ (cons nil file-or-append)))
+
+(defun evil-set-keymap-prompt (map prompt)
+ "Set the prompt-string of MAP to PROMPT."
+ (delq (keymap-prompt map) map)
+ (when prompt
+ (setcdr map (cons prompt (cdr map)))))
+
+(defun evil-lookup-key (map key)
+ "Returns non-nil value if KEY is bound in MAP."
+ (let ((definition (lookup-key map key)))
+ (if (numberp definition) ; in-band error
+ nil
+ definition)))
+
+;;; Display
+
+(defun evil-set-cursor (specs)
+ "Change the cursor's apperance according to SPECS.
+SPECS may be a cursor type as per `cursor-type', a color
+string as passed to `set-cursor-color', a zero-argument
+function for changing the cursor, or a list of the above."
+ (unless (and (listp specs)
+ (null (cdr-safe (last specs))))
+ (setq specs (list specs)))
+ (dolist (spec specs)
+ (cond
+ ((functionp spec)
+ (condition-case nil
+ (funcall spec)
+ (error nil)))
+ ((stringp spec)
+ (evil-set-cursor-color spec))
+ (t
+ (setq cursor-type spec)))))
+
+(defun evil-set-cursor-color (color)
+ "Set the cursor color to COLOR."
+ (unless (equal (frame-parameter nil 'cursor-color) color)
+ ;; `set-cursor-color' forces a redisplay, so only
+ ;; call it when the color actually changes
+ (set-cursor-color color)))
+
+(defun evil-refresh-cursor (&optional state buffer)
+ "Refresh the cursor for STATE in BUFFER.
+BUFFER defaults to the current buffer. If STATE is nil the
+cursor type is either `evil-force-cursor' or the current state."
+ (when (and (boundp 'evil-local-mode) evil-local-mode)
+ (let* ((state (or state evil-force-cursor evil-state 'normal))
+ (default (or evil-default-cursor t))
+ (cursor (evil-state-property state :cursor t))
+ (color (or (and (stringp cursor) cursor)
+ (and (listp cursor)
+ (evil-member-if #'stringp cursor))
+ (frame-parameter nil 'cursor-color))))
+ (with-current-buffer (or buffer (current-buffer))
+ ;; if both STATE and `evil-default-cursor'
+ ;; specify a color, don't set it twice
+ (when (and color (listp default))
+ (setq default (evil-filter-list #'stringp default)))
+ (evil-set-cursor default)
+ (evil-set-cursor cursor)))))
+
+(defmacro evil-save-cursor (&rest body)
+ "Save the current cursor; execute BODY; restore the cursor."
+ (declare (indent defun)
+ (debug t))
+ `(let ((cursor cursor-type)
+ (color (frame-parameter (selected-frame) 'cursor-color))
+ (inhibit-quit t))
+ (unwind-protect
+ (progn ,@body)
+ (evil-set-cursor cursor)
+ (evil-set-cursor color))))
+
+(defun evil-echo (string &rest args)
+ "Display an unlogged message in the echo area.
+That is, the message is not logged in the *Messages* buffer.
+\(To log the message, just use `message'.)"
+ (unless evil-no-display
+ (let (message-log-max)
+ (apply #'message string args))))
+
+(defun evil-echo-area-save ()
+ "Save the current echo area in `evil-echo-area-message'."
+ (setq evil-echo-area-message (current-message)))
+
+(defun evil-echo-area-restore ()
+ "Restore the echo area from `evil-echo-area-message'.
+Does not restore if `evil-write-echo-area' is non-nil."
+ (unless evil-write-echo-area
+ (if evil-echo-area-message
+ (message "%s" evil-echo-area-message)
+ (message nil)))
+ (setq evil-echo-area-message nil
+ evil-write-echo-area nil))
+
+;; toggleable version of `with-temp-message'
+(defmacro evil-save-echo-area (&rest body)
+ "Save the echo area; execute BODY; restore the echo area.
+Intermittent messages are not logged in the *Messages* buffer."
+ (declare (indent defun)
+ (debug t))
+ `(let ((inhibit-quit t)
+ evil-echo-area-message
+ evil-write-echo-area)
+ (unwind-protect
+ (progn
+ (evil-echo-area-save)
+ ,@body)
+ (evil-echo-area-restore))))
+
+(defmacro evil-without-display (&rest body)
+ "Execute BODY without Evil displays.
+Inhibits echo area messages, mode line updates and cursor changes."
+ (declare (indent defun)
+ (debug t))
+ `(let ((evil-no-display t))
+ ,@body))
+
+(defun evil-num-visible-lines ()
+ "Returns the number of currently visible lines."
+ (- (window-height) 1))
+
+(defun evil-count-lines (beg end)
+ "Return absolute line-number-difference betweeen `beg` and `end`.
+This should give the same results no matter where on the line `beg`
+and `end` are."
+ (if (= beg end)
+ 0
+ (let* ((last (max beg end))
+ (end-at-bol (save-excursion (goto-char last)
+ (bolp))))
+ (if end-at-bol
+ (count-lines beg end)
+ (1- (count-lines beg end))))))
+
+;;; Movement
+
+(defun evil-normalize-position (pos)
+ "Return POS if it does not exceed the buffer boundaries.
+If POS is less than `point-min', return `point-min'.
+Is POS is more than `point-max', return `point-max'.
+If POS is a marker, return its position."
+ (cond
+ ((not (number-or-marker-p pos))
+ pos)
+ ((< pos (point-min))
+ (point-min))
+ ((> pos (point-max))
+ (point-max))
+ ((markerp pos)
+ (marker-position pos))
+ (t
+ pos)))
+
+(defmacro evil-save-goal-column (&rest body)
+ "Restores the goal column after execution of BODY.
+See also `evil-save-column'."
+ (declare (indent defun)
+ (debug t))
+ `(let ((goal-column goal-column)
+ (temporary-goal-column temporary-goal-column))
+ ,@body))
+
+(defmacro evil-save-column (&rest body)
+ "Restores the column after execution of BODY.
+See also `evil-save-goal-column'."
+ (declare (indent defun)
+ (debug t))
+ `(let ((col (current-column)))
+ (evil-save-goal-column
+ ,@body
+ (move-to-column col))))
+
+(defun evil-narrow (beg end)
+ "Restrict the buffer to BEG and END.
+BEG or END may be nil, specifying a one-sided restriction including
+`point-min' or `point-max'. See also `evil-with-restriction.'"
+ (setq beg (or (evil-normalize-position beg) (point-min)))
+ (setq end (or (evil-normalize-position end) (point-max)))
+ (narrow-to-region beg end))
+
+(defmacro evil-with-restriction (beg end &rest body)
+ "Execute BODY with the buffer narrowed to BEG and END.
+BEG or END may be nil as passed to `evil-narrow'; this creates
+a one-sided restriction."
+ (declare (indent 2)
+ (debug t))
+ `(save-restriction
+ (let ((evil-restriction-stack
+ (cons (cons (point-min) (point-max)) evil-restriction-stack)))
+ (evil-narrow ,beg ,end)
+ ,@body)))
+
+(defmacro evil-without-restriction (&rest body)
+ "Execute BODY with the top-most narrowing removed.
+This works only if the previous narrowing has been generated by
+`evil-with-restriction'."
+ (declare (indent defun)
+ (debug t))
+ `(save-restriction
+ (widen)
+ (narrow-to-region (car (car evil-restriction-stack))
+ (cdr (car evil-restriction-stack)))
+ (let ((evil-restriction-stack (cdr evil-restriction-stack)))
+ ,@body)))
+
+(defmacro evil-narrow-to-field (&rest body)
+ "Narrow to the current field."
+ (declare (indent defun)
+ (debug t))
+ `(evil-with-restriction (field-beginning) (field-end)
+ ,@body))
+
+(defun evil-move-beginning-of-line (&optional arg)
+ "Move to the beginning of the line as displayed.
+Like `move-beginning-of-line', but retains the goal column."
+ (evil-save-goal-column
+ (move-beginning-of-line arg)
+ (beginning-of-line)))
+
+(defun evil-move-end-of-line (&optional arg)
+ "Move to the end of the line as displayed.
+Like `move-end-of-line', but retains the goal column."
+ (evil-save-goal-column
+ (move-end-of-line arg)
+ (end-of-line)))
+
+(defun evil-adjust-cursor (&optional force)
+ "Move point one character back if at the end of a non-empty line.
+This behavior is contingent on the variable `evil-move-cursor-back';
+use the FORCE parameter to override it."
+ (when (and (eolp)
+ (not evil-move-beyond-eol)
+ (not (bolp))
+ (= (point)
+ (save-excursion
+ (evil-move-end-of-line)
+ (point))))
+ (evil-move-cursor-back force)))
+
+(defun evil-move-cursor-back (&optional force)
+ "Move point one character back within the current line.
+Contingent on the variable `evil-move-cursor-back' or the FORCE
+argument. Honors field boundaries, i.e., constrains the movement
+to the current field as recognized by `line-beginning-position'."
+ (when (or evil-move-cursor-back force)
+ (unless (or (= (point) (line-beginning-position))
+ (and (boundp 'visual-line-mode)
+ visual-line-mode
+ (= (point) (save-excursion
+ (beginning-of-visual-line)
+ (point)))))
+ (backward-char))))
+
+(defun evil-line-position (line &optional column)
+ "Return the position of LINE.
+If COLUMN is specified, return its position on the line.
+A negative number means the end of the line."
+ (save-excursion
+ (when (fboundp 'evil-goto-line)
+ (evil-goto-line line))
+ (if (numberp column)
+ (if (< column 0)
+ (beginning-of-line 2)
+ (move-to-column column))
+ (beginning-of-line))
+ (point)))
+
+(defun evil-column (&optional pos)
+ "Return the horizontal position of POS.
+POS defaults to point."
+ (save-excursion
+ (when pos
+ (goto-char pos))
+ (current-column)))
+
+(defun evil-move-to-column (column &optional dir force)
+ "Move point to column COLUMN in the current line.
+Places point at left of the tab character (at the right if DIR
+is non-nil) and returns point."
+ (interactive "p")
+ (move-to-column column force)
+ (unless force
+ (when (or (not dir) (and (numberp dir) (< dir 1)))
+ (when (> (current-column) column)
+ (evil-move-cursor-back))))
+ (point))
+
+(defmacro evil-loop (spec &rest body)
+ "Loop with countdown variable.
+Evaluate BODY with VAR counting down from COUNT to 0.
+COUNT can be negative, in which case VAR counts up instead.
+The return value is the value of VAR when the loop
+terminates, which is 0 if the loop completes successfully.
+RESULT specifies a variable for storing this value.
+
+\(fn (VAR COUNT [RESULT]) BODY...)"
+ (declare (indent defun)
+ (debug dolist))
+ (let* ((i (make-symbol "loopvar"))
+ (var (pop spec))
+ (count (pop spec))
+ (result (pop spec)))
+ (setq var (or (unless (eq var result) var) i)
+ result (or result var))
+ `(let ((,var ,count))
+ (setq ,result ,var)
+ (while (/= ,var 0)
+ ,@body
+ (if (> ,var 0)
+ (setq ,var (1- ,var))
+ (setq ,var (1+ ,var)))
+ (setq ,result ,var))
+ ,var)))
+
+;;; Motions
+
+(defmacro evil-motion-loop (spec &rest body)
+ "Loop a certain number of times.
+Evaluate BODY repeatedly COUNT times with VAR bound to 1 or -1,
+depending on the sign of COUNT. RESULT, if specified, holds
+the number of unsuccessful iterations, which is 0 if the loop
+completes successfully. This is also the return value.
+
+Each iteration must move point; if point does not change,
+the loop immediately quits. See also `evil-loop'.
+
+\(fn (VAR COUNT [RESULT]) BODY...)"
+ (declare (indent defun)
+ (debug ((symbolp form &optional symbolp) body)))
+ (let* ((var (or (pop spec) (make-symbol "unitvar")))
+ (countval (or (pop spec) 0))
+ (result (pop spec))
+ (i (make-symbol "loopvar"))
+ (count (make-symbol "countvar"))
+ (done (make-symbol "donevar"))
+ (orig (make-symbol "origvar")))
+ `(let* ((,count ,countval)
+ (,var (if (< ,count 0) -1 1)))
+ (catch ',done
+ (evil-loop (,i ,count ,result)
+ (let ((,orig (point)))
+ ,@body
+ (when (= (point) ,orig)
+ (throw ',done ,i))))))))
+
+(defmacro evil-signal-without-movement (&rest body)
+ "Catches errors provided point moves within this scope."
+ (declare (indent defun)
+ (debug t))
+ `(let ((p (point)))
+ (condition-case err
+ (progn ,@body)
+ (error
+ (when (= p (point))
+ (signal (car err) (cdr err)))))))
+
+(defun evil-signal-at-bob-or-eob (&optional count)
+ "Signals error if `point' is at boundaries.
+If `point' is at bob and COUNT is negative this function signal
+'beginning-of-buffer. If `point' is at eob and COUNT is positive
+this function singal 'end-of-buffer. This function should be used
+in motions. COUNT defaults to 1."
+ (setq count (or count 1))
+ (cond
+ ((< count 0) (evil-signal-at-bob))
+ ((> count 0) (evil-signal-at-eob))))
+
+(defun evil-signal-at-bob ()
+ "Signals 'beginning-of-buffer if `point' is at bob.
+This function should be used in backward motions. If `point' is at
+bob so that no further backward motion is possible the error
+'beginning-of-buffer is raised."
+ (when (bobp) (signal 'beginning-of-buffer nil)))
+
+(defun evil-signal-at-eob ()
+ "Signals 'end-of-buffer if `point' is at eob.
+This function should be used in forward motions. If `point' is close
+to eob so that no further forward motion is possible the error
+'end-of-buffer is raised. This is the case if `point' is at
+`point-max' or if is one position before `point-max',
+`evil-move-cursor-back' is non-nil and `point' is not at the end
+of a line. The latter is necessary because `point' cannot be
+moved to `point-max' if `evil-move-cursor-back' is non-nil and
+the last line in the buffer is not empty."
+ (when (or (eobp)
+ (and (not (eolp))
+ evil-move-cursor-back
+ (save-excursion (forward-char) (eobp))))
+ (signal 'end-of-buffer nil)))
+
+(defmacro evil-with-hproject-point-on-window (&rest body)
+ "Project point after BODY to current window.
+If point is on a position left or right of the current window
+then it is moved to the left and right boundary of the window,
+respectively. If `auto-hscroll-mode' is non-nil then the left and
+right positions are increased or decreased, respectively, by
+`horizontal-margin' so that no automatic scrolling occurs."
+ (declare (indent defun)
+ (debug t))
+ (let ((diff (make-symbol "diff"))
+ (left (make-symbol "left"))
+ (right (make-symbol "right")))
+ `(let ((,diff (if auto-hscroll-mode (1+ hscroll-margin) 0))
+ auto-hscroll-mode)
+ ,@body
+ (let* ((,left (+ (window-hscroll) ,diff))
+ (,right (+ (window-hscroll) (window-width) (- ,diff) -1)))
+ (move-to-column (min (max (current-column) ,left) ,right))))))
+
+(defun evil-goto-min (&rest positions)
+ "Go to the smallest position in POSITIONS.
+Non-numerical elements are ignored.
+See also `evil-goto-max'."
+ (when (setq positions (evil-filter-list
+ #'(lambda (elt)
+ (not (number-or-marker-p elt)))
+ positions))
+ (goto-char (apply #'min positions))))
+
+(defun evil-goto-max (&rest positions)
+ "Go to the largest position in POSITIONS.
+Non-numerical elements are ignored.
+See also `evil-goto-min'."
+ (when (setq positions (evil-filter-list
+ #'(lambda (elt)
+ (not (number-or-marker-p elt)))
+ positions))
+ (goto-char (apply #'max positions))))
+
+(defun evil-forward-not-thing (thing &optional count)
+ "Move point to the end or beginning of the complement of THING."
+ (evil-motion-loop (dir (or count 1))
+ (let (bnd)
+ (cond
+ ((> dir 0)
+ (while (and (setq bnd (bounds-of-thing-at-point thing))
+ (< (point) (cdr bnd)))
+ (goto-char (cdr bnd)))
+ ;; no thing at (point)
+ (if (zerop (forward-thing thing))
+ ;; now at the end of the next thing
+ (let ((bnd (bounds-of-thing-at-point thing)))
+ (if (or (< (car bnd) (point)) ; end of a thing
+ (= (car bnd) (cdr bnd))) ; zero width thing
+ (goto-char (car bnd))
+ ;; beginning of yet another thing, go back
+ (forward-thing thing -1)))
+ (goto-char (point-max))))
+ (t
+ (while (and (not (bobp))
+ (or (backward-char) t)
+ (setq bnd (bounds-of-thing-at-point thing))
+ (< (point) (cdr bnd)))
+ (goto-char (car bnd)))
+ ;; either bob or no thing at point
+ (goto-char
+ (if (and (not (bobp))
+ (zerop (forward-thing thing -1))
+ (setq bnd (bounds-of-thing-at-point thing)))
+ (cdr bnd)
+ (point-min))))))))
+
+(defun evil-bounds-of-not-thing-at-point (thing &optional which)
+ "Returns the bounds of a complement of THING at point.
+If there is a THING at point nil is returned. Otherwise if WHICH
+is nil or 0 a cons cell (BEG . END) is returned. If WHICH is
+negative the beginning is returned. If WHICH is positive the END
+is returned."
+ (let ((pnt (point)))
+ (let ((beg (save-excursion
+ (and (zerop (forward-thing thing -1))
+ (forward-thing thing))
+ (if (> (point) pnt) (point-min) (point))))
+ (end (save-excursion
+ (and (zerop (forward-thing thing))
+ (forward-thing thing -1))
+ (if (< (point) pnt) (point-max) (point)))))
+ (when (and (<= beg (point)) (<= (point) end) (< beg end))
+ (cond
+ ((or (not which) (zerop which)) (cons beg end))
+ ((< which 0) beg)
+ ((> which 0) end))))))
+
+(defun evil-forward-nearest (count &rest forwards)
+ "Moves point forward to the first of several motions.
+FORWARDS is a list of forward motion functions (i.e. each moves
+point forward to the next end of a text object (if passed a +1)
+or backward to the preceeding beginning of a text object (if
+passed a -1)). This function calls each of these functions once
+and moves point to the nearest of the resulting positions. If
+COUNT is positive point is moved forward COUNT times, if negative
+point is moved backward -COUNT times."
+ (evil-motion-loop (dir (or count 1))
+ (let ((pnt (point))
+ (nxt (if (> dir 0) (point-max) (point-min))))
+ (dolist (fwd forwards)
+ (goto-char pnt)
+ (condition-case nil
+ (evil-with-restriction
+ (and (< dir 0)
+ (save-excursion
+ (goto-char nxt)
+ (line-beginning-position 0)))
+ (and (> dir 0)
+ (save-excursion
+ (goto-char nxt)
+ (line-end-position 2)))
+ (if (and (zerop (funcall fwd dir))
+ (/= (point) pnt)
+ (or (and (> dir 0) (< (point) nxt))
+ (and (< dir 0) (> (point) nxt))))
+ (setq nxt (point))))
+ (error)))
+ (goto-char nxt))))
+
+(defun bounds-of-evil-string-at-point (&optional state)
+ "Return the bounds of a string at point.
+If STATE is given it used a parsing state at point."
+ (save-excursion
+ (let ((state (or state (syntax-ppss))))
+ (and (nth 3 state)
+ (cons (nth 8 state)
+ (and (parse-partial-sexp (point)
+ (point-max)
+ nil
+ nil
+ state
+ 'syntax-table)
+ (point)))))))
+(put 'evil-string 'bounds-of-thing-at-point #'bounds-of-evil-string-at-point)
+
+(defun bounds-of-evil-comment-at-point ()
+ "Return the bounds of a string at point."
+ (save-excursion
+ (let ((state (syntax-ppss)))
+ (and (nth 4 state)
+ (cons (nth 8 state)
+ (and (parse-partial-sexp (point)
+ (point-max)
+ nil
+ nil
+ state
+ 'syntax-table)
+ (point)))))))
+(put 'evil-comment 'bounds-of-thing-at-point #'bounds-of-evil-comment-at-point)
+
+;; The purpose of this function is the provide line motions which
+;; preserve the column. This is how `previous-line' and `next-line'
+;; work, but unfortunately the behaviour is hard-coded: if and only if
+;; the last command was `previous-line' or `next-line', the column is
+;; preserved. Furthermore, in contrast to Vim, when we cannot go
+;; further, those motions move point to the beginning resp. the end of
+;; the line (we never want point to leave its column). The code here
+;; comes from simple.el, and I hope it will work in future.
+(defun evil-line-move (count &optional noerror)
+ "A wrapper for line motions which conserves the column.
+Signals an error at buffer boundaries unless NOERROR is non-nil."
+ (cond
+ (noerror
+ (condition-case nil
+ (evil-line-move count)
+ (error nil)))
+ (t
+ (evil-signal-without-movement
+ (setq this-command (if (>= count 0)
+ #'next-line
+ #'previous-line))
+ (let ((opoint (point)))
+ (condition-case err
+ (with-no-warnings
+ (funcall this-command (abs count)))
+ ((beginning-of-buffer end-of-buffer)
+ (let ((col (or goal-column
+ (if (consp temporary-goal-column)
+ (car temporary-goal-column)
+ temporary-goal-column))))
+ (if line-move-visual
+ (vertical-motion (cons col 0))
+ (line-move-finish col opoint (< count 0)))
+ ;; Maybe we should just `ding'?
+ (signal (car err) (cdr err))))))))))
+
+(defun evil-forward-syntax (syntax &optional count)
+ "Move point to the end or beginning of a sequence of characters in
+SYNTAX.
+Stop on reaching a character not in SYNTAX."
+ (let ((notsyntax (if (= (aref syntax 0) ?^)
+ (substring syntax 1)
+ (concat "^" syntax))))
+ (evil-motion-loop (dir (or count 1))
+ (cond
+ ((< dir 0)
+ (skip-syntax-backward notsyntax)
+ (skip-syntax-backward syntax))
+ (t
+ (skip-syntax-forward notsyntax)
+ (skip-syntax-forward syntax))))))
+
+(defun evil-forward-chars (chars &optional count)
+ "Move point to the end or beginning of a sequence of CHARS.
+CHARS is a character set as inside [...] in a regular expression."
+ (let ((notchars (if (= (aref chars 0) ?^)
+ (substring chars 1)
+ (concat "^" chars))))
+ (evil-motion-loop (dir (or count 1))
+ (cond
+ ((< dir 0)
+ (skip-chars-backward notchars)
+ (skip-chars-backward chars))
+ (t
+ (skip-chars-forward notchars)
+ (skip-chars-forward chars))))))
+
+(defun evil-up-block (beg end &optional count)
+ "Move point to the end or beginning of text enclosed by BEG and END.
+BEG and END should be regular expressions matching the opening
+and closing delimiters, respectively. If COUNT is greater than
+zero point is moved forward otherwise it is moved
+backwards. Whenever an opening delimiter is found the COUNT is
+increased by one, if a closing delimiter is found the COUNT is
+decreased by one. The motion stops when COUNT reaches zero. The
+match-data reflects the last successful match (that caused COUNT
+to reach zero). The behaviour of this functions is similar to
+`up-list'."
+ (let* ((count (or count 1))
+ (forwardp (> count 0))
+ (dir (if forwardp +1 -1)))
+ (catch 'done
+ (while (not (zerop count))
+ (let* ((pnt (point))
+ (cl (save-excursion
+ (and (re-search-forward (if forwardp end beg) nil t dir)
+ (or (/= pnt (point))
+ (progn
+ ;; zero size match, repeat search from
+ ;; the next position
+ (forward-char dir)
+ (re-search-forward (if forwardp end beg) nil t dir)))
+ (point))))
+ (match (match-data t))
+ (op (save-excursion
+ (and (not (equal beg end))
+ (re-search-forward (if forwardp beg end) cl t dir)
+ (or (/= pnt (point))
+ (progn
+ ;; zero size match, repeat search from
+ ;; the next position
+ (forward-char dir)
+ (re-search-forward (if forwardp beg end) cl t dir)))
+ (point)))))
+ (cond
+ ((not cl)
+ (goto-char (if forwardp (point-max) (point-min)))
+ (set-match-data nil)
+ (throw 'done count))
+ (t
+ (if op
+ (progn
+ (setq count (if forwardp (1+ count) (1- count)))
+ (goto-char op))
+ (setq count (if forwardp (1- count) (1+ count)))
+ (if (zerop count) (set-match-data match))
+ (goto-char cl))))))
+ 0)))
+
+(defun evil-up-paren (open close &optional count)
+ "Move point to the end or beginning of balanced parentheses.
+OPEN and CLOSE should be characters identifying the opening and
+closing parenthesis, respectively. If COUNT is greater than zero
+point is moved forward otherwise it is moved backwards. Whenever
+an opening delimiter is found the COUNT is increased by one, if a
+closing delimiter is found the COUNT is decreased by one. The
+motion stops when COUNT reaches zero. The match-data reflects the
+last successful match (that caused COUNT to reach zero)."
+ ;; Always use the default `forward-sexp-function'. This is important
+ ;; for modes that use a custom one like `python-mode'.
+ ;; (addresses #364)
+ (let (forward-sexp-function)
+ (with-syntax-table (copy-syntax-table (syntax-table))
+ (modify-syntax-entry open (format "(%c" close))
+ (modify-syntax-entry close (format ")%c" open))
+ (let ((rest (evil-motion-loop (dir count)
+ (let ((pnt (point)))
+ (condition-case nil
+ (cond
+ ((> dir 0)
+ (while (progn
+ (up-list dir)
+ (/= (char-before) close))))
+ (t
+ (while (progn
+ (up-list dir)
+ (/= (char-after) open)))))
+ (error (goto-char pnt)))))))
+ (cond
+ ((= rest count) (set-match-data nil))
+ ((> count 0) (set-match-data (list (1- (point)) (point))))
+ (t (set-match-data (list (point) (1+ (point))))))
+ rest))))
+
+(defun evil-up-xml-tag (&optional count)
+ "Move point to the end or beginning of balanced xml tags.
+OPEN and CLOSE should be characters identifying the opening and
+closing parenthesis, respectively. If COUNT is greater than zero
+point is moved forward otherwise it is moved backwards. Whenever
+an opening delimiter is found the COUNT is increased by one, if a
+closing delimiter is found the COUNT is decreased by one. The
+motion stops when COUNT reaches zero. The match-data reflects the
+last successful match (that caused COUNT to reach zero)."
+ (let* ((dir (if (> (or count 1) 0) +1 -1))
+ (count (abs (or count 1)))
+ (match (> count 0))
+ (op (if (> dir 0) 1 2))
+ (cl (if (> dir 0) 2 1))
+ (orig (point))
+ pnt tags match)
+ (catch 'done
+ (while (> count 0)
+ ;; find the previous opening tag
+ (while
+ (and (setq match
+ (re-search-forward
+ "<\\([^/ >]+\\)\\(?:[^\"/>]\\|\"[^\"]*\"\\)*?>\\|</\\([^>]+?\\)>"
+ nil t dir))
+ (cond
+ ((match-beginning op)
+ (push (match-string op) tags))
+ ((null tags) nil) ; free closing tag
+ ((and (< dir 0)
+ (string= (car tags) (match-string cl)))
+ ;; in backward direction we only accept matching
+ ;; tags. If the current tag is a free opener
+ ;; without matching closing tag, the subsequents
+ ;; test will make us ignore this tag
+ (pop tags))
+ ((and (> dir 0))
+ ;; non matching openers are considered free openers
+ (while (and tags
+ (not (string= (car tags)
+ (match-string cl))))
+ (pop tags))
+ (pop tags)))))
+ (unless (setq match (and match (match-data t)))
+ (setq match nil)
+ (throw 'done count))
+ ;; found closing tag, look for corresponding opening tag
+ (cond
+ ((> dir 0)
+ (setq pnt (match-end 0))
+ (goto-char (match-beginning 0)))
+ (t
+ (setq pnt (match-beginning 0))
+ (goto-char (match-end 0))))
+ (let* ((tag (match-string cl))
+ (refwd (concat "<\\(/\\)?"
+ (regexp-quote tag)
+ "\\(?:>\\| \\(?:[^\"/>]\\|\"[^\"]*\"\\)*?>\\)"))
+ (cnt 1))
+ (while (and (> cnt 0) (re-search-backward refwd nil t dir))
+ (setq cnt (+ cnt (if (match-beginning 1) dir (- dir)))))
+ (if (zerop cnt) (setq count (1- count) tags nil))
+ (goto-char pnt)))
+ (if (> count 0)
+ (set-match-data nil)
+ (set-match-data match)
+ (goto-char (if (> dir 0) (match-end 0) (match-beginning 0)))))
+ ;; if not found, set to point-max/point-min
+ (unless (zerop count)
+ (set-match-data nil)
+ (goto-char (if (> dir 0) (point-max) (point-min)))
+ (if (/= (point) orig) (setq count (1- count))))
+ (* dir count)))
+
+(defun evil-forward-quote (quote &optional count)
+ "Move point to the end or beginning of a string.
+QUOTE is the character delimiting the string. If COUNT is greater
+than zero point is moved forward otherwise it is moved
+backwards."
+ (let (reset-parser)
+ (with-syntax-table (copy-syntax-table (syntax-table))
+ (unless (= (char-syntax quote) ?\")
+ (modify-syntax-entry quote "\"")
+ (setq reset-parser t))
+ ;; global parser state is out of state, use local one
+ (let* ((pnt (point))
+ (state (save-excursion
+ (beginning-of-defun)
+ (parse-partial-sexp (point) pnt nil nil (syntax-ppss))))
+ (bnd (bounds-of-evil-string-at-point state)))
+ (when (and bnd (< (point) (cdr bnd)))
+ ;; currently within a string
+ (if (> count 0)
+ (progn
+ (goto-char (cdr bnd))
+ (setq count (1- count)))
+ (goto-char (car bnd))
+ (setq count (1+ count))))
+ ;; forward motions work with local parser state
+ (cond
+ ((> count 0)
+ ;; no need to reset global parser state because we only use
+ ;; the local one
+ (setq reset-parser nil)
+ (catch 'done
+ (while (and (> count 0) (not (eobp)))
+ (setq state (parse-partial-sexp (point) (point-max)
+ nil
+ nil
+ state
+ 'syntax-table))
+ (cond
+ ((nth 3 state)
+ (setq bnd (bounds-of-thing-at-point 'evil-string))
+ (goto-char (cdr bnd))
+ (setq count (1- count)))
+ ((eobp) (goto-char pnt) (throw 'done nil))))))
+ ((< count 0)
+ ;; need to update global cache because of backward motion
+ (setq reset-parser (and reset-parser (point)))
+ (save-excursion
+ (beginning-of-defun)
+ (syntax-ppss-flush-cache (point)))
+ (catch 'done
+ (while (and (< count 0) (not (bobp)))
+ (setq pnt (point))
+ (while (and (not (bobp))
+ (or (eobp) (/= (char-after) quote)))
+ (backward-char))
+ (cond
+ ((setq bnd (bounds-of-thing-at-point 'evil-string))
+ (goto-char (car bnd))
+ (setq count (1+ count)))
+ ((bobp) (goto-char pnt) (throw 'done nil))
+ (t (backward-char))))))
+ (t (setq reset-parser nil)))))
+ (when reset-parser
+ ;; reset global cache
+ (save-excursion
+ (goto-char reset-parser)
+ (beginning-of-defun)
+ (syntax-ppss-flush-cache (point))))
+ count))
+
+;;; Thing-at-point motion functions for Evil text objects and motions
+(defun forward-evil-empty-line (&optional count)
+ "Move forward COUNT empty lines."
+ (setq count (or count 1))
+ (cond
+ ((> count 0)
+ (while (and (> count 0) (not (eobp)))
+ (when (and (bolp) (eolp))
+ (setq count (1- count)))
+ (forward-line 1)))
+ (t
+ (while (and (< count 0) (not (bobp))
+ (zerop (forward-line -1)))
+ (when (and (bolp) (eolp))
+ (setq count (1+ count))))))
+ count)
+
+(defun forward-evil-space (&optional count)
+ "Move forward COUNT whitespace sequences [[:space:]]+."
+ (evil-forward-chars "[:space:]" count))
+
+(defun forward-evil-word (&optional count)
+ "Move forward COUNT words.
+Moves point COUNT words forward or (- COUNT) words backward if
+COUNT is negative. Point is placed after the end of the word (if
+forward) or at the first character of the word (if backward). A
+word is a sequence of word characters matching
+\[[:word:]] (recognized by `forward-word'), a sequence of
+non-whitespace non-word characters '[^[:word:]\\n\\r\\t\\f ]', or
+an empty line matching ^$."
+ (evil-forward-nearest
+ count
+ #'(lambda (&optional cnt)
+ (let ((word-separating-categories evil-cjk-word-separating-categories)
+ (word-combining-categories evil-cjk-word-combining-categories)
+ (pnt (point)))
+ (forward-word cnt)
+ (if (= pnt (point)) cnt 0)))
+ #'(lambda (&optional cnt)
+ (evil-forward-chars "^[:word:]\n\r\t\f " cnt))
+ #'forward-evil-empty-line))
+
+(defun forward-evil-WORD (&optional count)
+ "Move forward COUNT \"WORDS\".
+Moves point COUNT WORDS forward or (- COUNT) WORDS backward if
+COUNT is negative. Point is placed after the end of the WORD (if
+forward) or at the first character of the WORD (if backward). A
+WORD is a sequence of non-whitespace characters
+'[^\\n\\r\\t\\f ]', or an empty line matching ^$."
+ (evil-forward-nearest count
+ #'(lambda (&optional cnt)
+ (evil-forward-chars "^\n\r\t\f " cnt))
+ #'forward-evil-empty-line))
+
+(defun forward-evil-symbol (&optional count)
+ "Move forward COUNT symbols.
+Moves point COUNT symbols forward or (- COUNT) symbols backward
+if COUNT is negative. Point is placed after the end of the
+symbol (if forward) or at the first character of the symbol (if
+backward). A symbol is either determined by `forward-symbol', or
+is a sequence of characters not in the word, symbol or whitespace
+syntax classes."
+ (evil-forward-nearest
+ count
+ #'(lambda (&optional cnt)
+ (evil-forward-syntax "^w_->" cnt))
+ #'(lambda (&optional cnt)
+ (let ((pnt (point)))
+ (forward-symbol cnt)
+ (if (= pnt (point)) cnt 0)))
+ #'forward-evil-empty-line))
+
+(defun forward-evil-defun (&optional count)
+ "Move forward COUNT defuns.
+Moves point COUNT defuns forward or (- COUNT) defuns backward
+if COUNT is negative. A defun is defined by
+`beginning-of-defun' and `end-of-defun' functions."
+ (evil-motion-loop (dir (or count 1))
+ (if (> dir 0) (end-of-defun) (beginning-of-defun))))
+
+(defun forward-evil-sentence (&optional count)
+ "Move forward COUNT sentences.
+Moves point COUNT sentences forward or (- COUNT) sentences
+backward if COUNT is negative. This function is the same as
+`forward-sentence' but returns the number of sentences that could
+NOT be moved over."
+ (evil-motion-loop (dir (or count 1))
+ (condition-case nil
+ (forward-sentence dir)
+ (error))))
+
+(defun forward-evil-paragraph (&optional count)
+ "Move forward COUNT paragraphs.
+Moves point COUNT paragraphs forward or (- COUNT) paragraphs backward
+if COUNT is negative. A paragraph is defined by
+`start-of-paragraph-text' and `forward-paragraph' functions."
+ (evil-motion-loop (dir (or count 1))
+ (cond
+ ((> dir 0) (forward-paragraph))
+ ((not (bobp)) (start-of-paragraph-text) (beginning-of-line)))))
+
+(defvar evil-forward-quote-char ?\"
+ "The character to be used by `forward-evil-quote'.")
+
+(defun forward-evil-quote (&optional count)
+ "Move forward COUNT strings.
+The quotation character is specified by the global variable
+`evil-forward-quote-char'. This character is passed to
+`evil-forward-quote'."
+ (evil-forward-quote evil-forward-quote-char count))
+
+(defun forward-evil-quote-simple (&optional count)
+ "Move forward COUNT strings.
+The quotation character is specified by the global variable
+`evil-forward-quote-char'. This functions uses Vim's rules
+parsing from the beginning of the current line for quotation
+characters. It should only be used when looking for strings
+within comments and buffer *must* be narrowed to the comment."
+ (let ((dir (if (> (or count 1) 0) 1 -1))
+ (ch evil-forward-quote-char)
+ (pnt (point))
+ (cnt 0))
+ (beginning-of-line)
+ ;; count number of quotes before pnt
+ (while (< (point) pnt)
+ (when (= (char-after) ch)
+ (setq cnt (1+ cnt)))
+ (forward-char))
+ (setq cnt (- (* 2 (abs count)) (mod cnt 2)))
+ (cond
+ ((> dir 0)
+ (while (and (not (eolp)) (not (zerop cnt)))
+ (when (= (char-after) ch) (setq cnt (1- cnt)))
+ (forward-char))
+ (when (not (zerop cnt)) (goto-char (point-max))))
+ (t
+ (while (and (not (bolp)) (not (zerop cnt)))
+ (when (= (char-before) ch) (setq cnt (1- cnt)))
+ (forward-char -1))
+ (when (not (zerop cnt)) (goto-char (point-min)))))
+ (/ cnt 2)))
+
+;;; Motion functions
+(defun evil-forward-beginning (thing &optional count)
+ "Move forward to beginning of THING.
+The motion is repeated COUNT times."
+ (setq count (or count 1))
+ (if (< count 0)
+ (forward-thing thing count)
+ (let ((bnd (bounds-of-thing-at-point thing))
+ rest)
+ (when (and bnd (< (point) (cdr bnd)))
+ (goto-char (cdr bnd)))
+ (condition-case nil
+ (when (zerop (setq rest (forward-thing thing count)))
+ (when (and (bounds-of-thing-at-point thing)
+ (not (bobp))
+ ;; handle final empty line
+ (not (and (bolp) (eobp))))
+ (forward-char -1))
+ (beginning-of-thing thing))
+ (error))
+ rest)))
+
+(defun evil-backward-beginning (thing &optional count)
+ "Move backward to beginning of THING.
+The motion is repeated COUNT times. This is the same as calling
+`evil-backward-beginning' with -COUNT."
+ (evil-forward-beginning thing (- (or count 1))))
+
+(defun evil-forward-end (thing &optional count)
+ "Move forward to end of THING.
+The motion is repeated COUNT times."
+ (setq count (or count 1))
+ (cond
+ ((> count 0)
+ (unless (eobp) (forward-char))
+ (prog1 (forward-thing thing count)
+ (unless (bobp) (forward-char -1))))
+ (t
+ (let ((bnd (bounds-of-thing-at-point thing))
+ rest)
+ (when (and bnd (< (point) (cdr bnd) ))
+ (goto-char (car bnd)))
+ (condition-case nil
+ (when (zerop (setq rest (forward-thing thing count)))
+ (end-of-thing thing)
+ (forward-char -1))
+ (error))
+ rest))))
+
+(defun evil-backward-end (thing &optional count)
+ "Move backward to end of THING.
+The motion is repeated COUNT times. This is the same as calling
+`evil-backward-end' with -COUNT."
+ (evil-forward-end thing (- (or count 1))))
+
+(defun evil-forward-word (&optional count)
+ "Move by words.
+Moves point COUNT words forward or (- COUNT) words backward if
+COUNT is negative. This function is the same as `forward-word'
+but returns the number of words by which point could *not* be
+moved."
+ (setq count (or count 1))
+ (let* ((dir (if (>= count 0) +1 -1))
+ (count (abs count)))
+ (while (and (> count 0)
+ (forward-word dir))
+ (setq count (1- count)))
+ count))
+
+(defun evil-in-comment-p (&optional pos)
+ "Checks if POS is within a comment according to current syntax.
+If POS is nil, (point) is used. The return value is the beginning
+position of the comment."
+ (setq pos (or pos (point)))
+ (let ((chkpos
+ (cond
+ ((eobp) pos)
+ ((= (char-syntax (char-after)) ?<) (1+ pos))
+ ((and (not (zerop (logand (car (syntax-after (point)))
+ (lsh 1 16))))
+ (not (zerop (logand (or (car (syntax-after (1+ (point)))) 0)
+ (lsh 1 17)))))
+ (+ pos 2))
+ ((and (not (zerop (logand (car (syntax-after (point)))
+ (lsh 1 17))))
+ (not (zerop (logand (or (car (syntax-after (1- (point)))) 0)
+ (lsh 1 16)))))
+ (1+ pos))
+ (t pos))))
+ (let ((syn (save-excursion (syntax-ppss chkpos))))
+ (and (nth 4 syn) (nth 8 syn)))))
+
+(defun evil-looking-at-start-comment (&optional move)
+ "Returns t if point is at the start of a comment.
+point must be on one of the opening characters of a block comment
+according to the current syntax table. Futhermore these
+characters must been parsed as opening characters, i.e. they
+won't be considered as comment starters inside a string or
+possibly another comment. Point is moved to the first character
+of the comment opener if MOVE is non-nil."
+ (cond
+ ;; one character opener
+ ((= (char-syntax (char-after)) ?<)
+ (equal (point) (evil-in-comment-p (1+ (point)))))
+ ;; two character opener on first char
+ ((and (not (zerop (logand (car (syntax-after (point)))
+ (lsh 1 16))))
+ (not (zerop (logand (or (car (syntax-after (1+ (point)))) 0)
+ (lsh 1 17)))))
+ (equal (point) (evil-in-comment-p (+ 2 (point)))))
+ ;; two character opener on second char
+ ((and (not (zerop (logand (car (syntax-after (point)))
+ (lsh 1 17))))
+ (not (zerop (logand (or (car (syntax-after (1- (point)))) 0)
+ (lsh 1 16)))))
+ (and (equal (1- (point)) (evil-in-comment-p (1+ (point))))
+ (prog1 t (when move (backward-char)))))))
+
+(defun evil-looking-at-end-comment (&optional move)
+ "Returns t if point is at the end of a comment.
+point must be on one of the opening characters of a block comment
+according to the current syntax table. Futhermore these
+characters must been parsed as opening characters, i.e. they
+won't be considered as comment starters inside a string or
+possibly another comment. Point is moved right after the comment
+closer if MOVE is non-nil."
+ (cond
+ ;; one char closer
+ ((= (char-syntax (char-after)) ?>)
+ (and (evil-in-comment-p) ; in comment
+ (not (evil-in-comment-p (1+ (point))))
+ (prog1 t (when move (forward-char)))))
+ ;; two char closer on first char
+ ((and (not (zerop (logand (car (syntax-after (point)))
+ (lsh 1 18))))
+ (not (zerop (logand (or (car (syntax-after (1+ (point)))) 0)
+ (lsh 1 19)))))
+ (and (evil-in-comment-p)
+ (not (evil-in-comment-p (+ (point) 2)))
+ (prog1 t (when move (forward-char 2)))))
+ ;; two char closer on second char
+ ((and (not (zerop (logand (car (syntax-after (point)))
+ (lsh 1 19))))
+ (not (zerop (logand (or (car (syntax-after (1- (point)))) 0)
+ (lsh 1 18)))))
+ (and (evil-in-comment-p)
+ (not (evil-in-comment-p (1+ (point))))
+ (prog1 t (when move (forward-char)))))))
+
+(defun evil-insert-newline-above ()
+ "Inserts a new line above point and places point in that line
+with regard to indentation."
+ (evil-narrow-to-field
+ (evil-move-beginning-of-line)
+ (insert "\n")
+ (forward-line -1)
+ (back-to-indentation)))
+
+(defun evil-insert-newline-below ()
+ "Inserts a new line below point and places point in that line
+with regard to indentation."
+ (evil-narrow-to-field
+ (evil-move-end-of-line)
+ (insert "\n")
+ (back-to-indentation)))
+
+;;; Markers
+
+(defun evil-global-marker-p (char)
+ "Whether CHAR denotes a global marker."
+ (or (and (>= char ?A) (<= char ?Z))
+ (assq char (default-value 'evil-markers-alist))))
+
+(defun evil-set-marker (char &optional pos advance)
+ "Set the marker denoted by CHAR to position POS.
+POS defaults to the current position of point.
+If ADVANCE is t, the marker advances when inserting text at it;
+otherwise, it stays behind."
+ (interactive (list (read-char)))
+ (catch 'done
+ (let ((marker (evil-get-marker char t)) alist)
+ (unless (markerp marker)
+ (cond
+ ((and marker (symbolp marker) (boundp marker))
+ (set marker (or (symbol-value marker) (make-marker)))
+ (setq marker (symbol-value marker)))
+ ((eq marker 'evil-jump-backward-swap)
+ (evil-set-jump)
+ (throw 'done nil))
+ ((functionp marker)
+ (user-error "Cannot set special marker `%c'" char))
+ ((evil-global-marker-p char)
+ (setq alist (default-value 'evil-markers-alist)
+ marker (make-marker))
+ (evil-add-to-alist 'alist char marker)
+ (setq-default evil-markers-alist alist))
+ (t
+ (setq marker (make-marker))
+ (evil-add-to-alist 'evil-markers-alist char marker))))
+ (add-hook 'kill-buffer-hook #'evil-swap-out-markers nil t)
+ (set-marker-insertion-type marker advance)
+ (set-marker marker (or pos (point))))))
+
+(defun evil-get-marker (char &optional raw)
+ "Return the marker denoted by CHAR.
+This is either a marker object as returned by `make-marker',
+a number, a cons cell (FILE . POS) with FILE being a string
+and POS a number, or nil. If RAW is non-nil, then the
+return value may also be a variable, a movement function,
+or a marker object pointing nowhere."
+ (let ((marker (if (evil-global-marker-p char)
+ (cdr-safe (assq char (default-value
+ 'evil-markers-alist)))
+ (cdr-safe (assq char evil-markers-alist)))))
+ (save-excursion
+ (if raw
+ marker
+ (when (and (symbolp marker) (boundp marker))
+ (setq marker (symbol-value marker)))
+ (when (functionp marker)
+ (funcall marker)
+ (setq marker (point)))
+ (when (markerp marker)
+ (if (eq (marker-buffer marker) (current-buffer))
+ (setq marker (marker-position marker))
+ (setq marker (and (marker-buffer marker) marker))))
+ (when (or (numberp marker)
+ (markerp marker)
+ (and (consp marker)
+ (stringp (car marker))
+ (numberp (cdr marker))))
+ marker)))))
+
+(defun evil-swap-out-markers ()
+ "Turn markers into file references when the buffer is killed."
+ (and buffer-file-name
+ (dolist (entry evil-markers-alist)
+ (and (markerp (cdr entry))
+ (eq (marker-buffer (cdr entry)) (current-buffer))
+ (setcdr entry (cons buffer-file-name
+ (marker-position (cdr entry))))))))
+(put 'evil-swap-out-markers 'permanent-local-hook t)
+
+(defun evil-get-register (register &optional noerror)
+ "Return contents of REGISTER.
+Signal an error if empty, unless NOERROR is non-nil.
+
+The following special registers are supported.
+ \" the unnamed register
+ * the clipboard contents
+ + the clipboard contents
+ <C-w> the word at point (ex mode only)
+ <C-a> the WORD at point (ex mode only)
+ <C-o> the symbol at point (ex mode only)
+ <C-f> the current file at point (ex mode only)
+ % the current file name (read only)
+ # the alternate file name (read only)
+ / the last search pattern (read only)
+ : the last command line (read only)
+ . the last inserted text (read only)
+ - the last small (less than a line) delete
+ _ the black hole register
+ = the expression register (read only)"
+ (condition-case err
+ (when (characterp register)
+ (or (cond
+ ((eq register ?\")
+ (current-kill 0))
+ ((and (<= ?1 register) (<= register ?9))
+ (let ((reg (- register ?1)))
+ (and (< reg (length kill-ring))
+ (current-kill reg t))))
+ ((memq register '(?* ?+))
+ ;; the following code is modified from
+ ;; `x-selection-value-internal'
+ (let ((what (if (eq register ?*) 'PRIMARY 'CLIPBOARD))
+ (request-type (or (and (boundp 'x-select-request-type)
+ x-select-request-type)
+ '(UTF8_STRING COMPOUNT_TEXT STRING)))
+ text)
+ (unless (consp request-type)
+ (setq request-type (list request-type)))
+ (while (and request-type (not text))
+ (condition-case nil
+ (setq text (evil-get-selection what (pop request-type)))
+ (error nil)))
+ (when text
+ (remove-text-properties 0 (length text) '(foreign-selection nil) text))
+ text))
+ ((eq register ?\C-W)
+ (unless (evil-ex-p)
+ (user-error "Register <C-w> only available in ex state"))
+ (with-current-buffer evil-ex-current-buffer
+ (thing-at-point 'evil-word)))
+ ((eq register ?\C-A)
+ (unless (evil-ex-p)
+ (user-error "Register <C-a> only available in ex state"))
+ (with-current-buffer evil-ex-current-buffer
+ (thing-at-point 'evil-WORD)))
+ ((eq register ?\C-O)
+ (unless (evil-ex-p)
+ (user-error "Register <C-o> only available in ex state"))
+ (with-current-buffer evil-ex-current-buffer
+ (thing-at-point 'evil-symbol)))
+ ((eq register ?\C-F)
+ (unless (evil-ex-p)
+ (user-error "Register <C-f> only available in ex state"))
+ (with-current-buffer evil-ex-current-buffer
+ (thing-at-point 'filename)))
+ ((eq register ?%)
+ (or (buffer-file-name (and (evil-ex-p)
+ (minibufferp)
+ evil-ex-current-buffer))
+ (user-error "No file name")))
+ ((= register ?#)
+ (or (with-current-buffer (other-buffer) (buffer-file-name))
+ (user-error "No file name")))
+ ((eq register ?/)
+ (or (car-safe
+ (or (and (boundp 'evil-search-module)
+ (eq evil-search-module 'evil-search)
+ evil-ex-search-history)
+ (and isearch-regexp regexp-search-ring)
+ search-ring))
+ (user-error "No previous regular expression")))
+ ((eq register ?:)
+ (or (car-safe evil-ex-history)
+ (user-error "No previous command line")))
+ ((eq register ?.)
+ evil-last-insertion)
+ ((eq register ?-)
+ evil-last-small-deletion)
+ ((eq register ?=)
+ (let* ((enable-recursive-minibuffers t)
+ (result (eval (car (read-from-string (read-string "="))))))
+ (cond
+ ((or (stringp result)
+ (numberp result)
+ (symbolp result))
+ (prin1-to-string result))
+ ((sequencep result)
+ (mapconcat #'prin1-to-string result "\n"))
+ (t (user-error "Using %s as a string" (type-of result))))))
+ ((eq register ?_) ; the black hole register
+ "")
+ (t
+ (setq register (downcase register))
+ (get-register register)))
+ (user-error "Register `%c' is empty" register)))
+ (error (unless err (signal (car err) (cdr err))))))
+
+(defun evil-set-register (register text)
+ "Set the contents of register REGISTER to TEXT.
+If REGISTER is an upcase character then text is appended to that
+register instead of replacing its content."
+ (cond
+ ((not (characterp register))
+ (user-error "Invalid register"))
+ ;; don't allow modification of read-only registers
+ ((member register '(?: ?. ?%))
+ (user-error "Can't modify read-only register"))
+ ((eq register ?\")
+ (kill-new text))
+ ((and (<= ?1 register) (<= register ?9))
+ (if (null kill-ring)
+ (kill-new text)
+ (let ((kill-ring-yank-pointer kill-ring-yank-pointer)
+ interprogram-paste-function
+ interprogram-cut-function)
+ (current-kill (- register ?1))
+ (setcar kill-ring-yank-pointer text))))
+ ((eq register ?*)
+ (evil-set-selection 'PRIMARY text))
+ ((eq register ?+)
+ (evil-set-selection 'CLIPBOARD text))
+ ((eq register ?-)
+ (setq evil-last-small-deletion text))
+ ((eq register ?_) ; the black hole register
+ nil)
+ ((and (<= ?A register) (<= register ?Z))
+ (setq register (downcase register))
+ (let ((content (get-register register)))
+ (cond
+ ((not content)
+ (set-register register text))
+ ((or (text-property-not-all 0 (length content)
+ 'yank-handler nil
+ content)
+ (text-property-not-all 0 (length text)
+ 'yank-handler nil
+ text))
+ ;; some non-trivial yank-handler -> always switch to line handler
+ ;; ensure complete lines
+ (when (and (> (length content) 0)
+ (/= (aref content (1- (length content))) ?\n))
+ (setq content (concat content "\n")))
+ (when (and (> (length text) 0)
+ (/= (aref text (1- (length text))) ?\n))
+ (setq text (concat text "\n")))
+ (setq text (concat content text))
+ (remove-list-of-text-properties 0 (length text) '(yank-handler) text)
+ (setq text (propertize text 'yank-handler '(evil-yank-line-handler)))
+ (set-register register text))
+ (t
+ (set-register register (concat content text))))))
+ (t
+ (set-register register text))))
+
+(defun evil-register-list ()
+ "Returns an alist of all registers"
+ (sort (append (mapcar #'(lambda (reg)
+ (cons reg (evil-get-register reg t)))
+ '(?\" ?* ?+ ?% ?# ?/ ?: ?. ?-
+ ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9))
+ register-alist nil)
+ #'(lambda (reg1 reg2) (< (car reg1) (car reg2)))))
+
+(defsubst evil-kbd-macro-suppress-motion-error ()
+ "Returns non-nil if a motion error should be suppressed.
+Whether the motion error should be suppressed depends on the
+variable `evil-kbd-macro-suppress-motion-error'."
+ (or (and defining-kbd-macro
+ (memq evil-kbd-macro-suppress-motion-error '(t record)))
+ (and executing-kbd-macro
+ (memq evil-kbd-macro-suppress-motion-error '(t replay)))))
+
+;;; Region
+
+;; `set-mark' does too much at once
+(defun evil-move-mark (pos)
+ "Set buffer's mark to POS.
+If POS is nil, delete the mark."
+ (when pos
+ (setq pos (evil-normalize-position pos)))
+ (set-marker (mark-marker) pos))
+
+(defun evil-save-transient-mark-mode ()
+ "Save Transient Mark mode and make it buffer-local.
+Any changes to Transient Mark mode are now local to the current
+buffer, until `evil-restore-transient-mark-mode' is called.
+
+Variables pertaining to Transient Mark mode are listed in
+`evil-transient-vars', and their values are stored in
+`evil-transient-vals'."
+ (dolist (var evil-transient-vars)
+ (when (and (boundp var)
+ (not (assq var evil-transient-vals)))
+ (push (list var (symbol-value var)
+ (and (assq var (buffer-local-variables)) t))
+ evil-transient-vals)
+ (make-variable-buffer-local var)
+ (put var 'permanent-local t))))
+
+(defun evil-restore-transient-mark-mode ()
+ "Restore Transient Mark mode.
+This presupposes that `evil-save-transient-mark-mode' has been
+called earlier. If Transient Mark mode was disabled before but
+enabled in the meantime, this function disables it; if it was
+enabled before but disabled in the meantime, this function
+enables it.
+
+The earlier settings of Transient Mark mode are stored in
+`evil-transient-vals'."
+ (let (entry local var val)
+ (while (setq entry (pop evil-transient-vals))
+ (setq var (pop entry)
+ val (pop entry)
+ local (pop entry))
+ (unless local
+ (kill-local-variable var))
+ (unless (equal (symbol-value var) val)
+ (if (fboundp var)
+ (funcall var (if val 1 -1))
+ (setq var val))))))
+
+(defun evil-save-mark ()
+ "Save the current mark, including whether it is transient.
+See also `evil-restore-mark'."
+ (unless evil-visual-previous-mark
+ (setq evil-visual-previous-mark (mark t))
+ (evil-save-transient-mark-mode)))
+
+(defun evil-restore-mark ()
+ "Restore the mark, including whether it was transient.
+See also `evil-save-mark'."
+ (when evil-visual-previous-mark
+ (evil-restore-transient-mark-mode)
+ (evil-move-mark evil-visual-previous-mark)
+ (setq evil-visual-previous-mark nil)))
+
+;; In theory, an active region implies Transient Mark mode, and
+;; disabling Transient Mark mode implies deactivating the region.
+;; In practice, Emacs never clears `mark-active' except in Transient
+;; Mark mode, so we define our own toggle functions to make things
+;; more predictable.
+(defun evil-transient-mark (&optional arg)
+ "Toggle Transient Mark mode.
+Ensure that the region is properly deactivated.
+Enable with positive ARG, disable with negative ARG."
+ (unless (numberp arg)
+ (setq arg (if transient-mark-mode -1 1)))
+ (cond
+ ((< arg 1)
+ (evil-active-region -1)
+ ;; Transient Mark mode cannot be disabled
+ ;; while CUA mode is enabled
+ (when (fboundp 'cua-mode)
+ (cua-mode -1))
+ (when transient-mark-mode
+ (transient-mark-mode -1)))
+ (t
+ (unless transient-mark-mode
+ (evil-active-region -1)
+ (transient-mark-mode 1)))))
+
+(defun evil-active-region (&optional arg)
+ "Toggle active region.
+Ensure that Transient Mark mode is properly enabled.
+Enable with positive ARG, disable with negative ARG."
+ (unless (numberp arg)
+ (setq arg (if (region-active-p) -1 1)))
+ (cond
+ ((and (< arg 1))
+ (when (or transient-mark-mode mark-active)
+ (setq mark-active nil
+ deactivate-mark nil)
+ (when (boundp 'cua--explicit-region-start)
+ (setq cua--explicit-region-start nil))
+ (run-hooks 'deactivate-mark-hook)))
+ (t
+ (evil-transient-mark 1)
+ (when deactivate-mark
+ (setq deactivate-mark nil))
+ (unless (mark t)
+ (evil-move-mark (point)))
+ (unless (region-active-p)
+ (set-mark (mark t)))
+ (when (boundp 'cua--explicit-region-start)
+ (setq cua--explicit-region-start t)))))
+
+(defmacro evil-with-transient-mark-mode (&rest body)
+ "Execute BODY with Transient Mark mode.
+Then restore Transient Mark mode to its previous setting."
+ (declare (indent defun)
+ (debug t))
+ `(let ((inhibit-quit t)
+ evil-transient-vals)
+ (unwind-protect
+ (progn
+ (evil-save-transient-mark-mode)
+ (evil-transient-mark 1)
+ ,@body)
+ (evil-restore-transient-mark-mode))))
+
+(defmacro evil-with-active-region (beg end &rest body)
+ "Execute BODY with an active region from BEG to END."
+ (declare (indent 2)
+ (debug t))
+ `(let ((beg ,beg) (end ,end)
+ evil-transient-vals)
+ (evil-with-transient-mark-mode
+ (save-excursion
+ (evil-active-region 1)
+ (evil-move-mark beg)
+ (goto-char end)
+ ,@body))))
+
+(defun evil-exchange-point-and-mark ()
+ "Exchange point and mark without activating the region."
+ (let* ((point (point))
+ (mark (or (mark t) point)))
+ (set-marker (mark-marker) point)
+ (goto-char mark)))
+
+(defun evil-apply-on-block (func beg end pass-columns &rest args)
+ "Call FUNC for each line of a block selection.
+The selection is specified by the region BEG and END. FUNC must
+take at least two arguments, the beginning and end of each
+line. If PASS-COLUMNS is non-nil, these values are the columns,
+otherwise tey are buffer positions. Extra arguments to FUNC may
+be passed via ARGS."
+ (let ((eol-col (and (memq last-command '(next-line previous-line))
+ (numberp temporary-goal-column)
+ temporary-goal-column))
+ startcol startpt endcol endpt)
+ (save-excursion
+ (goto-char beg)
+ (setq startcol (current-column))
+ (beginning-of-line)
+ (setq startpt (point))
+ (goto-char end)
+ (setq endcol (current-column))
+ (forward-line 1)
+ (setq endpt (point-marker))
+ ;; ensure the start column is the left one.
+ (evil-sort startcol endcol)
+ ;; maybe find maximal column
+ (when eol-col
+ (setq eol-col 0)
+ (goto-char startpt)
+ (while (< (point) endpt)
+ (setq eol-col (max eol-col
+ (evil-column (line-end-position))))
+ (forward-line 1))
+ (setq endcol (max endcol
+ (min eol-col
+ (1+ (min (1- most-positive-fixnum)
+ (truncate temporary-goal-column)))))))
+ ;; start looping over lines
+ (goto-char startpt)
+ (while (< (point) endpt)
+ (if pass-columns
+ (apply func startcol endcol args)
+ (apply func
+ (save-excursion (evil-move-to-column startcol))
+ (save-excursion (evil-move-to-column endcol t))
+ args))
+ (forward-line 1)))))
+
+(defun evil-apply-on-rectangle (function start end &rest args)
+ "Like `apply-on-rectangle' but maybe extends to eol.
+If `temporary-goal-column' is set to a big number, then the
+region of each line is extended to the end of each line. The end
+column is set to the maximal column in all covered lines."
+ (apply #'evil-apply-on-block function start end t args))
+
+;;; Insertion
+
+(defun evil-concat-ranges (ranges)
+ "Concatenate RANGES.
+RANGES must be a list of ranges. They must be ordered so that
+successive ranges share their boundaries. The return value is a
+single range of disjoint union of the ranges or nil if the
+disjoint union is not a single range."
+ (let ((range (car-safe ranges)) (ranges (cdr ranges)) r)
+ (while (and range (setq r (car-safe ranges)))
+ (setq range
+ (cond ((and (= (cdr r) (car range))) (cons (car r) (cdr range)))
+ ((and (= (cdr range) (car r))) (cons (car range) (cdr r)))))
+ (setq ranges (cdr ranges)))
+ range))
+
+(defun evil-track-last-insertion (beg end len)
+ "Track the last insertion range and its text.
+The insertion range is stored as a pair of buffer positions in
+`evil-current-insertion'. If a subsequent change is compatible,
+then the current range is modified, otherwise it is replaced by a
+new range. Compatible changes are changes that do not create a
+disjoin range."
+ ;; deletion
+ (when (> len 0)
+ (if (and evil-current-insertion
+ (>= beg (car evil-current-insertion))
+ (<= (+ beg len) (cdr evil-current-insertion)))
+ (setcdr evil-current-insertion
+ (- (cdr evil-current-insertion) len))
+ (setq evil-current-insertion nil)))
+ ;; insertion
+ (if (and evil-current-insertion
+ (>= beg (car evil-current-insertion))
+ (<= beg (cdr evil-current-insertion)))
+ (setcdr evil-current-insertion
+ (+ (- end beg)
+ (cdr evil-current-insertion)))
+ (setq evil-current-insertion (cons beg end))))
+(put 'evil-track-last-insertion 'permanent-local-hook t)
+
+(defun evil-start-track-last-insertion ()
+ "Start tracking the last insertion."
+ (setq evil-current-insertion nil)
+ (add-hook 'after-change-functions #'evil-track-last-insertion nil t))
+
+(defun evil-stop-track-last-insertion ()
+ "Stop tracking the last insertion.
+The tracked insertion is set to `evil-last-insertion'."
+ (setq evil-last-insertion
+ (and evil-current-insertion
+ ;; Check whether the insertion range is a valid buffer
+ ;; range. If a buffer modification is done from within
+ ;; another change hook or modification-hook (yasnippet
+ ;; does this using overlay modification-hooks), then the
+ ;; insertion information may be invalid. There is no way
+ ;; to detect this situation, but at least we should
+ ;; ensure that no error occurs (see bug #272).
+ (>= (car evil-current-insertion) (point-min))
+ (<= (cdr evil-current-insertion) (point-max))
+ (buffer-substring-no-properties (car evil-current-insertion)
+ (cdr evil-current-insertion))))
+ (remove-hook 'after-change-functions #'evil-track-last-insertion t))
+
+;;; Paste
+
+(defun evil-yank-characters (beg end &optional register yank-handler)
+ "Saves the characters defined by the region BEG and END in the kill-ring."
+ (let ((text (filter-buffer-substring beg end)))
+ (when yank-handler
+ (setq text (propertize text 'yank-handler (list yank-handler))))
+ (when register
+ (evil-set-register register text))
+ (when evil-was-yanked-without-register
+ (evil-set-register ?0 text)) ; "0 register contains last yanked text
+ (unless (eq register ?_)
+ (kill-new text))))
+
+(defun evil-yank-lines (beg end &optional register yank-handler)
+ "Saves the lines in the region BEG and END into the kill-ring."
+ (let* ((text (filter-buffer-substring beg end))
+ (yank-handler (list (or yank-handler
+ #'evil-yank-line-handler)
+ nil
+ t)))
+ ;; Ensure the text ends with a newline. This is required
+ ;; if the deleted lines were the last lines in the buffer.
+ (when (or (zerop (length text))
+ (/= (aref text (1- (length text))) ?\n))
+ (setq text (concat text "\n")))
+ (setq text (propertize text 'yank-handler yank-handler))
+ (when register
+ (evil-set-register register text))
+ (when evil-was-yanked-without-register
+ (evil-set-register ?0 text)) ; "0 register contains last yanked text
+ (unless (eq register ?_)
+ (kill-new text))))
+
+(defun evil-yank-rectangle (beg end &optional register yank-handler)
+ "Saves the rectangle defined by region BEG and END into the kill-ring."
+ (let ((lines (list nil)))
+ (evil-apply-on-rectangle #'extract-rectangle-line beg end lines)
+ ;; We remove spaces from the beginning and the end of the next.
+ ;; Spaces are inserted explicitly in the yank-handler in order to
+ ;; NOT insert lines full of spaces.
+ (setq lines (nreverse (cdr lines)))
+ ;; `text' is used as default insert text when pasting this rectangle
+ ;; in another program, e.g., using the X clipboard.
+ (let* ((yank-handler (list (or yank-handler
+ #'evil-yank-block-handler)
+ lines
+ t
+ 'evil-delete-yanked-rectangle))
+ (text (propertize (mapconcat #'identity lines "\n")
+ 'yank-handler yank-handler)))
+ (when register
+ (evil-set-register register text))
+ (when evil-was-yanked-without-register
+ (evil-set-register ?0 text)) ; "0 register contains last yanked text
+ (unless (eq register ?_)
+ (kill-new text)))))
+
+(defun evil-remove-yank-excluded-properties (text)
+ "Removes `yank-excluded-properties' from TEXT."
+ (if (eq yank-excluded-properties t)
+ (set-text-properties 0 (length text) nil text)
+ (remove-list-of-text-properties 0 (length text)
+ yank-excluded-properties text)))
+
+(defun evil-yank-line-handler (text)
+ "Inserts the current text linewise."
+ (let ((text (apply #'concat (make-list (or evil-paste-count 1) text)))
+ (opoint (point)))
+ (evil-remove-yank-excluded-properties text)
+ (cond
+ ((eq this-command 'evil-paste-before)
+ (evil-move-beginning-of-line)
+ (evil-move-mark (point))
+ (insert text)
+ (setq evil-last-paste
+ (list 'evil-paste-before
+ evil-paste-count
+ opoint
+ (mark t)
+ (point)))
+ (evil-set-marker ?\[ (mark))
+ (evil-set-marker ?\] (1- (point)))
+ (evil-exchange-point-and-mark)
+ (back-to-indentation))
+ ((eq this-command 'evil-paste-after)
+ (evil-move-end-of-line)
+ (evil-move-mark (point))
+ (insert "\n")
+ (insert text)
+ (evil-set-marker ?\[ (1+ (mark)))
+ (evil-set-marker ?\] (1- (point)))
+ (delete-char -1) ; delete the last newline
+ (setq evil-last-paste
+ (list 'evil-paste-after
+ evil-paste-count
+ opoint
+ (mark t)
+ (point)))
+ (evil-move-mark (1+ (mark t)))
+ (evil-exchange-point-and-mark)
+ (back-to-indentation))
+ (t
+ (insert text)))))
+
+(defun evil-yank-block-handler (lines)
+ "Inserts the current text as block."
+ (let ((count (or evil-paste-count 1))
+ (col (if (eq this-command 'evil-paste-after)
+ (1+ (current-column))
+ (current-column)))
+ (current-line (line-number-at-pos (point)))
+ (opoint (point))
+ epoint)
+ (dolist (line lines)
+ ;; concat multiple copies according to count
+ (setq line (apply #'concat (make-list count line)))
+ ;; strip whitespaces at beginning and end
+ (string-match "^ *\\(.*?\\) *$" line)
+ (let ((text (match-string 1 line))
+ (begextra (match-beginning 1))
+ (endextra (- (match-end 0) (match-end 1))))
+ ;; maybe we have to insert a new line at eob
+ (while (< (line-number-at-pos (point))
+ current-line)
+ (goto-char (point-max))
+ (insert "\n"))
+ (setq current-line (1+ current-line))
+ ;; insert text unless we insert an empty line behind eol
+ (unless (and (< (evil-column (line-end-position)) col)
+ (zerop (length text)))
+ ;; if we paste behind eol, it may be sufficient to insert tabs
+ (if (< (evil-column (line-end-position)) col)
+ (move-to-column (+ col begextra) t)
+ (move-to-column col t)
+ (insert (make-string begextra ?\s)))
+ (evil-remove-yank-excluded-properties text)
+ (insert text)
+ (unless (eolp)
+ ;; text follows, so we have to insert spaces
+ (insert (make-string endextra ?\s)))
+ (setq epoint (point)))
+ (forward-line 1)))
+ (setq evil-last-paste
+ (list this-command
+ evil-paste-count
+ opoint
+ (length lines) ; number of rows
+ (* count (length (car lines))))) ; number of colums
+ (evil-set-marker ?\[ opoint)
+ (evil-set-marker ?\] (1- epoint))
+ (goto-char opoint)
+ (when (and (eq this-command 'evil-paste-after)
+ (not (eolp)))
+ (forward-char))))
+
+(defun evil-delete-yanked-rectangle (nrows ncols)
+ "Special function to delete the block yanked by a previous paste command."
+ (let ((opoint (point))
+ (col (if (eq last-command 'evil-paste-after)
+ (1+ (current-column))
+ (current-column))))
+ (dotimes (i nrows)
+ (delete-region (save-excursion
+ (move-to-column col)
+ (point))
+ (save-excursion
+ (move-to-column (+ col ncols))
+ (point)))
+ (unless (eobp) (forward-line)))
+ (goto-char opoint)))
+
+;; TODO: if undoing is disabled in the current buffer, paste-pop won't
+;; work. Although this is probably not a big problem, because usually
+;; buffers where `evil-paste-pop' may be useful have undoing enabled.
+;; A solution would be to temporarily enable undo when pasting and
+;; store the undo information in a special variable that does not
+;; interfere with `buffer-undo-list'.
+(defun evil-paste-pop (count)
+ "Replace the just-yanked stretch of killed text with a different stretch.
+This command is allowed only immediatly after a `yank',
+`evil-paste-before', `evil-paste-after' or `evil-paste-pop'.
+This command uses the same paste command as before, i.e., when
+used after `evil-paste-after' the new text is also yanked using
+`evil-paste-after', used with the same paste-count argument.
+
+The COUNT argument inserts the COUNTth previous kill. If COUNT
+is negative this is a more recent kill."
+ (interactive "p")
+ (unless (memq last-command
+ '(evil-paste-after
+ evil-paste-before
+ evil-visual-paste))
+ (user-error "Previous command was not an evil-paste: %s" last-command))
+ (unless evil-last-paste
+ (user-error "Previous paste command used a register"))
+ (evil-undo-pop)
+ (goto-char (nth 2 evil-last-paste))
+ (setq this-command (nth 0 evil-last-paste))
+ ;; use temporary kill-ring, so the paste cannot modify it
+ (let ((kill-ring (list (current-kill
+ (if (and (> count 0) (nth 5 evil-last-paste))
+ ;; if was visual paste then skip the
+ ;; text that has been replaced
+ (1+ count)
+ count))))
+ (kill-ring-yank-pointer kill-ring))
+ (when (eq last-command 'evil-visual-paste)
+ (let ((evil-no-display t))
+ (evil-visual-restore)))
+ (funcall (nth 0 evil-last-paste) (nth 1 evil-last-paste))
+ ;; if this was a visual paste, then mark the last paste as NOT
+ ;; being the first visual paste
+ (when (eq last-command 'evil-visual-paste)
+ (setcdr (nthcdr 4 evil-last-paste) nil))))
+
+(defun evil-paste-pop-next (count)
+ "Same as `evil-paste-pop' but with negative argument."
+ (interactive "p")
+ (evil-paste-pop (- count)))
+
+;;; Interactive forms
+
+(defun evil-match-interactive-code (interactive &optional pos)
+ "Match an interactive code at position POS in string INTERACTIVE.
+Returns the first matching entry in `evil-interactive-alist', or nil."
+ (let ((length (length interactive))
+ (pos (or pos 0)))
+ (catch 'done
+ (dolist (entry evil-interactive-alist)
+ (let* ((string (car entry))
+ (end (+ (length string) pos)))
+ (when (and (<= end length)
+ (string= string
+ (substring interactive pos end)))
+ (throw 'done entry)))))))
+
+(defun evil-concatenate-interactive-forms (&rest forms)
+ "Concatenate interactive list expressions FORMS.
+Returns a single expression where successive expressions
+are joined, if possible."
+ (let (result)
+ (when forms
+ (while (cdr forms)
+ (cond
+ ((null (car forms))
+ (pop forms))
+ ((and (eq (car (car forms)) 'list)
+ (eq (car (cadr forms)) 'list))
+ (setq forms (cons (append (car forms)
+ (cdr (cadr forms)))
+ (cdr (cdr forms)))))
+ (t
+ (push (pop forms) result))))
+ (when (car forms)
+ (push (pop forms) result))
+ (setq result (nreverse result))
+ (cond
+ ((null result))
+ ((null (cdr result))
+ (car result))
+ (t
+ `(append ,@result))))))
+
+(defun evil-interactive-string (string)
+ "Evaluate the interactive string STRING.
+The string may contain extended interactive syntax.
+The return value is a cons cell (FORM . PROPERTIES),
+where FORM is a single list-expression to be passed to
+a standard `interactive' statement, and PROPERTIES is a
+list of command properties as passed to `evil-define-command'."
+ (let ((length (length string))
+ (pos 0)
+ code expr forms match plist prompt properties)
+ (while (< pos length)
+ (if (eq (aref string pos) ?\n)
+ (setq pos (1+ pos))
+ (setq match (evil-match-interactive-code string pos))
+ (if (null match)
+ (user-error "Unknown interactive code: `%s'"
+ (substring string pos))
+ (setq code (car match)
+ expr (car (cdr match))
+ plist (cdr (cdr match))
+ pos (+ pos (length code)))
+ (when (functionp expr)
+ (setq prompt
+ (substring string pos
+ (or (string-match "\n" string pos)
+ length))
+ pos (+ pos (length prompt))
+ expr `(funcall ,expr ,prompt)))
+ (setq forms (append forms (list expr))
+ properties (append properties plist)))))
+ (cons `(append ,@forms) properties)))
+
+(defun evil-interactive-form (&rest args)
+ "Evaluate interactive forms ARGS.
+The return value is a cons cell (FORM . PROPERTIES),
+where FORM is a single list-expression to be passed to
+a standard `interactive' statement, and PROPERTIES is a
+list of command properties as passed to `evil-define-command'."
+ (let (forms properties)
+ (dolist (arg args)
+ (if (not (stringp arg))
+ (setq forms (append forms (list arg)))
+ (setq arg (evil-interactive-string arg)
+ forms (append forms (cdr (car arg)))
+ properties (append properties (cdr arg)))))
+ (cons (apply #'evil-concatenate-interactive-forms forms)
+ properties)))
+
+;;; Types
+
+(defun evil-type (object &optional default)
+ "Return the type of OBJECT, or DEFAULT if none."
+ (let (type)
+ (cond
+ ((overlayp object)
+ (setq type (overlay-get object :type)))
+ ((evil-range-p object)
+ (setq type (nth 2 object)))
+ ((listp object)
+ (setq type (plist-get object :type)))
+ ((commandp object)
+ (setq type (evil-get-command-property object :type)))
+ ((symbolp object)
+ (setq type (get object 'type))))
+ (setq type (or type default))
+ (and (evil-type-p type) type)))
+
+(defun evil-set-type (object type)
+ "Set the type of OBJECT to TYPE.
+For example, (evil-set-type 'next-line 'line)
+will make `line' the type of the `next-line' command."
+ (cond
+ ((overlayp object)
+ (overlay-put object :type type))
+ ((evil-range-p object)
+ (evil-set-range-type object type))
+ ((listp object)
+ (plist-put object :type type))
+ ((commandp object)
+ (evil-set-command-property object :type type))
+ ((symbolp object)
+ (put object 'type type)))
+ object)
+
+(defun evil-type-property (type prop)
+ "Return property PROP for TYPE."
+ (evil-get-property evil-type-properties type prop))
+
+(defun evil-type-p (sym)
+ "Whether SYM is the name of a type."
+ (assq sym evil-type-properties))
+
+(defun evil-expand (beg end type &rest properties)
+ "Expand BEG and END as TYPE with PROPERTIES.
+Returns a list (BEG END TYPE PROPERTIES ...), where the tail
+may contain a property list."
+ (apply #'evil-transform
+ ;; don't expand if already expanded
+ (unless (plist-get properties :expanded) :expand)
+ beg end type properties))
+
+(defun evil-contract (beg end type &rest properties)
+ "Contract BEG and END as TYPE with PROPERTIES.
+Returns a list (BEG END TYPE PROPERTIES ...), where the tail
+may contain a property list."
+ (apply #'evil-transform :contract beg end type properties))
+
+(defun evil-normalize (beg end type &rest properties)
+ "Normalize BEG and END as TYPE with PROPERTIES.
+Returns a list (BEG END TYPE PROPERTIES ...), where the tail
+may contain a property list."
+ (apply #'evil-transform :normalize beg end type properties))
+
+(defun evil-transform (transform beg end type &rest properties)
+ "Apply TRANSFORM on BEG and END with PROPERTIES.
+Returns a list (BEG END TYPE PROPERTIES ...), where the tail
+may contain a property list. If TRANSFORM is undefined,
+return positions unchanged."
+ (let* ((type (or type (evil-type properties)))
+ (transform (when (and type transform)
+ (evil-type-property type transform))))
+ (if transform
+ (apply transform beg end properties)
+ (apply #'evil-range beg end type properties))))
+
+(defun evil-describe (beg end type &rest properties)
+ "Return description of BEG and END with PROPERTIES.
+If no description is available, return the empty string."
+ (let* ((type (or type (evil-type properties)))
+ (properties (plist-put properties :type type))
+ (describe (evil-type-property type :string)))
+ (or (when describe
+ (apply describe beg end properties))
+ "")))
+
+;;; Ranges
+
+(defun evil-range (beg end &optional type &rest properties)
+ "Return a list (BEG END [TYPE] PROPERTIES...).
+BEG and END are buffer positions (numbers or markers),
+TYPE is a type as per `evil-type-p', and PROPERTIES is
+a property list."
+ (let ((beg (evil-normalize-position beg))
+ (end (evil-normalize-position end)))
+ (when (and (numberp beg) (numberp end))
+ (append (list (min beg end) (max beg end))
+ (when (evil-type-p type)
+ (list type))
+ properties))))
+
+(defun evil-range-p (object)
+ "Whether OBJECT is a range."
+ (and (listp object)
+ (>= (length object) 2)
+ (numberp (nth 0 object))
+ (numberp (nth 1 object))))
+
+(defun evil-range-beginning (range)
+ "Return beginning of RANGE."
+ (when (evil-range-p range)
+ (let ((beg (evil-normalize-position (nth 0 range)))
+ (end (evil-normalize-position (nth 1 range))))
+ (min beg end))))
+
+(defun evil-range-end (range)
+ "Return end of RANGE."
+ (when (evil-range-p range)
+ (let ((beg (evil-normalize-position (nth 0 range)))
+ (end (evil-normalize-position (nth 1 range))))
+ (max beg end))))
+
+(defun evil-range-properties (range)
+ "Return properties of RANGE."
+ (when (evil-range-p range)
+ (if (evil-type range)
+ (nthcdr 3 range)
+ (nthcdr 2 range))))
+
+(defun evil-copy-range (range)
+ "Return a copy of RANGE."
+ (copy-sequence range))
+
+(defun evil-set-range (range &optional beg end type &rest properties)
+ "Set RANGE to have beginning BEG and end END.
+The TYPE and additional PROPERTIES may also be specified.
+If an argument is nil, it's not used; the previous value is retained.
+See also `evil-set-range-beginning', `evil-set-range-end',
+`evil-set-range-type' and `evil-set-range-properties'."
+ (when (evil-range-p range)
+ (let ((beg (or (evil-normalize-position beg)
+ (evil-range-beginning range)))
+ (end (or (evil-normalize-position end)
+ (evil-range-end range)))
+ (type (or type (evil-type range)))
+ (plist (evil-range-properties range)))
+ (evil-sort beg end)
+ (setq plist (evil-concat-plists plist properties))
+ (evil-set-range-beginning range beg)
+ (evil-set-range-end range end)
+ (evil-set-range-type range type)
+ (evil-set-range-properties range plist)
+ range)))
+
+(defun evil-set-range-beginning (range beg &optional copy)
+ "Set RANGE's beginning to BEG.
+If COPY is non-nil, return a copy of RANGE."
+ (when copy
+ (setq range (evil-copy-range range)))
+ (setcar range beg)
+ range)
+
+(defun evil-set-range-end (range end &optional copy)
+ "Set RANGE's end to END.
+If COPY is non-nil, return a copy of RANGE."
+ (when copy
+ (setq range (evil-copy-range range)))
+ (setcar (cdr range) end)
+ range)
+
+(defun evil-set-range-type (range type &optional copy)
+ "Set RANGE's type to TYPE.
+If COPY is non-nil, return a copy of RANGE."
+ (when copy
+ (setq range (evil-copy-range range)))
+ (if type
+ (setcdr (cdr range)
+ (cons type (evil-range-properties range)))
+ (setcdr (cdr range) (evil-range-properties range)))
+ range)
+
+(defun evil-set-range-properties (range properties &optional copy)
+ "Set RANGE's properties to PROPERTIES.
+If COPY is non-nil, return a copy of RANGE."
+ (when copy
+ (setq range (evil-copy-range range)))
+ (if (evil-type range)
+ (setcdr (cdr (cdr range)) properties)
+ (setcdr (cdr range) properties))
+ range)
+
+(defun evil-range-union (range1 range2 &optional type)
+ "Return the union of the ranges RANGE1 and RANGE2.
+If the ranges have conflicting types, use RANGE1's type.
+This can be overridden with TYPE."
+ (when (and (evil-range-p range1)
+ (evil-range-p range2))
+ (evil-range (min (evil-range-beginning range1)
+ (evil-range-beginning range2))
+ (max (evil-range-end range1)
+ (evil-range-end range2))
+ (or type
+ (evil-type range1)
+ (evil-type range2)))))
+
+(defun evil-subrange-p (range1 range2)
+ "Whether RANGE1 is contained within RANGE2."
+ (and (evil-range-p range1)
+ (evil-range-p range2)
+ (<= (evil-range-beginning range2)
+ (evil-range-beginning range1))
+ (>= (evil-range-end range2)
+ (evil-range-end range1))))
+
+(defun evil-select-inner-object (thing beg end type &optional count line)
+ "Return an inner text object range of COUNT objects.
+If COUNT is positive, return objects following point; if COUNT is
+negative, return objects preceding point. If one is unspecified,
+the other is used with a negative argument. THING is a symbol
+understood by thing-at-point. BEG, END and TYPE specify the
+current selection. If LINE is non-nil, the text object should be
+linewise, otherwise it is character wise."
+ (let* ((count (or count 1))
+ (bnd (or (let ((b (bounds-of-thing-at-point thing)))
+ (and b (< (point) (cdr b)) b))
+ (evil-bounds-of-not-thing-at-point thing))))
+ ;; check if current object is selected
+ (when (or (not beg) (not end)
+ (> beg (car bnd))
+ (< end (cdr bnd))
+ (and (eq type 'inclusive)
+ (= (1+ beg) end))) ; empty region does not count
+ (when (or (not beg) (< (car bnd) beg)) (setq beg (car bnd)))
+ (when (or (not end) (> (cdr bnd) end)) (setq end (cdr bnd)))
+ (setq count (if (> count 0) (1- count) (1+ count))))
+ (goto-char (if (< count 0) beg end))
+ (evil-forward-nearest count
+ #'(lambda (cnt) (forward-thing thing cnt))
+ #'(lambda (cnt) (evil-forward-not-thing thing cnt)))
+ (evil-range (if (>= count 0) beg (point))
+ (if (< count 0) end (point))
+ (if line 'line type)
+ :expanded t)))
+
+(defun evil-select-an-object (thing beg end type count &optional line)
+ "Return an outer text object range of COUNT objects.
+If COUNT is positive, return objects following point; if COUNT is
+negative, return objects preceding point. If one is unspecified,
+the other is used with a negative argument. THING is a symbol
+understood by thing-at-point. BEG, END and TYPE specify the
+current selection. If LINE is non-nil, the text object should be
+linewise, otherwise it is character wise."
+ (let* ((dir (if (> (or count 1) 0) +1 -1))
+ (count (abs (or count 1)))
+ (objbnd (let ((b (bounds-of-thing-at-point thing)))
+ (and b (< (point) (cdr b)) b)))
+ (bnd (or objbnd (evil-bounds-of-not-thing-at-point thing)))
+ addcurrent other)
+ ;; check if current object is not selected
+ (when (or (not beg) (not end)
+ (> beg (car bnd))
+ (< end (cdr bnd))
+ (and (eq type 'inclusive)
+ (= (1+ beg) end))) ; empty region does not count
+ ;; if not, enlarge selection
+ (when (or (not beg) (< (car bnd) beg)) (setq beg (car bnd)))
+ (when (or (not end) (> (cdr bnd) end)) (setq end (cdr bnd)))
+ (if objbnd (setq addcurrent t)))
+ ;; make other and (point) reflect the selection
+ (cond
+ ((> dir 0) (goto-char end) (setq other beg))
+ (t (goto-char beg) (setq other end)))
+ (cond
+ ;; do nothing more than only current is selected
+ ((not (and (= beg (car bnd)) (= end (cdr bnd)))))
+ ;; current match is thing, add whitespace
+ (objbnd
+ (let ((wsend (evil-with-restriction
+ ;; restrict to current line if we do non-line selection
+ (and (not line) (line-beginning-position))
+ (and (not line) (line-end-position))
+ (evil-bounds-of-not-thing-at-point thing dir))))
+ (cond
+ (wsend
+ ;; add whitespace at end
+ (goto-char wsend)
+ (setq addcurrent t))
+ (t
+ ;; no whitespace at end, try beginning
+ (save-excursion
+ (goto-char other)
+ (setq wsend
+ (evil-with-restriction
+ ;; restrict to current line if we do non-line selection
+ (and (not line) (line-beginning-position))
+ (and (not line) (line-end-position))
+ (evil-bounds-of-not-thing-at-point thing (- dir))))
+ (when wsend (setq other wsend addcurrent t)))))))
+ ;; current match is whitespace, add thing
+ (t
+ (forward-thing thing dir)
+ (setq addcurrent t)))
+ ;; possibly count current object as selection
+ (if addcurrent (setq count (1- count)))
+ ;; move
+ (dotimes (var count)
+ (let ((wsend (evil-bounds-of-not-thing-at-point thing dir)))
+ (if (and wsend (/= wsend (point)))
+ ;; start with whitespace
+ (forward-thing thing dir)
+ ;; start with thing
+ (forward-thing thing dir)
+ (setq wsend (evil-bounds-of-not-thing-at-point thing dir))
+ (when wsend (goto-char wsend)))))
+ ;; return range
+ (evil-range (if (> dir 0) other (point))
+ (if (< dir 0) other (point))
+ (if line 'line type)
+ :expanded t)))
+
+(defun evil--get-block-range (op cl selection-type)
+ "Return the exclusive range of a visual selection.
+OP and CL are pairs of buffer positions for the opening and
+closing delimiter of a range. SELECTION-TYPE is the desired type
+of selection. It is a symbol that determines which parts of the
+block are selected. If it is 'inclusive or t the returned range
+is \(cons (car OP) (cdr CL)). If it is 'exclusive or nil the
+returned range is (cons (cdr OP) (car CL)). If it is
+'exclusive-line the returned range will skip whitespace at the
+end of the line of OP and at the beginning of the line of CL."
+ (cond
+ ((memq selection-type '(inclusive t)) (cons (car op) (cdr cl)))
+ ((memq selection-type '(exclusive nil)) (cons (cdr op) (car cl)))
+ ((eq selection-type 'exclusive-line)
+ (let ((beg (cdr op))
+ (end (car cl)))
+ (save-excursion
+ (goto-char beg)
+ (when (and (eolp) (not (eobp)))
+ (setq beg (line-beginning-position 2)))
+ (goto-char end)
+ (skip-chars-backward " \t")
+ (when (bolp)
+ (setq end (point))
+ (goto-char beg)
+ (when (and (not (bolp)) (< beg end))
+ (setq end (1- end)))))
+ (cons beg end)))
+ (t
+ (user-error "Unknown selection-type %s" selection-type))))
+
+(defun evil-select-block (thing beg end type count
+ &optional
+ selection-type
+ countcurrent
+ fixedscan)
+ "Return a range (BEG END) of COUNT delimited text objects.
+BEG END TYPE are the currently selected (visual) range. The
+delimited object must be given by THING-up function (see
+`evil-up-block').
+
+SELECTION-TYPE is symbol that determines which parts of the block
+are selected. If it is 'inclusive or t OPEN and CLOSE are
+included in the range. If it is 'exclusive or nil the delimiters
+are not contained. If it is 'exclusive-line the delimiters are
+not included as well as adjacent whitespace until the beginning
+of the next line or the end of the previous line. If the
+resulting selection consists of complete lines only and visual
+state is not active, the returned selection is linewise.
+
+If COUNTCURRENT is non-nil an objected is counted if the current
+selection matches that object exactly.
+
+Usually scanning for the surrounding block starts at (1+ beg)
+and (1- end). If this might fail due to the behavior of THING
+then FIXEDSCAN can be set to t. In this case the scan starts at
+BEG and END. One example where this might fail is if BEG and END
+are the delimiters of a string or comment."
+ (save-excursion
+ (save-match-data
+ (let* ((orig-beg beg)
+ (orig-end end)
+ (beg (or beg (point)))
+ (end (or end (point)))
+ (count (abs (or count 1)))
+ op cl op-end cl-end)
+ ;; We always assume at least one selected character.
+ (if (= beg end) (setq end (1+ end)))
+ ;; We scan twice: starting at (1+ beg) forward and at (1- end)
+ ;; backward. The resulting selection is the smaller one.
+ (goto-char (if fixedscan beg (1+ beg)))
+ (when (and (zerop (funcall thing +1)) (match-beginning 0))
+ (setq cl (cons (match-beginning 0) (match-end 0)))
+ (goto-char (car cl))
+ (when (and (zerop (funcall thing -1)) (match-beginning 0))
+ (setq op (cons (match-beginning 0) (match-end 0)))))
+ ;; start scanning from end
+ (goto-char (if fixedscan end (1- end)))
+ (when (and (zerop (funcall thing -1)) (match-beginning 0))
+ (setq op-end (cons (match-beginning 0) (match-end 0)))
+ (goto-char (cdr op-end))
+ (when (and (zerop (funcall thing +1)) (match-beginning 0))
+ (setq cl-end (cons (match-beginning 0) (match-end 0)))))
+ ;; Bug #607: use the tightest selection that contains the
+ ;; original selection. If non selection contains the original,
+ ;; use the larger one.
+ (cond
+ ((and (not op) (not cl-end))
+ (error "No surrounding delimiters found"))
+ ((or (not op) ; first not found
+ (and cl-end ; second found
+ (>= (car op-end) (car op)) ; second smaller
+ (<= (cdr cl-end) (cdr cl))
+ (<= (car op-end) beg) ; second contains orig
+ (>= (cdr cl-end) end)))
+ (setq op op-end cl cl-end)))
+ (setq op-end op cl-end cl) ; store copy
+ ;; if the current selection contains the surrounding
+ ;; delimiters, they do not count as new selection
+ (let ((cnt (if (and orig-beg orig-end (not countcurrent))
+ (let ((sel (evil--get-block-range op cl selection-type)))
+ (if (and (<= orig-beg (car sel))
+ (>= orig-end (cdr sel)))
+ count
+ (1- count)))
+ (1- count))))
+ ;; starting from the innermost surrounding delimiters
+ ;; increase selection
+ (when (> cnt 0)
+ (setq op (progn
+ (goto-char (car op-end))
+ (funcall thing (- cnt))
+ (if (match-beginning 0)
+ (cons (match-beginning 0) (match-end 0))
+ op))
+ cl (progn
+ (goto-char (cdr cl-end))
+ (funcall thing cnt)
+ (if (match-beginning 0)
+ (cons (match-beginning 0) (match-end 0))
+ cl)))))
+ (let ((sel (evil--get-block-range op cl selection-type)))
+ (setq op (car sel)
+ cl (cdr sel)))
+ (cond
+ ((and (equal op orig-beg) (equal cl orig-end)
+ (or (not countcurrent)
+ (and countcurrent (/= count 1))))
+ (error "No surrounding delimiters found"))
+ ((save-excursion
+ (and (not (evil-visual-state-p))
+ (eq type 'inclusive)
+ (progn (goto-char op) (bolp))
+ (progn (goto-char cl) (bolp))))
+ (evil-range op cl 'line :expanded t))
+ (t
+ (evil-range op cl type :expanded t)))))))
+
+(defun evil-select-paren (open close beg end type count &optional inclusive)
+ "Return a range (BEG END) of COUNT delimited text objects.
+OPEN and CLOSE specify the opening and closing delimiter,
+respectively. BEG END TYPE are the currently selected (visual)
+range. If INCLUSIVE is non-nil, OPEN and CLOSE are included in
+the range; otherwise they are excluded.
+
+The types of OPEN and CLOSE specify which kind of THING is used
+for parsing with `evil-select-block'. If OPEN and CLOSE are
+characters `evil-up-paren' is used. Otherwise OPEN and CLOSE
+must be regular expressions and `evil-up-block' is used.
+
+If the selection is exclusive, whitespace at the end or at the
+beginning of the selection until the end-of-line or beginning-of-line
+is ignored."
+ ;; we need special linewise exclusive selection
+ (unless inclusive (setq inclusive 'exclusive-line))
+ (cond
+ ((and (characterp open) (characterp close))
+ (let ((thing #'(lambda (&optional cnt)
+ (evil-up-paren open close cnt)))
+ (bnd (or (bounds-of-thing-at-point 'evil-string)
+ (bounds-of-thing-at-point 'evil-comment)
+ ;; If point is at the opening quote of a string,
+ ;; this must be handled as if point is within the
+ ;; string, i.e. the selection must be extended
+ ;; around the string. Otherwise
+ ;; `evil-select-block' might do the wrong thing
+ ;; because it accidentally moves point inside the
+ ;; string (for inclusive selection) when looking
+ ;; for the current surrounding block. (re #364)
+ (and (= (point) (or beg (point)))
+ (save-excursion
+ (goto-char (1+ (or beg (point))))
+ (or (bounds-of-thing-at-point 'evil-string)
+ (bounds-of-thing-at-point 'evil-comment)))))))
+ (if (not bnd)
+ (evil-select-block thing beg end type count inclusive)
+ (or (evil-with-restriction (car bnd) (cdr bnd)
+ (condition-case nil
+ (evil-select-block thing beg end type count inclusive)
+ (error nil)))
+ (save-excursion
+ (setq beg (or beg (point))
+ end (or end (point)))
+ (goto-char (car bnd))
+ (let ((extbeg (min beg (car bnd)))
+ (extend (max end (cdr bnd))))
+ (evil-select-block thing
+ extbeg extend
+ type
+ count
+ inclusive
+ (or (< extbeg beg) (> extend end))
+ t)))))))
+ (t
+ (evil-select-block #'(lambda (&optional cnt)
+ (evil-up-block open close cnt))
+ beg end type count inclusive))))
+
+(defun evil-select-quote-thing (thing beg end type count &optional inclusive)
+ "Selection THING as if it described a quoted object.
+THING is typically either 'evil-quote or 'evil-chars. This
+function is called from `evil-select-quote'."
+ (save-excursion
+ (let* ((count (or count 1))
+ (dir (if (> count 0) 1 -1))
+ (bnd (let ((b (bounds-of-thing-at-point thing)))
+ (and b (< (point) (cdr b)) b)))
+ contains-string
+ addcurrent
+ wsboth)
+ (if inclusive (setq inclusive t)
+ (when (= (abs count) 2)
+ (setq count dir)
+ (setq inclusive 'quote-only))
+ ;; never extend with exclusive selection
+ (setq beg nil end nil))
+ ;; check if the previously selected range does not contain a
+ ;; string
+ (unless (and beg end
+ (save-excursion
+ (goto-char (if (> dir 0) beg end))
+ (forward-thing thing dir)
+ (and (<= beg (point)) (< (point) end))))
+ ;; if so forget the range
+ (setq beg nil end nil))
+ ;; check if there is a current object, if not fetch one
+ (when (not bnd)
+ (unless (and (zerop (forward-thing thing dir))
+ (setq bnd (bounds-of-thing-at-point thing)))
+ (error "No quoted string found"))
+ (if (> dir 0)
+ (setq end (point))
+ (setq beg (point)))
+ (setq addcurrent t))
+ ;; check if current object is not selected
+ (when (or (not beg) (not end) (> beg (car bnd)) (< end (cdr bnd)))
+ ;; if not, enlarge selection
+ (when (or (not beg) (< (car bnd) beg)) (setq beg (car bnd)))
+ (when (or (not end) (> (cdr bnd) end)) (setq end (cdr bnd)))
+ (setq addcurrent t wsboth t))
+ ;; maybe count current element
+ (when addcurrent
+ (setq count (if (> dir 0) (1- count) (1+ count))))
+ ;; enlarge selection
+ (goto-char (if (> dir 0) end beg))
+ (when (and (not addcurrent)
+ (= count (forward-thing thing count)))
+ (error "No quoted string found"))
+ (if (> dir 0) (setq end (point)) (setq beg (point)))
+ ;; add whitespace
+ (cond
+ ((not inclusive) (setq beg (1+ beg) end (1- end)))
+ ((not (eq inclusive 'quote-only))
+ ;; try to add whitespace in forward direction
+ (goto-char (if (> dir 0) end beg))
+ (if (setq bnd (bounds-of-thing-at-point 'evil-space))
+ (if (> dir 0) (setq end (cdr bnd)) (setq beg (car bnd)))
+ ;; if not found try backward direction
+ (goto-char (if (> dir 0) beg end))
+ (if (and wsboth (setq bnd (bounds-of-thing-at-point 'evil-space)))
+ (if (> dir 0) (setq beg (car bnd)) (setq end (cdr bnd)))))))
+ (evil-range beg end
+ ;; HACK: fixes #583
+ ;; When not in visual state, an empty range is
+ ;; possible. However, this cannot be achieved with
+ ;; inclusive ranges, hence we use exclusive ranges
+ ;; in this case. In visual state the range must be
+ ;; inclusive because otherwise the selection would
+ ;; be wrong.
+ (if (evil-visual-state-p) 'inclusive 'exclusive)
+ :expanded t))))
+
+(defun evil-select-quote (quote beg end type count &optional inclusive)
+ "Return a range (BEG END) of COUNT quoted text objects.
+QUOTE specifies the quotation delimiter. BEG END TYPE are the
+currently selected (visual) range.
+
+If INCLUSIVE is nil the previous selection is ignore. If there is
+quoted string at point this object will be selected, otherwise
+the following (if (> COUNT 0)) or preceeding object (if (< COUNT
+0)) is selected. If (/= (abs COUNT) 2) the delimiting quotes are not
+contained in the range, otherwise they are contained in the range.
+
+If INCLUSIVE is non-nil the selection depends on the previous
+selection. If the currently selection contains at least one
+character that is contained in a quoted string then the selection
+is extended, otherwise it is thrown away. If there is a
+non-selected object at point then this object is added to the
+selection. Otherwise the selection is extended to the
+following (if (> COUNT 0)) or preceeding object (if (< COUNT
+0)). Any whitespace following (or preceeding if (< COUNT 0)) the
+new selection is added to the selection. If no such whitespace
+exists and the selection contains only one quoted string then the
+preceeding (or following) whitespace is added to the range. "
+ (let ((evil-forward-quote-char quote))
+ (or (let ((bnd (or (bounds-of-thing-at-point 'evil-comment)
+ (bounds-of-thing-at-point 'evil-string))))
+ (when (and bnd (< (point) (cdr bnd))
+ (/= (char-after (car bnd)) quote)
+ (/= (char-before (cdr bnd)) quote))
+ (evil-with-restriction (car bnd) (cdr bnd)
+ (condition-case nil
+ (evil-select-quote-thing 'evil-quote-simple
+ beg end type
+ count
+ inclusive)
+ (error nil)))))
+ (let ((evil-forward-quote-char quote))
+ (evil-select-quote-thing 'evil-quote
+ beg end type
+ count
+ inclusive)))))
+
+(defun evil-select-xml-tag (beg end type &optional count inclusive)
+ "Return a range (BEG END) of COUNT matching XML tags.
+If INCLUSIVE is non-nil, the tags themselves are included
+from the range."
+ (cond
+ ((and (not inclusive) (= (abs (or count 1)) 1))
+ (let ((rng (evil-select-block #'evil-up-xml-tag beg end type count nil t)))
+ (if (or (and beg (= beg (evil-range-beginning rng))
+ end (= end (evil-range-end rng)))
+ (= (evil-range-beginning rng) (evil-range-end rng)))
+ (evil-select-block #'evil-up-xml-tag beg end type count t)
+ rng)))
+ (t
+ (evil-select-block #'evil-up-xml-tag beg end type count inclusive))))
+
+(defun evil-expand-range (range &optional copy)
+ "Expand RANGE according to its type.
+Return a new range if COPY is non-nil."
+ (when copy
+ (setq range (evil-copy-range range)))
+ (unless (plist-get (evil-range-properties range) :expanded)
+ (setq range (evil-transform-range :expand range)))
+ range)
+
+(defun evil-contract-range (range &optional copy)
+ "Contract RANGE according to its type.
+Return a new range if COPY is non-nil."
+ (evil-transform-range :contract range copy))
+
+(defun evil-normalize-range (range &optional copy)
+ "Normalize RANGE according to its type.
+Return a new range if COPY is non-nil."
+ (evil-transform-range :normalize range copy))
+
+(defun evil-transform-range (transform range &optional copy)
+ "Apply TRANSFORM to RANGE according to its type.
+Return a new range if COPY is non-nil."
+ (when copy
+ (setq range (evil-copy-range range)))
+ (when (evil-type range)
+ (apply #'evil-set-range range
+ (apply #'evil-transform transform range)))
+ range)
+
+(defun evil-describe-range (range)
+ "Return description of RANGE.
+If no description is available, return the empty string."
+ (apply #'evil-describe range))
+
+;;; Undo
+
+(defun evil-start-undo-step (&optional continue)
+ "Start a undo step.
+All following buffer modifications are grouped together as a
+single action. If CONTINUE is non-nil, preceding modifications
+are included. The step is terminated with `evil-end-undo-step'."
+ (when (and (listp buffer-undo-list)
+ (not evil-in-single-undo))
+ (if evil-undo-list-pointer
+ (evil-refresh-undo-step)
+ (unless (or continue (null (car-safe buffer-undo-list)))
+ (undo-boundary))
+ (setq evil-undo-list-pointer (or buffer-undo-list t)))))
+
+(defun evil-end-undo-step (&optional continue)
+ "End a undo step started with `evil-start-undo-step'.
+Adds an undo boundary unless CONTINUE is specified."
+ (when (and evil-undo-list-pointer
+ (not evil-in-single-undo))
+ (evil-refresh-undo-step)
+ (unless (or continue (null (car-safe buffer-undo-list)))
+ (undo-boundary))
+ (setq evil-undo-list-pointer nil)))
+
+(defun evil-refresh-undo-step ()
+ "Refresh `buffer-undo-list' entries for current undo step.
+Undo boundaries until `evil-undo-list-pointer' are removed to
+make the entries undoable as a single action. See
+`evil-start-undo-step'."
+ (when evil-undo-list-pointer
+ (setq buffer-undo-list
+ (evil-filter-list #'null buffer-undo-list evil-undo-list-pointer))
+ (setq evil-undo-list-pointer (or buffer-undo-list t))))
+
+(defmacro evil-with-undo (&rest body)
+ "Execute BODY with enabled undo.
+If undo is disabled in the current buffer, the undo information
+is stored in `evil-temporary-undo' instead of `buffer-undo-list'."
+ (declare (indent defun)
+ (debug t))
+ `(unwind-protect
+ (let (buffer-undo-list)
+ (unwind-protect
+ (progn ,@body)
+ (setq evil-temporary-undo buffer-undo-list)
+ ;; ensure evil-temporary-undo starts with exactly one undo
+ ;; boundary marker, i.e. nil
+ (unless (null (car-safe evil-temporary-undo))
+ (push nil evil-temporary-undo))))
+ (unless (eq buffer-undo-list t)
+ ;; undo is enabled, so update the global buffer undo list
+ (setq buffer-undo-list
+ ;; prepend new undos (if there are any)
+ (if (cdr evil-temporary-undo)
+ (nconc evil-temporary-undo buffer-undo-list)
+ buffer-undo-list)
+ evil-temporary-undo nil))))
+
+(defmacro evil-with-single-undo (&rest body)
+ "Execute BODY as a single undo step."
+ (declare (indent defun)
+ (debug t))
+ `(let (evil-undo-list-pointer)
+ (evil-with-undo
+ (unwind-protect
+ (progn
+ (evil-start-undo-step)
+ (let ((evil-in-single-undo t))
+ ,@body))
+ (evil-end-undo-step)))))
+
+(defun evil-undo-pop ()
+ "Undo the last buffer change.
+Removes the last undo information from `buffer-undo-list'.
+If undo is disabled in the current buffer, use the information
+in `evil-temporary-undo' instead."
+ (let ((paste-undo (list nil)))
+ (let ((undo-list (if (eq buffer-undo-list t)
+ evil-temporary-undo
+ buffer-undo-list)))
+ (when (or (not undo-list) (car undo-list))
+ (user-error "Can't undo previous change"))
+ (while (and undo-list (null (car undo-list)))
+ (pop undo-list)) ; remove nil
+ (while (and undo-list (car undo-list))
+ (push (pop undo-list) paste-undo))
+ (let ((buffer-undo-list (nreverse paste-undo)))
+ (evil-save-echo-area
+ (undo)))
+ (if (eq buffer-undo-list t)
+ (setq evil-temporary-undo nil)
+ (setq buffer-undo-list undo-list)))))
+
+;;; Search
+(defun evil-transform-regexp (regexp replacements-alist)
+ (let ((pos 0) result)
+ (replace-regexp-in-string
+ "\\\\+[^\\\\]"
+ #'(lambda (txt)
+ (let* ((b (match-beginning 0))
+ (e (match-end 0))
+ (ch (aref txt (1- e)))
+ (repl (assoc ch replacements-alist)))
+ (if (and repl (zerop (mod (length txt) 2)))
+ (concat (substring txt b (- e 2))
+ (cdr repl))
+ txt)))
+ regexp nil t)))
+
+(defun evil-transform-magic (str magic quote transform &optional start)
+ "Transforms STR with magic characters.
+MAGIC is a regexp that matches all potential magic
+characters. Each occurence of CHAR as magic character within str
+is replaced by the result of calling the associated TRANSFORM
+function. TRANSFORM is a function taking two arguments, the
+character to be transformed and the rest of string after the
+character. The function should return a triple (REPLACEMENT REST
+. STOP) where REPLACEMENT is the replacement and REST is the rest
+of the string that has not been transformed. If STOP is non-nil
+then the substitution stops immediately. The replacement starts
+at position START, everything before that position is returned
+literally. The result is a pair (RESULT . REST). RESULT is a
+list containing the transformed parts in order. If two
+subsequents parts are both strings, they are concatenated. REST
+is the untransformed rest string (usually \"\" but may be more if
+TRANSFORM stopped the substitution). Which characters are
+considered as magic characters (i.e. the transformation happens
+if the character is NOT preceeded by a backslash) is determined
+by `evil-magic'. The special tokens \\v, \\V, \\m and \\M have
+always a special meaning (like in Vim) and should not be
+contained in TRANSFORMS, otherwise their meaning is overwritten.
+
+The parameter QUOTE is a quoting function applied to literal
+transformations, usually `regexp-quote' or `replace-quote'."
+ (save-match-data
+ (let ((regexp (concat "\\(?:\\`\\|[^\\]\\)\\(\\\\\\(?:\\(" magic "\\)\\|\\(.\\)\\)\\|\\(" magic "\\)\\)"))
+ (magic-chars (evil-get-magic evil-magic))
+ (evil-magic evil-magic)
+ (quote (or quote #'identity))
+ result stop)
+ (while (and (not stop) str (string-match regexp str))
+ (unless (zerop (match-beginning 1))
+ (push (substring str 0 (match-beginning 1)) result))
+ (let ((char (or (match-string 2 str)
+ (match-string 3 str)
+ (match-string 4 str)))
+ (rest (substring str (match-end 0))))
+ (cond
+ ((match-beginning 4)
+ ;; magic character without backslash
+ (if (string-match magic-chars char)
+ ;; magic, do transform
+ (let ((trans (funcall transform (aref char 0) rest)))
+ (push (car trans) result)
+ (setq str (cadr trans) stop (nthcdr 2 trans)))
+ ;; non-magic, literal transformation
+ (push (funcall quote char) result)
+ (setq str rest)))
+ ((match-beginning 2)
+ ;; magic character with backslash
+ (if (not (string-match magic-chars char))
+ ;; non-magic, do transform
+ (let ((trans (funcall transform (aref char 0) rest)))
+ (push (car trans) result)
+ (setq str (cadr trans) stop (nthcdr 2 trans)))
+ ;; magic, literal transformation
+ (push (funcall quote char) result)
+ (setq str rest)))
+ ((memq (aref char 0) '(?m ?M ?v ?V))
+ (setq evil-magic (cdr (assq (aref char 0)
+ '((?m . t)
+ (?M . nil)
+ (?v . very-magic)
+ (?V . very-nomagic)))))
+ (setq magic-chars (evil-get-magic evil-magic))
+ (setq str rest))
+ (t
+ ;; non-magic char with backslash, literal transformation
+ (push (funcall quote char) result)
+ (setq str rest)))))
+ (cond
+ ((and str (not stop))
+ (push str result)
+ (setq str ""))
+ ((not str)
+ (setq str "")))
+ ;; concatenate subsequent strings
+ ;; note that result is in reverse order
+ (let (repl)
+ (while result
+ (cond
+ ((and (stringp (car result))
+ (zerop (length (car result))))
+ (pop result))
+ ((and (stringp (car result))
+ (stringp (cadr result)))
+ (setq result (cons (concat (cadr result)
+ (car result))
+ (nthcdr 2 result))))
+ (t
+ (push (pop result) repl))))
+ (cons repl str)))))
+
+(defconst evil-vim-regexp-replacements
+ '((?n . "\n") (?r . "\r")
+ (?t . "\t") (?b . "\b")
+ (?s . "[[:space:]]") (?S . "[^[:space:]]")
+ (?d . "[[:digit:]]") (?D . "[^[:digit:]]")
+ (?x . "[[:xdigit:]]") (?X . "[^[:xdigit:]]")
+ (?o . "[0-7]") (?O . "[^0-7]")
+ (?a . "[[:alpha:]]") (?A . "[^[:alpha:]]")
+ (?l . "[a-z]") (?L . "[^a-z]")
+ (?u . "[A-Z]") (?U . "[^A-Z]")
+ (?y . "\\s") (?Y . "\\S")
+ (?\( . "\\(") (?\) . "\\)")
+ (?{ . "\\{") (?} . "\\}")
+ (?\[ . "[") (?\] . "]")
+ (?< . "\\<") (?> . "\\>")
+ (?_ . "\\_")
+ (?* . "*") (?+ . "+")
+ (?? . "?") (?= . "?")
+ (?. . ".")
+ (?` . "`") (?^ . "^")
+ (?$ . "$") (?| . "\\|")))
+
+(defconst evil-regexp-magic "[][(){}<>_dDsSxXoOaAlLuUwWyY.*+?=^$`|nrtb]")
+
+(defun evil-transform-vim-style-regexp (regexp)
+ "Transforms vim-style backslash codes to Emacs regexp.
+This includes the backslash codes \\d, \\D, \\s, \\S, \\x, \\X,
+\\o, \\O, \\a, \\A, \\l, \\L, \\u, \\U and \\w, \\W. The new
+codes \\y and \\Y can be used instead of the Emacs code \\s and
+\\S which have a different meaning in Vim-style."
+ (car
+ (car
+ (evil-transform-magic
+ regexp evil-regexp-magic #'regexp-quote
+ #'(lambda (char rest)
+ (let ((repl (assoc char evil-vim-regexp-replacements)))
+ (if repl
+ (list (cdr repl) rest)
+ (list (concat "\\" (char-to-string char)) rest))))))))
+
+;;; Substitute
+
+(defun evil-downcase-first (str)
+ "Return STR with the first letter downcased."
+ (if (zerop (length str))
+ str
+ (concat (downcase (substring str 0 1))
+ (substring str 1))))
+
+(defun evil-upcase-first (str)
+ "Return STR with the first letter upcased."
+ (if (zerop (length str))
+ str
+ (concat (upcase (substring str 0 1))
+ (substring str 1))))
+
+(defun evil-get-magic (magic)
+ "Returns a regexp matching the magic characters according to MAGIC.
+Depending on the value of MAGIC the following characters are
+considered magic.
+ t [][{}*+?.&~$^
+ nil [][{}*+?$^
+ 'very-magic not 0-9A-Za-z_
+ 'very-nomagic empty."
+ (cond
+ ((eq magic t) "[][}{*+?.&~$^]")
+ ((eq magic 'very-magic) "[^0-9A-Za-z_]")
+ ((eq magic 'very-nomagic) "\\\\")
+ (t "[][}{*+?$^]")))
+
+;; TODO: support magic characters in patterns
+(defconst evil-replacement-magic "[eElLuU0-9&#,rnbt=]"
+ "All magic characters in a replacement string")
+
+(defun evil-compile-subreplacement (to &optional start)
+ "Convert a regexp replacement TO to Lisp from START until \\e or \\E.
+Returns a pair (RESULT . REST). RESULT is a list suitable for
+`perform-replace' if necessary, the original string if not.
+REST is the unparsed remainder of TO."
+ (let ((result
+ (evil-transform-magic
+ to evil-replacement-magic #'replace-quote
+ #'(lambda (char rest)
+ (cond
+ ((eq char ?#)
+ (list '(number-to-string replace-count) rest))
+ ((eq char ?r) (list "\r" rest))
+ ((eq char ?n) (list "\n" rest))
+ ((eq char ?b) (list "\b" rest))
+ ((eq char ?t) (list "\t" rest))
+ ((memq char '(?e ?E))
+ `("" ,rest . t))
+ ((memq char '(?l ?L ?u ?U))
+ (let ((result (evil-compile-subreplacement rest))
+ (func (cdr (assoc char
+ '((?l . evil-downcase-first)
+ (?L . downcase)
+ (?u . evil-upcase-first)
+ (?U . upcase))))))
+ (list `(,func
+ (replace-quote
+ (evil-match-substitute-replacement
+ ,(car result)
+ (not case-replace))))
+ (cdr result))))
+ ((eq char ?=)
+ (when (or (zerop (length rest))
+ (not (eq (aref rest 0) ?@)))
+ (user-error "Expected @ after \\="))
+ (when (< (length rest) 2)
+ (user-error "Expected register after \\=@"))
+ (list (evil-get-register (aref rest 1))
+ (substring rest 2)))
+ ((eq char ?,)
+ (let* ((obj (read-from-string rest))
+ (result `(replace-quote ,(car obj)))
+ (end
+ ;; swallow a space after a symbol
+ (if (and (or (symbolp (car obj))
+ ;; swallow a space after 'foo,
+ ;; but not after (quote foo)
+ (and (eq (car-safe (car obj)) 'quote)
+ (not (= ?\( (aref rest 0)))))
+ (eq (string-match " " rest (cdr obj))
+ (cdr obj)))
+ (1+ (cdr obj))
+ (cdr obj))))
+ (list result (substring rest end))))
+ ((eq char ?0)
+ (list "\\&" rest))
+ (t
+ (list (concat "\\" (char-to-string char)) rest))))
+ start)))
+ (let ((rest (cdr result))
+ (result (car result)))
+ (replace-match-string-symbols result)
+ (cons (if (cdr result)
+ (cons 'concat result)
+ (or (car result) ""))
+ rest))))
+
+(defun evil-compile-replacement (to)
+ "Maybe convert a regexp replacement TO to Lisp.
+Returns a list suitable for `perform-replace' if necessary, the
+original string if not. Currently the following magic characters
+in replacements are supported: 0-9&#lLuUrnbt,
+The magic character , (comma) start an Emacs-lisp expression."
+ (when (stringp to)
+ (save-match-data
+ (cons 'replace-eval-replacement
+ (car (evil-compile-subreplacement to))))))
+
+(defun evil-replace-match (replacement &optional fixedcase string)
+ "Replace text match by last search with REPLACEMENT.
+If REPLACEMENT is an expression it will be evaluated to compute
+the replacement text, otherwise the function behaves as
+`replace-match'."
+ (if (stringp replacement)
+ (replace-match replacement fixedcase nil string)
+ (replace-match (funcall (car replacement)
+ (cdr replacement)
+ 0)
+ fixedcase nil string)))
+
+(defun evil-match-substitute-replacement (replacement &optional fixedcase string)
+ "Return REPLACEMENT as it will be inserted by `evil-replace-match'."
+ (if (stringp replacement)
+ (match-substitute-replacement replacement fixedcase nil string)
+ (match-substitute-replacement (funcall (car replacement)
+ (cdr replacement)
+ 0)
+ fixedcase nil string)))
+
+;;; Alignment
+
+(defun evil-justify-lines (beg end justify position)
+ "Justifes all lines in a range.
+BEG and END specify the range of those lines to be
+justified. JUSTIFY is either 'left, 'right or 'center according
+to the justification type. POSITION is the maximal text width for
+right and center justification or the column at which the lines
+should be left-aligned for left justification."
+ (let ((fill-column position)
+ adaptive-fill-mode fill-prefix)
+ (evil-with-restriction
+ (save-excursion
+ (goto-char beg)
+ (line-beginning-position))
+ (save-excursion
+ (goto-char end)
+ (if (bolp)
+ (line-end-position 0)
+ (line-end-position)))
+ (goto-char (point-min))
+ (while (progn
+ (if (eq justify 'left)
+ (indent-line-to position)
+ (when (re-search-forward "^[[:space:]]*" nil t)
+ (delete-region (match-beginning 0)
+ (match-end 0)))
+ (justify-current-line justify nil t))
+ (and (zerop (forward-line)) (bolp))))
+ (goto-char (point-min))
+ (back-to-indentation))))
+
+;;; View helper
+
+(defvar-local evil-list-view-select-action nil)
+(put 'evil-list-view-select-action 'permanent-local t)
+
+(define-derived-mode evil-list-view-mode tabulated-list-mode
+ "Evil List View"
+ (tabulated-list-init-header)
+ (tabulated-list-print))
+
+(defun evil-list-view-goto-entry ()
+ (interactive)
+ (when (and evil-list-view-select-action
+ (not (eobp)))
+ (let* ((line (line-number-at-pos (point)))
+ (entry (elt tabulated-list-entries (1- line))))
+ (funcall evil-list-view-select-action (nth 1 entry)))))
+
+(define-key evil-list-view-mode-map (kbd "q") #'kill-this-buffer)
+(define-key evil-list-view-mode-map [follow-link] nil) ;; allows mouse-1 to be activated
+(define-key evil-list-view-mode-map [mouse-1] #'evil-list-view-goto-entry)
+(define-key evil-list-view-mode-map [return] #'evil-list-view-goto-entry)
+
+(defmacro evil-with-view-list (&rest properties)
+ "Opens new list view buffer.
+
+PROPERTIES is a property-list which supports the following properties:
+
+:name (required) The name of the buffer.
+:mode-name (required) The name for the mode line.
+:format (required) The value for `tabulated-list-format'.
+:entries (required) The value for `tabulated-list-entries'.
+:select-action (optional) A function for row selection.
+ It takes in a single parameter, which is the selected row's
+ vector value that is passed into `:entries'.
+"
+ (declare (indent defun) (debug t))
+ `(let ((bufname (concat "*" ,(plist-get properties :name) "*"))
+ (inhibit-read-only t))
+ (and (get-buffer bufname)
+ (kill-buffer bufname))
+ (let ((buf (get-buffer-create bufname)))
+ (with-current-buffer buf
+ (setq tabulated-list-format ,(plist-get properties :format))
+ (setq tabulated-list-entries ,(plist-get properties :entries))
+ (setq evil-list-view-select-action ,(plist-get properties :select-action))
+ (evil-list-view-mode)
+ (setq mode-name ,(plist-get properties :mode-name))
+ (evil-motion-state))
+ (switch-to-buffer-other-window buf))))
+
+(provide 'evil-common)
+
+;;; evil-common.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-common.elc b/.emacs.d/elpa/evil-20171210.501/evil-common.elc
new file mode 100644
index 0000000..3d4462c
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-common.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-core.el b/.emacs.d/elpa/evil-20171210.501/evil-core.el
new file mode 100644
index 0000000..125c166
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-core.el
@@ -0,0 +1,1336 @@
+;;; evil-core.el --- Core functionality
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Evil is defined as a globalized minor mode, enabled with the toggle
+;; function `evil-mode'. This in turn enables `evil-local-mode' in
+;; every buffer, which sets up the buffer's state.
+;;
+;; Each state has its own keymaps, and these keymaps have status as
+;; "emulation keymaps" with priority over regular keymaps. Emacs
+;; maintains the following keymap hierarchy (highest priority first):
+;;
+;; * Overriding keymaps/overlay keymaps...
+;; * Emulation mode keymaps...
+;; - Evil keymaps...
+;; * Minor mode keymaps...
+;; * Local keymap (`local-set-key')
+;; * Global keymap (`global-set-key')
+;;
+;; Within this hierarchy, Evil arranges the keymaps for the current
+;; state as shown below:
+;;
+;; * Intercept keymaps...
+;; * Local state keymap
+;; * Minor-mode keymaps...
+;; * Auxiliary keymaps...
+;; * Overriding keymaps...
+;; * Global state keymap
+;; * Keymaps for other states...
+;;
+;; These keymaps are listed in `evil-mode-map-alist', which is listed
+;; in `emulation-mode-map-alist'.
+;;
+;; Most of the key bindings for a state are stored in its global
+;; keymap, which has a name such as `evil-normal-state-map'. (See the
+;; file evil-maps.el, which contains all the default key bindings.) A
+;; state also has a local keymap (`evil-normal-state-local-map'),
+;; which may contain user customizations for the current buffer.
+;; Furthermore, any Emacs mode may be assigned state bindings of its
+;; own by passing the mode's keymap to the function `evil-define-key'
+;; or `evil-define-minor-mode-key'. The former uses a specific map to
+;; define the key in while the latter associates the key with a
+;; particular mode. These mode-specific bindings are ultimately stored
+;; in so-called auxiliary and minor-mode keymaps respectively, which
+;; are sandwiched between the local keymap and the global keymap.
+;; Finally, the state may also activate the keymaps of other states
+;; (e.g., Normal state inherits bindings from Motion state).
+;;
+;; For integration purposes, a regular Emacs keymap may be "elevated"
+;; to emulation status by passing it to `evil-make-intercept-map' or
+;; `evil-make-overriding-map'. An "intercept" keymap has priority over
+;; all other Evil keymaps. (Evil uses this facility when debugging and
+;; for handling the "ESC" key in the terminal.) More common is the
+;; "overriding" keymap, which only has priority over the global state
+;; keymap. (This is useful for adapting key-heavy modes such as Dired,
+;; where all but a few keys should be left as-is and should not be
+;; shadowed by Evil's default bindings.)
+;;
+;; States are defined with the macro `evil-define-state', which
+;; creates a command for switching to the state. This command,
+;; for example `evil-normal-state' for Normal state, performs
+;; the following tasks:
+;;
+;; * Setting `evil-state' to the new state.
+;; * Refreshing the keymaps in `evil-mode-map-alist'.
+;; * Updating the mode line.
+;; - Normal state depends on `evil-normal-state-tag'.
+;; * Adjusting the cursor's appearance.
+;; - Normal state depends on `evil-normal-state-cursor'.
+;; * Displaying a message in the echo area.
+;; - Normal state depends on `evil-normal-state-message'.
+;; * Running hooks.
+;; - Normal state runs `evil-normal-state-entry-hook' when
+;; entering, and `evil-normal-state-exit-hook' when exiting.
+;;
+;; The various properties of a state can be accessed through their
+;; respective variables, or by passing a keyword and the state's name
+;; to the `evil-state-property' function. Evil defines the states
+;; Normal state ("normal"), Insert state ("insert"), Visual state
+;; ("visual"), Replace state ("replace"), Operator-Pending state
+;; ("operator"), Motion state ("motion") and Emacs state ("emacs").
+
+(require 'evil-common)
+
+;;; Code:
+
+(declare-function evil-emacs-state-p "evil-states")
+(declare-function evil-ex-p "evil-ex")
+(defvar evil-mode-buffers)
+
+(define-minor-mode evil-local-mode
+ "Minor mode for setting up Evil in a single buffer."
+ :init-value nil
+ (cond
+ ((evil-disabled-buffer-p)
+ ;; Don't leave the mode variable on in buffers where evil disabled, because
+ ;; functions that check this variable will get an incorrect result (e.g.,
+ ;; evil-refresh-cursor).
+ (setq evil-local-mode nil))
+ (evil-local-mode
+ (setq emulation-mode-map-alists
+ (evil-concat-lists '(evil-mode-map-alist)
+ emulation-mode-map-alists))
+ (evil-initialize-local-keymaps)
+ ;; restore the proper value of `major-mode' in Fundamental buffers
+ (when (eq major-mode 'turn-on-evil-mode)
+ (setq major-mode 'fundamental-mode))
+ ;; The initial state is usually setup by `evil-initialize' when
+ ;; the major-mode in a buffer changes. This preliminary
+ ;; initialization is only for the case when `evil-local-mode' is
+ ;; called directly for the first time in a buffer.
+ (unless evil-state (evil-initialize-state))
+ (add-hook 'input-method-activate-hook 'evil-activate-input-method t t)
+ (add-hook 'input-method-deactivate-hook 'evil-deactivate-input-method t t)
+ (add-hook 'activate-mark-hook 'evil-visual-activate-hook nil t)
+ (add-hook 'pre-command-hook 'evil-repeat-pre-hook)
+ (add-hook 'post-command-hook 'evil-repeat-post-hook))
+ (t
+ (evil-refresh-mode-line)
+ (remove-hook 'activate-mark-hook 'evil-visual-activate-hook t)
+ (remove-hook 'input-method-activate-hook 'evil-activate-input-method t)
+ (remove-hook 'input-method-deactivate-hook 'evil-deactivate-input-method t)
+ (evil-change-state nil))))
+
+;; Make the variable permanent local. This is particular useful in
+;; conjunction with nXhtml/mumamo because mumamo does not touch these
+;; variables.
+(put 'evil-local-mode 'permanent-local t)
+
+(defun turn-on-evil-mode (&optional arg)
+ "Turn on Evil in the current buffer."
+ (interactive)
+ (evil-local-mode (or arg 1)))
+
+(defun turn-off-evil-mode (&optional arg)
+ "Turn off Evil in the current buffer."
+ (interactive)
+ (evil-local-mode (or arg -1)))
+
+;; The function `evil-initialize' should only be used to initialize
+;; `evil-local-mode' from the globalized minor-mode `evil-mode'. It is
+;; called whenever evil is enabled in a buffer for the first time or
+;; when evil is active and the major-mode of the buffer changes. In
+;; addition to enabling `evil-local-mode' it also sets the initial
+;; evil-state according to the major-mode.
+(defun evil-initialize ()
+ "Enable Evil in the current buffer, if appropriate.
+To enable Evil globally, do (evil-mode 1)."
+ ;; TODO: option for enabling vi keys in the minibuffer
+ (unless (minibufferp)
+ (evil-local-mode 1)
+ (evil-initialize-state)))
+
+;;;###autoload (autoload 'evil-mode "evil" nil t)
+(define-globalized-minor-mode evil-mode
+ evil-local-mode evil-initialize)
+
+;; No hooks are run in Fundamental buffers, so other measures are
+;; necessary to initialize Evil in these buffers. When Evil is
+;; enabled globally, the default value of `major-mode' is set to
+;; `turn-on-evil-mode', so that Evil is enabled in Fundamental
+;; buffers as well. Then, the buffer-local value of `major-mode' is
+;; changed back to `fundamental-mode'. (Since the `evil-mode' function
+;; is created by a macro, we use `defadvice' to augment it.)
+(defadvice evil-mode (after start-evil activate)
+ "Enable Evil in Fundamental mode."
+ (if evil-mode
+ (progn
+ (when (eq (default-value 'major-mode) 'fundamental-mode)
+ ;; changed back by `evil-local-mode'
+ (setq-default major-mode 'turn-on-evil-mode))
+ (ad-enable-regexp "^evil")
+ (ad-activate-regexp "^evil")
+ (with-no-warnings (evil-esc-mode 1)))
+ (when (eq (default-value 'major-mode) 'turn-on-evil-mode)
+ (setq-default major-mode 'fundamental-mode))
+ (ad-disable-regexp "^evil")
+ (ad-update-regexp "^evil")
+ (with-no-warnings (evil-esc-mode -1))))
+
+(defun evil-change-state (state &optional message)
+ "Change the state to STATE.
+If STATE is nil, disable all states."
+ (let ((func (evil-state-property (or state evil-state) :toggle)))
+ (when (and (functionp func)
+ (or message (not (eq state evil-state))))
+ (funcall func (if state (and message 1) -1)))))
+
+(defmacro evil-save-state (&rest body)
+ "Save the current state; execute BODY; restore the state."
+ (declare (indent defun)
+ (debug t))
+ `(let* ((evil-state evil-state)
+ (evil-previous-state evil-previous-state)
+ (evil-previous-state-alist (copy-tree evil-previous-state-alist))
+ (evil-next-state evil-next-state)
+ (old-state evil-state)
+ (inhibit-quit t)
+ (buf (current-buffer)))
+ (unwind-protect
+ (progn ,@body)
+ (when (buffer-live-p buf)
+ (with-current-buffer buf
+ (evil-change-state old-state))))))
+
+(defmacro evil-with-state (state &rest body)
+ "Change to STATE and execute BODY without refreshing the display.
+Restore the previous state afterwards."
+ (declare (indent defun)
+ (debug t))
+ `(evil-without-display
+ (evil-save-state
+ (evil-change-state ',state)
+ ,@body)))
+
+(defun evil-initializing-p (&optional buffer)
+ "Whether Evil is in the process of being initialized."
+ (memq (or buffer (current-buffer)) evil-mode-buffers))
+
+(defun evil-initialize-state (&optional state buffer)
+ "Set up the initial state for BUFFER.
+BUFFER defaults to the current buffer.
+Uses STATE if specified, or calls `evil-initial-state-for-buffer'.
+See also `evil-set-initial-state'."
+ (with-current-buffer (or buffer (current-buffer))
+ (if state (evil-change-state state)
+ (evil-change-to-initial-state buffer))))
+(put 'evil-initialize-state 'permanent-local-hook t)
+
+(defun evil-initial-state-for-buffer-name (&optional name default)
+ "Return the initial Evil state to use for a buffer with name NAME.
+Matches the name against the regular expressions in
+`evil-buffer-regexps'. If none matches, returns DEFAULT."
+ (let ((name (if (stringp name) name (buffer-name name)))
+ regexp state)
+ (when (stringp name)
+ (catch 'done
+ (dolist (entry evil-buffer-regexps default)
+ (setq regexp (car entry)
+ state (cdr entry))
+ (when (string-match regexp name)
+ (throw 'done state)))))))
+
+(defun evil-disabled-buffer-p (&optional buffer)
+ "Whether Evil should be disabled in BUFFER."
+ (null (evil-initial-state-for-buffer-name buffer 'undefined)))
+
+(defun evil-initial-state-for-buffer (&optional buffer default)
+ "Return the initial Evil state to use for BUFFER.
+BUFFER defaults to the current buffer. Returns DEFAULT
+if no initial state is associated with BUFFER.
+See also `evil-initial-state'."
+ (with-current-buffer (or buffer (current-buffer))
+ (or (evil-initial-state-for-buffer-name (buffer-name))
+ (catch 'done
+ (dolist (mode minor-mode-map-alist)
+ (setq mode (car-safe mode))
+ (when (and (boundp mode) (symbol-value mode))
+ (when (setq mode (evil-initial-state mode))
+ (throw 'done mode)))))
+ (evil-initial-state major-mode)
+ default)))
+
+(defun evil-initial-state (mode &optional default)
+ "Return the Evil state to use for MODE.
+Returns DEFAULT if no initial state is associated with MODE.
+The initial state for a mode can be set with
+`evil-set-initial-state'."
+ (let (state modes)
+ (catch 'done
+ (dolist (entry (evil-state-property t :modes) default)
+ (setq state (car entry)
+ modes (symbol-value (cdr entry)))
+ (when (memq mode modes)
+ (throw 'done state))))))
+
+(defun evil-set-initial-state (mode state)
+ "Set the initial state for MODE to STATE.
+This is the state the buffer comes up in."
+ (dolist (modes (evil-state-property t :modes))
+ (setq modes (cdr-safe modes))
+ (set modes (delq mode (symbol-value modes))))
+ (when state
+ (add-to-list (evil-state-property state :modes) mode)))
+
+(evil-define-command evil-change-to-initial-state
+ (&optional buffer message)
+ "Change the state of BUFFER to its initial state.
+This is the state the buffer came up in. If Evil is not activated
+then this function does nothing."
+ :keep-visual t
+ :suppress-operator t
+ (with-current-buffer (or buffer (current-buffer))
+ (when evil-local-mode
+ (evil-change-state (evil-initial-state-for-buffer
+ buffer (or evil-default-state 'normal))
+ message))))
+
+(evil-define-command evil-change-to-previous-state
+ (&optional buffer message)
+ "Change the state of BUFFER to its previous state."
+ :keep-visual t
+ :repeat abort
+ :suppress-operator t
+ (with-current-buffer (or buffer (current-buffer))
+ (let ((prev-state evil-previous-state)
+ (prev-prev-state (cdr-safe (assoc evil-previous-state
+ evil-previous-state-alist))))
+ (evil-change-state nil)
+ (when prev-prev-state
+ (setq evil-previous-state prev-prev-state))
+ (evil-change-state (or prev-state evil-default-state 'normal)
+ message))))
+
+;; When a buffer is created in a low-level way, it is invisible to
+;; Evil (as well as other globalized minor modes) because no hooks are
+;; run. This is appropriate since many buffers are used for throwaway
+;; purposes. Passing the buffer to `set-window-buffer' indicates
+;; otherwise, though, so advise this function to initialize Evil.
+(defadvice set-window-buffer (before evil)
+ "Initialize Evil in the displayed buffer."
+ (when evil-mode
+ (when (get-buffer (ad-get-arg 1))
+ (with-current-buffer (ad-get-arg 1)
+ (unless evil-local-mode
+ (evil-local-mode 1))))))
+
+;; Refresh cursor color.
+;; Cursor color can only be set for each frame but not for each buffer.
+(add-hook 'window-configuration-change-hook 'evil-refresh-cursor)
+(defadvice select-window (after evil activate)
+ (evil-refresh-cursor))
+
+(defun evil-generate-mode-line-tag (&optional state)
+ "Generate the evil mode-line tag for STATE."
+ (let ((tag (evil-state-property state :tag t)))
+ ;; prepare mode-line: add tooltip
+ (if (stringp tag)
+ (propertize tag
+ 'help-echo (evil-state-property state :name)
+ 'mouse-face 'mode-line-highlight)
+ tag)))
+
+(defun evil-refresh-mode-line (&optional state)
+ "Refresh mode line tag."
+ (when (listp mode-line-format)
+ (setq evil-mode-line-tag (evil-generate-mode-line-tag state))
+ ;; refresh mode line data structure
+ ;; first remove evil from mode-line
+ (setq mode-line-format (delq 'evil-mode-line-tag mode-line-format))
+ (let ((mlpos mode-line-format)
+ pred which where)
+ ;; determine before/after which symbol the tag should be placed
+ (cond
+ ((eq evil-mode-line-format 'before)
+ (setq where 'after which 'mode-line-position))
+ ((eq evil-mode-line-format 'after)
+ (setq where 'after which 'mode-line-modes))
+ ((consp evil-mode-line-format)
+ (setq where (car evil-mode-line-format)
+ which (cdr evil-mode-line-format))))
+ ;; find the cons-cell of the symbol before/after which the tag
+ ;; should be placed
+ (while (and mlpos
+ (let ((sym (or (car-safe (car mlpos)) (car mlpos))))
+ (not (eq which sym))))
+ (setq pred mlpos
+ mlpos (cdr mlpos)))
+ ;; put evil tag at the right position in the mode line
+ (cond
+ ((not mlpos)) ;; position not found, so do not add the tag
+ ((eq where 'before)
+ (if pred
+ (setcdr pred (cons 'evil-mode-line-tag mlpos))
+ (setq mode-line-format
+ (cons 'evil-mode-line-tag mode-line-format))))
+ ((eq where 'after)
+ (setcdr mlpos (cons 'evil-mode-line-tag (cdr mlpos)))))
+ (force-mode-line-update))))
+
+;; input methods should be disabled in non-insertion states
+(defun evil-activate-input-method ()
+ "Enable input method in states with :input-method non-nil."
+ (let (input-method-activate-hook
+ input-method-deactivate-hook)
+ (when (and evil-local-mode evil-state)
+ (setq evil-input-method current-input-method)
+ (unless (evil-state-property evil-state :input-method)
+ (deactivate-input-method)))))
+(put 'evil-activate-input-method 'permanent-local-hook t)
+
+(defun evil-deactivate-input-method ()
+ "Disable input method in all states."
+ (let (input-method-activate-hook
+ input-method-deactivate-hook)
+ (when (and evil-local-mode evil-state)
+ (setq evil-input-method nil))))
+(put 'evil-deactivate-input-method 'permanent-local-hook t)
+
+(defmacro evil-without-input-method-hooks (&rest body)
+ "Execute body with evil's activate/deactivate-input-method hooks deactivated.
+
+This allows input methods to be used in normal-state."
+ `(unwind-protect
+ (progn
+ (remove-hook 'input-method-activate-hook 'evil-activate-input-method t)
+ (remove-hook 'input-method-deactivate-hook
+ 'evil-deactivate-input-method t)
+ ,@body)
+ (progn
+ (add-hook 'input-method-activate-hook 'evil-activate-input-method nil t)
+ (add-hook 'input-method-deactivate-hook
+ 'evil-deactivate-input-method nil t))))
+
+(defadvice toggle-input-method (around evil)
+ "Refresh `evil-input-method'."
+ (cond
+ ((not evil-local-mode)
+ ad-do-it)
+ ((evil-state-property evil-state :input-method)
+ ad-do-it)
+ (t
+ (let ((current-input-method evil-input-method))
+ ad-do-it))))
+
+;; Local keymaps are implemented using buffer-local variables.
+;; However, unless a buffer-local value already exists,
+;; `define-key' acts on the variable's default (global) value.
+;; So we need to initialize the variable whenever we enter a
+;; new buffer or when the buffer-local values are reset.
+(defun evil-initialize-local-keymaps ()
+ "Initialize a buffer-local value for local keymaps as necessary.
+The initial value is that of `make-sparse-keymap'."
+ (dolist (entry evil-local-keymaps-alist)
+ (let ((mode (car entry))
+ (map (cdr entry)))
+ (unless (and (keymapp (symbol-value map))
+ (assq map (buffer-local-variables)))
+ (set map (make-sparse-keymap))))))
+
+(defun evil-make-overriding-map (keymap &optional state copy)
+ "Give KEYMAP precedence over the global keymap of STATE.
+The keymap will have lower precedence than custom STATE bindings.
+If STATE is nil, give it precedence over all states.
+If COPY is t, create a copy of KEYMAP and give that
+higher precedence. See also `evil-make-intercept-map'."
+ (let ((key [override-state]))
+ (if (not copy)
+ (define-key keymap key (or state 'all))
+ (unless (keymapp copy)
+ (setq copy (assq-delete-all 'menu-bar (copy-keymap keymap))))
+ (define-key copy key (or state 'all))
+ (define-key keymap key copy))))
+
+(defun evil-make-intercept-map (keymap &optional state)
+ "Give KEYMAP precedence over all Evil keymaps in STATE.
+If STATE is nil, give it precedence over all states.
+See also `evil-make-overriding-map'."
+ (let ((key [intercept-state]))
+ (define-key keymap key (or state 'all))))
+
+(defmacro evil-define-keymap (keymap doc &rest body)
+ "Define a keymap KEYMAP listed in `evil-mode-map-alist'.
+That means it will have precedence over regular keymaps.
+
+DOC is the documentation for the variable. BODY, if specified,
+is executed after toggling the mode. Optional keyword arguments
+may be specified before the body code:
+
+:mode VAR Mode variable. If unspecified, the variable
+ is based on the keymap name.
+:local BOOLEAN Whether the keymap should be buffer-local, that is,
+ reinitialized for each buffer.
+:func BOOLEAN Create a toggle function even if BODY is empty.
+
+\(fn KEYMAP DOC [[KEY VAL]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name
+ [&optional stringp]
+ [&rest [keywordp sexp]]
+ def-body)))
+ (let ((func t)
+ arg intercept key local mode overriding)
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body))
+ (cond
+ ((eq key :mode)
+ (setq mode arg))
+ ((eq key :local)
+ (setq local arg))
+ ((eq key :func)
+ (setq func arg))
+ ((eq key :intercept)
+ (setq intercept arg))
+ ((eq key :overriding)
+ (setq overriding arg))))
+ (setq mode (or mode
+ (intern (replace-regexp-in-string
+ "\\(?:-\\(?:mode-\\)?\\(?:key\\)?map\\)?$"
+ "-mode"
+ (symbol-name keymap)))))
+ `(progn
+ (defvar ,keymap ,(unless local '(make-sparse-keymap)))
+ (unless (get ',keymap 'variable-documentation)
+ (put ',keymap 'variable-documentation ,doc))
+ (defvar ,mode nil)
+ (unless (get ',mode 'variable-documentation)
+ (put ',mode 'variable-documentation ,doc))
+ (make-variable-buffer-local ',mode)
+ (put ',mode 'permanent-local t)
+ (when ,intercept
+ (evil-make-intercept-map ,keymap))
+ (when ,overriding
+ (evil-make-overriding-map ,keymap))
+ ,@(if local
+ `((make-variable-buffer-local ',keymap)
+ (put ',keymap 'permanent-local t)
+ (evil-add-to-alist 'evil-local-keymaps-alist
+ ',mode ',keymap))
+ `((evil-add-to-alist 'evil-global-keymaps-alist
+ ',mode ',keymap)
+ (evil-add-to-alist 'evil-mode-map-alist
+ ',mode ,keymap)))
+ ,(when (or body func)
+ `(defun ,mode (&optional arg)
+ ,@(when doc `(,doc))
+ (interactive)
+ (cond
+ ((numberp arg)
+ (setq ,mode (> arg 0)))
+ (t
+ (setq ,mode (not ,mode))))
+ ,@body))
+ ',keymap)))
+
+;; The ESC -> escape translation code has been provided by Stefan
+;; Monnier in the discussion of GNU Emacs bug #13793.
+(defun evil-esc-mode (&optional arg)
+ "Toggle interception of \\e (escape).
+Enable with positive ARG and disable with negative ARG.
+
+When enabled, `evil-esc-mode' modifies the entry of \\e in
+`input-decode-map'. If such an event arrives, it is translated to
+a plain 'escape event if no further event occurs within
+`evil-esc-delay' seconds. Otherwise no translation happens and
+the ESC prefix map (i.e. the map originally bound to \\e in
+`input-decode-map`) is returned."
+ (cond
+ ((or (null arg) (eq arg 0))
+ (evil-esc-mode (if evil-esc-mode -1 +1)))
+ ((> arg 0)
+ (unless evil-esc-mode
+ (setq evil-esc-mode t)
+ (add-hook 'after-make-frame-functions #'evil-init-esc)
+ (mapc #'evil-init-esc (frame-list))))
+ ((< arg 0)
+ (when evil-esc-mode
+ (remove-hook 'after-make-frame-functions #'evil-init-esc)
+ (mapc #'evil-deinit-esc (frame-list))
+ (setq evil-esc-mode nil)))))
+
+(defun evil-init-esc (frame)
+ "Update `input-decode-map' in terminal."
+ (with-selected-frame frame
+ (let ((term (frame-terminal frame)))
+ (when (and
+ (or (eq evil-intercept-esc 'always)
+ (and evil-intercept-esc
+ (eq (terminal-live-p term) t))) ; only patch tty
+ (not (terminal-parameter term 'evil-esc-map)))
+ (let ((evil-esc-map (lookup-key input-decode-map [?\e])))
+ (set-terminal-parameter term 'evil-esc-map evil-esc-map)
+ (define-key input-decode-map [?\e]
+ `(menu-item "" ,evil-esc-map :filter ,#'evil-esc)))))))
+
+(defun evil-deinit-esc (frame)
+ "Restore `input-decode-map' in terminal."
+ (with-selected-frame frame
+ (let ((term (frame-terminal frame)))
+ (when (terminal-live-p term)
+ (let ((evil-esc-map (terminal-parameter term 'evil-esc-map)))
+ (when evil-esc-map
+ (define-key input-decode-map [?\e] evil-esc-map)
+ (set-terminal-parameter term 'evil-esc-map nil)))))))
+
+(defun evil-esc (map)
+ "Translate \\e to 'escape if no further event arrives.
+This function is used to translate a \\e event either to 'escape
+or to the standard ESC prefix translation map. If \\e arrives,
+this function waits for `evil-esc-delay' seconds for another
+event. If no other event arrives, the event is translated to
+'escape, otherwise it is translated to the standard ESC prefix
+map stored in `input-decode-map'. If `evil-inhibit-esc' is
+non-nil or if evil is in emacs state, the event is always
+translated to the ESC prefix.
+
+The translation to 'escape happens only if the current command
+has indeed been triggered by \\e. In other words, this will only
+happen when the keymap is accessed from `read-key-sequence'. In
+particular, if it is access from `define-key' the returned
+mapping will always be the ESC prefix map."
+ (if (and (not evil-inhibit-esc)
+ (or evil-local-mode (evil-ex-p)
+ (active-minibuffer-window))
+ (not (evil-emacs-state-p))
+ (let ((keys (this-single-command-keys)))
+ (and (> (length keys) 0)
+ (= (aref keys (1- (length keys))) ?\e)))
+ (sit-for evil-esc-delay))
+ (prog1 [escape]
+ (when defining-kbd-macro
+ (end-kbd-macro)
+ (setq last-kbd-macro (vconcat last-kbd-macro [escape]))
+ (start-kbd-macro t t)))
+ map))
+
+(defun evil-state-p (sym)
+ "Whether SYM is the name of a state."
+ (assq sym evil-state-properties))
+
+(defun evil-state-keymaps (state &rest excluded)
+ "Return a keymap alist of keymaps activated by STATE.
+If STATE references other states in its :enable property,
+these states are recursively processed and added to the list.
+\(The EXCLUDED argument is an internal safeguard against
+infinite recursion, keeping track of processed states.)"
+ (let* ((state (or state evil-state))
+ (enable (evil-state-property state :enable))
+ (map (cons
+ (evil-state-property state :mode)
+ (evil-state-property state :keymap t)))
+ (local-map (cons
+ (evil-state-property state :local)
+ (evil-state-property state :local-keymap t)))
+ (minor-mode-maps (evil-state-minor-mode-keymaps state))
+ (aux-maps (evil-state-auxiliary-keymaps state))
+ (overriding-maps
+ (evil-state-overriding-keymaps state))
+ (intercept-maps
+ (evil-state-intercept-keymaps state))
+ (result `(,intercept-maps))
+ (remove-duplicates (null excluded)))
+ (unless (memq state enable)
+ (setq enable (cons state enable)))
+ ;; process STATE's :enable property
+ (dolist (entry enable)
+ (cond
+ ((memq entry excluded))
+ ;; the keymaps for STATE
+ ((eq entry state)
+ (setq result `(,@result
+ (,local-map)
+ ,minor-mode-maps
+ ,aux-maps
+ ,overriding-maps
+ (,map)))
+ (push state excluded))
+ ;; the keymaps for another state: call `evil-state-keymaps'
+ ;; recursively, but keep track of processed states
+ ((evil-state-p entry)
+ (setq result `(,@result
+ ,(apply #'evil-state-keymaps entry excluded))))
+ ;; a single keymap
+ ((or (keymapp entry)
+ (and (keymapp (symbol-value entry))
+ (setq entry (symbol-value entry)))
+ (setq entry (evil-keymap-for-mode entry)))
+ (setq result `(,@result
+ ((,(evil-mode-for-keymap entry t) .
+ ,entry)))))))
+ ;; postpone the expensive filtering of duplicates to the top level
+ (if remove-duplicates
+ (apply #'evil-concat-keymap-alists result)
+ (apply #'append result))))
+
+(defun evil-normalize-keymaps (&optional state)
+ "Create a buffer-local value for `evil-mode-map-alist'.
+This is a keymap alist, determined by the current state
+\(or by STATE if specified)."
+ (let ((state (or state evil-state))
+ (excluded '(nil t))
+ map mode temp)
+ ;; initialize buffer-local keymaps as necessary
+ (evil-initialize-local-keymaps)
+ ;; deactivate keymaps of previous state
+ (dolist (entry evil-mode-map-alist)
+ (setq mode (car-safe entry)
+ map (cdr-safe entry))
+ ;; don't deactivate overriding keymaps;
+ ;; they are toggled by their associated mode
+ (if (or (memq mode excluded)
+ (evil-intercept-keymap-p map)
+ (evil-overriding-keymap-p map)
+ (evil-auxiliary-keymap-p map)
+ (evil-minor-mode-keymap-p map))
+ (push mode excluded)
+ (when (and (fboundp mode) (symbol-value mode))
+ (funcall mode -1))
+ (set mode nil)))
+ (setq evil-mode-map-alist nil)
+ ;; activate keymaps of current state
+ (when state
+ (setq temp (evil-state-keymaps state))
+ (dolist (entry temp)
+ (setq mode (car entry)
+ map (cdr entry))
+ (unless (or (and (boundp mode) (symbol-value mode))
+ ;; the minor-mode keymaps include modes that are not
+ ;; necessarily active
+ (evil-minor-mode-keymap-p map))
+ (when (fboundp mode)
+ (funcall mode 1))
+ (set mode t))
+ ;; refresh the keymap in case it has changed
+ ;; (e.g., `evil-operator-shortcut-map' is
+ ;; reset on toggling)
+ (if (or (memq mode excluded)
+ (evil-intercept-keymap-p map)
+ (evil-overriding-keymap-p map)
+ (evil-auxiliary-keymap-p map)
+ (evil-minor-mode-keymap-p map))
+ (push mode excluded)
+ (setcdr entry (or (evil-keymap-for-mode mode) map))))
+ ;; update `evil-mode-map-alist'
+ (setq evil-mode-map-alist temp))))
+
+(defun evil-mode-for-keymap (keymap &optional default)
+ "Return the minor mode associated with KEYMAP.
+Returns DEFAULT if no mode is found.
+See also `evil-keymap-for-mode'."
+ (let ((map (if (keymapp keymap) keymap (symbol-value keymap)))
+ (var (when (symbolp keymap) keymap)))
+ ;; Check Evil variables first for speed purposes.
+ ;; If all else fails, check `minor-mode-map-alist'.
+ (or (when var
+ (or (car (rassq var evil-global-keymaps-alist))
+ (car (rassq var evil-local-keymaps-alist))))
+ (car (rassq map (mapcar #'(lambda (e)
+ ;; from (MODE-VAR . MAP-VAR)
+ ;; to (MODE-VAR . MAP)
+ (cons (car-safe e)
+ (symbol-value (cdr-safe e))))
+ (append evil-global-keymaps-alist
+ evil-local-keymaps-alist))))
+ (car (rassq map minor-mode-map-alist))
+ default)))
+
+(defun evil-keymap-for-mode (mode &optional variable)
+ "Return the keymap associated with MODE.
+Return the keymap variable if VARIABLE is non-nil.
+See also `evil-mode-for-keymap'."
+ (let* ((var (or (cdr (assq mode evil-global-keymaps-alist))
+ (cdr (assq mode evil-local-keymaps-alist))))
+ (map (or (symbol-value var)
+ (cdr (assq mode minor-mode-map-alist)))))
+ (if variable var map)))
+
+(defun evil-state-auxiliary-keymaps (state)
+ "Return a keymap alist of auxiliary keymaps for STATE."
+ (let ((state (or state evil-state))
+ aux result)
+ (dolist (map (current-active-maps) result)
+ (when (setq aux (evil-get-auxiliary-keymap map state))
+ (push (cons (evil-mode-for-keymap map t) aux) result)))
+ (nreverse result)))
+
+(defun evil-state-minor-mode-keymaps (state)
+ "Return a keymap alist of minor-mode keymaps for STATE."
+ (let* ((state (or state evil-state))
+ (state-entry (assq state evil-minor-mode-keymaps-alist)))
+ (when state-entry
+ (cdr state-entry))))
+
+(defun evil-state-overriding-keymaps (&optional state)
+ "Return a keymap alist of overriding keymaps for STATE."
+ (let* ((state (or state evil-state))
+ result)
+ (dolist (map (current-active-maps))
+ (when (setq map (evil-overriding-keymap-p map state))
+ (push (cons (evil-mode-for-keymap map t) map) result)))
+ (nreverse result)))
+
+(defun evil-state-intercept-keymaps (&optional state)
+ "Return a keymap alist of intercept keymaps for STATE."
+ (let* ((state (or state evil-state))
+ result)
+ (dolist (map (current-active-maps))
+ (when (setq map (evil-intercept-keymap-p map state))
+ (push (cons (evil-mode-for-keymap map t) map) result)))
+ (setq result (nreverse result))
+ result))
+
+(defun evil-set-auxiliary-keymap (map state &optional aux)
+ "Set the auxiliary keymap for MAP in STATE to AUX.
+If AUX is nil, create a new auxiliary keymap."
+ (unless (keymapp aux)
+ (setq aux (make-sparse-keymap)))
+ (unless (evil-auxiliary-keymap-p aux)
+ (evil-set-keymap-prompt
+ aux (format "Auxiliary keymap for %s"
+ (or (evil-state-property state :name)
+ (format "%s state" state)))))
+ (define-key map
+ (vconcat (list (intern (format "%s-state" state)))) aux)
+ aux)
+(put 'evil-set-auxiliary-keymap 'lisp-indent-function 'defun)
+
+(defun evil-get-auxiliary-keymap (map state &optional create ignore-parent)
+ "Get the auxiliary keymap for MAP in STATE.
+If CREATE is non-nil, create an auxiliary keymap
+if MAP does not have one. If CREATE and
+IGNORE-PARENT are non-nil then a new auxiliary
+keymap is created even if the parent of MAP has
+one already."
+ (when state
+ (let* ((key (vconcat (list (intern (format "%s-state" state)))))
+ (parent-aux (when (and ignore-parent
+ (keymap-parent map)
+ state)
+ (lookup-key (keymap-parent map) key)))
+ (aux (if state (lookup-key map key) map)))
+ (cond
+ ((and ignore-parent
+ (equal parent-aux aux)
+ create)
+ (evil-set-auxiliary-keymap map state))
+ ((evil-auxiliary-keymap-p aux)
+ aux)
+ (create
+ (evil-set-auxiliary-keymap map state))))))
+
+(defun evil-get-minor-mode-keymap (state mode)
+ "Get the auxiliary keymap for MODE in STATE, creating one if it
+does not already exist."
+ (let ((state-entry (assq state evil-minor-mode-keymaps-alist)))
+ (if (and state-entry
+ (assq mode state-entry))
+ (cdr (assq mode state-entry))
+ (let ((map (make-sparse-keymap)))
+ (evil-set-keymap-prompt
+ map (format "Minor-mode keymap for %s in %s"
+ (symbol-name mode)
+ (or (evil-state-property state :name)
+ (format "%s state" state))))
+ (if state-entry
+ (setcdr state-entry
+ (append (list (cons mode map)) (cdr state-entry)))
+ (push (cons state (list (cons mode map)))
+ evil-minor-mode-keymaps-alist))
+ map))))
+
+(defun evil-auxiliary-keymap-p (map)
+ "Whether MAP is an auxiliary keymap."
+ (and (keymapp map)
+ (string-match "Auxiliary keymap"
+ (or (keymap-prompt map) "")) t))
+
+(defun evil-minor-mode-keymap-p (map)
+ "Whether MAP is a minor-mode keymap."
+ (and (keymapp map)
+ (string-match "Minor-mode keymap"
+ (or (keymap-prompt map) "")) t))
+
+(defun evil-intercept-keymap-p (map &optional state)
+ "Whether MAP is an intercept keymap for STATE.
+If STATE is nil, it means any state."
+ (let ((entry (and (keymapp map)
+ (lookup-key map [intercept-state]))))
+ (cond
+ ((null entry)
+ nil)
+ ((null state)
+ map)
+ ((eq entry state)
+ map)
+ ((eq entry 'all)
+ map))))
+
+(defun evil-overriding-keymap-p (map &optional state)
+ "Whether MAP is an overriding keymap for STATE.
+If STATE is nil, it means any state."
+ (let ((entry (and (keymapp map)
+ (lookup-key map [override-state]))))
+ (cond
+ ((null entry)
+ nil)
+ ((keymapp entry)
+ (evil-overriding-keymap-p entry state))
+ ((null state)
+ map)
+ ((eq entry state)
+ map)
+ ((eq entry 'all)
+ map))))
+
+(defun evil-intercept-keymap-state (map)
+ "Return the state for the intercept keymap MAP.
+A return value of t means all states."
+ (let ((state (lookup-key map [intercept-state] map)))
+ (cond
+ ((keymapp state)
+ (evil-intercept-keymap-state state))
+ ((eq state 'all)
+ t)
+ (t
+ state))))
+
+(defun evil-overriding-keymap-state (map)
+ "Return the state for the overriding keymap MAP.
+A return value of t means all states."
+ (let ((state (lookup-key map [override-state] map)))
+ (cond
+ ((keymapp state)
+ (evil-overriding-keymap-state state))
+ ((eq state 'all)
+ t)
+ (t
+ state))))
+
+(defmacro evil-define-key (state keymap key def &rest bindings)
+ "Create a STATE binding from KEY to DEF for KEYMAP.
+STATE is one of normal, insert, visual, replace, operator,
+motion, emacs, or a list of one or more of these. Omitting a
+state by using nil corresponds to a standard Emacs binding using
+`define-key'. The remaining arguments are like those of
+`define-key'. For example:
+
+ (evil-define-key 'normal foo-map \"a\" 'bar)
+
+This creates a binding from \"a\" to bar in Normal state, which
+is active whenever foo-map is active. Using nil for the state,
+the following lead to identical bindings:
+
+ (evil-define-key nil foo-map \"a\" 'bar)
+
+ (define-key foo-map \"a\" 'bar)
+
+It is possible to specify multiple states and/or bindings at
+once:
+
+ (evil-define-key '(normal visual) foo-map
+ \"a\" 'bar
+ \"b\" 'foo)
+
+If foo-map has not been initialized yet, this macro adds an entry
+to `after-load-functions', delaying execution as necessary.
+
+KEYMAP may also be a quoted symbol. If the symbol is global, the
+global evil keymap corresponding to the state(s) is used, meaning
+the following lead to identical bindings:
+
+ (evil-define-key 'normal 'global \"a\" 'bar)
+
+ (evil-global-set-key 'normal \"a\" 'bar)
+
+The symbol local may also be used, which corresponds to using
+`evil-local-set-key'. If a quoted symbol is used that is not
+global or local, it is assumed to be the name of a minor mode, in
+which case `evil-define-minor-mode-key' is used."
+ (declare (indent defun))
+ (cond ((member keymap '('global 'local))
+ `(evil-define-key* ,state ,keymap ,key ,def ,@bindings))
+ ((and (consp keymap) (eq (car keymap) 'quote))
+ `(evil-define-minor-mode-key ,state ,keymap ,key ,def ,@bindings))
+ (t
+ `(evil-delay ',(if (symbolp keymap)
+ `(and (boundp ',keymap) (keymapp ,keymap))
+ `(keymapp ,keymap))
+ '(condition-case-unless-debug err
+ (evil-define-key* ,state ,keymap ,key ,def ,@bindings)
+ (error
+ (message "error in evil-define-key: %s"
+ (error-message-string err))))
+ 'after-load-functions t nil
+ (format "evil-define-key-in-%s"
+ ',(if (symbolp keymap) keymap 'keymap))))))
+(defalias 'evil-declare-key 'evil-define-key)
+
+(defun evil-define-key* (state keymap key def &rest bindings)
+ "Create a STATE binding from KEY to DEF for KEYMAP.
+STATE is one of normal, insert, visual, replace, operator,
+motion, emacs, or a list of one or more of these. Omitting a
+state by using nil corresponds to a standard Emacs binding using
+`define-key' The remaining arguments are like those of
+`define-key'. For example:
+
+ (evil-define-key* 'normal foo-map \"a\" 'bar)
+
+This creates a binding from \"a\" to bar in Normal state, which
+is active whenever foo-map is active. Using nil for the state,
+the following are equivalent:
+
+ (evil-define-key* nil foo-map \"a\" 'bar)
+
+ (define-key foo-map \"a\" 'bar)
+
+ It is possible to specify multiple states and/or bindings at
+ once:
+
+ (evil-define-key* '(normal visual) foo-map
+ \"a\" 'bar
+ \"b\" 'foo)
+
+KEYMAP may also be a quoted symbol. If the symbol is global, the
+global evil keymap corresponding to the state(s) is used, meaning
+the following are equivalent:
+
+ (evil-define-key* 'normal 'global \"a\" 'bar)
+
+ (evil-global-set-key 'normal \"a\" 'bar)
+
+The symbol local may also be used, which corresponds to using
+`evil-local-set-key'.
+
+The use is nearly identical to `evil-define-key' with the
+exception that this is a function and not a macro (and so will
+not be expanded when compiled which can have unintended
+consequences). `evil-define-key*' also does not defer any
+bindings like `evil-define-key' does using `evil-delay'. This
+allows errors in the bindings to be caught immediately, and makes
+its behavior more predictable."
+ (let ((maps
+ (if state
+ (mapcar
+ (lambda (st)
+ (cond ((eq keymap 'global)
+ (evil-state-property st :keymap t))
+ ((eq keymap 'local)
+ (evil-state-property st :local-keymap t))
+ (t
+ (evil-get-auxiliary-keymap keymap st t t))))
+ (if (listp state) state (list state)))
+ (list
+ (cond ((eq keymap 'global)
+ global-map)
+ ((eq keymap 'local)
+ ;; see `local-set-key'
+ (or (current-local-map)
+ (let ((map (make-sparse-keymap)))
+ (use-local-map map)
+ map)))
+ (t
+ keymap))))))
+ (while key
+ (dolist (map maps)
+ (define-key map key def))
+ (setq key (pop bindings)
+ def (pop bindings)))
+ ;; ensure the prompt string comes first
+ (dolist (map maps)
+ (evil-set-keymap-prompt map (keymap-prompt map)))))
+
+(defun evil-define-minor-mode-key (state mode key def &rest bindings)
+ "Similar to `evil-define-key' but the bindings are associated
+with the minor-mode symbol MODE instead of a particular map.
+Associating bindings with a mode symbol instead of a map allows
+evil to use Emacs' built-in mechanisms to enable the bindings
+automatically when MODE is active without relying on calling
+`evil-normalize-keymaps'. Another less significant difference is
+that the bindings can be created immediately, because this
+function only uses the symbol MODE and does not rely on its
+value.
+
+See `evil-define-key' for the usage of STATE, KEY, DEF and
+BINDINGS."
+ (declare (indent defun))
+ (let ((maps (mapcar
+ (lambda (st)
+ (evil-get-minor-mode-keymap st mode))
+ (if (listp state) state (list state)))))
+ (while key
+ (dolist (map maps)
+ (define-key map key def))
+ (setq key (pop bindings)
+ def (pop bindings)))))
+
+(defmacro evil-add-hjkl-bindings (keymap &optional state &rest bindings)
+ "Add \"h\", \"j\", \"k\", \"l\" bindings to KEYMAP in STATE.
+Add additional BINDINGS if specified."
+ (declare (indent defun))
+ `(evil-define-key ,state ,keymap
+ "h" (lookup-key evil-motion-state-map "h")
+ "j" (lookup-key evil-motion-state-map "j")
+ "k" (lookup-key evil-motion-state-map "k")
+ "l" (lookup-key evil-motion-state-map "l")
+ ":" (lookup-key evil-motion-state-map ":")
+ ,@bindings))
+
+;; may be useful for programmatic purposes
+(defun evil-global-set-key (state key def)
+ "Bind KEY to DEF in STATE."
+ (define-key (evil-state-property state :keymap t) key def))
+
+(defun evil-local-set-key (state key def)
+ "Bind KEY to DEF in STATE in the current buffer."
+ (define-key (evil-state-property state :local-keymap t) key def))
+
+;; Advise these functions as they may activate an overriding keymap or
+;; a keymap with state bindings; if so, refresh `evil-mode-map-alist'.
+(defadvice use-global-map (after evil activate)
+ "Refresh Evil keymaps."
+ (evil-normalize-keymaps))
+
+(defadvice use-local-map (after evil activate)
+ "Refresh Evil keymaps."
+ (evil-normalize-keymaps))
+
+(defmacro evil-define-state (state doc &rest body)
+ "Define an Evil state STATE.
+DOC is a general description and shows up in all docstrings;
+the first line of the string should be the full name of the state.
+Then follows one or more optional keywords:
+
+:tag STRING Mode line indicator.
+:message STRING Echo area message when changing to STATE.
+:cursor SPEC Cursor to use in STATE.
+:entry-hook LIST Hooks run when changing to STATE.
+:exit-hook LIST Hooks run when changing from STATE.
+:enable LIST List of other states and modes enabled by STATE.
+:suppress-keymap FLAG If FLAG is non-nil, makes `evil-suppress-map'
+ the parent of the global map of STATE,
+ effectively disabling bindings to
+ `self-insert-command'.
+
+Following the keywords is optional code to be executed each time
+the state is enabled or disabled. For example:
+
+ (evil-define-state test
+ \"Test state.\"
+ :tag \"<T> \"
+ (setq test-var t))
+
+The global keymap of this state will be `evil-test-state-map',
+the local keymap will be `evil-test-state-local-map', and so on.
+
+\(fn STATE DOC [[KEY VAL]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name
+ [&optional stringp]
+ [&rest [keywordp sexp]]
+ def-body)))
+ (let* ((name (and (string-match "^\\(.+\\)\\(\\(?:.\\|\n\\)*\\)" doc)
+ (match-string 1 doc)))
+ (doc (match-string 2 doc))
+ (name (and (string-match "^\\(.+?\\)\\.?$" name)
+ (match-string 1 name)))
+ (doc (if (or (null doc) (string= doc "")) ""
+ (format "\n%s" doc)))
+ (toggle (intern (format "evil-%s-state" state)))
+ (mode (intern (format "%s-minor-mode" toggle)))
+ (keymap (intern (format "%s-map" toggle)))
+ (local (intern (format "%s-local-minor-mode" toggle)))
+ (local-keymap (intern (format "%s-local-map" toggle)))
+ (tag (intern (format "%s-tag" toggle)))
+ (message (intern (format "%s-message" toggle)))
+ (cursor (intern (format "%s-cursor" toggle)))
+ (entry-hook (intern (format "%s-entry-hook" toggle)))
+ (exit-hook (intern (format "%s-exit-hook" toggle)))
+ (modes (intern (format "%s-modes" toggle)))
+ (predicate (intern (format "%s-p" toggle)))
+ arg cursor-value enable entry-hook-value exit-hook-value
+ input-method key message-value suppress-keymap tag-value)
+ ;; collect keywords
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body))
+ (cond
+ ((eq key :tag)
+ (setq tag-value arg))
+ ((eq key :message)
+ (setq message-value arg))
+ ((eq key :cursor)
+ (setq cursor-value arg))
+ ((eq key :entry-hook)
+ (setq entry-hook-value arg)
+ (unless (listp entry-hook-value)
+ (setq entry-hook-value (list entry-hook-value))))
+ ((eq key :exit-hook)
+ (setq exit-hook-value arg)
+ (unless (listp exit-hook-value)
+ (setq exit-hook-value (list entry-hook-value))))
+ ((eq key :enable)
+ (setq enable arg))
+ ((eq key :input-method)
+ (setq input-method arg))
+ ((eq key :suppress-keymap)
+ (setq suppress-keymap arg))))
+
+ ;; macro expansion
+ `(progn
+ ;; Save the state's properties in `evil-state-properties' for
+ ;; runtime lookup. Among other things, this information is used
+ ;; to determine what keymaps should be activated by the state
+ ;; (and, when processing :enable, what keymaps are activated by
+ ;; other states). We cannot know this at compile time because
+ ;; it depends on the current buffer and its active keymaps
+ ;; (to which we may have assigned state bindings), as well as
+ ;; states whose definitions may not have been processed yet.
+ (evil-put-property
+ 'evil-state-properties ',state
+ :name ',name
+ :toggle ',toggle
+ :mode (defvar ,mode nil
+ ,(format "Non-nil if %s is enabled.
+Use the command `%s' to change this variable." name toggle))
+ :keymap (defvar ,keymap (make-sparse-keymap)
+ ,(format "Keymap for %s." name))
+ :local (defvar ,local nil
+ ,(format "Non-nil if %s is enabled.
+Use the command `%s' to change this variable." name toggle))
+ :local-keymap (defvar ,local-keymap nil
+ ,(format "Buffer-local keymap for %s." name))
+ :tag (defvar ,tag ,tag-value
+ ,(format "Mode line tag for %s." name))
+ :message (defvar ,message ,message-value
+ ,(format "Echo area message for %s." name))
+ :cursor (defvar ,cursor ',cursor-value
+ ,(format "Cursor for %s.
+May be a cursor type as per `cursor-type', a color string as passed
+to `set-cursor-color', a zero-argument function for changing the
+cursor, or a list of the above." name))
+ :entry-hook (defvar ,entry-hook nil
+ ,(format "Hooks to run when entering %s." name))
+ :exit-hook (defvar ,exit-hook nil
+ ,(format "Hooks to run when exiting %s." name))
+ :modes (defvar ,modes nil
+ ,(format "Modes that should come up in %s." name))
+ :input-method ',input-method
+ :predicate ',predicate
+ :enable ',enable)
+
+ ,@(when suppress-keymap
+ `((set-keymap-parent ,keymap evil-suppress-map)))
+
+ (dolist (func ',entry-hook-value)
+ (add-hook ',entry-hook func))
+
+ (dolist (func ',exit-hook-value)
+ (add-hook ',exit-hook func))
+
+ (defun ,predicate (&optional state)
+ ,(format "Whether the current state is %s.
+\(That is, whether `evil-state' is `%s'.)" name state)
+ (and evil-local-mode
+ (eq (or state evil-state) ',state)))
+
+ ;; define state function
+ (defun ,toggle (&optional arg)
+ ,(format "Enable %s. Disable with negative ARG.
+If ARG is nil, don't display a message in the echo area.%s" name doc)
+ (interactive)
+ (cond
+ ((and (numberp arg) (< arg 1))
+ (setq evil-previous-state evil-state
+ evil-state nil)
+ (let ((evil-state ',state))
+ (run-hooks ',exit-hook)
+ (setq evil-state nil)
+ (evil-normalize-keymaps)
+ ,@body))
+ (t
+ (unless evil-local-mode
+ (evil-local-mode 1))
+ (let ((evil-next-state ',state)
+ input-method-activate-hook
+ input-method-deactivate-hook)
+ (evil-change-state nil)
+ (setq evil-state ',state)
+ (evil-add-to-alist 'evil-previous-state-alist
+ ',state evil-previous-state)
+ (let ((evil-state ',state))
+ (evil-normalize-keymaps)
+ (if ',input-method
+ (activate-input-method evil-input-method)
+ ;; BUG #475: Deactivate the current input method only
+ ;; if there is a function to deactivate it, otherwise
+ ;; an error would be raised. This strange situation
+ ;; should not arise in general and there should
+ ;; probably be a better way to handle this situation.
+ (if deactivate-current-input-method-function
+ (deactivate-input-method)))
+ (unless evil-no-display
+ (evil-refresh-cursor ',state)
+ (evil-refresh-mode-line ',state)
+ (when (called-interactively-p 'any)
+ (redisplay)))
+ ,@body
+ (run-hooks ',entry-hook)
+ (when (and evil-echo-state
+ arg (not evil-no-display) ,message)
+ (if (functionp ,message)
+ (funcall ,message)
+ (evil-echo "%s" ,message))))))))
+
+ (evil-set-command-property ',toggle :keep-visual t)
+ (evil-set-command-property ',toggle :suppress-operator t)
+
+ (evil-define-keymap ,keymap nil
+ :mode ,mode
+ :func nil)
+
+ (evil-define-keymap ,local-keymap nil
+ :mode ,local
+ :local t
+ :func nil)
+
+ ',state)))
+
+(provide 'evil-core)
+
+;;; evil-core.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-core.elc b/.emacs.d/elpa/evil-20171210.501/evil-core.elc
new file mode 100644
index 0000000..c0cf18d
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-core.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-digraphs.el b/.emacs.d/elpa/evil-20171210.501/evil-digraphs.el
new file mode 100644
index 0000000..2046f74
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-digraphs.el
@@ -0,0 +1,1729 @@
+;;; evil-digraphs.el --- Digraphs
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-vars)
+
+;;; Code:
+
+(defgroup evil-digraphs nil
+ "Digraph support based on RFC 1345."
+ :group 'evil
+ :prefix "evil-digraph-")
+
+(defcustom evil-digraphs-table-user nil
+ "List of user-defined digraphs.
+Entries have the form ((?CHAR1 ?CHAR2) . ?DIGRAPH). That is,
+a cons cell of the digraph and its character replacement,
+where the digraph is a list of two characters.
+See also `evil-digraphs-table'."
+ :type '(alist :key-type (list character character)
+ :value-type character)
+ :require 'evil-digraphs
+ :group 'evil-digraphs)
+
+(defconst evil-digraphs-table
+ '(((?N ?U) . ?\x00)
+ ((?S ?H) . ?\x01)
+ ((?S ?X) . ?\x02)
+ ((?E ?X) . ?\x03)
+ ((?E ?T) . ?\x04)
+ ((?E ?Q) . ?\x05)
+ ((?A ?K) . ?\x06)
+ ((?B ?L) . ?\x07)
+ ((?B ?S) . ?\x08)
+ ((?H ?T) . ?\x09)
+ ((?L ?F) . ?\x0a)
+ ((?V ?T) . ?\x0b)
+ ((?F ?F) . ?\x0c)
+ ((?C ?R) . ?\x0d)
+ ((?S ?O) . ?\x0e)
+ ((?S ?I) . ?\x0f)
+ ((?D ?L) . ?\x10)
+ ((?D ?1) . ?\x11)
+ ((?D ?2) . ?\x12)
+ ((?D ?3) . ?\x13)
+ ((?D ?4) . ?\x14)
+ ((?N ?K) . ?\x15)
+ ((?S ?Y) . ?\x16)
+ ((?E ?B) . ?\x17)
+ ((?C ?N) . ?\x18)
+ ((?E ?M) . ?\x19)
+ ((?S ?B) . ?\x1a)
+ ((?E ?C) . ?\x1b)
+ ((?F ?S) . ?\x1c)
+ ((?G ?S) . ?\x1d)
+ ((?R ?S) . ?\x1e)
+ ((?U ?S) . ?\x1f)
+ ((?S ?P) . ?\x20)
+ ((?N ?b) . ?\x23)
+ ((?D ?O) . ?\x24)
+ ((?A ?t) . ?\x40)
+ ((?< ?\() . ?\x5b)
+ ((?/ ?/) . ?\x5c)
+ ((?\) ?>) . ?\x5d)
+ ((?' ?>) . ?\x5e)
+ ((?' ?!) . ?\x60)
+ ((?\( ?!) . ?\x7b)
+ ((?! ?!) . ?\x7c)
+ ((?! ?\)) . ?\x7d)
+ ((?' ??) . ?\x7e)
+ ((?D ?T) . ?\x7f)
+ ((?P ?A) . ?\x80)
+ ((?H ?O) . ?\x81)
+ ((?B ?H) . ?\x82)
+ ((?N ?H) . ?\x83)
+ ((?I ?N) . ?\x84)
+ ((?N ?L) . ?\x85)
+ ((?S ?A) . ?\x86)
+ ((?E ?S) . ?\x87)
+ ((?H ?S) . ?\x88)
+ ((?H ?J) . ?\x89)
+ ((?V ?S) . ?\x8a)
+ ((?P ?D) . ?\x8b)
+ ((?P ?U) . ?\x8c)
+ ((?R ?I) . ?\x8d)
+ ((?S ?2) . ?\x8e)
+ ((?S ?3) . ?\x8f)
+ ((?D ?C) . ?\x90)
+ ((?P ?1) . ?\x91)
+ ((?P ?2) . ?\x92)
+ ((?T ?S) . ?\x93)
+ ((?C ?C) . ?\x94)
+ ((?M ?W) . ?\x95)
+ ((?S ?G) . ?\x96)
+ ((?E ?G) . ?\x97)
+ ((?S ?S) . ?\x98)
+ ((?G ?C) . ?\x99)
+ ((?S ?C) . ?\x9a)
+ ((?C ?I) . ?\x9b)
+ ((?S ?T) . ?\x9c)
+ ((?O ?C) . ?\x9d)
+ ((?P ?M) . ?\x9e)
+ ((?A ?C) . ?\x9f)
+ ((?N ?S) . ?\xa0)
+ ((?! ?I) . ?\xa1)
+ ((?C ?t) . ?\xa2)
+ ((?P ?d) . ?\xa3)
+ ((?C ?u) . ?\xa4)
+ ((?Y ?e) . ?\xa5)
+ ((?B ?B) . ?\xa6)
+ ((?S ?E) . ?\xa7)
+ ((?' ?:) . ?\xa8)
+ ((?C ?o) . ?\xa9)
+ ((?- ?a) . ?\xaa)
+ ((?< ?<) . ?\xab)
+ ((?N ?O) . ?\xac)
+ ((?- ?-) . ?\xad)
+ ((?R ?g) . ?\xae)
+ ((?' ?m) . ?\xaf)
+ ((?D ?G) . ?\xb0)
+ ((?+ ?-) . ?\xb1)
+ ((?2 ?S) . ?\xb2)
+ ((?3 ?S) . ?\xb3)
+ ((?' ?') . ?\xb4)
+ ((?M ?y) . ?\xb5)
+ ((?P ?I) . ?\xb6)
+ ((?. ?M) . ?\xb7)
+ ((?' ?,) . ?\xb8)
+ ((?1 ?S) . ?\xb9)
+ ((?- ?o) . ?\xba)
+ ((?> ?>) . ?\xbb)
+ ((?1 ?4) . ?\xbc)
+ ((?1 ?2) . ?\xbd)
+ ((?3 ?4) . ?\xbe)
+ ((?? ?I) . ?\xbf)
+ ((?A ?!) . ?\xc0)
+ ((?A ?') . ?\xc1)
+ ((?A ?>) . ?\xc2)
+ ((?A ??) . ?\xc3)
+ ((?A ?:) . ?\xc4)
+ ((?A ?A) . ?\xc5)
+ ((?A ?E) . ?\xc6)
+ ((?C ?,) . ?\xc7)
+ ((?E ?!) . ?\xc8)
+ ((?E ?') . ?\xc9)
+ ((?E ?>) . ?\xca)
+ ((?E ?:) . ?\xcb)
+ ((?I ?!) . ?\xcc)
+ ((?I ?') . ?\xcd)
+ ((?I ?>) . ?\xce)
+ ((?I ?:) . ?\xcf)
+ ((?D ?-) . ?\xd0)
+ ((?N ??) . ?\xd1)
+ ((?O ?!) . ?\xd2)
+ ((?O ?') . ?\xd3)
+ ((?O ?>) . ?\xd4)
+ ((?O ??) . ?\xd5)
+ ((?O ?:) . ?\xd6)
+ ((?* ?X) . ?\xd7)
+ ((?O ?/) . ?\xd8)
+ ((?U ?!) . ?\xd9)
+ ((?U ?') . ?\xda)
+ ((?U ?>) . ?\xdb)
+ ((?U ?:) . ?\xdc)
+ ((?Y ?') . ?\xdd)
+ ((?T ?H) . ?\xde)
+ ((?s ?s) . ?\xdf)
+ ((?a ?!) . ?\xe0)
+ ((?a ?') . ?\xe1)
+ ((?a ?>) . ?\xe2)
+ ((?a ??) . ?\xe3)
+ ((?a ?:) . ?\xe4)
+ ((?a ?a) . ?\xe5)
+ ((?a ?e) . ?\xe6)
+ ((?c ?,) . ?\xe7)
+ ((?e ?!) . ?\xe8)
+ ((?e ?') . ?\xe9)
+ ((?e ?>) . ?\xea)
+ ((?e ?:) . ?\xeb)
+ ((?i ?!) . ?\xec)
+ ((?i ?') . ?\xed)
+ ((?i ?>) . ?\xee)
+ ((?i ?:) . ?\xef)
+ ((?d ?-) . ?\xf0)
+ ((?n ??) . ?\xf1)
+ ((?o ?!) . ?\xf2)
+ ((?o ?') . ?\xf3)
+ ((?o ?>) . ?\xf4)
+ ((?o ??) . ?\xf5)
+ ((?o ?:) . ?\xf6)
+ ((?- ?:) . ?\xf7)
+ ((?o ?/) . ?\xf8)
+ ((?u ?!) . ?\xf9)
+ ((?u ?') . ?\xfa)
+ ((?u ?>) . ?\xfb)
+ ((?u ?:) . ?\xfc)
+ ((?y ?') . ?\xfd)
+ ((?t ?h) . ?\xfe)
+ ((?y ?:) . ?\xff)
+ ((?A ?-) . ?\x0100)
+ ((?a ?-) . ?\x0101)
+ ((?A ?\() . ?\x0102)
+ ((?a ?\() . ?\x0103)
+ ((?A ?\;) . ?\x0104)
+ ((?a ?\;) . ?\x0105)
+ ((?C ?') . ?\x0106)
+ ((?c ?') . ?\x0107)
+ ((?C ?>) . ?\x0108)
+ ((?c ?>) . ?\x0109)
+ ((?C ?.) . ?\x010a)
+ ((?c ?.) . ?\x010b)
+ ((?C ?<) . ?\x010c)
+ ((?c ?<) . ?\x010d)
+ ((?D ?<) . ?\x010e)
+ ((?d ?<) . ?\x010f)
+ ((?D ?/) . ?\x0110)
+ ((?d ?/) . ?\x0111)
+ ((?E ?-) . ?\x0112)
+ ((?e ?-) . ?\x0113)
+ ((?E ?\() . ?\x0114)
+ ((?e ?\() . ?\x0115)
+ ((?E ?.) . ?\x0116)
+ ((?e ?.) . ?\x0117)
+ ((?E ?\;) . ?\x0118)
+ ((?e ?\;) . ?\x0119)
+ ((?E ?<) . ?\x011a)
+ ((?e ?<) . ?\x011b)
+ ((?G ?>) . ?\x011c)
+ ((?g ?>) . ?\x011d)
+ ((?G ?\() . ?\x011e)
+ ((?g ?\() . ?\x011f)
+ ((?G ?.) . ?\x0120)
+ ((?g ?.) . ?\x0121)
+ ((?G ?,) . ?\x0122)
+ ((?g ?,) . ?\x0123)
+ ((?H ?>) . ?\x0124)
+ ((?h ?>) . ?\x0125)
+ ((?H ?/) . ?\x0126)
+ ((?h ?/) . ?\x0127)
+ ((?I ??) . ?\x0128)
+ ((?i ??) . ?\x0129)
+ ((?I ?-) . ?\x012a)
+ ((?i ?-) . ?\x012b)
+ ((?I ?\() . ?\x012c)
+ ((?i ?\() . ?\x012d)
+ ((?I ?\;) . ?\x012e)
+ ((?i ?\;) . ?\x012f)
+ ((?I ?.) . ?\x0130)
+ ((?i ?.) . ?\x0131)
+ ((?I ?J) . ?\x0132)
+ ((?i ?j) . ?\x0133)
+ ((?J ?>) . ?\x0134)
+ ((?j ?>) . ?\x0135)
+ ((?K ?,) . ?\x0136)
+ ((?k ?,) . ?\x0137)
+ ((?k ?k) . ?\x0138)
+ ((?L ?') . ?\x0139)
+ ((?l ?') . ?\x013a)
+ ((?L ?,) . ?\x013b)
+ ((?l ?,) . ?\x013c)
+ ((?L ?<) . ?\x013d)
+ ((?l ?<) . ?\x013e)
+ ((?L ?.) . ?\x013f)
+ ((?l ?.) . ?\x0140)
+ ((?L ?/) . ?\x0141)
+ ((?l ?/) . ?\x0142)
+ ((?N ?') . ?\x0143)
+ ((?n ?') . ?\x0144)
+ ((?N ?,) . ?\x0145)
+ ((?n ?,) . ?\x0146)
+ ((?N ?<) . ?\x0147)
+ ((?n ?<) . ?\x0148)
+ ((?' ?n) . ?\x0149)
+ ((?N ?G) . ?\x014a)
+ ((?n ?g) . ?\x014b)
+ ((?O ?-) . ?\x014c)
+ ((?o ?-) . ?\x014d)
+ ((?O ?\() . ?\x014e)
+ ((?o ?\() . ?\x014f)
+ ((?O ?\") . ?\x0150)
+ ((?o ?\") . ?\x0151)
+ ((?O ?E) . ?\x0152)
+ ((?o ?e) . ?\x0153)
+ ((?R ?') . ?\x0154)
+ ((?r ?') . ?\x0155)
+ ((?R ?,) . ?\x0156)
+ ((?r ?,) . ?\x0157)
+ ((?R ?<) . ?\x0158)
+ ((?r ?<) . ?\x0159)
+ ((?S ?') . ?\x015a)
+ ((?s ?') . ?\x015b)
+ ((?S ?>) . ?\x015c)
+ ((?s ?>) . ?\x015d)
+ ((?S ?,) . ?\x015e)
+ ((?s ?,) . ?\x015f)
+ ((?S ?<) . ?\x0160)
+ ((?s ?<) . ?\x0161)
+ ((?T ?,) . ?\x0162)
+ ((?t ?,) . ?\x0163)
+ ((?T ?<) . ?\x0164)
+ ((?t ?<) . ?\x0165)
+ ((?T ?/) . ?\x0166)
+ ((?t ?/) . ?\x0167)
+ ((?U ??) . ?\x0168)
+ ((?u ??) . ?\x0169)
+ ((?U ?-) . ?\x016a)
+ ((?u ?-) . ?\x016b)
+ ((?U ?\() . ?\x016c)
+ ((?u ?\() . ?\x016d)
+ ((?U ?0) . ?\x016e)
+ ((?u ?0) . ?\x016f)
+ ((?U ?\") . ?\x0170)
+ ((?u ?\") . ?\x0171)
+ ((?U ?\;) . ?\x0172)
+ ((?u ?\;) . ?\x0173)
+ ((?W ?>) . ?\x0174)
+ ((?w ?>) . ?\x0175)
+ ((?Y ?>) . ?\x0176)
+ ((?y ?>) . ?\x0177)
+ ((?Y ?:) . ?\x0178)
+ ((?Z ?') . ?\x0179)
+ ((?z ?') . ?\x017a)
+ ((?Z ?.) . ?\x017b)
+ ((?z ?.) . ?\x017c)
+ ((?Z ?<) . ?\x017d)
+ ((?z ?<) . ?\x017e)
+ ((?O ?9) . ?\x01a0)
+ ((?o ?9) . ?\x01a1)
+ ((?O ?I) . ?\x01a2)
+ ((?o ?i) . ?\x01a3)
+ ((?y ?r) . ?\x01a6)
+ ((?U ?9) . ?\x01af)
+ ((?u ?9) . ?\x01b0)
+ ((?Z ?/) . ?\x01b5)
+ ((?z ?/) . ?\x01b6)
+ ((?E ?D) . ?\x01b7)
+ ((?A ?<) . ?\x01cd)
+ ((?a ?<) . ?\x01ce)
+ ((?I ?<) . ?\x01cf)
+ ((?i ?<) . ?\x01d0)
+ ((?O ?<) . ?\x01d1)
+ ((?o ?<) . ?\x01d2)
+ ((?U ?<) . ?\x01d3)
+ ((?u ?<) . ?\x01d4)
+ ((?A ?1) . ?\x01de)
+ ((?a ?1) . ?\x01df)
+ ((?A ?7) . ?\x01e0)
+ ((?a ?7) . ?\x01e1)
+ ((?A ?3) . ?\x01e2)
+ ((?a ?3) . ?\x01e3)
+ ((?G ?/) . ?\x01e4)
+ ((?g ?/) . ?\x01e5)
+ ((?G ?<) . ?\x01e6)
+ ((?g ?<) . ?\x01e7)
+ ((?K ?<) . ?\x01e8)
+ ((?k ?<) . ?\x01e9)
+ ((?O ?\;) . ?\x01ea)
+ ((?o ?\;) . ?\x01eb)
+ ((?O ?1) . ?\x01ec)
+ ((?o ?1) . ?\x01ed)
+ ((?E ?Z) . ?\x01ee)
+ ((?e ?z) . ?\x01ef)
+ ((?j ?<) . ?\x01f0)
+ ((?G ?') . ?\x01f4)
+ ((?g ?') . ?\x01f5)
+ ((?\; ?S) . ?\x02bf)
+ ((?' ?<) . ?\x02c7)
+ ((?' ?\() . ?\x02d8)
+ ((?' ?.) . ?\x02d9)
+ ((?' ?0) . ?\x02da)
+ ((?' ?\;) . ?\x02db)
+ ((?' ?\") . ?\x02dd)
+ ((?A ?%) . ?\x0386)
+ ((?E ?%) . ?\x0388)
+ ((?Y ?%) . ?\x0389)
+ ((?I ?%) . ?\x038a)
+ ((?O ?%) . ?\x038c)
+ ((?U ?%) . ?\x038e)
+ ((?W ?%) . ?\x038f)
+ ((?i ?3) . ?\x0390)
+ ((?A ?*) . ?\x0391)
+ ((?B ?*) . ?\x0392)
+ ((?G ?*) . ?\x0393)
+ ((?D ?*) . ?\x0394)
+ ((?E ?*) . ?\x0395)
+ ((?Z ?*) . ?\x0396)
+ ((?Y ?*) . ?\x0397)
+ ((?H ?*) . ?\x0398)
+ ((?I ?*) . ?\x0399)
+ ((?K ?*) . ?\x039a)
+ ((?L ?*) . ?\x039b)
+ ((?M ?*) . ?\x039c)
+ ((?N ?*) . ?\x039d)
+ ((?C ?*) . ?\x039e)
+ ((?O ?*) . ?\x039f)
+ ((?P ?*) . ?\x03a0)
+ ((?R ?*) . ?\x03a1)
+ ((?S ?*) . ?\x03a3)
+ ((?T ?*) . ?\x03a4)
+ ((?U ?*) . ?\x03a5)
+ ((?F ?*) . ?\x03a6)
+ ((?X ?*) . ?\x03a7)
+ ((?Q ?*) . ?\x03a8)
+ ((?W ?*) . ?\x03a9)
+ ((?J ?*) . ?\x03aa)
+ ((?V ?*) . ?\x03ab)
+ ((?a ?%) . ?\x03ac)
+ ((?e ?%) . ?\x03ad)
+ ((?y ?%) . ?\x03ae)
+ ((?i ?%) . ?\x03af)
+ ((?u ?3) . ?\x03b0)
+ ((?a ?*) . ?\x03b1)
+ ((?b ?*) . ?\x03b2)
+ ((?g ?*) . ?\x03b3)
+ ((?d ?*) . ?\x03b4)
+ ((?e ?*) . ?\x03b5)
+ ((?z ?*) . ?\x03b6)
+ ((?y ?*) . ?\x03b7)
+ ((?h ?*) . ?\x03b8)
+ ((?i ?*) . ?\x03b9)
+ ((?k ?*) . ?\x03ba)
+ ((?l ?*) . ?\x03bb)
+ ((?m ?*) . ?\x03bc)
+ ((?n ?*) . ?\x03bd)
+ ((?c ?*) . ?\x03be)
+ ((?o ?*) . ?\x03bf)
+ ((?p ?*) . ?\x03c0)
+ ((?r ?*) . ?\x03c1)
+ ((?* ?s) . ?\x03c2)
+ ((?s ?*) . ?\x03c3)
+ ((?t ?*) . ?\x03c4)
+ ((?u ?*) . ?\x03c5)
+ ((?f ?*) . ?\x03c6)
+ ((?x ?*) . ?\x03c7)
+ ((?q ?*) . ?\x03c8)
+ ((?w ?*) . ?\x03c9)
+ ((?j ?*) . ?\x03ca)
+ ((?v ?*) . ?\x03cb)
+ ((?o ?%) . ?\x03cc)
+ ((?u ?%) . ?\x03cd)
+ ((?w ?%) . ?\x03ce)
+ ((?' ?G) . ?\x03d8)
+ ((?, ?G) . ?\x03d9)
+ ((?T ?3) . ?\x03da)
+ ((?t ?3) . ?\x03db)
+ ((?M ?3) . ?\x03dc)
+ ((?m ?3) . ?\x03dd)
+ ((?K ?3) . ?\x03de)
+ ((?k ?3) . ?\x03df)
+ ((?P ?3) . ?\x03e0)
+ ((?p ?3) . ?\x03e1)
+ ((?' ?%) . ?\x03f4)
+ ((?j ?3) . ?\x03f5)
+ ((?I ?O) . ?\x0401)
+ ((?D ?%) . ?\x0402)
+ ((?G ?%) . ?\x0403)
+ ((?I ?E) . ?\x0404)
+ ((?D ?S) . ?\x0405)
+ ((?I ?I) . ?\x0406)
+ ((?Y ?I) . ?\x0407)
+ ((?J ?%) . ?\x0408)
+ ((?L ?J) . ?\x0409)
+ ((?N ?J) . ?\x040a)
+ ((?T ?s) . ?\x040b)
+ ((?K ?J) . ?\x040c)
+ ((?V ?%) . ?\x040e)
+ ((?D ?Z) . ?\x040f)
+ ((?A ?=) . ?\x0410)
+ ((?B ?=) . ?\x0411)
+ ((?V ?=) . ?\x0412)
+ ((?G ?=) . ?\x0413)
+ ((?D ?=) . ?\x0414)
+ ((?E ?=) . ?\x0415)
+ ((?Z ?%) . ?\x0416)
+ ((?Z ?=) . ?\x0417)
+ ((?I ?=) . ?\x0418)
+ ((?J ?=) . ?\x0419)
+ ((?K ?=) . ?\x041a)
+ ((?L ?=) . ?\x041b)
+ ((?M ?=) . ?\x041c)
+ ((?N ?=) . ?\x041d)
+ ((?O ?=) . ?\x041e)
+ ((?P ?=) . ?\x041f)
+ ((?R ?=) . ?\x0420)
+ ((?S ?=) . ?\x0421)
+ ((?T ?=) . ?\x0422)
+ ((?U ?=) . ?\x0423)
+ ((?F ?=) . ?\x0424)
+ ((?H ?=) . ?\x0425)
+ ((?C ?=) . ?\x0426)
+ ((?C ?%) . ?\x0427)
+ ((?S ?%) . ?\x0428)
+ ((?S ?c) . ?\x0429)
+ ((?= ?\") . ?\x042a)
+ ((?Y ?=) . ?\x042b)
+ ((?% ?\") . ?\x042c)
+ ((?J ?E) . ?\x042d)
+ ((?J ?U) . ?\x042e)
+ ((?J ?A) . ?\x042f)
+ ((?a ?=) . ?\x0430)
+ ((?b ?=) . ?\x0431)
+ ((?v ?=) . ?\x0432)
+ ((?g ?=) . ?\x0433)
+ ((?d ?=) . ?\x0434)
+ ((?e ?=) . ?\x0435)
+ ((?z ?%) . ?\x0436)
+ ((?z ?=) . ?\x0437)
+ ((?i ?=) . ?\x0438)
+ ((?j ?=) . ?\x0439)
+ ((?k ?=) . ?\x043a)
+ ((?l ?=) . ?\x043b)
+ ((?m ?=) . ?\x043c)
+ ((?n ?=) . ?\x043d)
+ ((?o ?=) . ?\x043e)
+ ((?p ?=) . ?\x043f)
+ ((?r ?=) . ?\x0440)
+ ((?s ?=) . ?\x0441)
+ ((?t ?=) . ?\x0442)
+ ((?u ?=) . ?\x0443)
+ ((?f ?=) . ?\x0444)
+ ((?h ?=) . ?\x0445)
+ ((?c ?=) . ?\x0446)
+ ((?c ?%) . ?\x0447)
+ ((?s ?%) . ?\x0448)
+ ((?s ?c) . ?\x0449)
+ ((?= ?') . ?\x044a)
+ ((?y ?=) . ?\x044b)
+ ((?% ?') . ?\x044c)
+ ((?j ?e) . ?\x044d)
+ ((?j ?u) . ?\x044e)
+ ((?j ?a) . ?\x044f)
+ ((?i ?o) . ?\x0451)
+ ((?d ?%) . ?\x0452)
+ ((?g ?%) . ?\x0453)
+ ((?i ?e) . ?\x0454)
+ ((?d ?s) . ?\x0455)
+ ((?i ?i) . ?\x0456)
+ ((?y ?i) . ?\x0457)
+ ((?j ?%) . ?\x0458)
+ ((?l ?j) . ?\x0459)
+ ((?n ?j) . ?\x045a)
+ ((?t ?s) . ?\x045b)
+ ((?k ?j) . ?\x045c)
+ ((?v ?%) . ?\x045e)
+ ((?d ?z) . ?\x045f)
+ ((?Y ?3) . ?\x0462)
+ ((?y ?3) . ?\x0463)
+ ((?O ?3) . ?\x046a)
+ ((?o ?3) . ?\x046b)
+ ((?F ?3) . ?\x0472)
+ ((?f ?3) . ?\x0473)
+ ((?V ?3) . ?\x0474)
+ ((?v ?3) . ?\x0475)
+ ((?C ?3) . ?\x0480)
+ ((?c ?3) . ?\x0481)
+ ((?G ?3) . ?\x0490)
+ ((?g ?3) . ?\x0491)
+ ((?A ?+) . ?\x05d0)
+ ((?B ?+) . ?\x05d1)
+ ((?G ?+) . ?\x05d2)
+ ((?D ?+) . ?\x05d3)
+ ((?H ?+) . ?\x05d4)
+ ((?W ?+) . ?\x05d5)
+ ((?Z ?+) . ?\x05d6)
+ ((?X ?+) . ?\x05d7)
+ ((?T ?j) . ?\x05d8)
+ ((?J ?+) . ?\x05d9)
+ ((?K ?%) . ?\x05da)
+ ((?K ?+) . ?\x05db)
+ ((?L ?+) . ?\x05dc)
+ ((?M ?%) . ?\x05dd)
+ ((?M ?+) . ?\x05de)
+ ((?N ?%) . ?\x05df)
+ ((?N ?+) . ?\x05e0)
+ ((?S ?+) . ?\x05e1)
+ ((?E ?+) . ?\x05e2)
+ ((?P ?%) . ?\x05e3)
+ ((?P ?+) . ?\x05e4)
+ ((?Z ?j) . ?\x05e5)
+ ((?Z ?J) . ?\x05e6)
+ ((?Q ?+) . ?\x05e7)
+ ((?R ?+) . ?\x05e8)
+ ((?S ?h) . ?\x05e9)
+ ((?T ?+) . ?\x05ea)
+ ((?, ?+) . ?\x060c)
+ ((?\; ?+) . ?\x061b)
+ ((?? ?+) . ?\x061f)
+ ((?H ?') . ?\x0621)
+ ((?a ?M) . ?\x0622)
+ ((?a ?H) . ?\x0623)
+ ((?w ?H) . ?\x0624)
+ ((?a ?h) . ?\x0625)
+ ((?y ?H) . ?\x0626)
+ ((?a ?+) . ?\x0627)
+ ((?b ?+) . ?\x0628)
+ ((?t ?m) . ?\x0629)
+ ((?t ?+) . ?\x062a)
+ ((?t ?k) . ?\x062b)
+ ((?g ?+) . ?\x062c)
+ ((?h ?k) . ?\x062d)
+ ((?x ?+) . ?\x062e)
+ ((?d ?+) . ?\x062f)
+ ((?d ?k) . ?\x0630)
+ ((?r ?+) . ?\x0631)
+ ((?z ?+) . ?\x0632)
+ ((?s ?+) . ?\x0633)
+ ((?s ?n) . ?\x0634)
+ ((?c ?+) . ?\x0635)
+ ((?d ?d) . ?\x0636)
+ ((?t ?j) . ?\x0637)
+ ((?z ?H) . ?\x0638)
+ ((?e ?+) . ?\x0639)
+ ((?i ?+) . ?\x063a)
+ ((?+ ?+) . ?\x0640)
+ ((?f ?+) . ?\x0641)
+ ((?q ?+) . ?\x0642)
+ ((?k ?+) . ?\x0643)
+ ((?l ?+) . ?\x0644)
+ ((?m ?+) . ?\x0645)
+ ((?n ?+) . ?\x0646)
+ ((?h ?+) . ?\x0647)
+ ((?w ?+) . ?\x0648)
+ ((?j ?+) . ?\x0649)
+ ((?y ?+) . ?\x064a)
+ ((?: ?+) . ?\x064b)
+ ((?\" ?+) . ?\x064c)
+ ((?= ?+) . ?\x064d)
+ ((?/ ?+) . ?\x064e)
+ ((?' ?+) . ?\x064f)
+ ((?1 ?+) . ?\x0650)
+ ((?3 ?+) . ?\x0651)
+ ((?0 ?+) . ?\x0652)
+ ((?a ?S) . ?\x0670)
+ ((?p ?+) . ?\x067e)
+ ((?v ?+) . ?\x06a4)
+ ((?g ?f) . ?\x06af)
+ ((?0 ?a) . ?\x06f0)
+ ((?1 ?a) . ?\x06f1)
+ ((?2 ?a) . ?\x06f2)
+ ((?3 ?a) . ?\x06f3)
+ ((?4 ?a) . ?\x06f4)
+ ((?5 ?a) . ?\x06f5)
+ ((?6 ?a) . ?\x06f6)
+ ((?7 ?a) . ?\x06f7)
+ ((?8 ?a) . ?\x06f8)
+ ((?9 ?a) . ?\x06f9)
+ ((?B ?.) . ?\x1e02)
+ ((?b ?.) . ?\x1e03)
+ ((?B ?_) . ?\x1e06)
+ ((?b ?_) . ?\x1e07)
+ ((?D ?.) . ?\x1e0a)
+ ((?d ?.) . ?\x1e0b)
+ ((?D ?_) . ?\x1e0e)
+ ((?d ?_) . ?\x1e0f)
+ ((?D ?,) . ?\x1e10)
+ ((?d ?,) . ?\x1e11)
+ ((?F ?.) . ?\x1e1e)
+ ((?f ?.) . ?\x1e1f)
+ ((?G ?-) . ?\x1e20)
+ ((?g ?-) . ?\x1e21)
+ ((?H ?.) . ?\x1e22)
+ ((?h ?.) . ?\x1e23)
+ ((?H ?:) . ?\x1e26)
+ ((?h ?:) . ?\x1e27)
+ ((?H ?,) . ?\x1e28)
+ ((?h ?,) . ?\x1e29)
+ ((?K ?') . ?\x1e30)
+ ((?k ?') . ?\x1e31)
+ ((?K ?_) . ?\x1e34)
+ ((?k ?_) . ?\x1e35)
+ ((?L ?_) . ?\x1e3a)
+ ((?l ?_) . ?\x1e3b)
+ ((?M ?') . ?\x1e3e)
+ ((?m ?') . ?\x1e3f)
+ ((?M ?.) . ?\x1e40)
+ ((?m ?.) . ?\x1e41)
+ ((?N ?.) . ?\x1e44)
+ ((?n ?.) . ?\x1e45)
+ ((?N ?_) . ?\x1e48)
+ ((?n ?_) . ?\x1e49)
+ ((?P ?') . ?\x1e54)
+ ((?p ?') . ?\x1e55)
+ ((?P ?.) . ?\x1e56)
+ ((?p ?.) . ?\x1e57)
+ ((?R ?.) . ?\x1e58)
+ ((?r ?.) . ?\x1e59)
+ ((?R ?_) . ?\x1e5e)
+ ((?r ?_) . ?\x1e5f)
+ ((?S ?.) . ?\x1e60)
+ ((?s ?.) . ?\x1e61)
+ ((?T ?.) . ?\x1e6a)
+ ((?t ?.) . ?\x1e6b)
+ ((?T ?_) . ?\x1e6e)
+ ((?t ?_) . ?\x1e6f)
+ ((?V ??) . ?\x1e7c)
+ ((?v ??) . ?\x1e7d)
+ ((?W ?!) . ?\x1e80)
+ ((?w ?!) . ?\x1e81)
+ ((?W ?') . ?\x1e82)
+ ((?w ?') . ?\x1e83)
+ ((?W ?:) . ?\x1e84)
+ ((?w ?:) . ?\x1e85)
+ ((?W ?.) . ?\x1e86)
+ ((?w ?.) . ?\x1e87)
+ ((?X ?.) . ?\x1e8a)
+ ((?x ?.) . ?\x1e8b)
+ ((?X ?:) . ?\x1e8c)
+ ((?x ?:) . ?\x1e8d)
+ ((?Y ?.) . ?\x1e8e)
+ ((?y ?.) . ?\x1e8f)
+ ((?Z ?>) . ?\x1e90)
+ ((?z ?>) . ?\x1e91)
+ ((?Z ?_) . ?\x1e94)
+ ((?z ?_) . ?\x1e95)
+ ((?h ?_) . ?\x1e96)
+ ((?t ?:) . ?\x1e97)
+ ((?w ?0) . ?\x1e98)
+ ((?y ?0) . ?\x1e99)
+ ((?A ?2) . ?\x1ea2)
+ ((?a ?2) . ?\x1ea3)
+ ((?E ?2) . ?\x1eba)
+ ((?e ?2) . ?\x1ebb)
+ ((?E ??) . ?\x1ebc)
+ ((?e ??) . ?\x1ebd)
+ ((?I ?2) . ?\x1ec8)
+ ((?i ?2) . ?\x1ec9)
+ ((?O ?2) . ?\x1ece)
+ ((?o ?2) . ?\x1ecf)
+ ((?U ?2) . ?\x1ee6)
+ ((?u ?2) . ?\x1ee7)
+ ((?Y ?!) . ?\x1ef2)
+ ((?y ?!) . ?\x1ef3)
+ ((?Y ?2) . ?\x1ef6)
+ ((?y ?2) . ?\x1ef7)
+ ((?Y ??) . ?\x1ef8)
+ ((?y ??) . ?\x1ef9)
+ ((?\; ?') . ?\x1f00)
+ ((?, ?') . ?\x1f01)
+ ((?\; ?!) . ?\x1f02)
+ ((?, ?!) . ?\x1f03)
+ ((?? ?\;) . ?\x1f04)
+ ((?? ?,) . ?\x1f05)
+ ((?! ?:) . ?\x1f06)
+ ((?? ?:) . ?\x1f07)
+ ((?1 ?N) . ?\x2002)
+ ((?1 ?M) . ?\x2003)
+ ((?3 ?M) . ?\x2004)
+ ((?4 ?M) . ?\x2005)
+ ((?6 ?M) . ?\x2006)
+ ((?1 ?T) . ?\x2009)
+ ((?1 ?H) . ?\x200a)
+ ((?- ?1) . ?\x2010)
+ ((?- ?N) . ?\x2013)
+ ((?- ?M) . ?\x2014)
+ ((?- ?3) . ?\x2015)
+ ((?! ?2) . ?\x2016)
+ ((?= ?2) . ?\x2017)
+ ((?' ?6) . ?\x2018)
+ ((?' ?9) . ?\x2019)
+ ((?. ?9) . ?\x201a)
+ ((?9 ?') . ?\x201b)
+ ((?\" ?6) . ?\x201c)
+ ((?\" ?9) . ?\x201d)
+ ((?: ?9) . ?\x201e)
+ ((?9 ?\") . ?\x201f)
+ ((?/ ?-) . ?\x2020)
+ ((?/ ?=) . ?\x2021)
+ ((?. ?.) . ?\x2025)
+ ((?% ?0) . ?\x2030)
+ ((?1 ?') . ?\x2032)
+ ((?2 ?') . ?\x2033)
+ ((?3 ?') . ?\x2034)
+ ((?1 ?\") . ?\x2035)
+ ((?2 ?\") . ?\x2036)
+ ((?3 ?\") . ?\x2037)
+ ((?C ?a) . ?\x2038)
+ ((?< ?1) . ?\x2039)
+ ((?> ?1) . ?\x203a)
+ ((?: ?X) . ?\x203b)
+ ((?' ?-) . ?\x203e)
+ ((?/ ?f) . ?\x2044)
+ ((?0 ?S) . ?\x2070)
+ ((?4 ?S) . ?\x2074)
+ ((?5 ?S) . ?\x2075)
+ ((?6 ?S) . ?\x2076)
+ ((?7 ?S) . ?\x2077)
+ ((?8 ?S) . ?\x2078)
+ ((?9 ?S) . ?\x2079)
+ ((?+ ?S) . ?\x207a)
+ ((?- ?S) . ?\x207b)
+ ((?= ?S) . ?\x207c)
+ ((?\( ?S) . ?\x207d)
+ ((?\) ?S) . ?\x207e)
+ ((?n ?S) . ?\x207f)
+ ((?0 ?s) . ?\x2080)
+ ((?1 ?s) . ?\x2081)
+ ((?2 ?s) . ?\x2082)
+ ((?3 ?s) . ?\x2083)
+ ((?4 ?s) . ?\x2084)
+ ((?5 ?s) . ?\x2085)
+ ((?6 ?s) . ?\x2086)
+ ((?7 ?s) . ?\x2087)
+ ((?8 ?s) . ?\x2088)
+ ((?9 ?s) . ?\x2089)
+ ((?+ ?s) . ?\x208a)
+ ((?- ?s) . ?\x208b)
+ ((?= ?s) . ?\x208c)
+ ((?\( ?s) . ?\x208d)
+ ((?\) ?s) . ?\x208e)
+ ((?L ?i) . ?\x20a4)
+ ((?P ?t) . ?\x20a7)
+ ((?W ?=) . ?\x20a9)
+ ((?= ?e) . ?\x20ac)
+ ((?E ?u) . ?\x20ac)
+ ((?o ?C) . ?\x2103)
+ ((?c ?o) . ?\x2105)
+ ((?o ?F) . ?\x2109)
+ ((?N ?0) . ?\x2116)
+ ((?P ?O) . ?\x2117)
+ ((?R ?x) . ?\x211e)
+ ((?S ?M) . ?\x2120)
+ ((?T ?M) . ?\x2122)
+ ((?O ?m) . ?\x2126)
+ ((?A ?O) . ?\x212b)
+ ((?1 ?3) . ?\x2153)
+ ((?2 ?3) . ?\x2154)
+ ((?1 ?5) . ?\x2155)
+ ((?2 ?5) . ?\x2156)
+ ((?3 ?5) . ?\x2157)
+ ((?4 ?5) . ?\x2158)
+ ((?1 ?6) . ?\x2159)
+ ((?5 ?6) . ?\x215a)
+ ((?1 ?8) . ?\x215b)
+ ((?3 ?8) . ?\x215c)
+ ((?5 ?8) . ?\x215d)
+ ((?7 ?8) . ?\x215e)
+ ((?1 ?R) . ?\x2160)
+ ((?2 ?R) . ?\x2161)
+ ((?3 ?R) . ?\x2162)
+ ((?4 ?R) . ?\x2163)
+ ((?5 ?R) . ?\x2164)
+ ((?6 ?R) . ?\x2165)
+ ((?7 ?R) . ?\x2166)
+ ((?8 ?R) . ?\x2167)
+ ((?9 ?R) . ?\x2168)
+ ((?a ?R) . ?\x2169)
+ ((?b ?R) . ?\x216a)
+ ((?c ?R) . ?\x216b)
+ ((?1 ?r) . ?\x2170)
+ ((?2 ?r) . ?\x2171)
+ ((?3 ?r) . ?\x2172)
+ ((?4 ?r) . ?\x2173)
+ ((?5 ?r) . ?\x2174)
+ ((?6 ?r) . ?\x2175)
+ ((?7 ?r) . ?\x2176)
+ ((?8 ?r) . ?\x2177)
+ ((?9 ?r) . ?\x2178)
+ ((?a ?r) . ?\x2179)
+ ((?b ?r) . ?\x217a)
+ ((?c ?r) . ?\x217b)
+ ((?< ?-) . ?\x2190)
+ ((?- ?!) . ?\x2191)
+ ((?- ?>) . ?\x2192)
+ ((?- ?v) . ?\x2193)
+ ((?< ?>) . ?\x2194)
+ ((?U ?D) . ?\x2195)
+ ((?< ?=) . ?\x21d0)
+ ((?= ?>) . ?\x21d2)
+ ((?= ?=) . ?\x21d4)
+ ((?F ?A) . ?\x2200)
+ ((?d ?P) . ?\x2202)
+ ((?T ?E) . ?\x2203)
+ ((?/ ?0) . ?\x2205)
+ ((?D ?E) . ?\x2206)
+ ((?N ?B) . ?\x2207)
+ ((?\( ?-) . ?\x2208)
+ ((?- ?\)) . ?\x220b)
+ ((?* ?P) . ?\x220f)
+ ((?+ ?Z) . ?\x2211)
+ ((?- ?2) . ?\x2212)
+ ((?- ?+) . ?\x2213)
+ ((?* ?-) . ?\x2217)
+ ((?O ?b) . ?\x2218)
+ ((?S ?b) . ?\x2219)
+ ((?R ?T) . ?\x221a)
+ ((?0 ?\() . ?\x221d)
+ ((?0 ?0) . ?\x221e)
+ ((?- ?L) . ?\x221f)
+ ((?- ?V) . ?\x2220)
+ ((?P ?P) . ?\x2225)
+ ((?A ?N) . ?\x2227)
+ ((?O ?R) . ?\x2228)
+ ((?\( ?U) . ?\x2229)
+ ((?\) ?U) . ?\x222a)
+ ((?I ?n) . ?\x222b)
+ ((?D ?I) . ?\x222c)
+ ((?I ?o) . ?\x222e)
+ ((?. ?:) . ?\x2234)
+ ((?: ?.) . ?\x2235)
+ ((?: ?R) . ?\x2236)
+ ((?: ?:) . ?\x2237)
+ ((?? ?1) . ?\x223c)
+ ((?C ?G) . ?\x223e)
+ ((?? ?-) . ?\x2243)
+ ((?? ?=) . ?\x2245)
+ ((?? ?2) . ?\x2248)
+ ((?= ??) . ?\x224c)
+ ((?H ?I) . ?\x2253)
+ ((?! ?=) . ?\x2260)
+ ((?= ?3) . ?\x2261)
+ ((?= ?<) . ?\x2264)
+ ((?> ?=) . ?\x2265)
+ ((?< ?*) . ?\x226a)
+ ((?* ?>) . ?\x226b)
+ ((?! ?<) . ?\x226e)
+ ((?! ?>) . ?\x226f)
+ ((?\( ?C) . ?\x2282)
+ ((?\) ?C) . ?\x2283)
+ ((?\( ?_) . ?\x2286)
+ ((?\) ?_) . ?\x2287)
+ ((?0 ?.) . ?\x2299)
+ ((?0 ?2) . ?\x229a)
+ ((?- ?T) . ?\x22a5)
+ ((?. ?P) . ?\x22c5)
+ ((?: ?3) . ?\x22ee)
+ ((?. ?3) . ?\x22ef)
+ ((?E ?h) . ?\x2302)
+ ((?< ?7) . ?\x2308)
+ ((?> ?7) . ?\x2309)
+ ((?7 ?<) . ?\x230a)
+ ((?7 ?>) . ?\x230b)
+ ((?N ?I) . ?\x2310)
+ ((?\( ?A) . ?\x2312)
+ ((?T ?R) . ?\x2315)
+ ((?I ?u) . ?\x2320)
+ ((?I ?l) . ?\x2321)
+ ((?< ?/) . ?\x2329)
+ ((?/ ?>) . ?\x232a)
+ ((?V ?s) . ?\x2423)
+ ((?1 ?h) . ?\x2440)
+ ((?3 ?h) . ?\x2441)
+ ((?2 ?h) . ?\x2442)
+ ((?4 ?h) . ?\x2443)
+ ((?1 ?j) . ?\x2446)
+ ((?2 ?j) . ?\x2447)
+ ((?3 ?j) . ?\x2448)
+ ((?4 ?j) . ?\x2449)
+ ((?1 ?.) . ?\x2488)
+ ((?2 ?.) . ?\x2489)
+ ((?3 ?.) . ?\x248a)
+ ((?4 ?.) . ?\x248b)
+ ((?5 ?.) . ?\x248c)
+ ((?6 ?.) . ?\x248d)
+ ((?7 ?.) . ?\x248e)
+ ((?8 ?.) . ?\x248f)
+ ((?9 ?.) . ?\x2490)
+ ((?h ?h) . ?\x2500)
+ ((?H ?H) . ?\x2501)
+ ((?v ?v) . ?\x2502)
+ ((?V ?V) . ?\x2503)
+ ((?3 ?-) . ?\x2504)
+ ((?3 ?_) . ?\x2505)
+ ((?3 ?!) . ?\x2506)
+ ((?3 ?/) . ?\x2507)
+ ((?4 ?-) . ?\x2508)
+ ((?4 ?_) . ?\x2509)
+ ((?4 ?!) . ?\x250a)
+ ((?4 ?/) . ?\x250b)
+ ((?d ?r) . ?\x250c)
+ ((?d ?R) . ?\x250d)
+ ((?D ?r) . ?\x250e)
+ ((?D ?R) . ?\x250f)
+ ((?d ?l) . ?\x2510)
+ ((?d ?L) . ?\x2511)
+ ((?D ?l) . ?\x2512)
+ ((?L ?D) . ?\x2513)
+ ((?u ?r) . ?\x2514)
+ ((?u ?R) . ?\x2515)
+ ((?U ?r) . ?\x2516)
+ ((?U ?R) . ?\x2517)
+ ((?u ?l) . ?\x2518)
+ ((?u ?L) . ?\x2519)
+ ((?U ?l) . ?\x251a)
+ ((?U ?L) . ?\x251b)
+ ((?v ?r) . ?\x251c)
+ ((?v ?R) . ?\x251d)
+ ((?V ?r) . ?\x2520)
+ ((?V ?R) . ?\x2523)
+ ((?v ?l) . ?\x2524)
+ ((?v ?L) . ?\x2525)
+ ((?V ?l) . ?\x2528)
+ ((?V ?L) . ?\x252b)
+ ((?d ?h) . ?\x252c)
+ ((?d ?H) . ?\x252f)
+ ((?D ?h) . ?\x2530)
+ ((?D ?H) . ?\x2533)
+ ((?u ?h) . ?\x2534)
+ ((?u ?H) . ?\x2537)
+ ((?U ?h) . ?\x2538)
+ ((?U ?H) . ?\x253b)
+ ((?v ?h) . ?\x253c)
+ ((?v ?H) . ?\x253f)
+ ((?V ?h) . ?\x2542)
+ ((?V ?H) . ?\x254b)
+ ((?F ?D) . ?\x2571)
+ ((?B ?D) . ?\x2572)
+ ((?T ?B) . ?\x2580)
+ ((?L ?B) . ?\x2584)
+ ((?F ?B) . ?\x2588)
+ ((?l ?B) . ?\x258c)
+ ((?R ?B) . ?\x2590)
+ ((?. ?S) . ?\x2591)
+ ((?: ?S) . ?\x2592)
+ ((?? ?S) . ?\x2593)
+ ((?f ?S) . ?\x25a0)
+ ((?O ?S) . ?\x25a1)
+ ((?R ?O) . ?\x25a2)
+ ((?R ?r) . ?\x25a3)
+ ((?R ?F) . ?\x25a4)
+ ((?R ?Y) . ?\x25a5)
+ ((?R ?H) . ?\x25a6)
+ ((?R ?Z) . ?\x25a7)
+ ((?R ?K) . ?\x25a8)
+ ((?R ?X) . ?\x25a9)
+ ((?s ?B) . ?\x25aa)
+ ((?S ?R) . ?\x25ac)
+ ((?O ?r) . ?\x25ad)
+ ((?U ?T) . ?\x25b2)
+ ((?u ?T) . ?\x25b3)
+ ((?P ?R) . ?\x25b6)
+ ((?T ?r) . ?\x25b7)
+ ((?D ?t) . ?\x25bc)
+ ((?d ?T) . ?\x25bd)
+ ((?P ?L) . ?\x25c0)
+ ((?T ?l) . ?\x25c1)
+ ((?D ?b) . ?\x25c6)
+ ((?D ?w) . ?\x25c7)
+ ((?L ?Z) . ?\x25ca)
+ ((?0 ?m) . ?\x25cb)
+ ((?0 ?o) . ?\x25ce)
+ ((?0 ?M) . ?\x25cf)
+ ((?0 ?L) . ?\x25d0)
+ ((?0 ?R) . ?\x25d1)
+ ((?S ?n) . ?\x25d8)
+ ((?I ?c) . ?\x25d9)
+ ((?F ?d) . ?\x25e2)
+ ((?B ?d) . ?\x25e3)
+ ((?* ?2) . ?\x2605)
+ ((?* ?1) . ?\x2606)
+ ((?< ?H) . ?\x261c)
+ ((?> ?H) . ?\x261e)
+ ((?0 ?u) . ?\x263a)
+ ((?0 ?U) . ?\x263b)
+ ((?S ?U) . ?\x263c)
+ ((?F ?m) . ?\x2640)
+ ((?M ?l) . ?\x2642)
+ ((?c ?S) . ?\x2660)
+ ((?c ?H) . ?\x2661)
+ ((?c ?D) . ?\x2662)
+ ((?c ?C) . ?\x2663)
+ ((?M ?d) . ?\x2669)
+ ((?M ?8) . ?\x266a)
+ ((?M ?2) . ?\x266b)
+ ((?M ?b) . ?\x266d)
+ ((?M ?x) . ?\x266e)
+ ((?M ?X) . ?\x266f)
+ ((?O ?K) . ?\x2713)
+ ((?X ?X) . ?\x2717)
+ ((?- ?X) . ?\x2720)
+ ((?I ?S) . ?\x3000)
+ ((?, ?_) . ?\x3001)
+ ((?. ?_) . ?\x3002)
+ ((?+ ?\") . ?\x3003)
+ ((?+ ?_) . ?\x3004)
+ ((?* ?_) . ?\x3005)
+ ((?\; ?_) . ?\x3006)
+ ((?0 ?_) . ?\x3007)
+ ((?< ?+) . ?\x300a)
+ ((?> ?+) . ?\x300b)
+ ((?< ?') . ?\x300c)
+ ((?> ?') . ?\x300d)
+ ((?< ?\") . ?\x300e)
+ ((?> ?\") . ?\x300f)
+ ((?\( ?\") . ?\x3010)
+ ((?\) ?\") . ?\x3011)
+ ((?= ?T) . ?\x3012)
+ ((?= ?_) . ?\x3013)
+ ((?\( ?') . ?\x3014)
+ ((?\) ?') . ?\x3015)
+ ((?\( ?I) . ?\x3016)
+ ((?\) ?I) . ?\x3017)
+ ((?- ??) . ?\x301c)
+ ((?A ?5) . ?\x3041)
+ ((?a ?5) . ?\x3042)
+ ((?I ?5) . ?\x3043)
+ ((?i ?5) . ?\x3044)
+ ((?U ?5) . ?\x3045)
+ ((?u ?5) . ?\x3046)
+ ((?E ?5) . ?\x3047)
+ ((?e ?5) . ?\x3048)
+ ((?O ?5) . ?\x3049)
+ ((?o ?5) . ?\x304a)
+ ((?k ?a) . ?\x304b)
+ ((?g ?a) . ?\x304c)
+ ((?k ?i) . ?\x304d)
+ ((?g ?i) . ?\x304e)
+ ((?k ?u) . ?\x304f)
+ ((?g ?u) . ?\x3050)
+ ((?k ?e) . ?\x3051)
+ ((?g ?e) . ?\x3052)
+ ((?k ?o) . ?\x3053)
+ ((?g ?o) . ?\x3054)
+ ((?s ?a) . ?\x3055)
+ ((?z ?a) . ?\x3056)
+ ((?s ?i) . ?\x3057)
+ ((?z ?i) . ?\x3058)
+ ((?s ?u) . ?\x3059)
+ ((?z ?u) . ?\x305a)
+ ((?s ?e) . ?\x305b)
+ ((?z ?e) . ?\x305c)
+ ((?s ?o) . ?\x305d)
+ ((?z ?o) . ?\x305e)
+ ((?t ?a) . ?\x305f)
+ ((?d ?a) . ?\x3060)
+ ((?t ?i) . ?\x3061)
+ ((?d ?i) . ?\x3062)
+ ((?t ?U) . ?\x3063)
+ ((?t ?u) . ?\x3064)
+ ((?d ?u) . ?\x3065)
+ ((?t ?e) . ?\x3066)
+ ((?d ?e) . ?\x3067)
+ ((?t ?o) . ?\x3068)
+ ((?d ?o) . ?\x3069)
+ ((?n ?a) . ?\x306a)
+ ((?n ?i) . ?\x306b)
+ ((?n ?u) . ?\x306c)
+ ((?n ?e) . ?\x306d)
+ ((?n ?o) . ?\x306e)
+ ((?h ?a) . ?\x306f)
+ ((?b ?a) . ?\x3070)
+ ((?p ?a) . ?\x3071)
+ ((?h ?i) . ?\x3072)
+ ((?b ?i) . ?\x3073)
+ ((?p ?i) . ?\x3074)
+ ((?h ?u) . ?\x3075)
+ ((?b ?u) . ?\x3076)
+ ((?p ?u) . ?\x3077)
+ ((?h ?e) . ?\x3078)
+ ((?b ?e) . ?\x3079)
+ ((?p ?e) . ?\x307a)
+ ((?h ?o) . ?\x307b)
+ ((?b ?o) . ?\x307c)
+ ((?p ?o) . ?\x307d)
+ ((?m ?a) . ?\x307e)
+ ((?m ?i) . ?\x307f)
+ ((?m ?u) . ?\x3080)
+ ((?m ?e) . ?\x3081)
+ ((?m ?o) . ?\x3082)
+ ((?y ?A) . ?\x3083)
+ ((?y ?a) . ?\x3084)
+ ((?y ?U) . ?\x3085)
+ ((?y ?u) . ?\x3086)
+ ((?y ?O) . ?\x3087)
+ ((?y ?o) . ?\x3088)
+ ((?r ?a) . ?\x3089)
+ ((?r ?i) . ?\x308a)
+ ((?r ?u) . ?\x308b)
+ ((?r ?e) . ?\x308c)
+ ((?r ?o) . ?\x308d)
+ ((?w ?A) . ?\x308e)
+ ((?w ?a) . ?\x308f)
+ ((?w ?i) . ?\x3090)
+ ((?w ?e) . ?\x3091)
+ ((?w ?o) . ?\x3092)
+ ((?n ?5) . ?\x3093)
+ ((?v ?u) . ?\x3094)
+ ((?\" ?5) . ?\x309b)
+ ((?0 ?5) . ?\x309c)
+ ((?* ?5) . ?\x309d)
+ ((?+ ?5) . ?\x309e)
+ ((?a ?6) . ?\x30a1)
+ ((?A ?6) . ?\x30a2)
+ ((?i ?6) . ?\x30a3)
+ ((?I ?6) . ?\x30a4)
+ ((?u ?6) . ?\x30a5)
+ ((?U ?6) . ?\x30a6)
+ ((?e ?6) . ?\x30a7)
+ ((?E ?6) . ?\x30a8)
+ ((?o ?6) . ?\x30a9)
+ ((?O ?6) . ?\x30aa)
+ ((?K ?a) . ?\x30ab)
+ ((?G ?a) . ?\x30ac)
+ ((?K ?i) . ?\x30ad)
+ ((?G ?i) . ?\x30ae)
+ ((?K ?u) . ?\x30af)
+ ((?G ?u) . ?\x30b0)
+ ((?K ?e) . ?\x30b1)
+ ((?G ?e) . ?\x30b2)
+ ((?K ?o) . ?\x30b3)
+ ((?G ?o) . ?\x30b4)
+ ((?S ?a) . ?\x30b5)
+ ((?Z ?a) . ?\x30b6)
+ ((?S ?i) . ?\x30b7)
+ ((?Z ?i) . ?\x30b8)
+ ((?S ?u) . ?\x30b9)
+ ((?Z ?u) . ?\x30ba)
+ ((?S ?e) . ?\x30bb)
+ ((?Z ?e) . ?\x30bc)
+ ((?S ?o) . ?\x30bd)
+ ((?Z ?o) . ?\x30be)
+ ((?T ?a) . ?\x30bf)
+ ((?D ?a) . ?\x30c0)
+ ((?T ?i) . ?\x30c1)
+ ((?D ?i) . ?\x30c2)
+ ((?T ?U) . ?\x30c3)
+ ((?T ?u) . ?\x30c4)
+ ((?D ?u) . ?\x30c5)
+ ((?T ?e) . ?\x30c6)
+ ((?D ?e) . ?\x30c7)
+ ((?T ?o) . ?\x30c8)
+ ((?D ?o) . ?\x30c9)
+ ((?N ?a) . ?\x30ca)
+ ((?N ?i) . ?\x30cb)
+ ((?N ?u) . ?\x30cc)
+ ((?N ?e) . ?\x30cd)
+ ((?N ?o) . ?\x30ce)
+ ((?H ?a) . ?\x30cf)
+ ((?B ?a) . ?\x30d0)
+ ((?P ?a) . ?\x30d1)
+ ((?H ?i) . ?\x30d2)
+ ((?B ?i) . ?\x30d3)
+ ((?P ?i) . ?\x30d4)
+ ((?H ?u) . ?\x30d5)
+ ((?B ?u) . ?\x30d6)
+ ((?P ?u) . ?\x30d7)
+ ((?H ?e) . ?\x30d8)
+ ((?B ?e) . ?\x30d9)
+ ((?P ?e) . ?\x30da)
+ ((?H ?o) . ?\x30db)
+ ((?B ?o) . ?\x30dc)
+ ((?P ?o) . ?\x30dd)
+ ((?u ?R) . ?\x2515)
+ ((?U ?r) . ?\x2516)
+ ((?U ?R) . ?\x2517)
+ ((?u ?l) . ?\x2518)
+ ((?u ?L) . ?\x2519)
+ ((?U ?l) . ?\x251a)
+ ((?U ?L) . ?\x251b)
+ ((?v ?r) . ?\x251c)
+ ((?v ?R) . ?\x251d)
+ ((?V ?r) . ?\x2520)
+ ((?V ?R) . ?\x2523)
+ ((?v ?l) . ?\x2524)
+ ((?v ?L) . ?\x2525)
+ ((?V ?l) . ?\x2528)
+ ((?V ?L) . ?\x252b)
+ ((?d ?h) . ?\x252c)
+ ((?d ?H) . ?\x252f)
+ ((?D ?h) . ?\x2530)
+ ((?D ?H) . ?\x2533)
+ ((?u ?h) . ?\x2534)
+ ((?u ?H) . ?\x2537)
+ ((?U ?h) . ?\x2538)
+ ((?U ?H) . ?\x253b)
+ ((?v ?h) . ?\x253c)
+ ((?v ?H) . ?\x253f)
+ ((?V ?h) . ?\x2542)
+ ((?V ?H) . ?\x254b)
+ ((?F ?D) . ?\x2571)
+ ((?B ?D) . ?\x2572)
+ ((?T ?B) . ?\x2580)
+ ((?L ?B) . ?\x2584)
+ ((?F ?B) . ?\x2588)
+ ((?l ?B) . ?\x258c)
+ ((?R ?B) . ?\x2590)
+ ((?. ?S) . ?\x2591)
+ ((?: ?S) . ?\x2592)
+ ((?? ?S) . ?\x2593)
+ ((?f ?S) . ?\x25a0)
+ ((?O ?S) . ?\x25a1)
+ ((?R ?O) . ?\x25a2)
+ ((?R ?r) . ?\x25a3)
+ ((?R ?F) . ?\x25a4)
+ ((?R ?Y) . ?\x25a5)
+ ((?R ?H) . ?\x25a6)
+ ((?R ?Z) . ?\x25a7)
+ ((?R ?K) . ?\x25a8)
+ ((?R ?X) . ?\x25a9)
+ ((?s ?B) . ?\x25aa)
+ ((?S ?R) . ?\x25ac)
+ ((?O ?r) . ?\x25ad)
+ ((?U ?T) . ?\x25b2)
+ ((?u ?T) . ?\x25b3)
+ ((?P ?R) . ?\x25b6)
+ ((?T ?r) . ?\x25b7)
+ ((?D ?t) . ?\x25bc)
+ ((?d ?T) . ?\x25bd)
+ ((?P ?L) . ?\x25c0)
+ ((?T ?l) . ?\x25c1)
+ ((?D ?b) . ?\x25c6)
+ ((?D ?w) . ?\x25c7)
+ ((?L ?Z) . ?\x25ca)
+ ((?0 ?m) . ?\x25cb)
+ ((?0 ?o) . ?\x25ce)
+ ((?0 ?M) . ?\x25cf)
+ ((?0 ?L) . ?\x25d0)
+ ((?0 ?R) . ?\x25d1)
+ ((?S ?n) . ?\x25d8)
+ ((?I ?c) . ?\x25d9)
+ ((?F ?d) . ?\x25e2)
+ ((?B ?d) . ?\x25e3)
+ ((?* ?2) . ?\x2605)
+ ((?* ?1) . ?\x2606)
+ ((?< ?H) . ?\x261c)
+ ((?> ?H) . ?\x261e)
+ ((?0 ?u) . ?\x263a)
+ ((?0 ?U) . ?\x263b)
+ ((?S ?U) . ?\x263c)
+ ((?F ?m) . ?\x2640)
+ ((?M ?l) . ?\x2642)
+ ((?c ?S) . ?\x2660)
+ ((?c ?H) . ?\x2661)
+ ((?c ?D) . ?\x2662)
+ ((?c ?C) . ?\x2663)
+ ((?M ?d) . ?\x2669)
+ ((?M ?8) . ?\x266a)
+ ((?M ?2) . ?\x266b)
+ ((?M ?b) . ?\x266d)
+ ((?M ?x) . ?\x266e)
+ ((?M ?X) . ?\x266f)
+ ((?O ?K) . ?\x2713)
+ ((?X ?X) . ?\x2717)
+ ((?- ?X) . ?\x2720)
+ ((?I ?S) . ?\x3000)
+ ((?, ?_) . ?\x3001)
+ ((?. ?_) . ?\x3002)
+ ((?+ ?\") . ?\x3003)
+ ((?+ ?_) . ?\x3004)
+ ((?* ?_) . ?\x3005)
+ ((?\; ?_) . ?\x3006)
+ ((?0 ?_) . ?\x3007)
+ ((?< ?+) . ?\x300a)
+ ((?> ?+) . ?\x300b)
+ ((?< ?') . ?\x300c)
+ ((?> ?') . ?\x300d)
+ ((?< ?\") . ?\x300e)
+ ((?> ?\") . ?\x300f)
+ ((?\( ?\") . ?\x3010)
+ ((?\) ?\") . ?\x3011)
+ ((?= ?T) . ?\x3012)
+ ((?= ?_) . ?\x3013)
+ ((?\( ?') . ?\x3014)
+ ((?\) ?') . ?\x3015)
+ ((?\( ?I) . ?\x3016)
+ ((?\) ?I) . ?\x3017)
+ ((?- ??) . ?\x301c)
+ ((?A ?5) . ?\x3041)
+ ((?a ?5) . ?\x3042)
+ ((?I ?5) . ?\x3043)
+ ((?i ?5) . ?\x3044)
+ ((?U ?5) . ?\x3045)
+ ((?u ?5) . ?\x3046)
+ ((?E ?5) . ?\x3047)
+ ((?e ?5) . ?\x3048)
+ ((?O ?5) . ?\x3049)
+ ((?o ?5) . ?\x304a)
+ ((?k ?a) . ?\x304b)
+ ((?g ?a) . ?\x304c)
+ ((?k ?i) . ?\x304d)
+ ((?g ?i) . ?\x304e)
+ ((?k ?u) . ?\x304f)
+ ((?g ?u) . ?\x3050)
+ ((?k ?e) . ?\x3051)
+ ((?g ?e) . ?\x3052)
+ ((?k ?o) . ?\x3053)
+ ((?g ?o) . ?\x3054)
+ ((?s ?a) . ?\x3055)
+ ((?z ?a) . ?\x3056)
+ ((?s ?i) . ?\x3057)
+ ((?z ?i) . ?\x3058)
+ ((?s ?u) . ?\x3059)
+ ((?z ?u) . ?\x305a)
+ ((?s ?e) . ?\x305b)
+ ((?z ?e) . ?\x305c)
+ ((?s ?o) . ?\x305d)
+ ((?z ?o) . ?\x305e)
+ ((?t ?a) . ?\x305f)
+ ((?d ?a) . ?\x3060)
+ ((?t ?i) . ?\x3061)
+ ((?d ?i) . ?\x3062)
+ ((?t ?U) . ?\x3063)
+ ((?t ?u) . ?\x3064)
+ ((?d ?u) . ?\x3065)
+ ((?t ?e) . ?\x3066)
+ ((?d ?e) . ?\x3067)
+ ((?t ?o) . ?\x3068)
+ ((?d ?o) . ?\x3069)
+ ((?n ?a) . ?\x306a)
+ ((?n ?i) . ?\x306b)
+ ((?n ?u) . ?\x306c)
+ ((?n ?e) . ?\x306d)
+ ((?n ?o) . ?\x306e)
+ ((?h ?a) . ?\x306f)
+ ((?b ?a) . ?\x3070)
+ ((?p ?a) . ?\x3071)
+ ((?h ?i) . ?\x3072)
+ ((?b ?i) . ?\x3073)
+ ((?p ?i) . ?\x3074)
+ ((?h ?u) . ?\x3075)
+ ((?b ?u) . ?\x3076)
+ ((?p ?u) . ?\x3077)
+ ((?h ?e) . ?\x3078)
+ ((?b ?e) . ?\x3079)
+ ((?p ?e) . ?\x307a)
+ ((?h ?o) . ?\x307b)
+ ((?b ?o) . ?\x307c)
+ ((?p ?o) . ?\x307d)
+ ((?m ?a) . ?\x307e)
+ ((?m ?i) . ?\x307f)
+ ((?m ?u) . ?\x3080)
+ ((?m ?e) . ?\x3081)
+ ((?m ?o) . ?\x3082)
+ ((?y ?A) . ?\x3083)
+ ((?y ?a) . ?\x3084)
+ ((?y ?U) . ?\x3085)
+ ((?y ?u) . ?\x3086)
+ ((?y ?O) . ?\x3087)
+ ((?y ?o) . ?\x3088)
+ ((?r ?a) . ?\x3089)
+ ((?r ?i) . ?\x308a)
+ ((?r ?u) . ?\x308b)
+ ((?r ?e) . ?\x308c)
+ ((?r ?o) . ?\x308d)
+ ((?w ?A) . ?\x308e)
+ ((?w ?a) . ?\x308f)
+ ((?w ?i) . ?\x3090)
+ ((?w ?e) . ?\x3091)
+ ((?w ?o) . ?\x3092)
+ ((?n ?5) . ?\x3093)
+ ((?v ?u) . ?\x3094)
+ ((?\" ?5) . ?\x309b)
+ ((?0 ?5) . ?\x309c)
+ ((?* ?5) . ?\x309d)
+ ((?+ ?5) . ?\x309e)
+ ((?a ?6) . ?\x30a1)
+ ((?A ?6) . ?\x30a2)
+ ((?i ?6) . ?\x30a3)
+ ((?I ?6) . ?\x30a4)
+ ((?u ?6) . ?\x30a5)
+ ((?U ?6) . ?\x30a6)
+ ((?e ?6) . ?\x30a7)
+ ((?E ?6) . ?\x30a8)
+ ((?o ?6) . ?\x30a9)
+ ((?O ?6) . ?\x30aa)
+ ((?K ?a) . ?\x30ab)
+ ((?G ?a) . ?\x30ac)
+ ((?K ?i) . ?\x30ad)
+ ((?G ?i) . ?\x30ae)
+ ((?K ?u) . ?\x30af)
+ ((?G ?u) . ?\x30b0)
+ ((?K ?e) . ?\x30b1)
+ ((?G ?e) . ?\x30b2)
+ ((?K ?o) . ?\x30b3)
+ ((?G ?o) . ?\x30b4)
+ ((?S ?a) . ?\x30b5)
+ ((?Z ?a) . ?\x30b6)
+ ((?S ?i) . ?\x30b7)
+ ((?Z ?i) . ?\x30b8)
+ ((?S ?u) . ?\x30b9)
+ ((?Z ?u) . ?\x30ba)
+ ((?S ?e) . ?\x30bb)
+ ((?Z ?e) . ?\x30bc)
+ ((?S ?o) . ?\x30bd)
+ ((?Z ?o) . ?\x30be)
+ ((?T ?a) . ?\x30bf)
+ ((?D ?a) . ?\x30c0)
+ ((?T ?i) . ?\x30c1)
+ ((?D ?i) . ?\x30c2)
+ ((?T ?U) . ?\x30c3)
+ ((?T ?u) . ?\x30c4)
+ ((?D ?u) . ?\x30c5)
+ ((?T ?e) . ?\x30c6)
+ ((?D ?e) . ?\x30c7)
+ ((?T ?o) . ?\x30c8)
+ ((?D ?o) . ?\x30c9)
+ ((?N ?a) . ?\x30ca)
+ ((?N ?i) . ?\x30cb)
+ ((?N ?u) . ?\x30cc)
+ ((?N ?e) . ?\x30cd)
+ ((?N ?o) . ?\x30ce)
+ ((?H ?a) . ?\x30cf)
+ ((?B ?a) . ?\x30d0)
+ ((?P ?a) . ?\x30d1)
+ ((?H ?i) . ?\x30d2)
+ ((?B ?i) . ?\x30d3)
+ ((?P ?i) . ?\x30d4)
+ ((?H ?u) . ?\x30d5)
+ ((?B ?u) . ?\x30d6)
+ ((?P ?u) . ?\x30d7)
+ ((?H ?e) . ?\x30d8)
+ ((?B ?e) . ?\x30d9)
+ ((?P ?e) . ?\x30da)
+ ((?H ?o) . ?\x30db)
+ ((?B ?o) . ?\x30dc)
+ ((?P ?o) . ?\x30dd)
+ ((?M ?a) . ?\x30de)
+ ((?M ?i) . ?\x30df)
+ ((?M ?u) . ?\x30e0)
+ ((?M ?e) . ?\x30e1)
+ ((?M ?o) . ?\x30e2)
+ ((?Y ?A) . ?\x30e3)
+ ((?Y ?a) . ?\x30e4)
+ ((?Y ?U) . ?\x30e5)
+ ((?Y ?u) . ?\x30e6)
+ ((?Y ?O) . ?\x30e7)
+ ((?Y ?o) . ?\x30e8)
+ ((?R ?a) . ?\x30e9)
+ ((?R ?i) . ?\x30ea)
+ ((?R ?u) . ?\x30eb)
+ ((?R ?e) . ?\x30ec)
+ ((?R ?o) . ?\x30ed)
+ ((?W ?A) . ?\x30ee)
+ ((?W ?a) . ?\x30ef)
+ ((?W ?i) . ?\x30f0)
+ ((?W ?e) . ?\x30f1)
+ ((?W ?o) . ?\x30f2)
+ ((?N ?6) . ?\x30f3)
+ ((?V ?u) . ?\x30f4)
+ ((?K ?A) . ?\x30f5)
+ ((?K ?E) . ?\x30f6)
+ ((?V ?a) . ?\x30f7)
+ ((?V ?i) . ?\x30f8)
+ ((?V ?e) . ?\x30f9)
+ ((?V ?o) . ?\x30fa)
+ ((?. ?6) . ?\x30fb)
+ ((?- ?6) . ?\x30fc)
+ ((?* ?6) . ?\x30fd)
+ ((?+ ?6) . ?\x30fe)
+ ((?b ?4) . ?\x3105)
+ ((?p ?4) . ?\x3106)
+ ((?m ?4) . ?\x3107)
+ ((?f ?4) . ?\x3108)
+ ((?d ?4) . ?\x3109)
+ ((?t ?4) . ?\x310a)
+ ((?n ?4) . ?\x310b)
+ ((?l ?4) . ?\x310c)
+ ((?g ?4) . ?\x310d)
+ ((?k ?4) . ?\x310e)
+ ((?h ?4) . ?\x310f)
+ ((?j ?4) . ?\x3110)
+ ((?q ?4) . ?\x3111)
+ ((?x ?4) . ?\x3112)
+ ((?z ?h) . ?\x3113)
+ ((?c ?h) . ?\x3114)
+ ((?s ?h) . ?\x3115)
+ ((?r ?4) . ?\x3116)
+ ((?z ?4) . ?\x3117)
+ ((?c ?4) . ?\x3118)
+ ((?s ?4) . ?\x3119)
+ ((?a ?4) . ?\x311a)
+ ((?o ?4) . ?\x311b)
+ ((?e ?4) . ?\x311c)
+ ((?a ?i) . ?\x311e)
+ ((?e ?i) . ?\x311f)
+ ((?a ?u) . ?\x3120)
+ ((?o ?u) . ?\x3121)
+ ((?a ?n) . ?\x3122)
+ ((?e ?n) . ?\x3123)
+ ((?a ?N) . ?\x3124)
+ ((?e ?N) . ?\x3125)
+ ((?e ?r) . ?\x3126)
+ ((?i ?4) . ?\x3127)
+ ((?u ?4) . ?\x3128)
+ ((?i ?u) . ?\x3129)
+ ((?v ?4) . ?\x312a)
+ ((?n ?G) . ?\x312b)
+ ((?g ?n) . ?\x312c)
+ ((?1 ?c) . ?\x3220)
+ ((?2 ?c) . ?\x3221)
+ ((?3 ?c) . ?\x3222)
+ ((?4 ?c) . ?\x3223)
+ ((?5 ?c) . ?\x3224)
+ ((?6 ?c) . ?\x3225)
+ ((?7 ?c) . ?\x3226)
+ ((?8 ?c) . ?\x3227)
+ ((?9 ?c) . ?\x3228)
+ ((?\s ?\s) . ?\xe000)
+ ((?/ ?c) . ?\xe001)
+ ((?U ?A) . ?\xe002)
+ ((?U ?B) . ?\xe003)
+ ((?\" ?3) . ?\xe004)
+ ((?\" ?1) . ?\xe005)
+ ((?\" ?!) . ?\xe006)
+ ((?\" ?') . ?\xe007)
+ ((?\" ?>) . ?\xe008)
+ ((?\" ??) . ?\xe009)
+ ((?\" ?-) . ?\xe00a)
+ ((?\" ?\() . ?\xe00b)
+ ((?\" ?.) . ?\xe00c)
+ ((?\" ?:) . ?\xe00d)
+ ((?\" ?0) . ?\xe00e)
+ ((?\" ?\") . ?\xe00f)
+ ((?\" ?<) . ?\xe010)
+ ((?\" ?,) . ?\xe011)
+ ((?\" ?\;) . ?\xe012)
+ ((?\" ?_) . ?\xe013)
+ ((?\" ?=) . ?\xe014)
+ ((?\" ?/) . ?\xe015)
+ ((?\" ?i) . ?\xe016)
+ ((?\" ?d) . ?\xe017)
+ ((?\" ?p) . ?\xe018)
+ ((?\; ?\;) . ?\xe019)
+ ((?, ?,) . ?\xe01a)
+ ((?b ?3) . ?\xe01b)
+ ((?C ?i) . ?\xe01c)
+ ((?f ?\() . ?\xe01d)
+ ((?e ?d) . ?\xe01e)
+ ((?a ?m) . ?\xe01f)
+ ((?p ?m) . ?\xe020)
+ ((?F ?l) . ?\xe023)
+ ((?G ?F) . ?\xe024)
+ ((?> ?V) . ?\xe025)
+ ((?! ?*) . ?\xe026)
+ ((?? ?*) . ?\xe027)
+ ((?J ?<) . ?\xe028)
+ ((?f ?f) . ?\xfb00)
+ ((?f ?i) . ?\xfb01)
+ ((?f ?l) . ?\xfb02)
+ ((?f ?t) . ?\xfb05)
+ ((?s ?t) . ?\xfb06)
+ ((?~ ?!) . ?\x00a1)
+ ((?c ?|) . ?\x00a2)
+ ((?$ ?$) . ?\x00a3)
+ ((?o ?x) . ?\x00a4)
+ ((?Y ?-) . ?\x00a5)
+ ((?| ?|) . ?\x00a6)
+ ((?c ?O) . ?\x00a9)
+ ((?- ?,) . ?\x00ac)
+ ((?- ?=) . ?\x00af)
+ ((?~ ?o) . ?\x00b0)
+ ((?2 ?2) . ?\x00b2)
+ ((?3 ?3) . ?\x00b3)
+ ((?p ?p) . ?\x00b6)
+ ((?~ ?.) . ?\x00b7)
+ ((?1 ?1) . ?\x00b9)
+ ((?~ ??) . ?\x00bf)
+ ((?A ?`) . ?\x00c0)
+ ((?A ?^) . ?\x00c2)
+ ((?A ?~) . ?\x00c3)
+ ((?A ?\") . ?\x00c4)
+ ((?A ?@) . ?\x00c5)
+ ((?E ?`) . ?\x00c8)
+ ((?E ?^) . ?\x00ca)
+ ((?E ?\") . ?\x00cb)
+ ((?I ?`) . ?\x00cc)
+ ((?I ?^) . ?\x00ce)
+ ((?I ?\") . ?\x00cf)
+ ((?N ?~) . ?\x00d1)
+ ((?O ?`) . ?\x00d2)
+ ((?O ?^) . ?\x00d4)
+ ((?O ?~) . ?\x00d5)
+ ((?/ ?\\) . ?\x00d7)
+ ((?U ?`) . ?\x00d9)
+ ((?U ?^) . ?\x00db)
+ ((?I ?p) . ?\x00de)
+ ((?a ?`) . ?\x00e0)
+ ((?a ?^) . ?\x00e2)
+ ((?a ?~) . ?\x00e3)
+ ((?a ?\") . ?\x00e4)
+ ((?a ?@) . ?\x00e5)
+ ((?e ?`) . ?\x00e8)
+ ((?e ?^) . ?\x00ea)
+ ((?e ?\") . ?\x00eb)
+ ((?i ?`) . ?\x00ec)
+ ((?i ?^) . ?\x00ee)
+ ((?n ?~) . ?\x00f1)
+ ((?o ?`) . ?\x00f2)
+ ((?o ?^) . ?\x00f4)
+ ((?o ?~) . ?\x00f5)
+ ((?u ?`) . ?\x00f9)
+ ((?u ?^) . ?\x00fb)
+ ((?y ?\") . ?\x00ff))
+ "Table of default digraphs.
+This includes all digraphs defined in RFC 1345,
+as well as miscellaneous digraphs for multi-byte characters.
+See also `evil-digraphs-table-user'.")
+
+(defun evil-digraph (digraph)
+ "Convert DIGRAPH to character or list representation.
+If DIGRAPH is a list (CHAR1 CHAR2), return the corresponding character;
+if DIGRAPH is a character, return the corresponding list.
+Searches in `evil-digraphs-table-user' and `evil-digraphs-table'."
+ (if (listp digraph)
+ (let* ((char1 (car digraph))
+ (char2 (cadr digraph)))
+ (or (cdr (assoc (list char1 char2) evil-digraphs-table-user))
+ (cdr (assoc (list char1 char2) evil-digraphs-table))
+ (unless (eq char1 char2)
+ (or (cdr (assoc (list char2 char1) evil-digraphs-table-user))
+ (cdr (assoc (list char2 char1) evil-digraphs-table))))))
+ (or (car (rassoc digraph evil-digraphs-table-user))
+ (car (rassoc digraph evil-digraphs-table)))))
+
+(provide 'evil-digraphs)
+
+;;; evil-digraphs.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-digraphs.elc b/.emacs.d/elpa/evil-20171210.501/evil-digraphs.elc
new file mode 100644
index 0000000..7a79188
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-digraphs.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-ex.el b/.emacs.d/elpa/evil-20171210.501/evil-ex.el
new file mode 100644
index 0000000..123e57f
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-ex.el
@@ -0,0 +1,1164 @@
+;;; evil-ex.el --- Ex-mode
+
+;; Author: Frank Fischer <frank fischer at mathematik.tu-chemnitz.de>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Ex is implemented as an extensible minilanguage, whose grammar
+;; is stored in `evil-ex-grammar'. Ex commands are defined with
+;; `evil-ex-define-cmd', which creates a binding from a string
+;; to an interactive function. It is also possible to define key
+;; sequences which execute a command immediately when entered:
+;; such shortcuts go in `evil-ex-map'.
+;;
+;; To provide buffer and filename completion, as well as interactive
+;; feedback, Ex defines the concept of an argument handler, specified
+;; with `evil-ex-define-argument-type'. In the case of the
+;; substitution command (":s/foo/bar"), the handler incrementally
+;; highlights matches in the buffer as the substitution is typed.
+
+(require 'evil-common)
+(require 'evil-states)
+(require 'shell)
+
+;;; Code:
+
+(defconst evil-ex-grammar
+ '((expression
+ (count command argument #'evil-ex-call-command)
+ ((\? range) command argument #'evil-ex-call-command)
+ (line #'evil-goto-line)
+ (sexp #'eval-expression))
+ (count
+ number)
+ (command #'evil-ex-parse-command)
+ (binding
+ "[~&*@<>=:]+\\|[[:alpha:]-]+\\|!")
+ (emacs-binding
+ "[[:alpha:]-][[:alnum:][:punct:]-]+")
+ (bang
+ (\? (! space) "!" #'$1))
+ (argument
+ ((\? space) (\? "\\(?:.\\|\n\\)+") #'$2))
+ (range
+ ("%" #'(evil-ex-full-range))
+ (line ";" line #'(let ((tmp1 $1))
+ (save-excursion
+ (goto-line tmp1)
+ (evil-ex-range tmp1 $3))))
+ (line "," line #'(evil-ex-range $1 $3))
+ (line #'(evil-ex-range $1 nil))
+ ("`" "[-a-zA-Z_<>']" ",`" "[-a-zA-Z_<>']"
+ #'(evil-ex-char-marker-range $2 $4)))
+ (line
+ (base (\? offset) search (\? offset)
+ #'(let ((tmp (evil-ex-line $1 $2)))
+ (save-excursion
+ (goto-line tmp)
+ (evil-ex-line $3 $4))))
+ ((\? base) offset search (\? offset)
+ #'(let ((tmp (evil-ex-line $1 $2)))
+ (save-excursion
+ (goto-line tmp)
+ (evil-ex-line $3 $4))))
+ (base (\? offset) #'evil-ex-line)
+ ((\? base) offset #'evil-ex-line))
+ (base
+ number
+ marker
+ search
+ ("\\^" #'(evil-ex-first-line))
+ ("\\$" #'(evil-ex-last-line))
+ ("\\." #'(evil-ex-current-line)))
+ (offset
+ (+ signed-number #'+))
+ (marker
+ ("'" "[-a-zA-Z_<>']" #'(evil-ex-marker $2)))
+ (search
+ forward
+ backward
+ next
+ prev
+ subst)
+ (forward
+ ("/" "\\(?:[\\].\\|[^/,; ]\\)+" (! "/")
+ #'(evil-ex-re-fwd $2))
+ ("/" "\\(?:[\\].\\|[^/]\\)+" "/"
+ #'(evil-ex-re-fwd $2)))
+ (backward
+ ("\\?" "\\(?:[\\].\\|[^?,; ]\\)+" (! "\\?")
+ #'(evil-ex-re-bwd $2))
+ ("\\?" "\\(?:[\\].\\|[^?]\\)+" "\\?"
+ #'(evil-ex-re-bwd $2)))
+ (next
+ "\\\\/" #'(evil-ex-prev-search))
+ (prev
+ "\\\\\\?" #'(evil-ex-prev-search))
+ (subst
+ "\\\\&" #'(evil-ex-prev-search))
+ (signed-number
+ (sign (\? number) #'evil-ex-signed-number))
+ (sign
+ "\\+\\|-" #'intern)
+ (number
+ "[0-9]+" #'string-to-number)
+ (space
+ "[ ]+")
+ (sexp
+ "(.*)" #'(car-safe (read-from-string $1))))
+ "Grammar for Ex.
+An association list of syntactic symbols and their definitions.
+The first entry is the start symbol. A symbol's definition may
+reference other symbols, but the grammar cannot contain
+left recursion. See `evil-parser' for a detailed explanation
+of the syntax.")
+
+(defvar evil-ex-echo-overlay nil
+ "Overlay used for displaying info messages during ex.")
+
+(defun evil-ex-p ()
+ "Whether Ex is currently active."
+ (and evil-ex-current-buffer t))
+
+(evil-define-command evil-ex (&optional initial-input)
+ "Enter an Ex command.
+The ex command line is initialized with the value of
+INITIAL-INPUT. If the command is called interactively the initial
+input depends on the current state. If the current state is
+normal state and no count argument is given then the initial
+input is empty. If a prefix count is given the initial input is
+.,.+count. If the current state is visual state then the initial
+input is the visual region '<,'> or `<,`>. If the value of the
+global variable `evil-ex-initial-input' is non-nil, its content
+is appended to the line."
+ :keep-visual t
+ :repeat abort
+ (interactive
+ (list
+ (let ((s (concat
+ (cond
+ ((and (evil-visual-state-p)
+ evil-ex-visual-char-range
+ (memq (evil-visual-type) '(inclusive exclusive)))
+ "`<,`>")
+ ((evil-visual-state-p)
+ "'<,'>")
+ (current-prefix-arg
+ (let ((arg (prefix-numeric-value current-prefix-arg)))
+ (cond ((< arg 0) (setq arg (1+ arg)))
+ ((> arg 0) (setq arg (1- arg))))
+ (if (= arg 0) '(".")
+ (format ".,.%+d" arg)))))
+ evil-ex-initial-input)))
+ (and (> (length s) 0) s))))
+ (let ((evil-ex-current-buffer (current-buffer))
+ (evil-ex-previous-command (unless initial-input
+ (car-safe evil-ex-history)))
+ evil-ex-argument-handler
+ evil-ex-info-string
+ result)
+ (minibuffer-with-setup-hook
+ #'evil-ex-setup
+ (setq result
+ (read-from-minibuffer
+ ":"
+ (or initial-input
+ (and evil-ex-previous-command
+ (propertize evil-ex-previous-command 'face 'shadow)))
+ evil-ex-completion-map
+ nil
+ 'evil-ex-history
+ evil-ex-previous-command
+ t)))
+ (evil-ex-execute result)))
+
+(defun evil-ex-execute (result)
+ "Execute RESULT as an ex command on `evil-ex-current-buffer'."
+ ;; empty input means repeating the previous command
+ (when (zerop (length result))
+ (setq result evil-ex-previous-command))
+ ;; parse data
+ (evil-ex-update nil nil nil result)
+ ;; execute command
+ (unless (zerop (length result))
+ (if evil-ex-expression
+ (eval evil-ex-expression)
+ (user-error "Ex: syntax error"))))
+
+(defun evil-ex-delete-backward-char ()
+ "Close the minibuffer if it is empty.
+Otherwise behaves like `delete-backward-char'."
+ (interactive)
+ (call-interactively
+ (if (zerop (length (minibuffer-contents)))
+ #'abort-recursive-edit
+ #'delete-backward-char)))
+
+(defun evil-ex-abort ()
+ "Cancel ex state when another buffer is selected."
+ (unless (minibufferp)
+ (abort-recursive-edit)))
+
+(defun evil-ex-setup ()
+ "Initialize Ex minibuffer.
+This function registers several hooks that are used for the
+interactive actions during ex state."
+ (add-hook 'post-command-hook #'evil-ex-abort)
+ (add-hook 'after-change-functions #'evil-ex-update nil t)
+ (add-hook 'minibuffer-exit-hook #'evil-ex-teardown)
+ (when evil-ex-previous-command
+ (add-hook 'pre-command-hook #'evil-ex-remove-default))
+ (remove-hook 'minibuffer-setup-hook #'evil-ex-setup)
+ (with-no-warnings
+ (make-variable-buffer-local 'completion-at-point-functions))
+ (setq completion-at-point-functions
+ '(evil-ex-command-completion-at-point
+ evil-ex-argument-completion-at-point)))
+(put 'evil-ex-setup 'permanent-local-hook t)
+
+(defun evil-ex-teardown ()
+ "Deinitialize Ex minibuffer.
+Clean up everything set up by `evil-ex-setup'."
+ (remove-hook 'post-command-hook #'evil-ex-abort)
+ (remove-hook 'minibuffer-exit-hook #'evil-ex-teardown)
+ (remove-hook 'after-change-functions #'evil-ex-update t)
+ (when evil-ex-argument-handler
+ (let ((runner (evil-ex-argument-handler-runner
+ evil-ex-argument-handler)))
+ (when runner
+ (funcall runner 'stop)))))
+(put 'evil-ex-teardown 'permanent-local-hook t)
+
+(defun evil-ex-remove-default ()
+ "Remove the default text shown in the ex minibuffer.
+When ex starts, the previous command is shown enclosed in
+parenthesis. This function removes this text when the first key
+is pressed."
+ (when (and (not (eq this-command 'exit-minibuffer))
+ (/= (minibuffer-prompt-end) (point-max)))
+ (if (eq this-command 'evil-ex-delete-backward-char)
+ (setq this-command 'ignore))
+ (delete-minibuffer-contents))
+ (remove-hook 'pre-command-hook #'evil-ex-remove-default))
+(put 'evil-ex-remove-default 'permanent-local-hook t)
+
+(defun evil-ex-update (&optional beg end len string)
+ "Update Ex variables when the minibuffer changes.
+This function is usually called from `after-change-functions'
+hook. If BEG is non-nil (which is the case when called from
+`after-change-functions'), then an error description is shown
+in case of incomplete or unknown commands."
+ (let* ((prompt (minibuffer-prompt-end))
+ (string (or string (buffer-substring prompt (point-max))))
+ arg bang cmd count expr func handler range tree type)
+ (cond
+ ((and (eq this-command #'self-insert-command)
+ (commandp (setq cmd (lookup-key evil-ex-map string))))
+ (setq evil-ex-expression `(call-interactively #',cmd))
+ (when (minibufferp)
+ (exit-minibuffer)))
+ (t
+ (setq cmd nil)
+ ;; store the buffer position of each character
+ ;; as the `ex-index' text property
+ (dotimes (i (length string))
+ (add-text-properties
+ i (1+ i) (list 'ex-index (+ i prompt)) string))
+ (with-current-buffer evil-ex-current-buffer
+ (setq tree (evil-ex-parse string t)
+ expr (evil-ex-parse string))
+ (when (eq (car-safe expr) 'evil-ex-call-command)
+ (setq count (eval (nth 1 expr))
+ cmd (eval (nth 2 expr))
+ arg (eval (nth 3 expr))
+ range (cond
+ ((evil-range-p count)
+ count)
+ ((numberp count)
+ (evil-ex-range count count)))
+ bang (and (save-match-data (string-match ".!$" cmd)) t))))
+ (setq evil-ex-tree tree
+ evil-ex-expression expr
+ evil-ex-range range
+ evil-ex-cmd cmd
+ evil-ex-bang bang
+ evil-ex-argument arg)
+ ;; test the current command
+ (when (and cmd (minibufferp))
+ (setq func (evil-ex-completed-binding cmd t))
+ (cond
+ ;; update argument-handler
+ (func
+ (when (setq type (evil-get-command-property
+ func :ex-arg))
+ (setq handler (cdr-safe
+ (assoc type
+ evil-ex-argument-types))))
+ (unless (eq handler evil-ex-argument-handler)
+ (let ((runner (and evil-ex-argument-handler
+ (evil-ex-argument-handler-runner
+ evil-ex-argument-handler))))
+ (when runner (funcall runner 'stop)))
+ (setq evil-ex-argument-handler handler)
+ (let ((runner (and evil-ex-argument-handler
+ (evil-ex-argument-handler-runner
+ evil-ex-argument-handler))))
+ (when runner (funcall runner 'start evil-ex-argument))))
+ (let ((runner (and evil-ex-argument-handler
+ (evil-ex-argument-handler-runner
+ evil-ex-argument-handler))))
+ (when runner (funcall runner 'update evil-ex-argument))))
+ (beg
+ ;; show error message only when called from `after-change-functions'
+ (let ((n (length (all-completions cmd (evil-ex-completion-table)))))
+ (cond
+ ((> n 1) (evil-ex-echo "Incomplete command"))
+ ((= n 0) (evil-ex-echo "Unknown command")))))))))))
+(put 'evil-ex-update 'permanent-local-hook t)
+
+(defun evil-ex-echo (string &rest args)
+ "Display a message after the current Ex command."
+ (with-selected-window (minibuffer-window)
+ (with-current-buffer (window-buffer (minibuffer-window))
+ (unless (or evil-no-display
+ (zerop (length string)))
+ (let ((string (format " [%s]" (apply #'format string args)))
+ (ov (or evil-ex-echo-overlay
+ (setq evil-ex-echo-overlay (make-overlay (point-min) (point-max) nil t t))))
+ after-change-functions before-change-functions)
+ (put-text-property 0 (length string) 'face 'evil-ex-info string)
+ ;; The following 'trick' causes point to be shown before the
+ ;; message instead behind. It is shamelessly stolen from the
+ ;; implementation of `minibuffer-message`.
+ (put-text-property 0 1 'cursor t string)
+ (move-overlay ov (point-max) (point-max))
+ (overlay-put ov 'after-string string)
+ (add-hook 'pre-command-hook #'evil--ex-remove-echo-overlay nil t))))))
+
+(defun evil--ex-remove-echo-overlay ()
+ "Remove echo overlay from ex minibuffer."
+ (when evil-ex-echo-overlay
+ (delete-overlay evil-ex-echo-overlay)
+ (setq evil-ex-echo-overlay nil))
+ (remove-hook 'pre-command-hook 'evil--ex-remove-echo-overlay t))
+
+(defun evil-ex-completion ()
+ "Completes the current ex command or argument."
+ (interactive)
+ (let (after-change-functions)
+ (evil-ex-update)
+ (completion-at-point)
+ (remove-text-properties (minibuffer-prompt-end) (point-max) '(face nil evil))))
+
+(defun evil-ex-command-completion-at-point ()
+ (let ((context (evil-ex-syntactic-context (1- (point)))))
+ (when (memq 'command context)
+ (let ((beg (or (get-text-property 0 'ex-index evil-ex-cmd)
+ (point)))
+ (end (1+ (or (get-text-property (1- (length evil-ex-cmd))
+ 'ex-index
+ evil-ex-cmd)
+ (1- (point))))))
+ (list beg end (evil-ex-completion-table))))))
+
+(defun evil-ex-completion-table ()
+ (cond
+ ((eq evil-ex-complete-emacs-commands nil)
+ #'evil-ex-command-collection)
+ ((eq evil-ex-complete-emacs-commands 'in-turn)
+ (completion-table-in-turn
+ #'evil-ex-command-collection
+ #'(lambda (str pred flag)
+ (completion-table-with-predicate
+ obarray #'commandp t str pred flag))))
+ (t
+ #'(lambda (str pred flag)
+ (evil-completion-table-concat
+ #'evil-ex-command-collection
+ #'(lambda (str pred flag)
+ (completion-table-with-predicate
+ obarray #'commandp t str pred flag))
+ str pred flag)))))
+
+(defun evil-completion-table-concat (table1 table2 string pred flag)
+ (cond
+ ((eq flag nil)
+ (let ((result1 (try-completion string table1 pred))
+ (result2 (try-completion string table2 pred)))
+ (cond
+ ((null result1) result2)
+ ((null result2) result1)
+ ((and (eq result1 t) (eq result2 t)) t)
+ (t result1))))
+ ((eq flag t)
+ (delete-dups
+ (append (all-completions string table1 pred)
+ (all-completions string table2 pred))))
+ ((eq flag 'lambda)
+ (and (or (eq t (test-completion string table1 pred))
+ (eq t (test-completion string table2 pred)))
+ t))
+ ((eq (car-safe flag) 'boundaries)
+ (or (completion-boundaries string table1 pred (cdr flag))
+ (completion-boundaries string table2 pred (cdr flag))))
+ ((eq flag 'metadata)
+ '(metadata (display-sort-function . evil-ex-sort-completions)))))
+
+(defun evil-ex-sort-completions (completions)
+ (sort completions
+ #'(lambda (str1 str2)
+ (let ((p1 (eq 'evil-ex-commands (get-text-property 0 'face str1)))
+ (p2 (eq 'evil-ex-commands (get-text-property 0 'face str2))))
+ (if (equal p1 p2)
+ (string< str1 str2)
+ p1)))))
+
+(defun evil-ex-command-collection (cmd predicate flag)
+ "Called to complete a command."
+ (let (commands)
+ ;; append ! to all commands that may take a bang argument
+ (dolist (cmd (mapcar #'car evil-ex-commands))
+ (push cmd commands)
+ (if (evil-ex-command-force-p cmd)
+ (push (concat cmd "!") commands)))
+ (when (eq evil-ex-complete-emacs-commands t)
+ (setq commands
+ (mapcar #'(lambda (str) (propertize str 'face 'evil-ex-commands))
+ commands)))
+ (cond
+ ((eq flag nil) (try-completion cmd commands predicate))
+ ((eq flag t) (all-completions cmd commands predicate))
+ ((eq flag 'lambda) (test-completion cmd commands))
+ ((eq (car-safe flag) 'boundaries)
+ `(boundaries 0 . ,(length (cdr flag)))))))
+
+(defun evil-ex-argument-completion-at-point ()
+ (let ((context (evil-ex-syntactic-context (1- (point)))))
+ (when (memq 'argument context)
+ ;; if it's an autoload, load the function; this allows external
+ ;; packages to register autoloaded ex commands which will be
+ ;; loaded when ex argument completion is triggered
+ (let ((binding-definition (symbol-function (evil-ex-binding evil-ex-cmd))))
+ (when (autoloadp binding-definition)
+ (autoload-do-load binding-definition)))
+
+ (let* ((beg (or (and evil-ex-argument
+ (get-text-property 0 'ex-index evil-ex-argument))
+ (point)))
+ (end (1+ (or (and evil-ex-argument
+ (get-text-property (1- (length evil-ex-argument))
+ 'ex-index
+ evil-ex-argument))
+ (1- (point)))))
+ (binding (evil-ex-completed-binding evil-ex-cmd))
+ (arg-type (evil-get-command-property binding :ex-arg))
+ (arg-handler (assoc arg-type evil-ex-argument-types))
+ (completer (and arg-handler
+ (evil-ex-argument-handler-completer
+ (cdr arg-handler)))))
+ (when completer
+ (if (eq (car completer) 'collection)
+ (list beg end (cdr completer))
+ (save-restriction
+ (narrow-to-region beg (point-max))
+ (funcall (cdr completer)))))))))
+
+(defun evil-ex-define-cmd (cmd function)
+ "Binds the function FUNCTION to the command CMD."
+ (save-match-data
+ (if (string-match "^[^][]*\\(\\[\\(.*\\)\\]\\)[^][]*$" cmd)
+ (let ((abbrev (replace-match "" nil t cmd 1))
+ (full (replace-match "\\2" nil nil cmd 1)))
+ (evil-add-to-alist 'evil-ex-commands full function)
+ (evil-add-to-alist 'evil-ex-commands abbrev full))
+ (evil-add-to-alist 'evil-ex-commands cmd function))))
+
+(defun evil-ex-make-argument-handler (runner completer)
+ (list runner completer))
+
+(defun evil-ex-argument-handler-runner (arg-handler)
+ (car arg-handler))
+
+(defun evil-ex-argument-handler-completer (arg-handler)
+ (cadr arg-handler))
+
+(defmacro evil-ex-define-argument-type (arg-type doc &rest body)
+ "Defines a new handler for argument-type ARG-TYPE.
+DOC is the documentation string. It is followed by a list of
+keywords and function:
+
+:collection COLLECTION
+
+ A collection for completion as required by `all-completions'.
+
+:completion-at-point FUNC
+
+ Function to be called to initialize a potential
+ completion. FUNC must match the requirements as described for
+ the variable `completion-at-point-functions'. When FUNC is
+ called the minibuffer content is narrowed to exactly match the
+ argument.
+
+:runner FUNC
+
+ Function to be called when the type of the current argument
+ changes or when the content of this argument changes. This
+ function should take one obligatory argument FLAG followed by
+ an optional argument ARG. FLAG is one of three symbol 'start,
+ 'stop or 'update. When the argument type is recognized for the
+ first time and this handler is started the FLAG is 'start. If
+ the argument type changes to something else or ex state
+ finished the handler FLAG is 'stop. If the content of the
+ argument has changed FLAG is 'update. If FLAG is either 'start
+ or 'update then ARG is the current value of this argument. If
+ FLAG is 'stop then arg is nil."
+ (declare (indent defun)
+ (debug (&define name
+ [&optional stringp]
+ [&rest [keywordp function-form]])))
+ (unless (stringp doc) (push doc body))
+ (let (runner completer)
+ (while (keywordp (car-safe body))
+ (let ((key (pop body))
+ (func (pop body)))
+ (cond
+ ((eq key :runner)
+ (setq runner func))
+ ((eq key :collection)
+ (setq completer (cons 'collection func)))
+ ((eq key :completion-at-point)
+ (setq completer (cons 'completion-at-point func))))))
+ `(eval-and-compile
+ (evil-add-to-alist
+ 'evil-ex-argument-types
+ ',arg-type
+ '(,runner ,completer)))))
+
+(evil-ex-define-argument-type file
+ "Handles a file argument."
+ :collection read-file-name-internal)
+
+(evil-ex-define-argument-type buffer
+ "Called to complete a buffer name argument."
+ :collection internal-complete-buffer)
+
+(declare-function shell-completion-vars "shell" ())
+
+(defun evil-ex-init-shell-argument-completion (flag &optional arg)
+ "Prepares the current minibuffer for completion of shell commands.
+This function must be called from the :runner function of some
+argument handler that requires shell completion."
+ (when (and (eq flag 'start)
+ (not evil-ex-shell-argument-initialized))
+ (set (make-local-variable 'evil-ex-shell-argument-initialized) t)
+ (cond
+ ;; Emacs 24
+ ((fboundp 'comint-completion-at-point)
+ (shell-completion-vars))
+ (t
+ (set (make-local-variable 'minibuffer-default-add-function)
+ 'minibuffer-default-add-shell-commands)))
+ (setq completion-at-point-functions
+ '(evil-ex-command-completion-at-point
+ evil-ex-argument-completion-at-point))))
+
+(define-obsolete-function-alias
+ 'evil-ex-shell-command-completion-at-point
+ 'comint-completion-at-point)
+
+(evil-ex-define-argument-type shell
+ "Shell argument type, supports completion."
+ :completion-at-point comint-completion-at-point
+ :runner evil-ex-init-shell-argument-completion)
+
+(defun evil-ex-file-or-shell-command-completion-at-point ()
+ (if (and (< (point-min) (point-max))
+ (= (char-after (point-min)) ?!))
+ (save-restriction
+ (narrow-to-region (1+ (point-min)) (point-max))
+ (comint-completion-at-point))
+ (list (point-min) (point-max) #'read-file-name-internal)))
+
+(evil-ex-define-argument-type file-or-shell
+ "File or shell argument type.
+If the current argument starts with a ! the rest of the argument
+is considered a shell command, otherwise a file-name. Completion
+works accordingly."
+ :completion-at-point evil-ex-file-or-shell-command-completion-at-point
+ :runner evil-ex-init-shell-argument-completion)
+
+(defun evil-ex-binding (command &optional noerror)
+ "Returns the final binding of COMMAND."
+ (save-match-data
+ (let ((binding command))
+ (when binding
+ (string-match "^\\(.+?\\)\\!?$" binding)
+ (setq binding (match-string 1 binding))
+ (while (progn
+ (setq binding (cdr (assoc binding evil-ex-commands)))
+ (stringp binding)))
+ (unless binding
+ (setq binding (intern command)))
+ (if (commandp binding)
+ ;; check for remaps
+ (or (command-remapping binding) binding)
+ (unless noerror
+ (user-error "Unknown command: `%s'" command)))))))
+
+(defun evil-ex-completed-binding (command &optional noerror)
+ "Returns the final binding of the completion of COMMAND."
+ (let ((completion (try-completion command evil-ex-commands)))
+ (evil-ex-binding (if (eq completion t) command
+ (or completion command))
+ noerror)))
+
+;;; TODO: extensions likes :p :~ <cfile> ...
+(defun evil-ex-replace-special-filenames (file-name)
+ "Replace special symbols in FILE-NAME.
+Replaces % by the current file-name,
+Replaces # by the alternate file-name in FILE-NAME."
+ (let ((current-fname (buffer-file-name))
+ (alternate-fname (and (other-buffer)
+ (buffer-file-name (other-buffer)))))
+ (when current-fname
+ (setq file-name
+ (replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%\\)"
+ current-fname file-name
+ t t 2)))
+ (when alternate-fname
+ (setq file-name
+ (replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(#\\)"
+ alternate-fname file-name
+ t t 2)))
+ (setq file-name
+ (replace-regexp-in-string "\\\\\\([#%]\\)"
+ "\\1" file-name t)))
+ file-name)
+
+(defun evil-ex-file-arg ()
+ "Returns the current Ex argument as a file name.
+This function interprets special file names like # and %."
+ (unless (or (null evil-ex-argument)
+ (zerop (length evil-ex-argument)))
+ (evil-ex-replace-special-filenames evil-ex-argument)))
+
+(defun evil-ex-repeat (count)
+ "Repeats the last ex command."
+ (interactive "P")
+ (when count
+ (goto-char (point-min))
+ (forward-line (1- count)))
+ (let ((evil-ex-current-buffer (current-buffer))
+ (hist evil-ex-history))
+ (while hist
+ (let ((evil-ex-last-cmd (pop hist)))
+ (when evil-ex-last-cmd
+ (evil-ex-update nil nil nil evil-ex-last-cmd)
+ (let ((binding (evil-ex-binding evil-ex-cmd)))
+ (unless (eq binding #'evil-ex-repeat)
+ (setq hist nil)
+ (if evil-ex-expression
+ (eval evil-ex-expression)
+ (user-error "Ex: syntax error")))))))))
+
+(defun evil-ex-call-command (range command argument)
+ "Execute the given command COMMAND."
+ (let* ((count (when (numberp range) range))
+ (range (when (evil-range-p range) range))
+ (bang (and (save-match-data (string-match ".!$" command)) t))
+ (evil-ex-point (point))
+ (evil-ex-range
+ (or range (and count (evil-ex-range count count))))
+ (evil-ex-command (evil-ex-completed-binding command))
+ (evil-ex-bang (and bang t))
+ (evil-ex-argument (copy-sequence argument))
+ (evil-this-type (evil-type evil-ex-range))
+ (current-prefix-arg count)
+ (prefix-arg current-prefix-arg))
+ (when (stringp evil-ex-argument)
+ (set-text-properties
+ 0 (length evil-ex-argument) nil evil-ex-argument))
+ (let ((buf (current-buffer)))
+ (unwind-protect
+ (cond
+ ((not evil-ex-range)
+ (setq this-command evil-ex-command)
+ (run-hooks 'pre-command-hook)
+ (call-interactively evil-ex-command)
+ (run-hooks 'post-command-hook))
+ (t
+ ;; set visual selection to match the region if an explicit
+ ;; range has been specified
+ (let ((ex-range (evil-copy-range evil-ex-range))
+ beg end)
+ (evil-expand-range ex-range)
+ (setq beg (evil-range-beginning ex-range)
+ end (evil-range-end ex-range))
+ (evil-sort beg end)
+ (setq this-command evil-ex-command)
+ (run-hooks 'pre-command-hook)
+ (set-mark end)
+ (goto-char beg)
+ (activate-mark)
+ (call-interactively evil-ex-command)
+ (run-hooks 'post-command-hook))))
+ (when (buffer-live-p buf)
+ (with-current-buffer buf
+ (deactivate-mark)))))))
+
+(defun evil-ex-line (base &optional offset)
+ "Return the line number of BASE plus OFFSET."
+ (+ (or base (line-number-at-pos))
+ (or offset 0)))
+
+(defun evil-ex-first-line ()
+ "Return the line number of the first line."
+ (line-number-at-pos (point-min)))
+
+(defun evil-ex-current-line ()
+ "Return the line number of the current line."
+ (line-number-at-pos (point)))
+
+(defun evil-ex-last-line ()
+ "Return the line number of the last line."
+ (save-excursion
+ (goto-char (point-max))
+ (when (bolp)
+ (forward-line -1))
+ (line-number-at-pos)))
+
+(defun evil-ex-range (beg-line &optional end-line)
+ "Returns the first and last position of the current range."
+ (evil-range
+ (evil-line-position beg-line)
+ (evil-line-position (or end-line beg-line) -1)
+ 'line
+ :expanded t))
+
+(defun evil-ex-full-range ()
+ "Return a range encompassing the whole buffer."
+ (evil-range (point-min) (point-max) 'line))
+
+(defun evil-ex-marker (marker)
+ "Return MARKER's line number in the current buffer.
+Signal an error if MARKER is in a different buffer."
+ (when (stringp marker)
+ (setq marker (aref marker 0)))
+ (setq marker (evil-get-marker marker))
+ (if (numberp marker)
+ (line-number-at-pos marker)
+ (user-error "Ex does not support markers in other files")))
+
+(defun evil-ex-char-marker-range (beg end)
+ (when (stringp beg) (setq beg (aref beg 0)))
+ (when (stringp end) (setq end (aref end 0)))
+ (setq beg (evil-get-marker beg)
+ end (evil-get-marker end))
+ (if (and (numberp beg) (numberp end))
+ (evil-expand-range
+ (evil-range beg end
+ (if (evil-visual-state-p)
+ (evil-visual-type)
+ 'inclusive)))
+ (user-error "Ex does not support markers in other files")))
+
+(defun evil-ex-re-fwd (pattern)
+ "Search forward for PATTERN.
+Returns the line number of the match."
+ (condition-case err
+ (save-match-data
+ (save-excursion
+ (set-text-properties 0 (length pattern) nil pattern)
+ (evil-move-end-of-line)
+ (and (re-search-forward pattern nil t)
+ (line-number-at-pos (1- (match-end 0))))))
+ (invalid-regexp
+ (evil-ex-echo (cadr err))
+ nil)))
+
+(defun evil-ex-re-bwd (pattern)
+ "Search backward for PATTERN.
+Returns the line number of the match."
+ (condition-case err
+ (save-match-data
+ (save-excursion
+ (set-text-properties 0 (length pattern) nil pattern)
+ (evil-move-beginning-of-line)
+ (and (re-search-backward pattern nil t)
+ (line-number-at-pos (match-beginning 0)))))
+ (invalid-regexp
+ (evil-ex-echo (cadr err))
+ nil)))
+
+(defun evil-ex-prev-search ()
+ (error "Previous search not yet implemented"))
+
+(defun evil-ex-signed-number (sign &optional number)
+ "Return a signed number like -3 and +1.
+NUMBER defaults to 1."
+ (funcall sign (or number 1)))
+
+(defun evil-ex-eval (string &optional start)
+ "Evaluate STRING as an Ex command.
+START is the start symbol, which defaults to `expression'."
+ ;; disable the mark before executing, otherwise the visual region
+ ;; may be used as operator range instead of the ex-range
+ (let ((form (evil-ex-parse string nil start))
+ transient-mark-mode deactivate-mark)
+ (eval form)))
+
+(defun evil-ex-parse (string &optional syntax start)
+ "Parse STRING as an Ex expression and return an evaluation tree.
+If SYNTAX is non-nil, return a syntax tree instead.
+START is the start symbol, which defaults to `expression'."
+ (let* ((start (or start (car-safe (car-safe evil-ex-grammar))))
+ (match (evil-parser
+ string start evil-ex-grammar t syntax)))
+ (car-safe match)))
+
+(defun evil-ex-parse-command (string)
+ "Parse STRING as an Ex binding."
+ (let ((result (evil-parser string 'binding evil-ex-grammar))
+ bang command)
+ (when result
+ (setq command (car-safe result)
+ string (cdr-safe result))
+ ;; check whether the parsed command is followed by a slash or
+ ;; number and the part before it is not a known ex binding
+ (when (and (> (length string) 0)
+ (string-match-p "^[/[:digit:]]" string)
+ (not (evil-ex-binding command t)))
+ ;; if this is the case, assume the slash or number and all
+ ;; following symbol characters form an (Emacs-)command
+ (setq result (evil-parser (concat command string)
+ 'emacs-binding
+ evil-ex-grammar)
+ command (car-safe result)
+ string (cdr-safe result)))
+ ;; parse a following "!" as bang only if
+ ;; the command has the property :ex-bang t
+ (when (evil-ex-command-force-p command)
+ (setq result (evil-parser string 'bang evil-ex-grammar)
+ bang (or (car-safe result) "")
+ string (cdr-safe result)
+ command (concat command bang)))
+ (cons command string))))
+
+(defun evil-ex-command-force-p (command)
+ "Whether COMMAND accepts the bang argument."
+ (let ((binding (evil-ex-completed-binding command t)))
+ (when binding
+ (evil-get-command-property binding :ex-bang))))
+
+(defun evil-flatten-syntax-tree (tree)
+ "Find all paths from the root of TREE to its leaves.
+TREE is a syntax tree, i.e., all its leave nodes are strings.
+The `nth' element in the result is the syntactic context
+for the corresponding string index (counted from zero)."
+ (let* ((result nil)
+ (traverse nil)
+ (traverse
+ #'(lambda (tree path)
+ (if (stringp tree)
+ (dotimes (char (length tree))
+ (push path result))
+ (let ((path (cons (car tree) path)))
+ (dolist (subtree (cdr tree))
+ (funcall traverse subtree path)))))))
+ (funcall traverse tree nil)
+ (nreverse result)))
+
+(defun evil-ex-syntactic-context (&optional pos)
+ "Return the syntactical context of the character at POS.
+POS defaults to the current position of point."
+ (let* ((contexts (evil-flatten-syntax-tree evil-ex-tree))
+ (length (length contexts))
+ (pos (- (or pos (point)) (minibuffer-prompt-end))))
+ (when (>= pos length)
+ (setq pos (1- length)))
+ (when (< pos 0)
+ (setq pos 0))
+ (when contexts
+ (nth pos contexts))))
+
+(defun evil-parser (string symbol grammar &optional greedy syntax)
+ "Parse STRING as a SYMBOL in GRAMMAR.
+If GREEDY is non-nil, the whole of STRING must match.
+If the parse succeeds, the return value is a cons cell
+\(RESULT . TAIL), where RESULT is a parse tree and TAIL is
+the remainder of STRING. Otherwise, the return value is nil.
+
+GRAMMAR is an association list of symbols and their definitions.
+A definition is either a list of production rules, which are
+tried in succession, or a #'-quoted function, which is called
+to parse the input.
+
+A production rule can be one of the following:
+
+ nil matches the empty string.
+ A regular expression matches a substring.
+ A symbol matches a production for that symbol.
+ (X Y) matches X followed by Y.
+ (\\? X) matches zero or one of X.
+ (* X) matches zero or more of X.
+ (+ X) matches one or more of X.
+ (& X) matches X, but does not consume.
+ (! X) matches anything but X, but does not consume.
+
+Thus, a simple grammar may look like:
+
+ ((plus \"\\\\+\") ; plus <- \"+\"
+ (minus \"-\") ; minus <- \"-\"
+ (operator plus minus)) ; operator <- plus / minus
+
+All input-consuming rules have a value. A regular expression evaluates
+to the text matched, while a list evaluates to a list of values.
+The value of a list may be overridden with a semantic action, which is
+specified with a #'-quoted expression at the end:
+
+ (X Y #'foo)
+
+The value of this rule is the result of calling foo with the values
+of X and Y as arguments. Alternatively, the function call may be
+specified explicitly:
+
+ (X Y #'(foo $1 $2))
+
+Here, $1 refers to X and $2 refers to Y. $0 refers to the whole list.
+Dollar expressions can also be used directly:
+
+ (X Y #'$1)
+
+This matches X followed by Y, but ignores the value of Y;
+the value of the list is the same as the value of X.
+
+If the SYNTAX argument is non-nil, then all semantic actions
+are ignored, and a syntax tree is constructed instead. The
+syntax tree obeys the property that all the leave nodes are
+parts of the input string. Thus, by traversing the syntax tree,
+one can determine how each character was parsed.
+
+The following symbols have reserved meanings within a grammar:
+`\\?', `*', `+', `&', `!', `function', `alt', `seq' and nil."
+ (let ((string (or string ""))
+ func pair result rules tail)
+ (cond
+ ;; epsilon
+ ((member symbol '("" nil))
+ (setq pair (cons (if syntax "" nil) string)))
+ ;; token
+ ((stringp symbol)
+ (save-match-data
+ (when (or (eq (string-match symbol string) 0)
+ ;; ignore leading whitespace
+ (and (eq (string-match "^[ \f\t\n\r\v]+" string) 0)
+ (eq (match-end 0)
+ (string-match
+ symbol string (match-end 0)))))
+ (setq result (match-string 0 string)
+ tail (substring string (match-end 0))
+ pair (cons result tail))
+ (when (and syntax pair)
+ (setq result (substring string 0
+ (- (length string)
+ (length tail))))
+ (setcar pair result)))))
+ ;; symbol
+ ((symbolp symbol)
+ (let ((context symbol))
+ (setq rules (cdr-safe (assq symbol grammar)))
+ (setq pair (evil-parser string `(alt ,@rules)
+ grammar greedy syntax))
+ (when (and syntax pair)
+ (setq result (car pair))
+ (if (and (listp result) (sequencep (car result)))
+ (setq result `(,symbol ,@result))
+ (setq result `(,symbol ,result)))
+ (setcar pair result))))
+ ;; function
+ ((eq (car-safe symbol) 'function)
+ (setq symbol (cadr symbol)
+ pair (funcall symbol string))
+ (when (and syntax pair)
+ (setq tail (or (cdr pair) "")
+ result (substring string 0
+ (- (length string)
+ (length tail))))
+ (setcar pair result)))
+ ;; list
+ ((listp symbol)
+ (setq rules symbol
+ symbol (car-safe rules))
+ (if (memq symbol '(& ! \? * + alt seq))
+ (setq rules (cdr rules))
+ (setq symbol 'seq))
+ (when (and (memq symbol '(+ alt seq))
+ (> (length rules) 1))
+ (setq func (car (last rules)))
+ (if (eq (car-safe func) 'function)
+ (setq rules (delq func (copy-sequence rules))
+ func (cadr func))
+ (setq func nil)))
+ (cond
+ ;; positive lookahead
+ ((eq symbol '&)
+ (when (evil-parser string rules grammar greedy syntax)
+ (setq pair (evil-parser string nil grammar nil syntax))))
+ ;; negative lookahead
+ ((eq symbol '!)
+ (unless (evil-parser string rules grammar greedy syntax)
+ (setq pair (evil-parser string nil grammar nil syntax))))
+ ;; zero or one
+ ((eq symbol '\?)
+ (setq rules (if (> (length rules) 1)
+ `(alt ,rules nil)
+ `(alt ,@rules nil))
+ pair (evil-parser string rules grammar greedy syntax)))
+ ;; zero or more
+ ((eq symbol '*)
+ (setq rules `(alt (+ ,@rules) nil)
+ pair (evil-parser string rules grammar greedy syntax)))
+ ;; one or more
+ ((eq symbol '+)
+ (let (current results)
+ (catch 'done
+ (while (setq current (evil-parser
+ string rules grammar nil syntax))
+ (setq result (car-safe current)
+ tail (or (cdr-safe current) "")
+ results (append results (if syntax result
+ (cdr-safe result))))
+ ;; stop if stuck
+ (if (equal string tail)
+ (throw 'done nil)
+ (setq string tail))))
+ (when results
+ (setq func (or func 'list)
+ pair (cons results tail)))))
+ ;; alternatives
+ ((eq symbol 'alt)
+ (catch 'done
+ (dolist (rule rules)
+ (when (setq pair (evil-parser
+ string rule grammar greedy syntax))
+ (throw 'done pair)))))
+ ;; sequence
+ (t
+ (setq func (or func 'list))
+ (let ((last (car-safe (last rules)))
+ current results rule)
+ (catch 'done
+ (while rules
+ (setq rule (pop rules)
+ current (evil-parser string rule grammar
+ (when greedy
+ (null rules))
+ syntax))
+ (cond
+ ((null current)
+ (setq results nil)
+ (throw 'done nil))
+ (t
+ (setq result (car-safe current)
+ tail (cdr-safe current))
+ (unless (memq (car-safe rule) '(& !))
+ (if (and syntax
+ (or (null result)
+ (and (listp result)
+ (listp rule)
+ ;; splice in single-element
+ ;; (\? ...) expressions
+ (not (and (eq (car-safe rule) '\?)
+ (eq (length rule) 2))))))
+ (setq results (append results result))
+ (setq results (append results (list result)))))
+ (setq string (or tail ""))))))
+ (when results
+ (setq pair (cons results tail))))))
+ ;; semantic action
+ (when (and pair func (not syntax))
+ (setq result (car pair))
+ (let* ((dexp
+ #'(lambda (obj)
+ (when (symbolp obj)
+ (let ((str (symbol-name obj)))
+ (save-match-data
+ (when (string-match "\\$\\([0-9]+\\)" str)
+ (string-to-number (match-string 1 str))))))))
+ ;; traverse a tree for dollar expressions
+ (dval nil)
+ (dval
+ #'(lambda (obj)
+ (if (listp obj)
+ (mapcar dval obj)
+ (let ((num (funcall dexp obj)))
+ (if num
+ (if (not (listp result))
+ result
+ (if (eq num 0)
+ `(list ,@result)
+ (nth (1- num) result)))
+ obj))))))
+ (cond
+ ((null func)
+ (setq result nil))
+ ;; lambda function
+ ((eq (car-safe func) 'lambda)
+ (if (memq symbol '(+ seq))
+ (setq result `(funcall ,func ,@result))
+ (setq result `(funcall ,func ,result))))
+ ;; string replacement
+ ((or (stringp func) (stringp (car-safe func)))
+ (let* ((symbol (or (car-safe (cdr-safe func))
+ (and (boundp 'context) context)
+ (car-safe (car-safe grammar))))
+ (string (if (stringp func) func (car-safe func))))
+ (setq result (car-safe (evil-parser string symbol grammar
+ greedy syntax)))))
+ ;; dollar expression
+ ((funcall dexp func)
+ (setq result (funcall dval func)))
+ ;; function call
+ ((listp func)
+ (setq result (funcall dval func)))
+ ;; symbol
+ (t
+ (if (memq symbol '(+ seq))
+ (setq result `(,func ,@result))
+ (setq result `(,func ,result))))))
+ (setcar pair result))))
+ ;; weed out incomplete matches
+ (when pair
+ (if (not greedy) pair
+ (if (null (cdr pair)) pair
+ ;; ignore trailing whitespace
+ (when (save-match-data (string-match "^[ \f\t\n\r\v]*$" (cdr pair)))
+ (unless syntax (setcdr pair nil))
+ pair))))))
+
+(provide 'evil-ex)
+
+;;; evil-ex.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-ex.elc b/.emacs.d/elpa/evil-20171210.501/evil-ex.elc
new file mode 100644
index 0000000..369d758
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-ex.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-integration.el b/.emacs.d/elpa/evil-20171210.501/evil-integration.el
new file mode 100644
index 0000000..cf9c00e
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-integration.el
@@ -0,0 +1,573 @@
+;;; evil-integration.el --- Integrate Evil with other modules
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-maps)
+(require 'evil-core)
+(require 'evil-macros)
+(require 'evil-types)
+(require 'evil-repeat)
+
+;;; Code:
+
+;;; Evilize some commands
+
+;; unbound keys should be ignored
+(evil-declare-ignore-repeat 'undefined)
+
+(mapc #'(lambda (cmd)
+ (evil-set-command-property cmd :keep-visual t)
+ (evil-declare-not-repeat cmd))
+ '(digit-argument
+ negative-argument
+ universal-argument
+ universal-argument-minus
+ universal-argument-more
+ universal-argument-other-key))
+(mapc #'evil-declare-not-repeat
+ '(what-cursor-position))
+(mapc #'evil-declare-change-repeat
+ '(dabbrev-expand
+ hippie-expand
+ quoted-insert))
+(mapc #'evil-declare-abort-repeat
+ '(balance-windows
+ eval-expression
+ execute-extended-command
+ exit-minibuffer
+ compile
+ delete-window
+ delete-other-windows
+ find-file-at-point
+ ffap-other-window
+ recompile
+ redo
+ save-buffer
+ split-window
+ split-window-horizontally
+ split-window-vertically
+ undo
+ undo-tree-redo
+ undo-tree-undo))
+
+(evil-set-type #'previous-line 'line)
+(evil-set-type #'next-line 'line)
+
+(dolist (cmd '(keyboard-quit keyboard-escape-quit))
+ (evil-set-command-property cmd :suppress-operator t))
+
+;;; Mouse
+(evil-declare-insert-at-point-repeat 'mouse-yank-primary)
+(evil-declare-insert-at-point-repeat 'mouse-yank-secondary)
+
+;;; key-binding
+
+;; Calling `keyboard-quit' should cancel repeat
+(defadvice keyboard-quit (before evil activate)
+ (when (fboundp 'evil-repeat-abort)
+ (evil-repeat-abort)))
+
+;; etags-select
+;; FIXME: probably etags-select should be recomended in docs
+(eval-after-load 'etags-select
+ '(progn
+ (define-key evil-motion-state-map "g]" 'etags-select-find-tag-at-point)))
+
+;;; Buffer-menu
+
+(evil-add-hjkl-bindings Buffer-menu-mode-map 'motion)
+
+;; dictionary.el
+
+(evil-add-hjkl-bindings dictionary-mode-map 'motion
+ "?" 'dictionary-help ; "h"
+ "C-o" 'dictionary-previous) ; "l"
+
+;;; Dired
+
+(eval-after-load 'dired
+ '(progn
+ ;; use the standard Dired bindings as a base
+ (defvar dired-mode-map)
+ (evil-make-overriding-map dired-mode-map 'normal)
+ (evil-add-hjkl-bindings dired-mode-map 'normal
+ "J" 'dired-goto-file ; "j"
+ "K" 'dired-do-kill-lines ; "k"
+ "r" 'dired-do-redisplay ; "l"
+ ;; ":d", ":v", ":s", ":e"
+ ";" (lookup-key dired-mode-map ":"))))
+
+(eval-after-load 'wdired
+ '(progn
+ (add-hook 'wdired-mode-hook #'evil-change-to-initial-state)
+ (defadvice wdired-change-to-dired-mode (after evil activate)
+ (evil-change-to-initial-state nil t))))
+
+;;; ELP
+
+(eval-after-load 'elp
+ '(defadvice elp-results (after evil activate)
+ (evil-motion-state)))
+
+;;; ERT
+
+(evil-add-hjkl-bindings ert-results-mode-map 'motion)
+
+;;; Info
+
+(evil-add-hjkl-bindings Info-mode-map 'motion
+ "0" 'evil-digit-argument-or-evil-beginning-of-line
+ (kbd "\M-h") 'Info-help ; "h"
+ "\C-t" 'Info-history-back ; "l"
+ "\C-o" 'Info-history-back
+ " " 'Info-scroll-up
+ "\C-]" 'Info-follow-nearest-node
+ (kbd "DEL") 'Info-scroll-down)
+
+;;; Parentheses
+
+(defadvice show-paren-function (around evil disable)
+ "Match parentheses in Normal state."
+ (if (if (memq 'not evil-highlight-closing-paren-at-point-states)
+ (memq evil-state evil-highlight-closing-paren-at-point-states)
+ (not (memq evil-state evil-highlight-closing-paren-at-point-states)))
+ ad-do-it
+ (let ((pos (point)) syntax narrow)
+ (setq pos
+ (catch 'end
+ (dotimes (var (1+ (* 2 evil-show-paren-range)))
+ (if (zerop (mod var 2))
+ (setq pos (+ pos var))
+ (setq pos (- pos var)))
+ (setq syntax (syntax-class (syntax-after pos)))
+ (cond
+ ((eq syntax 4)
+ (setq narrow pos)
+ (throw 'end pos))
+ ((eq syntax 5)
+ (throw 'end (1+ pos)))))))
+ (if pos
+ (save-excursion
+ (goto-char pos)
+ (save-restriction
+ (when narrow
+ (narrow-to-region narrow (point-max)))
+ ad-do-it))
+ ;; prevent the preceding pair from being highlighted
+ (dolist (ov '(show-paren--overlay
+ show-paren--overlay-1
+ show-paren-overlay
+ show-paren-overlay-1))
+ (let ((ov (and (boundp ov) (symbol-value ov))))
+ (when (overlayp ov) (delete-overlay ov))))))))
+
+;;; Speedbar
+
+(evil-add-hjkl-bindings speedbar-key-map 'motion
+ "h" 'backward-char
+ "j" 'speedbar-next
+ "k" 'speedbar-prev
+ "l" 'forward-char
+ "i" 'speedbar-item-info
+ "r" 'speedbar-refresh
+ "u" 'speedbar-up-directory
+ "o" 'speedbar-toggle-line-expansion
+ (kbd "RET") 'speedbar-edit-line)
+
+;; Ibuffer
+(eval-after-load 'ibuffer
+ '(progn
+ (defvar ibuffer-mode-map)
+ (evil-make-overriding-map ibuffer-mode-map 'normal)
+ (evil-define-key 'normal ibuffer-mode-map
+ "j" 'evil-next-line
+ "k" 'evil-previous-line
+ "RET" 'ibuffer-visit-buffer)))
+
+;;; Undo tree
+(when (and (require 'undo-tree nil t)
+ (fboundp 'global-undo-tree-mode))
+ (global-undo-tree-mode 1))
+
+(eval-after-load 'undo-tree
+ '(with-no-warnings
+ (defun evil-turn-on-undo-tree-mode ()
+ "Enable `undo-tree-mode' if evil is enabled.
+This function enables `undo-tree-mode' when Evil is activated in
+some buffer, but only if `global-undo-tree-mode' is also
+activated."
+ (when (and (boundp 'global-undo-tree-mode)
+ global-undo-tree-mode)
+ (turn-on-undo-tree-mode)))
+
+ (add-hook 'evil-local-mode-hook #'evil-turn-on-undo-tree-mode)
+
+ (defadvice undo-tree-visualize (after evil activate)
+ "Initialize Evil in the visualization buffer."
+ (when evil-local-mode
+ (evil-initialize-state)))
+
+ (when (fboundp 'undo-tree-visualize)
+ (evil-ex-define-cmd "undol[ist]" 'undo-tree-visualize)
+ (evil-ex-define-cmd "ul" 'undo-tree-visualize))
+
+ (when (boundp 'undo-tree-visualizer-mode-map)
+ (define-key undo-tree-visualizer-mode-map
+ [remap evil-backward-char] 'undo-tree-visualize-switch-branch-left)
+ (define-key undo-tree-visualizer-mode-map
+ [remap evil-forward-char] 'undo-tree-visualize-switch-branch-right)
+ (define-key undo-tree-visualizer-mode-map
+ [remap evil-next-line] 'undo-tree-visualize-redo)
+ (define-key undo-tree-visualizer-mode-map
+ [remap evil-previous-line] 'undo-tree-visualize-undo)
+ (define-key undo-tree-visualizer-mode-map
+ [remap evil-ret] 'undo-tree-visualizer-set))
+
+ (when (boundp 'undo-tree-visualizer-selection-mode-map)
+ (define-key undo-tree-visualizer-selection-mode-map
+ [remap evil-backward-char] 'undo-tree-visualizer-select-left)
+ (define-key undo-tree-visualizer-selection-mode-map
+ [remap evil-forward-char] 'undo-tree-visualizer-select-right)
+ (define-key undo-tree-visualizer-selection-mode-map
+ [remap evil-next-line] 'undo-tree-visualizer-select-next)
+ (define-key undo-tree-visualizer-selection-mode-map
+ [remap evil-previous-line] 'undo-tree-visualizer-select-previous)
+ (define-key undo-tree-visualizer-selection-mode-map
+ [remap evil-ret] 'undo-tree-visualizer-set))))
+
+;;; Auto-complete
+(eval-after-load 'auto-complete
+ '(progn
+ (evil-add-command-properties 'auto-complete :repeat 'evil-ac-repeat)
+ (evil-add-command-properties 'ac-complete :repeat 'evil-ac-repeat)
+ (evil-add-command-properties 'ac-expand :repeat 'evil-ac-repeat)
+ (evil-add-command-properties 'ac-next :repeat 'ignore)
+ (evil-add-command-properties 'ac-previous :repeat 'ignore)
+
+ (defvar evil-ac-prefix-len nil
+ "The length of the prefix of the current item to be completed.")
+
+ (defvar ac-prefix)
+ (defun evil-ac-repeat (flag)
+ "Record the changes for auto-completion."
+ (cond
+ ((eq flag 'pre)
+ (setq evil-ac-prefix-len (length ac-prefix))
+ (evil-repeat-start-record-changes))
+ ((eq flag 'post)
+ ;; Add change to remove the prefix
+ (evil-repeat-record-change (- evil-ac-prefix-len)
+ ""
+ evil-ac-prefix-len)
+ ;; Add change to insert the full completed text
+ (evil-repeat-record-change
+ (- evil-ac-prefix-len)
+ (buffer-substring-no-properties (- evil-repeat-pos
+ evil-ac-prefix-len)
+ (point))
+ 0)
+ ;; Finish repeation
+ (evil-repeat-finish-record-changes))))))
+
+;;; Company
+(eval-after-load 'company
+ '(progn
+ (mapc #'evil-declare-change-repeat
+ '(company-complete-mouse
+ company-complete-number
+ company-complete-selection
+ company-complete-common))
+
+ (mapc #'evil-declare-ignore-repeat
+ '(company-abort
+ company-select-next
+ company-select-previous
+ company-select-next-or-abort
+ company-select-previous-or-abort
+ company-select-mouse
+ company-show-doc-buffer
+ company-show-location
+ company-search-candidates
+ company-filter-candidates))))
+
+;; Eval last sexp
+(cond
+ ((version< emacs-version "25")
+ (defadvice preceding-sexp (around evil activate)
+ "In normal-state or motion-state, last sexp ends at point."
+ (if (and (not evil-move-beyond-eol)
+ (or (evil-normal-state-p) (evil-motion-state-p)))
+ (save-excursion
+ (unless (or (eobp) (eolp)) (forward-char))
+ ad-do-it)
+ ad-do-it))
+
+ (defadvice pp-last-sexp (around evil activate)
+ "In normal-state or motion-state, last sexp ends at point."
+ (if (and (not evil-move-beyond-eol)
+ (or (evil-normal-state-p) (evil-motion-state-p)))
+ (save-excursion
+ (unless (or (eobp) (eolp)) (forward-char))
+ ad-do-it)
+ ad-do-it)))
+ (t
+ (defun evil--preceding-sexp (command &rest args)
+ "In normal-state or motion-state, last sexp ends at point."
+ (if (and (not evil-move-beyond-eol)
+ (or (evil-normal-state-p) (evil-motion-state-p)))
+ (save-excursion
+ (unless (or (eobp) (eolp)) (forward-char))
+ (apply command args))
+ (apply command args)))
+
+ (advice-add 'elisp--preceding-sexp :around 'evil--preceding-sexp '((name . evil)))
+ (advice-add 'pp-last-sexp :around 'evil--preceding-sexp '((name . evil)))))
+
+;; Show key
+(defadvice quail-show-key (around evil activate)
+ "Temporarily go to Emacs state"
+ (evil-with-state emacs ad-do-it))
+
+(defadvice describe-char (around evil activate)
+ "Temporarily go to Emacs state"
+ (evil-with-state emacs ad-do-it))
+
+;; ace-jump-mode
+(declare-function 'ace-jump-char-mode "ace-jump-mode")
+(declare-function 'ace-jump-word-mode "ace-jump-mode")
+(declare-function 'ace-jump-line-mode "ace-jump-mode")
+
+(defvar evil-ace-jump-active nil)
+
+(defmacro evil-enclose-ace-jump-for-motion (&rest body)
+ "Enclose ace-jump to make it suitable for motions.
+This includes restricting `ace-jump-mode' to the current window
+in visual and operator state, deactivating visual updates, saving
+the mark and entering `recursive-edit'."
+ (declare (indent defun)
+ (debug t))
+ `(let ((old-mark (mark))
+ (ace-jump-mode-scope
+ (if (and (not (memq evil-state '(visual operator)))
+ (boundp 'ace-jump-mode-scope))
+ ace-jump-mode-scope
+ 'window)))
+ (remove-hook 'pre-command-hook #'evil-visual-pre-command t)
+ (remove-hook 'post-command-hook #'evil-visual-post-command t)
+ (unwind-protect
+ (let ((evil-ace-jump-active 'prepare))
+ (add-hook 'ace-jump-mode-end-hook
+ #'evil-ace-jump-exit-recursive-edit)
+ ,@body
+ (when evil-ace-jump-active
+ (setq evil-ace-jump-active t)
+ (recursive-edit)))
+ (remove-hook 'post-command-hook
+ #'evil-ace-jump-exit-recursive-edit)
+ (remove-hook 'ace-jump-mode-end-hook
+ #'evil-ace-jump-exit-recursive-edit)
+ (if (evil-visual-state-p)
+ (progn
+ (add-hook 'pre-command-hook #'evil-visual-pre-command nil t)
+ (add-hook 'post-command-hook #'evil-visual-post-command nil t)
+ (set-mark old-mark))
+ (push-mark old-mark)))))
+
+(eval-after-load 'ace-jump-mode
+ `(defadvice ace-jump-done (after evil activate)
+ (when evil-ace-jump-active
+ (add-hook 'post-command-hook #'evil-ace-jump-exit-recursive-edit))))
+
+(defun evil-ace-jump-exit-recursive-edit ()
+ "Exit a recursive edit caused by an evil jump."
+ (cond
+ ((eq evil-ace-jump-active 'prepare)
+ (setq evil-ace-jump-active nil))
+ (evil-ace-jump-active
+ (remove-hook 'post-command-hook #'evil-ace-jump-exit-recursive-edit)
+ (exit-recursive-edit))))
+
+(evil-define-motion evil-ace-jump-char-mode (count)
+ "Jump visually directly to a char using ace-jump."
+ :type inclusive
+ (evil-without-repeat
+ (let ((pnt (point))
+ (buf (current-buffer)))
+ (evil-enclose-ace-jump-for-motion
+ (call-interactively 'ace-jump-char-mode))
+ ;; if we jump backwards, motion type is exclusive, analogously
+ ;; to `evil-find-char-backward'
+ (when (and (equal buf (current-buffer))
+ (< (point) pnt))
+ (setq evil-this-type
+ (cond
+ ((eq evil-this-type 'exclusive) 'inclusive)
+ ((eq evil-this-type 'inclusive) 'exclusive)))))))
+
+(evil-define-motion evil-ace-jump-char-to-mode (count)
+ "Jump visually to the char in front of a char using ace-jump."
+ :type inclusive
+ (evil-without-repeat
+ (let ((pnt (point))
+ (buf (current-buffer)))
+ (evil-enclose-ace-jump-for-motion
+ (call-interactively 'ace-jump-char-mode))
+ (if (and (equal buf (current-buffer))
+ (< (point) pnt))
+ (progn
+ (or (eobp) (forward-char))
+ (setq evil-this-type
+ (cond
+ ((eq evil-this-type 'exclusive) 'inclusive)
+ ((eq evil-this-type 'inclusive) 'exclusive))))
+ (backward-char)))))
+
+(evil-define-motion evil-ace-jump-line-mode (count)
+ "Jump visually to the beginning of a line using ace-jump."
+ :type line
+ :repeat abort
+ (evil-without-repeat
+ (evil-enclose-ace-jump-for-motion
+ (call-interactively 'ace-jump-line-mode))))
+
+(evil-define-motion evil-ace-jump-word-mode (count)
+ "Jump visually to the beginning of a word using ace-jump."
+ :type exclusive
+ :repeat abort
+ (evil-without-repeat
+ (evil-enclose-ace-jump-for-motion
+ (call-interactively 'ace-jump-word-mode))))
+
+(define-key evil-motion-state-map [remap ace-jump-char-mode] #'evil-ace-jump-char-mode)
+(define-key evil-motion-state-map [remap ace-jump-line-mode] #'evil-ace-jump-line-mode)
+(define-key evil-motion-state-map [remap ace-jump-word-mode] #'evil-ace-jump-word-mode)
+
+;;; avy
+(declare-function 'avy-goto-word-or-subword-1 "avy")
+(declare-function 'avy-goto-line "avy")
+(declare-function 'avy-goto-char "avy")
+(declare-function 'avy-goto-char-2 "avy")
+(declare-function 'avy-goto-char-2-above "avy")
+(declare-function 'avy-goto-char-2-below "avy")
+(declare-function 'avy-goto-char-in-line "avy")
+(declare-function 'avy-goto-word-0 "avy")
+(declare-function 'avy-goto-word-1 "avy")
+(declare-function 'avy-goto-word-1-above "avy")
+(declare-function 'avy-goto-word-1-below "avy")
+(declare-function 'avy-goto-subword-0 "avy")
+(declare-function 'avy-goto-subword-1 "avy")
+(declare-function 'avy-goto-char-timer "avy")
+
+(defmacro evil-enclose-avy-for-motion (&rest body)
+ "Enclose avy to make it suitable for motions.
+Based on `evil-enclose-ace-jump-for-motion'."
+ (declare (indent defun)
+ (debug t))
+ `(let ((avy-all-windows
+ (if (and (not (memq evil-state '(visual operator)))
+ (boundp 'avy-all-windows))
+ avy-all-windows
+ nil)))
+ ,@body))
+
+(defmacro evil-define-avy-motion (command type)
+ (declare (indent defun)
+ (debug t))
+ (let ((name (intern (format "evil-%s" command))))
+ `(evil-define-motion ,name (_count)
+ ,(format "Evil motion for `%s'." command)
+ :type ,type
+ :jump t
+ :repeat abort
+ (evil-without-repeat
+ (evil-enclose-avy-for-motion
+ (call-interactively ',command))))))
+
+;; define evil-avy-* motion commands for avy-* commands
+(evil-define-avy-motion avy-goto-word-or-subword-1 exclusive)
+(evil-define-avy-motion avy-goto-line line)
+(evil-define-avy-motion avy-goto-char inclusive)
+(evil-define-avy-motion avy-goto-char-2 inclusive)
+(evil-define-avy-motion avy-goto-char-2-above inclusive)
+(evil-define-avy-motion avy-goto-char-2-below inclusive)
+(evil-define-avy-motion avy-goto-char-in-line inclusive)
+(evil-define-avy-motion avy-goto-char-timer inclusive)
+(evil-define-avy-motion avy-goto-word-0 exclusive)
+(evil-define-avy-motion avy-goto-word-1 exclusive)
+(evil-define-avy-motion avy-goto-word-1-above exclusive)
+(evil-define-avy-motion avy-goto-word-1-below exclusive)
+(evil-define-avy-motion avy-goto-subword-0 exclusive)
+(evil-define-avy-motion avy-goto-subword-1 exclusive)
+
+;; remap avy-* commands to evil-avy-* commands
+(dolist (command '(avy-goto-word-or-subword-1
+ avy-goto-line
+ avy-goto-char
+ avy-goto-char-2
+ avy-goto-char-2-above
+ avy-goto-char-2-below
+ avy-goto-char-in-line
+ avy-goto-char-timer
+ avy-goto-word-0
+ avy-goto-word-1
+ avy-goto-word-1-above
+ avy-goto-word-1-below
+ avy-goto-subword-0
+ avy-goto-subword-1))
+ (define-key evil-motion-state-map
+ (vector 'remap command) (intern-soft (format "evil-%s" command))))
+
+;;; nXhtml/mumamo
+;; ensure that mumamo does not toggle evil through its globalized mode
+(eval-after-load 'mumamo
+ '(with-no-warnings
+ (push 'evil-mode-cmhh mumamo-change-major-mode-no-nos)))
+
+;;; ag.el
+(eval-after-load 'ag
+ '(progn
+ (defvar ag-mode-map)
+ (add-to-list 'evil-motion-state-modes 'ag-mode)
+ (evil-add-hjkl-bindings ag-mode-map 'motion)))
+
+;; visual-line-mode integration
+(when evil-respect-visual-line-mode
+ (let ((swaps '((evil-next-line . evil-next-visual-line)
+ (evil-previous-line . evil-previous-visual-line)
+ (evil-beginning-of-line . evil-beginning-of-visual-line)
+ (evil-end-of-line . evil-end-of-visual-line))))
+ (dolist (swap swaps)
+ (define-key visual-line-mode-map (vector 'remap (car swap)) (cdr swap))
+ (define-key visual-line-mode-map (vector 'remap (cdr swap)) (car swap)))))
+
+;;; abbrev.el
+(when evil-want-abbrev-expand-on-insert-exit
+ (eval-after-load 'abbrev
+ '(add-hook 'evil-insert-state-exit-hook 'expand-abbrev)))
+
+(provide 'evil-integration)
+
+;;; evil-integration.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-integration.elc b/.emacs.d/elpa/evil-20171210.501/evil-integration.elc
new file mode 100644
index 0000000..043dfd6
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-integration.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-jumps.el b/.emacs.d/elpa/evil-20171210.501/evil-jumps.el
new file mode 100644
index 0000000..eb6f3bb
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-jumps.el
@@ -0,0 +1,314 @@
+;;; evil-jumps.el --- Jump list implementation
+
+;; Author: Bailey Ling <bling at live.ca>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'cl-lib)
+(require 'evil-core)
+(require 'evil-states)
+
+;;; Code:
+
+(defgroup evil-jumps nil
+ "Evil jump list configuration options."
+ :prefix "evil-jumps"
+ :group 'evil)
+
+(defcustom evil-jumps-cross-buffers t
+ "When non-nil, the jump commands can cross borders between buffers, otherwise the jump commands act only within the current buffer."
+ :type 'boolean
+ :group 'evil-jumps)
+
+(defcustom evil-jumps-max-length 100
+ "The maximum number of jumps to keep track of."
+ :type 'integer
+ :group 'evil-jumps)
+
+(defcustom evil-jumps-pre-jump-hook nil
+ "Hooks to run just before jumping to a location in the jump list."
+ :type 'hook
+ :group 'evil-jumps)
+
+(defcustom evil-jumps-post-jump-hook nil
+ "Hooks to run just after jumping to a location in the jump list."
+ :type 'hook
+ :group 'evil-jumps)
+
+(defcustom evil-jumps-ignored-file-patterns '("COMMIT_EDITMSG$" "TAGS$")
+ "A list of pattern regexps to match on the file path to exclude from being included in the jump list."
+ :type '(repeat string)
+ :group 'evil-jumps)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defvar savehist-additional-variables)
+
+(defvar evil--jumps-jumping nil)
+
+(eval-when-compile (defvar evil--jumps-debug nil))
+
+(defvar evil--jumps-buffer-targets "\\*\\(new\\|scratch\\)\\*"
+ "Regexp to match against `buffer-name' to determine whether it's a valid jump target.")
+
+(defvar evil--jumps-window-jumps (make-hash-table)
+ "Hashtable which stores all jumps on a per window basis.")
+
+(defvar evil-jumps-history nil
+ "History of `evil-mode' jumps that are persisted with `savehist'.")
+
+(cl-defstruct evil-jumps-struct
+ ring
+ (idx -1))
+
+(defmacro evil--jumps-message (format &rest args)
+ (when evil--jumps-debug
+ `(with-current-buffer (get-buffer-create "*evil-jumps*")
+ (goto-char (point-max))
+ (insert (apply #'format ,format ',args) "\n"))))
+
+(defun evil--jumps-get-current (&optional window)
+ (unless window
+ (setq window (frame-selected-window)))
+ (let* ((jump-struct (gethash window evil--jumps-window-jumps)))
+ (unless jump-struct
+ (setq jump-struct (make-evil-jumps-struct))
+ (puthash window jump-struct evil--jumps-window-jumps))
+ jump-struct))
+
+(defun evil--jumps-get-jumps (struct)
+ (let ((ring (evil-jumps-struct-ring struct)))
+ (unless ring
+ (setq ring (make-ring evil-jumps-max-length))
+ (setf (evil-jumps-struct-ring struct) ring))
+ ring))
+
+(defun evil--jumps-get-window-jump-list ()
+ (let ((struct (evil--jumps-get-current)))
+ (evil--jumps-get-jumps struct)))
+
+(defun evil--jumps-savehist-load ()
+ (add-to-list 'savehist-additional-variables 'evil-jumps-history)
+ (let ((ring (make-ring evil-jumps-max-length)))
+ (cl-loop for jump in (reverse evil-jumps-history)
+ do (ring-insert ring jump))
+ (setf (evil-jumps-struct-ring (evil--jumps-get-current)) ring))
+ (add-hook 'savehist-save-hook #'evil--jumps-savehist-sync)
+ (remove-hook 'savehist-mode-hook #'evil--jumps-savehist-load))
+
+(defun evil--jumps-savehist-sync ()
+ "Updates the printable value of window jumps for `savehist'."
+ (setq evil-jumps-history
+ (cl-remove-if-not #'identity
+ (mapcar #'(lambda (jump)
+ (let* ((mark (car jump))
+ (pos (if (markerp mark)
+ (marker-position mark)
+ mark))
+ (file-name (cadr jump)))
+ (if (and (not (file-remote-p file-name))
+ (file-exists-p file-name)
+ pos)
+ (list pos file-name)
+ nil)))
+ (ring-elements (evil--jumps-get-window-jump-list))))))
+
+(defun evil--jumps-jump (idx shift)
+ (let ((target-list (evil--jumps-get-window-jump-list)))
+ (evil--jumps-message "jumping from %s by %s" idx shift)
+ (evil--jumps-message "target list = %s" target-list)
+ (setq idx (+ idx shift))
+ (let* ((current-file-name (or (buffer-file-name) (buffer-name)))
+ (size (ring-length target-list)))
+ (unless evil-jumps-cross-buffers
+ ;; skip jump marks pointing to other buffers
+ (while (and (< idx size) (>= idx 0)
+ (not (string= current-file-name
+ (let* ((place (ring-ref target-list idx))
+ (pos (car place)))
+ (cadr place)))))
+ (setq idx (+ idx shift))))
+ (when (and (< idx size) (>= idx 0))
+ ;; actual jump
+ (run-hooks 'evil-jumps-pre-jump-hook)
+ (let* ((place (ring-ref target-list idx))
+ (pos (car place))
+ (file-name (cadr place)))
+ (setq evil--jumps-jumping t)
+ (if (string-match-p evil--jumps-buffer-targets file-name)
+ (switch-to-buffer file-name)
+ (find-file file-name))
+ (setq evil--jumps-jumping nil)
+ (goto-char pos)
+ (setf (evil-jumps-struct-idx (evil--jumps-get-current)) idx)
+ (run-hooks 'evil-jumps-post-jump-hook))))))
+
+(defun evil--jumps-push ()
+ "Pushes the current cursor/file position to the jump list."
+ (let ((target-list (evil--jumps-get-window-jump-list)))
+ (let ((file-name (buffer-file-name))
+ (buffer-name (buffer-name))
+ (current-pos (point-marker))
+ (first-pos nil)
+ (first-file-name nil)
+ (excluded nil))
+ (when (and (not file-name)
+ (string-match-p evil--jumps-buffer-targets buffer-name))
+ (setq file-name buffer-name))
+ (when file-name
+ (dolist (pattern evil-jumps-ignored-file-patterns)
+ (when (string-match-p pattern file-name)
+ (setq excluded t)))
+ (unless excluded
+ (unless (ring-empty-p target-list)
+ (setq first-pos (car (ring-ref target-list 0)))
+ (setq first-file-name (car (cdr (ring-ref target-list 0)))))
+ (unless (and (equal first-pos current-pos)
+ (equal first-file-name file-name))
+ (evil--jumps-message "pushing %s on %s" current-pos file-name)
+ (ring-insert target-list `(,current-pos ,file-name))))))
+ (evil--jumps-message "%s %s"
+ (selected-window)
+ (and (not (ring-empty-p target-list))
+ (ring-ref target-list 0)))))
+
+(evil-define-command evil-show-jumps ()
+ "Display the contents of the jump list."
+ :repeat nil
+ (evil-with-view-list
+ :name "evil-jumps"
+ :mode "Evil Jump List"
+ :format [("Jump" 5 nil)
+ ("Marker" 8 nil)
+ ("File/text" 1000 t)]
+ :entries (let* ((jumps (evil--jumps-savehist-sync))
+ (count 0))
+ (cl-loop for jump in jumps
+ collect `(nil [,(number-to-string (cl-incf count))
+ ,(number-to-string (car jump))
+ (,(cadr jump))])))
+ :select-action #'evil--show-jumps-select-action))
+
+(defun evil--show-jumps-select-action (jump)
+ (let ((position (string-to-number (elt jump 1)))
+ (file (car (elt jump 2))))
+ (kill-buffer)
+ (switch-to-buffer (find-file file))
+ (goto-char position)))
+
+(defun evil-set-jump (&optional pos)
+ "Set jump point at POS.
+POS defaults to point."
+ (unless (or (region-active-p) (evil-visual-state-p))
+ (push-mark pos t))
+
+ (unless evil--jumps-jumping
+ ;; clear out intermediary jumps when a new one is set
+ (let* ((struct (evil--jumps-get-current))
+ (target-list (evil--jumps-get-jumps struct))
+ (idx (evil-jumps-struct-idx struct)))
+ (cl-loop repeat idx
+ do (ring-remove target-list))
+ (setf (evil-jumps-struct-idx struct) -1))
+ (evil--jumps-push)))
+
+(defun evil--jump-backward (count)
+ (let ((count (or count 1)))
+ (evil-motion-loop (nil count)
+ (let* ((struct (evil--jumps-get-current))
+ (idx (evil-jumps-struct-idx struct)))
+ (evil--jumps-message "jumping back %s" idx)
+ (when (= idx -1)
+ (setq idx 0)
+ (setf (evil-jumps-struct-idx struct) 0)
+ (evil--jumps-push))
+ (evil--jumps-jump idx 1)))))
+
+(defun evil--jump-forward (count)
+ (let ((count (or count 1)))
+ (evil-motion-loop (nil count)
+ (let* ((struct (evil--jumps-get-current))
+ (idx (evil-jumps-struct-idx struct)))
+ (when (= idx -1)
+ (setq idx 0)
+ (setf (evil-jumps-struct-idx struct) 0)
+ (evil--jumps-push))
+ (evil--jumps-jump idx -1)))))
+
+(defun evil--jumps-window-configuration-hook (&rest args)
+ (let* ((window-list (window-list-1 nil nil t))
+ (existing-window (selected-window))
+ (new-window (previous-window)))
+ (when (and (not (eq existing-window new-window))
+ (> (length window-list) 1))
+ (let* ((target-jump-struct (evil--jumps-get-current new-window))
+ (target-jump-count (ring-length (evil--jumps-get-jumps target-jump-struct))))
+ (if (not (ring-empty-p (evil--jumps-get-jumps target-jump-struct)))
+ (evil--jumps-message "target window %s already has %s jumps" new-window target-jump-count)
+ (evil--jumps-message "new target window detected; copying %s to %s" existing-window new-window)
+ (let* ((source-jump-struct (evil--jumps-get-current existing-window))
+ (source-list (evil--jumps-get-jumps source-jump-struct)))
+ (when (= (ring-length (evil--jumps-get-jumps target-jump-struct)) 0)
+ (setf (evil-jumps-struct-idx target-jump-struct) (evil-jumps-struct-idx source-jump-struct))
+ (setf (evil-jumps-struct-ring target-jump-struct) (ring-copy source-list)))))))
+ ;; delete obsolete windows
+ (maphash (lambda (key val)
+ (unless (member key window-list)
+ (evil--jumps-message "removing %s" key)
+ (remhash key evil--jumps-window-jumps)))
+ evil--jumps-window-jumps)))
+
+(defun evil--jump-hook (&optional command)
+ "Set jump point if COMMAND has a non-nil :jump property."
+ (setq command (or command this-command))
+ (when (evil-get-command-property command :jump)
+ (evil-set-jump)))
+
+(defadvice switch-to-buffer (before evil-jumps activate)
+ (evil-set-jump))
+
+(defadvice split-window-internal (before evil-jumps activate)
+ (evil-set-jump))
+
+(defadvice find-tag-noselect (before evil-jumps activate)
+ (evil-set-jump))
+
+(if (bound-and-true-p savehist-loaded)
+ (evil--jumps-savehist-load)
+ (add-hook 'savehist-mode-hook #'evil--jumps-savehist-load))
+
+(add-hook 'evil-local-mode-hook
+ (lambda ()
+ (if evil-local-mode
+ (progn
+ (add-hook 'pre-command-hook #'evil--jump-hook nil t)
+ (add-hook 'next-error-hook #'evil-set-jump nil t)
+ (add-hook 'window-configuration-change-hook #'evil--jumps-window-configuration-hook nil t))
+ (progn
+ (remove-hook 'pre-command-hook #'evil--jump-hook t)
+ (remove-hook 'next-error-hook #'evil-set-jump t)
+ (remove-hook 'window-configuration-change-hook #'evil--jumps-window-configuration-hook t)))))
+
+(provide 'evil-jumps)
+
+;;; evil-jumps.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-jumps.elc b/.emacs.d/elpa/evil-20171210.501/evil-jumps.elc
new file mode 100644
index 0000000..91716a8
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-jumps.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-macros.el b/.emacs.d/elpa/evil-20171210.501/evil-macros.el
new file mode 100644
index 0000000..ed98e7d
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-macros.el
@@ -0,0 +1,777 @@
+;;; evil-macros.el --- Macros
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-common)
+(require 'evil-states)
+(require 'evil-repeat)
+
+;;; Code:
+
+(declare-function evil-ex-p "evil-ex")
+
+;; set some error codes
+(put 'beginning-of-line 'error-conditions '(beginning-of-line error))
+(put 'beginning-of-line 'error-message "Beginning of line")
+(put 'end-of-line 'error-conditions '(end-of-line error))
+(put 'end-of-line 'error-message "End of line")
+
+(defun evil-motion-range (motion &optional count type)
+ "Execute a motion and return the buffer positions.
+The return value is a list (BEG END TYPE)."
+ (let ((opoint (point))
+ (omark (mark t))
+ (omactive (and (boundp 'mark-active) mark-active))
+ (obuffer (current-buffer))
+ (evil-motion-marker (move-marker (make-marker) (point)))
+ range)
+ (evil-with-transient-mark-mode
+ (evil-narrow-to-field
+ (unwind-protect
+ (let ((current-prefix-arg count)
+ ;; Store type in global variable `evil-this-type'.
+ ;; If necessary, motions can change their type
+ ;; during execution by setting this variable.
+ (evil-this-type
+ (or type (evil-type motion 'exclusive))))
+ (condition-case err
+ (let ((repeat-type (evil-repeat-type motion t)))
+ (if (functionp repeat-type)
+ (funcall repeat-type 'pre))
+ (unless (with-local-quit
+ (setq range (call-interactively motion))
+ t)
+ (evil-repeat-abort)
+ (setq quit-flag t))
+ (if (functionp repeat-type)
+ (funcall repeat-type 'post)))
+ (error (prog1 nil
+ (evil-repeat-abort)
+ ;; some operators depend on succeeding
+ ;; motions, in particular for
+ ;; `evil-forward-char' (e.g., used by
+ ;; `evil-substitute'), therefore we let
+ ;; end-of-line and end-of-buffer pass
+ (if (not (memq (car err) '(end-of-line end-of-buffer)))
+ (signal (car err) (cdr err))
+ (message (error-message-string err))))))
+ (cond
+ ;; the motion returned a range
+ ((evil-range-p range))
+ ;; the motion made a Visual selection
+ ((evil-visual-state-p)
+ (setq range (evil-visual-range)))
+ ;; the motion made an active region
+ ((region-active-p)
+ (setq range (evil-range (region-beginning)
+ (region-end)
+ evil-this-type)))
+ ;; default: range from previous position to current
+ (t
+ (setq range (evil-expand-range
+ (evil-normalize evil-motion-marker
+ (point)
+ evil-this-type)))))
+ (unless (or (null type) (eq (evil-type range) type))
+ (evil-set-type range type)
+ (evil-expand-range range))
+ (evil-set-range-properties range nil)
+ range)
+ ;; restore point and mark like `save-excursion',
+ ;; but only if the motion hasn't disabled the operator
+ (unless evil-inhibit-operator
+ (set-buffer obuffer)
+ (evil-move-mark omark)
+ (goto-char opoint))
+ ;; delete marker so it doesn't slow down editing
+ (move-marker evil-motion-marker nil))))))
+
+(defmacro evil-define-motion (motion args &rest body)
+ "Define an motion command MOTION.
+
+\(fn MOTION (COUNT ARGS...) DOC [[KEY VALUE]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name lambda-list
+ [&optional stringp]
+ [&rest keywordp sexp]
+ [&optional ("interactive" [&rest form])]
+ def-body)))
+ (let (arg doc interactive key keys type)
+ (when args
+ (setq args `(&optional ,@(delq '&optional args))
+ ;; the count is either numerical or nil
+ interactive '("<c>")))
+ ;; collect docstring
+ (when (and (> (length body) 1)
+ (or (eq (car-safe (car-safe body)) 'format)
+ (stringp (car-safe body))))
+ (setq doc (pop body)))
+ ;; collect keywords
+ (setq keys (plist-put keys :repeat 'motion))
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body)
+ keys (plist-put keys key arg)))
+ ;; collect `interactive' specification
+ (when (eq (car-safe (car-safe body)) 'interactive)
+ (setq interactive (cdr (pop body))))
+ ;; macro expansion
+ `(progn
+ ;; refresh echo area in Eldoc mode
+ (when ',motion
+ (eval-after-load 'eldoc
+ '(and (fboundp 'eldoc-add-command)
+ (eldoc-add-command ',motion))))
+ (evil-define-command ,motion (,@args)
+ ,@(when doc `(,doc)) ; avoid nil before `interactive'
+ ,@keys
+ :keep-visual t
+ (interactive ,@interactive)
+ ,@body))))
+
+(defmacro evil-narrow-to-line (&rest body)
+ "Narrow BODY to the current line.
+BODY will signal the errors 'beginning-of-line or 'end-of-line
+upon reaching the beginning or end of the current line.
+
+\(fn [[KEY VAL]...] BODY...)"
+ (declare (indent defun)
+ (debug t))
+ `(let* ((range (evil-expand (point) (point) 'line))
+ (beg (evil-range-beginning range))
+ (end (evil-range-end range))
+ (min (point-min))
+ (max (point-max)))
+ (when (save-excursion (goto-char end) (bolp))
+ (setq end (max beg (1- end))))
+ ;; don't include the newline in Normal state
+ (when (and evil-move-cursor-back
+ (not evil-move-beyond-eol)
+ (not (evil-visual-state-p))
+ (not (evil-operator-state-p)))
+ (setq end (max beg (1- end))))
+ (evil-with-restriction beg end
+ (evil-signal-without-movement
+ (condition-case err
+ (progn ,@body)
+ (beginning-of-buffer
+ (if (= beg min)
+ (signal (car err) (cdr err))
+ (signal 'beginning-of-line nil)))
+ (end-of-buffer
+ (if (= end max)
+ (signal (car err) (cdr err))
+ (signal 'end-of-line nil))))))))
+
+;; we don't want line boundaries to trigger the debugger
+;; when `debug-on-error' is t
+(add-to-list 'debug-ignored-errors "^Beginning of line$")
+(add-to-list 'debug-ignored-errors "^End of line$")
+
+(defun evil-eobp (&optional pos)
+ "Whether point is at end-of-buffer with regard to end-of-line."
+ (save-excursion
+ (when pos (goto-char pos))
+ (cond
+ ((eobp))
+ ;; the rest only pertains to Normal state
+ ((not (evil-normal-state-p))
+ nil)
+ ;; at the end of the last line
+ ((eolp)
+ (forward-char)
+ (eobp))
+ ;; at the last character of the last line
+ (t
+ (forward-char)
+ (cond
+ ((eobp))
+ ((eolp)
+ (forward-char)
+ (eobp)))))))
+
+(defun evil-move-beginning (count forward &optional backward)
+ "Move to the beginning of the COUNT next object.
+If COUNT is negative, move to the COUNT previous object.
+FORWARD is a function which moves to the end of the object, and
+BACKWARD is a function which moves to the beginning.
+If one is unspecified, the other is used with a negative argument."
+ (let* ((count (or count 1))
+ (backward (or backward
+ #'(lambda (count)
+ (funcall forward (- count)))))
+ (forward (or forward
+ #'(lambda (count)
+ (funcall backward (- count)))))
+ (opoint (point)))
+ (cond
+ ((< count 0)
+ (when (bobp)
+ (signal 'beginning-of-buffer nil))
+ (unwind-protect
+ (evil-motion-loop (nil count count)
+ (funcall backward 1))
+ (unless (zerop count)
+ (goto-char (point-min)))))
+ ((> count 0)
+ (when (evil-eobp)
+ (signal 'end-of-buffer nil))
+ ;; Do we need to move past the current object?
+ (when (<= (save-excursion
+ (funcall forward 1)
+ (funcall backward 1)
+ (point))
+ opoint)
+ (setq count (1+ count)))
+ (unwind-protect
+ (evil-motion-loop (nil count count)
+ (funcall forward 1))
+ (if (zerop count)
+ ;; go back to beginning of object
+ (funcall backward 1)
+ (goto-char (point-max)))))
+ (t
+ count))))
+
+(defun evil-move-end (count forward &optional backward inclusive)
+ "Move to the end of the COUNT next object.
+If COUNT is negative, move to the COUNT previous object.
+FORWARD is a function which moves to the end of the object, and
+BACKWARD is a function which moves to the beginning.
+If one is unspecified, the other is used with a negative argument.
+If INCLUSIVE is non-nil, then point is placed at the last character
+of the object; otherwise it is placed at the end of the object."
+ (let* ((count (or count 1))
+ (backward (or backward
+ #'(lambda (count)
+ (funcall forward (- count)))))
+ (forward (or forward
+ #'(lambda (count)
+ (funcall backward (- count)))))
+ (opoint (point)))
+ (cond
+ ((< count 0)
+ (when (bobp)
+ (signal 'beginning-of-buffer nil))
+ ;; Do we need to move past the current object?
+ (when (>= (save-excursion
+ (funcall backward 1)
+ (funcall forward 1)
+ (point))
+ (if inclusive
+ (1+ opoint)
+ opoint))
+ (setq count (1- count)))
+ (unwind-protect
+ (evil-motion-loop (nil count count)
+ (funcall backward 1))
+ (if (not (zerop count))
+ (goto-char (point-min))
+ ;; go to end of object
+ (funcall forward 1)
+ (when inclusive
+ (unless (bobp) (backward-char)))
+ (when (or (evil-normal-state-p)
+ (evil-motion-state-p))
+ (evil-adjust-cursor t)))))
+ ((> count 0)
+ (when (evil-eobp)
+ (signal 'end-of-buffer nil))
+ (when inclusive
+ (forward-char))
+ (unwind-protect
+ (evil-motion-loop (nil count count)
+ (funcall forward 1))
+ (if (not (zerop count))
+ (goto-char (point-max))
+ (when inclusive
+ (unless (bobp) (backward-char)))
+ (when (or (evil-normal-state-p)
+ (evil-motion-state-p))
+ (evil-adjust-cursor t)))))
+ (t
+ count))))
+
+(defun evil-text-object-make-linewise (range)
+ "Turn the text object selection RANGE to linewise.
+The selection is adjusted in a sensible way so that the selected
+lines match the user intent. In particular, whitespace-only parts
+at the first and last lines are omitted. This function returns
+the new range."
+ ;; Bug #607
+ ;; If new type is linewise and the selection of the
+ ;; first line consists of whitespace only, the
+ ;; beginning is moved to the start of the next line. If
+ ;; the selections of the last line consists of
+ ;; whitespace only, the end is moved to the end of the
+ ;; previous line.
+ (if (eq (evil-type range) 'line)
+ range
+ (let ((expanded (plist-get (evil-range-properties range) :expanded))
+ (newrange (evil-expand-range range t)))
+ (save-excursion
+ ;; skip whitespace at the beginning
+ (goto-char (evil-range-beginning newrange))
+ (skip-chars-forward " \t")
+ (when (and (not (bolp)) (eolp))
+ (evil-set-range-beginning newrange (1+ (point))))
+ ;; skip whitepsace at the end
+ (goto-char (evil-range-end newrange))
+ (skip-chars-backward " \t")
+ (when (and (not (eolp)) (bolp))
+ (evil-set-range-end newrange (1- (point))))
+ ;; only modify range if result is not empty
+ (if (> (evil-range-beginning newrange)
+ (evil-range-end newrange))
+ range
+ (unless expanded
+ (evil-contract-range newrange))
+ newrange)))))
+
+(defmacro evil-define-text-object (object args &rest body)
+ "Define a text object command OBJECT.
+BODY should return a range (BEG END) to the right of point
+if COUNT is positive, and to the left of it if negative.
+
+\(fn OBJECT (COUNT) DOC [[KEY VALUE]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name lambda-list
+ [&optional stringp]
+ [&rest keywordp sexp]
+ def-body)))
+ (let* ((args (delq '&optional args))
+ (count (or (pop args) 'count))
+ (args (when args `(&optional ,@args)))
+ (interactive '((interactive "<c><v>")))
+ arg doc key keys)
+ ;; collect docstring
+ (when (stringp (car-safe body))
+ (setq doc (pop body)))
+ ;; collect keywords
+ (setq keys (plist-put keys :extend-selection t))
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body)
+ keys (plist-put keys key arg)))
+ ;; interactive
+ (when (eq (car-safe (car-safe body)) 'interactive)
+ (setq interactive (list (pop body))))
+ ;; macro expansion
+ `(evil-define-motion ,object (,count ,@args)
+ ,@(when doc `(,doc))
+ ,@keys
+ ,@interactive
+ (setq ,count (or ,count 1))
+ (when (/= ,count 0)
+ (let ((type (evil-type ',object evil-visual-char))
+ (extend (and (evil-visual-state-p)
+ (evil-get-command-property
+ ',object :extend-selection
+ ',(plist-get keys :extend-selection))))
+ (dir evil-visual-direction)
+ mark point range selection)
+ (cond
+ ;; Visual state: extend the current selection
+ ((and (evil-visual-state-p)
+ (called-interactively-p 'any))
+ ;; if we are at the beginning of the Visual selection,
+ ;; go to the left (negative COUNT); if at the end,
+ ;; go to the right (positive COUNT)
+ (setq dir evil-visual-direction
+ ,count (* ,count dir))
+ (setq range (progn ,@body))
+ (when (evil-range-p range)
+ (setq range (evil-expand-range range))
+ (evil-set-type range (evil-type range type))
+ (setq range (evil-contract-range range))
+ ;; the beginning is mark and the end is point
+ ;; unless the selection goes the other way
+ (setq mark (evil-range-beginning range)
+ point (evil-range-end range)
+ type (evil-type
+ (if evil-text-object-change-visual-type
+ range
+ (evil-visual-range))))
+ (when (and (eq type 'line)
+ (not (eq type (evil-type range))))
+ (let ((newrange (evil-text-object-make-linewise range)))
+ (setq mark (evil-range-beginning newrange)
+ point (evil-range-end newrange))))
+ (when (< dir 0)
+ (evil-swap mark point))
+ ;; select the union
+ (evil-visual-make-selection mark point type)))
+ ;; not Visual state: return a pair of buffer positions
+ (t
+ (setq range (progn ,@body))
+ (unless (evil-range-p range)
+ (setq ,count (- ,count)
+ range (progn ,@body)))
+ (when (evil-range-p range)
+ (setq selection (evil-range (point) (point) type))
+ (if extend
+ (setq range (evil-range-union range selection))
+ (evil-set-type range (evil-type range type)))
+ ;; possibly convert to linewise
+ (when (eq evil-this-type-modified 'line)
+ (setq range (evil-text-object-make-linewise range)))
+ (evil-set-range-properties range nil)
+ range))))))))
+
+(defmacro evil-define-operator (operator args &rest body)
+ "Define an operator command OPERATOR.
+
+\(fn OPERATOR (BEG END ARGS...) DOC [[KEY VALUE]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name lambda-list
+ [&optional stringp]
+ [&rest keywordp sexp]
+ [&optional ("interactive" [&rest form])]
+ def-body)))
+ (let* ((args (delq '&optional args))
+ (interactive (if (> (length args) 2) '("<R>") '("<r>")))
+ (args (if (> (length args) 2)
+ `(,(nth 0 args) ,(nth 1 args)
+ &optional ,@(nthcdr 2 args))
+ args))
+ arg doc key keys visual)
+ ;; collect docstring
+ (when (and (> (length body) 1)
+ (or (eq (car-safe (car-safe body)) 'format)
+ (stringp (car-safe body))))
+ (setq doc (pop body)))
+ ;; collect keywords
+ (setq keys (plist-put keys :move-point t))
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body))
+ (cond
+ ((eq key :keep-visual)
+ (setq visual arg))
+ (t
+ (setq keys (plist-put keys key arg)))))
+ ;; collect `interactive' specification
+ (when (eq (car-safe (car-safe body)) 'interactive)
+ (setq interactive (cdr-safe (pop body))))
+ ;; transform extended interactive specs
+ (setq interactive (apply #'evil-interactive-form interactive))
+ (setq keys (evil-concat-plists keys (cdr-safe interactive))
+ interactive (car-safe interactive))
+ ;; macro expansion
+ `(evil-define-command ,operator ,args
+ ,@(when doc `(,doc))
+ ,@keys
+ :keep-visual t
+ :suppress-operator t
+ (interactive
+ (let* ((evil-operator-range-motion
+ (when (evil-has-command-property-p ',operator :motion)
+ ;; :motion nil is equivalent to :motion undefined
+ (or (evil-get-command-property ',operator :motion)
+ #'undefined)))
+ (evil-operator-range-type
+ (evil-get-command-property ',operator :type))
+ (orig (point))
+ evil-operator-range-beginning
+ evil-operator-range-end
+ evil-inhibit-operator)
+ (setq evil-inhibit-operator-value nil
+ evil-this-operator this-command)
+ (prog1 ,interactive
+ (setq orig (point)
+ evil-inhibit-operator-value evil-inhibit-operator)
+ (if ,visual
+ (when (evil-visual-state-p)
+ (evil-visual-expand-region))
+ (when (or (evil-visual-state-p) (region-active-p))
+ (setq deactivate-mark t)))
+ (cond
+ ((evil-visual-state-p)
+ (evil-visual-rotate 'upper-left))
+ ((evil-get-command-property ',operator :move-point)
+ (goto-char (or evil-operator-range-beginning orig)))
+ (t
+ (goto-char orig))))))
+ (unwind-protect
+ (let ((evil-inhibit-operator evil-inhibit-operator-value))
+ (unless (and evil-inhibit-operator
+ (called-interactively-p 'any))
+ ,@body))
+ (setq evil-inhibit-operator-value nil)))))
+
+;; this is used in the `interactive' specification of an operator command
+(defun evil-operator-range (&optional return-type)
+ "Read a motion from the keyboard and return its buffer positions.
+The return value is a list (BEG END), or (BEG END TYPE) if
+RETURN-TYPE is non-nil."
+ (let ((motion (or evil-operator-range-motion
+ (when (evil-ex-p) 'evil-line)))
+ (type evil-operator-range-type)
+ (range (evil-range (point) (point)))
+ command count modifier)
+ (setq evil-this-type-modified nil)
+ (evil-save-echo-area
+ (cond
+ ;; Ex mode
+ ((and (evil-ex-p) evil-ex-range)
+ (setq range evil-ex-range))
+ ;; Visual selection
+ ((and (not (evil-ex-p)) (evil-visual-state-p))
+ (setq range (evil-visual-range)))
+ ;; active region
+ ((and (not (evil-ex-p)) (region-active-p))
+ (setq range (evil-range (region-beginning)
+ (region-end)
+ (or evil-this-type 'exclusive))))
+ (t
+ ;; motion
+ (evil-save-state
+ (unless motion
+ (evil-change-state 'operator)
+ ;; Make linewise operator shortcuts. E.g., "d" yields the
+ ;; shortcut "dd", and "g?" yields shortcuts "g??" and "g?g?".
+ (let ((keys (nth 2 (evil-extract-count (this-command-keys)))))
+ (setq keys (listify-key-sequence keys))
+ (dotimes (var (length keys))
+ (define-key evil-operator-shortcut-map
+ (vconcat (nthcdr var keys)) 'evil-line)))
+ ;; read motion from keyboard
+ (setq command (evil-read-motion motion)
+ motion (nth 0 command)
+ count (nth 1 command)
+ type (or type (nth 2 command))))
+ (cond
+ ((eq motion #'undefined)
+ (setq range (if return-type '(nil nil nil) '(nil nil))
+ motion nil))
+ ((or (null motion) ; keyboard-quit
+ (evil-get-command-property motion :suppress-operator))
+ (when (fboundp 'evil-repeat-abort)
+ (evil-repeat-abort))
+ (setq quit-flag t
+ motion nil))
+ (evil-repeat-count
+ (setq count evil-repeat-count
+ ;; only the first operator's count is overwritten
+ evil-repeat-count nil))
+ ((or count current-prefix-arg)
+ ;; multiply operator count and motion count together
+ (setq count
+ (* (prefix-numeric-value count)
+ (prefix-numeric-value current-prefix-arg)))))
+ (when motion
+ (let ((evil-state 'operator)
+ mark-active)
+ ;; calculate motion range
+ (setq range (evil-motion-range
+ motion
+ count
+ type))))
+ ;; update global variables
+ (setq evil-this-motion motion
+ evil-this-motion-count count
+ type (evil-type range type)
+ evil-this-type type))))
+ (when (evil-range-p range)
+ (unless (or (null type) (eq (evil-type range) type))
+ (evil-contract-range range)
+ (evil-set-type range type)
+ (evil-expand-range range))
+ (evil-set-range-properties range nil)
+ (unless return-type
+ (evil-set-type range nil))
+ (setq evil-operator-range-beginning (evil-range-beginning range)
+ evil-operator-range-end (evil-range-end range)
+ evil-operator-range-type (evil-type range)))
+ range)))
+
+(defmacro evil-define-type (type doc &rest body)
+ "Define type TYPE.
+DOC is a general description and shows up in all docstrings.
+It is followed by a list of keywords and functions:
+
+:expand FUNC Expansion function. This function should accept
+ two positions in the current buffer, BEG and END,
+ and return a pair of expanded buffer positions.
+:contract FUNC The opposite of :expand, optional.
+:one-to-one BOOL Whether expansion is one-to-one. This means that
+ :expand followed by :contract always returns the
+ original range.
+:normalize FUNC Normalization function, optional. This function should
+ accept two unexpanded positions and adjust them before
+ expansion. May be used to deal with buffer boundaries.
+:string FUNC Description function. This takes two buffer positions
+ and returns a human-readable string, for example,
+ \"2 lines\".
+
+If further keywords and functions are specified, they are assumed to
+be transformations on buffer positions, like :expand and :contract.
+
+\(fn TYPE DOC [[KEY FUNC]...])"
+ (declare (indent defun)
+ (debug (&define name
+ [&optional stringp]
+ [&rest [keywordp function-form]])))
+ (let (args defun-forms func key name plist string sym val)
+ ;; standard values
+ (setq plist (plist-put plist :one-to-one t))
+ ;; keywords
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ val (pop body))
+ (if (plist-member plist key) ; not a function
+ (setq plist (plist-put plist key val))
+ (setq func val
+ sym (intern (replace-regexp-in-string
+ "^:" "" (symbol-name key)))
+ name (intern (format "evil-%s-%s" type sym))
+ args (car (cdr-safe func))
+ string (car (cdr (cdr-safe func)))
+ string (if (stringp string)
+ (format "%s\n\n" string) "")
+ plist (plist-put plist key `',name))
+ (add-to-list
+ 'defun-forms
+ (cond
+ ((eq key :string)
+ `(defun ,name (beg end &rest properties)
+ ,(format "Return size of %s from BEG to END \
+with PROPERTIES.\n\n%s%s" type string doc)
+ (let ((beg (evil-normalize-position beg))
+ (end (evil-normalize-position end))
+ (type ',type)
+ plist range)
+ (when (and beg end)
+ (save-excursion
+ (evil-sort beg end)
+ (unless (plist-get properties :expanded)
+ (setq range (apply #'evil-expand
+ beg end type properties)
+ beg (evil-range-beginning range)
+ end (evil-range-end range)
+ type (evil-type range type)
+ plist (evil-range-properties range))
+ (setq properties
+ (evil-concat-plists properties plist)))
+ (or (apply #',func beg end
+ (when ,(> (length args) 2)
+ properties))
+ ""))))))
+ (t
+ `(defun ,name (beg end &rest properties)
+ ,(format "Perform %s transformation on %s from BEG to END \
+with PROPERTIES.\n\n%s%s" sym type string doc)
+ (let ((beg (evil-normalize-position beg))
+ (end (evil-normalize-position end))
+ (type ',type)
+ plist range)
+ (when (and beg end)
+ (save-excursion
+ (evil-sort beg end)
+ (when (memq ,key '(:expand :contract))
+ (setq properties
+ (plist-put properties
+ :expanded
+ ,(eq key :expand))))
+ (setq range (or (apply #',func beg end
+ (when ,(> (length args) 2)
+ properties))
+ (apply #'evil-range
+ beg end type properties))
+ beg (evil-range-beginning range)
+ end (evil-range-end range)
+ type (evil-type range type)
+ plist (evil-range-properties range))
+ (setq properties
+ (evil-concat-plists properties plist))
+ (apply #'evil-range beg end type properties)))))))
+ t)))
+ ;; :one-to-one requires both or neither of :expand and :contract
+ (when (plist-get plist :expand)
+ (setq plist (plist-put plist :one-to-one
+ (and (plist-get plist :contract)
+ (plist-get plist :one-to-one)))))
+ `(progn
+ (evil-put-property 'evil-type-properties ',type ,@plist)
+ ,@defun-forms
+ ',type)))
+
+(defmacro evil-define-interactive-code (code &rest body)
+ "Define an interactive code.
+PROMPT, if given, is the remainder of the interactive string
+up to the next newline. Command properties may be specified
+via KEY-VALUE pairs. BODY should evaluate to a list of values.
+
+\(fn CODE (PROMPT) [[KEY VALUE]...] BODY...)"
+ (declare (indent defun))
+ (let* ((args (when (and (> (length body) 1)
+ (listp (car-safe body)))
+ (pop body)))
+ (doc (when (stringp (car-safe body)) (pop body)))
+ func properties)
+ (while (keywordp (car-safe body))
+ (setq properties
+ (append properties (list (pop body) (pop body)))))
+ (cond
+ (args
+ (setq func `(lambda ,args
+ ,@(when doc `(,doc))
+ ,@body)))
+ ((> (length body) 1)
+ (setq func `(progn ,@body)))
+ (t
+ (setq func (car body))))
+ `(eval-and-compile
+ (let* ((code ,code)
+ (entry (assoc code evil-interactive-alist))
+ (value (cons ',func ',properties)))
+ (if entry
+ (setcdr entry value)
+ (push (cons code value) evil-interactive-alist))
+ code))))
+
+;;; Highlighting
+
+(when (fboundp 'font-lock-add-keywords)
+ (font-lock-add-keywords
+ 'emacs-lisp-mode
+ ;; Match all `evil-define-' forms except `evil-define-key'.
+ ;; (In the interests of speed, this expression is incomplete
+ ;; and does not match all three-letter words.)
+ '(("(\\(evil-\\(?:ex-\\)?define-\
+\\(?:[^ k][^ e][^ y]\\|[-[:word:]]\\{4,\\}\\)\\)\
+\\>[ \f\t\n\r\v]*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
+ (1 font-lock-keyword-face)
+ (2 font-lock-function-name-face nil t))
+ ("(\\(evil-\\(?:delay\\|narrow\\|signal\\|save\\|with\\(?:out\\)?\\)\
+\\(?:-[-[:word:]]+\\)?\\)\\>\[ \f\t\n\r\v]+"
+ 1 font-lock-keyword-face)
+ ("(\\(evil-\\(?:[-[:word:]]\\)*loop\\)\\>[ \f\t\n\r\v]+"
+ 1 font-lock-keyword-face))))
+
+(provide 'evil-macros)
+
+;;; evil-macros.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-macros.elc b/.emacs.d/elpa/evil-20171210.501/evil-macros.elc
new file mode 100644
index 0000000..1fd266f
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-macros.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-maps.el b/.emacs.d/elpa/evil-20171210.501/evil-maps.el
new file mode 100644
index 0000000..551cf2b
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-maps.el
@@ -0,0 +1,559 @@
+;;; evil-maps.el --- Default keymaps
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-states)
+(require 'evil-ex)
+(require 'evil-commands)
+(require 'evil-command-window)
+(require 'evil-common)
+
+;;; Code:
+
+;;; Normal state
+
+(define-key evil-normal-state-map "a" 'evil-append)
+(define-key evil-normal-state-map "A" 'evil-append-line)
+(define-key evil-normal-state-map "c" 'evil-change)
+(define-key evil-normal-state-map "C" 'evil-change-line)
+(define-key evil-normal-state-map "d" 'evil-delete)
+(define-key evil-normal-state-map "D" 'evil-delete-line)
+(define-key evil-normal-state-map "i" 'evil-insert)
+(define-key evil-normal-state-map (kbd "<insert>") 'evil-insert)
+(define-key evil-normal-state-map (kbd "<insertchar>") 'evil-insert)
+(define-key evil-normal-state-map "I" 'evil-insert-line)
+(define-key evil-normal-state-map "J" 'evil-join)
+(define-key evil-normal-state-map "m" 'evil-set-marker)
+(define-key evil-normal-state-map "o" 'evil-open-below)
+(define-key evil-normal-state-map "O" 'evil-open-above)
+(define-key evil-normal-state-map "p" 'evil-paste-after)
+(define-key evil-normal-state-map "P" 'evil-paste-before)
+(define-key evil-normal-state-map "q" 'evil-record-macro)
+(define-key evil-normal-state-map "r" 'evil-replace)
+(define-key evil-normal-state-map "R" 'evil-replace-state)
+(define-key evil-normal-state-map "s" 'evil-substitute)
+(define-key evil-normal-state-map "S" 'evil-change-whole-line)
+(define-key evil-normal-state-map "x" 'evil-delete-char)
+(define-key evil-normal-state-map "X" 'evil-delete-backward-char)
+(define-key evil-normal-state-map [deletechar] 'evil-delete-char)
+(define-key evil-normal-state-map "y" 'evil-yank)
+(define-key evil-normal-state-map "Y" 'evil-yank-line)
+(define-key evil-normal-state-map "&" 'evil-ex-repeat-substitute)
+(define-key evil-normal-state-map "g&" 'evil-ex-repeat-global-substitute)
+(define-key evil-normal-state-map "g8" 'what-cursor-position)
+(define-key evil-normal-state-map "ga" 'what-cursor-position)
+(define-key evil-normal-state-map "gi" 'evil-insert-resume)
+(define-key evil-normal-state-map "gJ" 'evil-join-whitespace)
+(define-key evil-normal-state-map "gq" 'evil-fill-and-move)
+(define-key evil-normal-state-map "gw" 'evil-fill)
+(define-key evil-normal-state-map "gu" 'evil-downcase)
+(define-key evil-normal-state-map "gU" 'evil-upcase)
+(define-key evil-normal-state-map "gf" 'find-file-at-point)
+(define-key evil-normal-state-map "gF" 'evil-find-file-at-point-with-line)
+(define-key evil-normal-state-map "g?" 'evil-rot13)
+(define-key evil-normal-state-map "g~" 'evil-invert-case)
+(define-key evil-normal-state-map "zo" 'evil-open-fold)
+(define-key evil-normal-state-map "zO" 'evil-open-fold-rec)
+(define-key evil-normal-state-map "zc" 'evil-close-fold)
+(define-key evil-normal-state-map "za" 'evil-toggle-fold)
+(define-key evil-normal-state-map "zr" 'evil-open-folds)
+(define-key evil-normal-state-map "zm" 'evil-close-folds)
+(define-key evil-normal-state-map "z=" 'ispell-word)
+(define-key evil-normal-state-map "\C-n" 'evil-paste-pop-next)
+(define-key evil-normal-state-map "\C-p" 'evil-paste-pop)
+(define-key evil-normal-state-map "\C-t" 'pop-tag-mark)
+(define-key evil-normal-state-map (kbd "C-.") 'evil-repeat-pop)
+(define-key evil-normal-state-map (kbd "M-.") 'evil-repeat-pop-next)
+(define-key evil-normal-state-map "." 'evil-repeat)
+(define-key evil-normal-state-map "@" 'evil-execute-macro)
+(define-key evil-normal-state-map "\"" 'evil-use-register)
+(define-key evil-normal-state-map "~" 'evil-invert-char)
+(define-key evil-normal-state-map "=" 'evil-indent)
+(define-key evil-normal-state-map "<" 'evil-shift-left)
+(define-key evil-normal-state-map ">" 'evil-shift-right)
+(define-key evil-normal-state-map "ZZ" 'evil-save-modified-and-close)
+(define-key evil-normal-state-map "ZQ" 'evil-quit)
+(define-key evil-normal-state-map (kbd "DEL") 'evil-backward-char)
+(define-key evil-normal-state-map [escape] 'evil-force-normal-state)
+(define-key evil-normal-state-map [remap cua-paste-pop] 'evil-paste-pop)
+(define-key evil-normal-state-map [remap yank-pop] 'evil-paste-pop)
+
+;; go to last change
+(define-key evil-normal-state-map "g;" 'goto-last-change)
+(define-key evil-normal-state-map "g," 'goto-last-change-reverse)
+
+;; undo
+(define-key evil-normal-state-map "u" 'undo)
+(define-key evil-normal-state-map "\C-r" 'redo)
+
+;; window commands
+(define-prefix-command 'evil-window-map)
+(define-key evil-window-map "b" 'evil-window-bottom-right)
+(define-key evil-window-map "c" 'evil-window-delete)
+(define-key evil-window-map "h" 'evil-window-left)
+(define-key evil-window-map "H" 'evil-window-move-far-left)
+(define-key evil-window-map "j" 'evil-window-down)
+(define-key evil-window-map "J" 'evil-window-move-very-bottom)
+(define-key evil-window-map "k" 'evil-window-up)
+(define-key evil-window-map "K" 'evil-window-move-very-top)
+(define-key evil-window-map "l" 'evil-window-right)
+(define-key evil-window-map "L" 'evil-window-move-far-right)
+(define-key evil-window-map "n" 'evil-window-new)
+(define-key evil-window-map "o" 'delete-other-windows)
+(define-key evil-window-map "p" 'evil-window-mru)
+(define-key evil-window-map "q" 'evil-quit)
+(define-key evil-window-map "r" 'evil-window-rotate-downwards)
+(define-key evil-window-map "R" 'evil-window-rotate-upwards)
+(define-key evil-window-map "s" 'evil-window-split)
+(define-key evil-window-map "S" 'evil-window-split)
+(define-key evil-window-map "t" 'evil-window-top-left)
+(define-key evil-window-map "v" 'evil-window-vsplit)
+(define-key evil-window-map "w" 'evil-window-next)
+(define-key evil-window-map "W" 'evil-window-prev)
+(define-key evil-window-map "+" 'evil-window-increase-height)
+(define-key evil-window-map "-" 'evil-window-decrease-height)
+(define-key evil-window-map "_" 'evil-window-set-height)
+(define-key evil-window-map "<" 'evil-window-decrease-width)
+(define-key evil-window-map ">" 'evil-window-increase-width)
+(define-key evil-window-map "=" 'balance-windows)
+(define-key evil-window-map "|" 'evil-window-set-width)
+(define-key evil-window-map "\C-b" 'evil-window-bottom-right)
+(define-key evil-window-map "\C-c" 'evil-window-delete)
+(define-key evil-window-map (kbd "C-S-h") 'evil-window-move-far-left)
+(define-key evil-window-map (kbd "C-S-j") 'evil-window-move-very-bottom)
+(define-key evil-window-map (kbd "C-S-k") 'evil-window-move-very-top)
+(define-key evil-window-map (kbd "C-S-l") 'evil-window-move-far-right)
+(define-key evil-window-map "\C-n" 'evil-window-new)
+(define-key evil-window-map "\C-o" 'delete-other-windows)
+(define-key evil-window-map "\C-p" 'evil-window-mru)
+(define-key evil-window-map "\C-r" 'evil-window-rotate-downwards)
+(define-key evil-window-map (kbd "C-S-r") 'evil-window-rotate-upwards)
+(define-key evil-window-map "\C-s" 'evil-window-split)
+(define-key evil-window-map (kbd "C-S-s") 'evil-window-split)
+(define-key evil-window-map "\C-t" 'evil-window-top-left)
+(define-key evil-window-map "\C-v" 'evil-window-vsplit)
+(define-key evil-window-map "\C-w" 'evil-window-next)
+(define-key evil-window-map (kbd "C-S-W") 'evil-window-prev)
+(define-key evil-window-map "\C-_" 'evil-window-set-height)
+(define-key evil-window-map "\C-f" 'ffap-other-window)
+
+;;; Motion state
+
+;; "0" is a special command when called first
+(evil-redirect-digit-argument evil-motion-state-map "0" 'evil-beginning-of-line)
+(define-key evil-motion-state-map "1" 'digit-argument)
+(define-key evil-motion-state-map "2" 'digit-argument)
+(define-key evil-motion-state-map "3" 'digit-argument)
+(define-key evil-motion-state-map "4" 'digit-argument)
+(define-key evil-motion-state-map "5" 'digit-argument)
+(define-key evil-motion-state-map "6" 'digit-argument)
+(define-key evil-motion-state-map "7" 'digit-argument)
+(define-key evil-motion-state-map "8" 'digit-argument)
+(define-key evil-motion-state-map "9" 'digit-argument)
+(define-key evil-motion-state-map "b" 'evil-backward-word-begin)
+(define-key evil-motion-state-map "B" 'evil-backward-WORD-begin)
+(define-key evil-motion-state-map "e" 'evil-forward-word-end)
+(define-key evil-motion-state-map "E" 'evil-forward-WORD-end)
+(define-key evil-motion-state-map "f" 'evil-find-char)
+(define-key evil-motion-state-map "F" 'evil-find-char-backward)
+(define-key evil-motion-state-map "G" 'evil-goto-line)
+(define-key evil-motion-state-map "h" 'evil-backward-char)
+(define-key evil-motion-state-map "H" 'evil-window-top)
+(define-key evil-motion-state-map "j" 'evil-next-line)
+(define-key evil-motion-state-map "k" 'evil-previous-line)
+(define-key evil-motion-state-map "l" 'evil-forward-char)
+(define-key evil-motion-state-map " " 'evil-forward-char)
+(define-key evil-motion-state-map "K" 'evil-lookup)
+(define-key evil-motion-state-map "L" 'evil-window-bottom)
+(define-key evil-motion-state-map "M" 'evil-window-middle)
+(define-key evil-motion-state-map "n" 'evil-search-next)
+(define-key evil-motion-state-map "N" 'evil-search-previous)
+(define-key evil-motion-state-map "t" 'evil-find-char-to)
+(define-key evil-motion-state-map "T" 'evil-find-char-to-backward)
+(define-key evil-motion-state-map "w" 'evil-forward-word-begin)
+(define-key evil-motion-state-map "W" 'evil-forward-WORD-begin)
+(define-key evil-motion-state-map "y" 'evil-yank)
+(define-key evil-motion-state-map "Y" 'evil-yank-line)
+(define-key evil-motion-state-map "gd" 'evil-goto-definition)
+(define-key evil-motion-state-map "ge" 'evil-backward-word-end)
+(define-key evil-motion-state-map "gE" 'evil-backward-WORD-end)
+(define-key evil-motion-state-map "gg" 'evil-goto-first-line)
+(define-key evil-motion-state-map "gj" 'evil-next-visual-line)
+(define-key evil-motion-state-map "gk" 'evil-previous-visual-line)
+(define-key evil-motion-state-map "g0" 'evil-beginning-of-visual-line)
+(define-key evil-motion-state-map "g_" 'evil-last-non-blank)
+(define-key evil-motion-state-map "g^" 'evil-first-non-blank-of-visual-line)
+(define-key evil-motion-state-map "gm" 'evil-middle-of-visual-line)
+(define-key evil-motion-state-map "g$" 'evil-end-of-visual-line)
+(define-key evil-motion-state-map "g\C-]" 'find-tag)
+(define-key evil-motion-state-map "{" 'evil-backward-paragraph)
+(define-key evil-motion-state-map "}" 'evil-forward-paragraph)
+(define-key evil-motion-state-map "#" 'evil-search-word-backward)
+(define-key evil-motion-state-map "g#" 'evil-search-unbounded-word-backward)
+(define-key evil-motion-state-map "$" 'evil-end-of-line)
+(define-key evil-motion-state-map "%" 'evil-jump-item)
+(define-key evil-motion-state-map "`" 'evil-goto-mark)
+(define-key evil-motion-state-map "'" 'evil-goto-mark-line)
+(define-key evil-motion-state-map "(" 'evil-backward-sentence-begin)
+(define-key evil-motion-state-map ")" 'evil-forward-sentence-begin)
+(define-key evil-motion-state-map "]]" 'evil-forward-section-begin)
+(define-key evil-motion-state-map "][" 'evil-forward-section-end)
+(define-key evil-motion-state-map "[[" 'evil-backward-section-begin)
+(define-key evil-motion-state-map "[]" 'evil-backward-section-end)
+(define-key evil-motion-state-map "[(" 'evil-previous-open-paren)
+(define-key evil-motion-state-map "])" 'evil-next-close-paren)
+(define-key evil-motion-state-map "[{" 'evil-previous-open-brace)
+(define-key evil-motion-state-map "]}" 'evil-next-close-brace)
+(define-key evil-motion-state-map "]s" 'evil-next-flyspell-error)
+(define-key evil-motion-state-map "[s" 'evil-prev-flyspell-error)
+(define-key evil-motion-state-map "*" 'evil-search-word-forward)
+(define-key evil-motion-state-map "g*" 'evil-search-unbounded-word-forward)
+(define-key evil-motion-state-map "," 'evil-repeat-find-char-reverse)
+(define-key evil-motion-state-map "/" 'evil-search-forward)
+(define-key evil-motion-state-map ";" 'evil-repeat-find-char)
+(define-key evil-motion-state-map "?" 'evil-search-backward)
+(define-key evil-motion-state-map "|" 'evil-goto-column)
+(define-key evil-motion-state-map "^" 'evil-first-non-blank)
+(define-key evil-motion-state-map "+" 'evil-next-line-first-non-blank)
+(define-key evil-motion-state-map "_" 'evil-next-line-1-first-non-blank)
+(define-key evil-motion-state-map "-" 'evil-previous-line-first-non-blank)
+(define-key evil-motion-state-map "\C-w" 'evil-window-map)
+(define-key evil-motion-state-map (kbd "C-6") 'evil-switch-to-windows-last-buffer)
+(define-key evil-motion-state-map "\C-]" 'evil-jump-to-tag)
+(define-key evil-motion-state-map (kbd "C-b") 'evil-scroll-page-up)
+(define-key evil-motion-state-map (kbd "C-d") 'evil-scroll-down)
+(define-key evil-motion-state-map (kbd "C-e") 'evil-scroll-line-down)
+(define-key evil-motion-state-map (kbd "C-f") 'evil-scroll-page-down)
+(define-key evil-motion-state-map (kbd "C-o") 'evil-jump-backward)
+(define-key evil-motion-state-map (kbd "C-y") 'evil-scroll-line-up)
+(define-key evil-motion-state-map (kbd "RET") 'evil-ret)
+(define-key evil-motion-state-map "\\" 'evil-execute-in-emacs-state)
+(define-key evil-motion-state-map "z^" 'evil-scroll-top-line-to-bottom)
+(define-key evil-motion-state-map "z+" 'evil-scroll-bottom-line-to-top)
+(define-key evil-motion-state-map "zt" 'evil-scroll-line-to-top)
+;; TODO: z RET has an advanced form taking an count before the RET
+;; but this requires again a special state with a single command
+;; bound to RET
+(define-key evil-motion-state-map (vconcat "z" [return]) "zt^")
+(define-key evil-motion-state-map (kbd "z RET") (vconcat "z" [return]))
+(define-key evil-motion-state-map "zz" 'evil-scroll-line-to-center)
+(define-key evil-motion-state-map "z." "zz^")
+(define-key evil-motion-state-map "zb" 'evil-scroll-line-to-bottom)
+(define-key evil-motion-state-map "z-" "zb^")
+(define-key evil-motion-state-map "v" 'evil-visual-char)
+(define-key evil-motion-state-map "V" 'evil-visual-line)
+(define-key evil-motion-state-map "\C-v" 'evil-visual-block)
+(define-key evil-motion-state-map "gv" 'evil-visual-restore)
+(define-key evil-motion-state-map (kbd "C-^") 'evil-buffer)
+(define-key evil-motion-state-map [left] 'evil-backward-char)
+(define-key evil-motion-state-map [right] 'evil-forward-char)
+(define-key evil-motion-state-map [up] 'evil-previous-line)
+(define-key evil-motion-state-map [down] 'evil-next-line)
+(define-key evil-motion-state-map "zl" 'evil-scroll-column-right)
+(define-key evil-motion-state-map [?z right] "zl")
+(define-key evil-motion-state-map "zh" 'evil-scroll-column-left)
+(define-key evil-motion-state-map [?z left] "zh")
+(define-key evil-motion-state-map "zL" 'evil-scroll-right)
+(define-key evil-motion-state-map "zH" 'evil-scroll-left)
+(define-key evil-motion-state-map
+ (read-kbd-macro evil-toggle-key) 'evil-emacs-state)
+
+;; text objects
+(define-key evil-outer-text-objects-map "w" 'evil-a-word)
+(define-key evil-outer-text-objects-map "W" 'evil-a-WORD)
+(define-key evil-outer-text-objects-map "s" 'evil-a-sentence)
+(define-key evil-outer-text-objects-map "p" 'evil-a-paragraph)
+(define-key evil-outer-text-objects-map "b" 'evil-a-paren)
+(define-key evil-outer-text-objects-map "(" 'evil-a-paren)
+(define-key evil-outer-text-objects-map ")" 'evil-a-paren)
+(define-key evil-outer-text-objects-map "[" 'evil-a-bracket)
+(define-key evil-outer-text-objects-map "]" 'evil-a-bracket)
+(define-key evil-outer-text-objects-map "B" 'evil-a-curly)
+(define-key evil-outer-text-objects-map "{" 'evil-a-curly)
+(define-key evil-outer-text-objects-map "}" 'evil-a-curly)
+(define-key evil-outer-text-objects-map "<" 'evil-an-angle)
+(define-key evil-outer-text-objects-map ">" 'evil-an-angle)
+(define-key evil-outer-text-objects-map "'" 'evil-a-single-quote)
+(define-key evil-outer-text-objects-map "\"" 'evil-a-double-quote)
+(define-key evil-outer-text-objects-map "`" 'evil-a-back-quote)
+(define-key evil-outer-text-objects-map "t" 'evil-a-tag)
+(define-key evil-outer-text-objects-map "o" 'evil-a-symbol)
+(define-key evil-inner-text-objects-map "w" 'evil-inner-word)
+(define-key evil-inner-text-objects-map "W" 'evil-inner-WORD)
+(define-key evil-inner-text-objects-map "s" 'evil-inner-sentence)
+(define-key evil-inner-text-objects-map "p" 'evil-inner-paragraph)
+(define-key evil-inner-text-objects-map "b" 'evil-inner-paren)
+(define-key evil-inner-text-objects-map "(" 'evil-inner-paren)
+(define-key evil-inner-text-objects-map ")" 'evil-inner-paren)
+(define-key evil-inner-text-objects-map "[" 'evil-inner-bracket)
+(define-key evil-inner-text-objects-map "]" 'evil-inner-bracket)
+(define-key evil-inner-text-objects-map "B" 'evil-inner-curly)
+(define-key evil-inner-text-objects-map "{" 'evil-inner-curly)
+(define-key evil-inner-text-objects-map "}" 'evil-inner-curly)
+(define-key evil-inner-text-objects-map "<" 'evil-inner-angle)
+(define-key evil-inner-text-objects-map ">" 'evil-inner-angle)
+(define-key evil-inner-text-objects-map "'" 'evil-inner-single-quote)
+(define-key evil-inner-text-objects-map "\"" 'evil-inner-double-quote)
+(define-key evil-inner-text-objects-map "`" 'evil-inner-back-quote)
+(define-key evil-inner-text-objects-map "t" 'evil-inner-tag)
+(define-key evil-inner-text-objects-map "o" 'evil-inner-symbol)
+(define-key evil-motion-state-map "gn" 'evil-next-match)
+(define-key evil-motion-state-map "gN" 'evil-previous-match)
+
+(when evil-want-C-i-jump
+ (define-key evil-motion-state-map (kbd "C-i") 'evil-jump-forward))
+
+(when evil-want-C-u-scroll
+ (define-key evil-motion-state-map (kbd "C-u") 'evil-scroll-up))
+
+;;; Visual state
+
+(define-key evil-visual-state-map "A" 'evil-append)
+(define-key evil-visual-state-map "I" 'evil-insert)
+(define-key evil-visual-state-map "o" 'exchange-point-and-mark)
+(define-key evil-visual-state-map "O" 'evil-visual-exchange-corners)
+(define-key evil-visual-state-map "R" 'evil-change)
+(define-key evil-visual-state-map "u" 'evil-downcase)
+(define-key evil-visual-state-map "U" 'evil-upcase)
+(define-key evil-visual-state-map "z=" 'ispell-word)
+(define-key evil-visual-state-map "a" evil-outer-text-objects-map)
+(define-key evil-visual-state-map "i" evil-inner-text-objects-map)
+(define-key evil-visual-state-map (kbd "<insert>") 'undefined)
+(define-key evil-visual-state-map (kbd "<insertchar>") 'undefined)
+(define-key evil-visual-state-map [remap evil-repeat] 'undefined)
+(define-key evil-visual-state-map [escape] 'evil-exit-visual-state)
+
+;;; Operator-Pending state
+
+(define-key evil-operator-state-map "a" evil-outer-text-objects-map)
+(define-key evil-operator-state-map "i" evil-inner-text-objects-map)
+;; (define-key evil-operator-state-map [escape] 'keyboard-quit)
+
+;;; Insert state
+
+(defvar evil-insert-state-bindings
+ `(("\C-v" . quoted-insert)
+ ("\C-k" . evil-insert-digraph)
+ ("\C-o" . evil-execute-in-normal-state)
+ ("\C-r" . evil-paste-from-register)
+ ("\C-y" . evil-copy-from-above)
+ ("\C-e" . evil-copy-from-below)
+ ("\C-n" . evil-complete-next)
+ ("\C-p" . evil-complete-previous)
+ ("\C-x\C-n" . evil-complete-next-line)
+ ("\C-x\C-p" . evil-complete-previous-line)
+ ("\C-t" . evil-shift-right-line)
+ ("\C-d" . evil-shift-left-line)
+ ("\C-a" . evil-paste-last-insertion)
+ ([remap delete-backward-char] . evil-delete-backward-char-and-join)
+ ,(if evil-want-C-w-delete
+ '("\C-w" . evil-delete-backward-word)
+ '("\C-w" . evil-window-map))
+ ([mouse-2] . mouse-yank-primary))
+ "Evil's bindings for insert state (for
+`evil-insert-state-map'), excluding <delete>, <escape>, and
+`evil-toggle-key'.")
+
+(defun evil-update-insert-state-bindings (&optional _option-name remove force)
+ "Update bindings in `evil-insert-state-map'.
+If no arguments are given add the bindings specified in
+`evil-insert-state-bindings'. If REMOVE is non nil, remove only
+these bindings. Unless FORCE is non nil, this will not
+overwriting existing bindings, which means bindings will not be
+added if one already exists for a key and only default bindings
+are removed.
+
+Note that <delete>, <escape> and `evil-toggle-key' are not
+included in `evil-insert-state-bindings' by default."
+ (interactive)
+ (dolist (binding evil-insert-state-bindings)
+ (cond
+ ((and remove
+ (or force
+ ;; Only remove if the default binding has not changed
+ (eq (evil-lookup-key evil-insert-state-map (car binding))
+ (cdr binding))))
+ (define-key evil-insert-state-map (car binding) nil))
+ ((and (null remove)
+ (or force
+ ;; Check to see that nothing is bound here before adding
+ (not (evil-lookup-key evil-insert-state-map (car binding)))))
+ (define-key evil-insert-state-map (car binding) (cdr binding))))))
+
+(define-key evil-insert-state-map [delete] 'delete-char)
+(define-key evil-insert-state-map [escape] 'evil-normal-state)
+(define-key evil-insert-state-map
+ (read-kbd-macro evil-toggle-key) 'evil-emacs-state)
+
+;;; Replace state
+
+(define-key evil-replace-state-map (kbd "DEL") 'evil-replace-backspace)
+(define-key evil-replace-state-map [escape] 'evil-normal-state)
+
+;;; Emacs state
+
+(define-key evil-emacs-state-map
+ (read-kbd-macro evil-toggle-key) 'evil-exit-emacs-state)
+
+(when evil-want-C-w-in-emacs-state
+ (define-key evil-emacs-state-map "\C-w" 'evil-window-map))
+
+;;; Mouse
+(define-key evil-motion-state-map [down-mouse-1] 'evil-mouse-drag-region)
+(define-key evil-visual-state-map [mouse-2] 'evil-exit-visual-and-repeat)
+(define-key evil-normal-state-map [mouse-2] 'mouse-yank-primary)
+
+;; Ex
+(define-key evil-motion-state-map ":" 'evil-ex)
+(define-key evil-motion-state-map "!" 'evil-shell-command)
+
+(evil-ex-define-cmd "e[dit]" 'evil-edit)
+(evil-ex-define-cmd "w[rite]" 'evil-write)
+(evil-ex-define-cmd "wa[ll]" 'evil-write-all)
+(evil-ex-define-cmd "sav[eas]" 'evil-save)
+(evil-ex-define-cmd "r[ead]" 'evil-read)
+(evil-ex-define-cmd "b[uffer]" 'evil-buffer)
+(evil-ex-define-cmd "bn[ext]" 'evil-next-buffer)
+(evil-ex-define-cmd "bp[revious]" 'evil-prev-buffer)
+(evil-ex-define-cmd "bN[ext]" "bprevious")
+(evil-ex-define-cmd "sb[uffer]" 'evil-split-buffer)
+(evil-ex-define-cmd "sbn[ext]" 'evil-split-next-buffer)
+(evil-ex-define-cmd "sbp[revious]" 'evil-split-prev-buffer)
+(evil-ex-define-cmd "sbN[ext]" "sbprevious")
+(evil-ex-define-cmd "buffers" 'buffer-menu)
+(evil-ex-define-cmd "files" 'evil-show-files)
+(evil-ex-define-cmd "ls" "buffers")
+
+(evil-ex-define-cmd "c[hange]" 'evil-change)
+(evil-ex-define-cmd "co[py]" 'evil-copy)
+(evil-ex-define-cmd "t" "copy")
+(evil-ex-define-cmd "m[ove]" 'evil-move)
+(evil-ex-define-cmd "d[elete]" 'evil-ex-delete)
+(evil-ex-define-cmd "y[ank]" 'evil-ex-yank)
+(evil-ex-define-cmd "go[to]" 'evil-goto-char)
+(evil-ex-define-cmd "j[oin]" 'evil-ex-join)
+(evil-ex-define-cmd "le[ft]" 'evil-align-left)
+(evil-ex-define-cmd "ri[ght]" 'evil-align-right)
+(evil-ex-define-cmd "ce[nter]" 'evil-align-center)
+(evil-ex-define-cmd "sp[lit]" 'evil-window-split)
+(evil-ex-define-cmd "vs[plit]" 'evil-window-vsplit)
+(evil-ex-define-cmd "new" 'evil-window-new)
+(evil-ex-define-cmd "ene[w]" 'evil-buffer-new)
+(evil-ex-define-cmd "vne[w]" 'evil-window-vnew)
+(evil-ex-define-cmd "clo[se]" 'evil-window-delete)
+(evil-ex-define-cmd "on[ly]" 'delete-other-windows)
+(evil-ex-define-cmd "q[uit]" 'evil-quit)
+(evil-ex-define-cmd "wq" 'evil-save-and-close)
+(evil-ex-define-cmd "quita[ll]" 'evil-quit-all)
+(evil-ex-define-cmd "qa[ll]" "quitall")
+(evil-ex-define-cmd "cq[uit]" 'evil-quit-all-with-error-code)
+(evil-ex-define-cmd "wqa[ll]" 'evil-save-and-quit)
+(evil-ex-define-cmd "xa[ll]" "wqall")
+(evil-ex-define-cmd "x[it]" 'evil-save-modified-and-close)
+(evil-ex-define-cmd "exi[t]" 'evil-save-modified-and-close)
+(evil-ex-define-cmd "bd[elete]" 'evil-delete-buffer)
+(evil-ex-define-cmd "bw[ipeout]" 'evil-delete-buffer)
+(evil-ex-define-cmd "g[lobal]" 'evil-ex-global)
+(evil-ex-define-cmd "v[global]" 'evil-ex-global-inverted)
+(evil-ex-define-cmd "norm[al]" 'evil-ex-normal)
+(evil-ex-define-cmd "s[ubstitute]" 'evil-ex-substitute)
+(evil-ex-define-cmd "&" 'evil-ex-repeat-substitute)
+(evil-ex-define-cmd "&&" 'evil-ex-repeat-substitute-with-flags)
+(evil-ex-define-cmd "~" 'evil-ex-repeat-substitute-with-search)
+(evil-ex-define-cmd "~&" 'evil-ex-repeat-substitute-with-search-and-flags)
+(evil-ex-define-cmd "registers" 'evil-show-registers)
+(evil-ex-define-cmd "marks" 'evil-show-marks)
+(evil-ex-define-cmd "delm[arks]" 'evil-delete-marks)
+(evil-ex-define-cmd "ju[mps]" 'evil-show-jumps)
+(evil-ex-define-cmd "noh[lsearch]" 'evil-ex-nohighlight)
+(evil-ex-define-cmd "f[ile]" 'evil-show-file-info)
+(evil-ex-define-cmd "<" 'evil-shift-left)
+(evil-ex-define-cmd ">" 'evil-shift-right)
+(evil-ex-define-cmd "=" 'evil-ex-line-number)
+(evil-ex-define-cmd "!" 'evil-shell-command)
+(evil-ex-define-cmd "@:" 'evil-ex-repeat)
+(evil-ex-define-cmd "mak[e]" 'evil-make)
+(evil-ex-define-cmd "cc" 'evil-goto-error)
+(evil-ex-define-cmd "cfir[st]" 'first-error)
+(evil-ex-define-cmd "cr[ewind]" 'first-error)
+(evil-ex-define-cmd "cn[ext]" 'next-error)
+(evil-ex-define-cmd "cp[revious]" 'previous-error)
+(evil-ex-define-cmd "set-initial-state" 'evil-ex-set-initial-state)
+(evil-ex-define-cmd "show-digraphs" 'evil-ex-show-digraphs)
+(evil-ex-define-cmd "sor[t]" 'evil-ex-sort)
+(evil-ex-define-cmd "res[ize]" 'evil-ex-resize)
+
+;; search command line
+(define-key evil-ex-search-keymap "\d" #'evil-ex-delete-backward-char)
+(define-key evil-ex-search-keymap "\C-r" 'evil-paste-from-register)
+(define-key evil-ex-search-keymap "\C-n" 'next-history-element)
+(define-key evil-ex-search-keymap "\C-p" 'previous-history-element)
+
+;; ex command line
+(define-key evil-ex-completion-map "\d" #'evil-ex-delete-backward-char)
+(define-key evil-ex-completion-map "\t" #'evil-ex-completion)
+(define-key evil-ex-completion-map [tab] #'evil-ex-completion)
+(define-key evil-ex-completion-map [remap completion-at-point] #'evil-ex-completion)
+(define-key evil-ex-completion-map "\C-a" 'evil-ex-completion)
+(define-key evil-ex-completion-map "\C-b" 'move-beginning-of-line)
+(define-key evil-ex-completion-map "\C-c" 'abort-recursive-edit)
+(define-key evil-ex-completion-map "\C-d" 'evil-ex-completion)
+(define-key evil-ex-completion-map "\C-g" 'abort-recursive-edit)
+(define-key evil-ex-completion-map "\C-k" 'evil-insert-digraph)
+(define-key evil-ex-completion-map "\C-l" 'evil-ex-completion)
+(define-key evil-ex-completion-map "\C-p" #'previous-complete-history-element)
+(define-key evil-ex-completion-map "\C-r" 'evil-paste-from-register)
+(define-key evil-ex-completion-map "\C-n" #'next-complete-history-element)
+(define-key evil-ex-completion-map "\C-u" 'evil-delete-whole-line)
+(define-key evil-ex-completion-map "\C-v" #'quoted-insert)
+(define-key evil-ex-completion-map "\C-w" 'backward-kill-word)
+(define-key evil-ex-completion-map [escape] 'abort-recursive-edit)
+(define-key evil-ex-completion-map [S-left] 'backward-word)
+(define-key evil-ex-completion-map [S-right] 'forward-word)
+(define-key evil-ex-completion-map [up] 'previous-complete-history-element)
+(define-key evil-ex-completion-map [down] 'next-complete-history-element)
+(define-key evil-ex-completion-map [prior] 'previous-history-element)
+(define-key evil-ex-completion-map [next] 'next-history-element)
+(define-key evil-ex-completion-map [return] 'exit-minibuffer)
+(define-key evil-ex-completion-map (kbd "RET") 'exit-minibuffer)
+
+;; evil-read-key
+(define-key evil-read-key-map (kbd "ESC") #'keyboard-quit)
+(define-key evil-read-key-map (kbd "C-]") #'keyboard-quit)
+(define-key evil-read-key-map (kbd "C-q") #'evil-read-quoted-char)
+(define-key evil-read-key-map (kbd "C-v") #'evil-read-quoted-char)
+(define-key evil-read-key-map (kbd "C-k") #'evil-read-digraph-char)
+(define-key evil-read-key-map "\r" "\n")
+
+;; command line window
+(evil-define-key 'normal
+ evil-command-window-mode-map (kbd "RET") 'evil-command-window-execute)
+(evil-define-key 'insert
+ evil-command-window-mode-map (kbd "RET") 'evil-command-window-execute)
+
+(provide 'evil-maps)
+
+;;; evil-maps.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-maps.elc b/.emacs.d/elpa/evil-20171210.501/evil-maps.elc
new file mode 100644
index 0000000..2af5fc3
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-maps.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-pkg.el b/.emacs.d/elpa/evil-20171210.501/evil-pkg.el
new file mode 100644
index 0000000..9d9c73f
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-pkg.el
@@ -0,0 +1,8 @@
+(define-package "evil" "20171210.501" "Extensible Vi layer for Emacs."
+ '((emacs "24.1")
+ (undo-tree "0.6.3")
+ (goto-chg "1.6")
+ (cl-lib "0.5")))
+;; Local Variables:
+;; no-byte-compile: t
+;; End:
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-repeat.el b/.emacs.d/elpa/evil-20171210.501/evil-repeat.el
new file mode 100644
index 0000000..80ef0bf
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-repeat.el
@@ -0,0 +1,638 @@
+;;; evil-repeat.el --- Repeat system
+
+;; Author: Frank Fischer <frank.fischer at mathematik.tu-chemnitz.de>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; A repeat begins when leaving Normal state; it ends when re-entering
+;; Normal state. The diagram below shows possible routes between
+;; Normal state (N), Insert state (I), Visual state (V),
+;; Operator-Pending state (O) and Replace state (R). (Emacs state
+;; is an exception: nothing is repeated in that state.)
+;; ___
+;; / \
+;; | R |
+;; \___/
+;; ^ |
+;; | |
+;; ___ |___V ___
+;; / \ <------- / \ -------> / \
+;; | V | | N | | O |
+;; \___/ -------> \___/ <------- \___/
+;; | | ^ |
+;; | | | |
+;; | V___| |
+;; | / \ |
+;; +--------> | I | <--------+
+;; \___/
+;;
+;; The recording of a repeat is started in one of two cases: Either a
+;; command is about being executed (in pre-command-hook) or normal
+;; state is exited. The recording is stopped whenever a command has
+;; being completed and evil is in normal state afterwards. Therefore,
+;; a non-inserting command in normal-state is recorded as a single
+;; repeat unit. In contrast, if the command leaves normal state and
+;; starts insert-state, all commands that are executed until
+;; insert-state is left and normal state is reactivated are recorded
+;; together in one repeat unit. In other words, a repeat unit consists
+;; of all commands that are executed starting and ending in normal
+;; state.
+;;
+;; Not all commands are recorded. There are several commands that are
+;; completely ignored and other commands that even abort the currently
+;; active recording, e.g., commands that change the current buffer.
+;;
+;; During recording the repeat information is appended to the variable
+;; `evil-repeat-info', which is cleared when the recording
+;; starts. This accumulated repeat information is put into the
+;; `evil-repeat-ring' when the recording is finished. The dot command,
+;; `\[evil-repeat]' (`evil-repeat') replays the most recent entry in
+;; the ring, preceeding repeats can be replayed using
+;; `\[evil-repeat-pop]' (`evil-repeat-pop').
+;;
+;; Repeat information can be stored in almost arbitrary form. How the
+;; repeat information for each single command is recored is determined
+;; by the :repeat property of the command. This property has the
+;; following interpretation:
+;;
+;; t record commands by storing the key-sequence that invoked it
+;; nil ignore this command completely
+;; ignore synonym to nil
+;; motion command is recorded by storing the key-sequence but only in
+;; insert state, otherwise it is ignored.
+;; abort stop recording of repeat information immediately
+;; change record commands by storing buffer changes
+;; SYMBOL if SYMBOL is contained as key in `evil-repeat-types'
+;; call the corresponding (function-)value, otherwise
+;; call the function associated with SYMBOL. In both
+;; cases the function should take exactly one argument
+;; which is either 'pre or 'post depending on whether
+;; the function is called before or after the execution
+;; of the command.
+;;
+;; Therefore, using a certain SYMBOL one can write specific repeation
+;; functions for each command.
+;;
+;; Each value of ring `evil-repeat-info', i.e., each single repeat
+;; information must be one of the following two possibilities:
+;; If element is a sequence, it is regarded as a key-sequence to
+;; be repeated. Otherwise the element must be a list
+;; (FUNCTION PARAMS ...) which will be called using
+;; (apply FUNCTION PARAMS) whenever this repeat is being executed.
+;;
+;; A user supplied repeat function can use the functions
+;; `evil-record-repeat' to append further repeat-information of the
+;; form described above to `evil-repeat-info'. See the implementation
+;; of `evil-repeat-keystrokes' and `evil-repeat-changes' for examples.
+;; Those functions are called in different situations before and after
+;; the execution of a command. Each function should take one argument
+;; which can be either 'pre, 'post, 'pre-operator or 'post-operator
+;; specifying when the repeat function has been called. If the command
+;; is a usual command the function is called with 'pre before the
+;; command is executed and with 'post after the command has been
+;; executed.
+;;
+;; The repeat information is executed with `evil-execute-repeat-info',
+;; which passes key-sequence elements to `execute-kbd-macro' and
+;; executes other elements as defined above. A special version is
+;; `evil-execute-repeat-info-with-count'. This function works as
+;; `evil-execute-repeat-info', but replaces the count of the first
+;; command. This is done by parsing the key-sequence, ignoring all
+;; calls to `digit-prefix-argument' and `negative-argument', and
+;; prepending the count as a string to the vector of the remaining
+;; key-sequence.
+
+(require 'evil-states)
+
+;;; Code:
+
+(declare-function evil-visual-state-p "evil-visual")
+(declare-function evil-visual-range "evil-visual")
+(declare-function evil-visual-char "evil-visual")
+(declare-function evil-visual-line "evil-visual")
+(declare-function evil-visual-block "evil-visual")
+
+(defmacro evil-without-repeat (&rest body)
+ (declare (indent defun)
+ (debug t))
+ `(let ((pre-command-hook (remq 'evil-repeat-pre-hook pre-command-hook))
+ (post-command-hook (remq 'evil-repeat-post-hook post-command-hook)))
+ ,@body
+ (evil-repeat-abort)))
+
+(defsubst evil-repeat-recording-p ()
+ "Returns non-nil iff a recording is in progress."
+ (eq evil-recording-repeat t))
+
+(defun evil-repeat-start ()
+ "Start recording a new repeat into `evil-repeat-info'."
+ (evil-repeat-reset t)
+ (evil-repeat-record-buffer)
+ (when (evil-visual-state-p)
+ (let* ((range (evil-visual-range))
+ (beg (evil-range-beginning range))
+ (end (1- (evil-range-end range)))
+ (nfwdlines (evil-count-lines beg end)))
+ (evil-repeat-record
+ (cond
+ ((eq evil-visual-selection 'char)
+ (list #'evil-repeat-visual-char
+ nfwdlines
+ (- end
+ (if (zerop nfwdlines)
+ beg
+ (save-excursion
+ (goto-char end)
+ (line-beginning-position))))))
+ ((eq evil-visual-selection 'line)
+ (list #'evil-repeat-visual-line nfwdlines))
+ ((eq evil-visual-selection 'block)
+ (list #'evil-repeat-visual-block
+ nfwdlines
+ (abs (- (evil-column beg) (evil-column end))))))))))
+
+(defun evil-repeat-stop ()
+ "Stop recording a repeat.
+Update `evil-repeat-ring' with the accumulated changes
+in `evil-repeat-info' and clear variables."
+ (unwind-protect
+ (when (evil-repeat-recording-p)
+ (setq evil-repeat-info
+ (evil-normalize-repeat-info evil-repeat-info))
+ (when (and evil-repeat-info evil-repeat-ring)
+ (ring-insert evil-repeat-ring evil-repeat-info)))
+ (evil-repeat-reset nil)))
+
+(defun evil-repeat-abort ()
+ "Abort current repeation."
+ (evil-repeat-reset 'abort))
+
+(defun evil-repeat-reset (flag)
+ "Clear all repeat recording variables.
+Set `evil-recording-repeat' to FLAG."
+ (setq evil-recording-repeat flag
+ evil-repeat-info nil
+ evil-repeat-buffer nil))
+
+(defsubst evil-repeat-record-position (&optional pos)
+ "Set `evil-repeat-pos' to POS or point."
+ (setq evil-repeat-pos (or pos (point))))
+
+(defun evil-repeat-record-buffer ()
+ "Set `evil-repeat-buffer' to the current buffer."
+ (unless (minibufferp)
+ (setq evil-repeat-buffer (current-buffer))))
+
+(defmacro evil-save-repeat-info (&rest body)
+ "Execute BODY, protecting the values of repeat variables."
+ (declare (indent defun)
+ (debug t))
+ `(let (evil-repeat-ring
+ evil-recording-repeat
+ evil-recording-current-command
+ evil-repeat-info
+ evil-repeat-changes
+ evil-repeat-pos
+ evil-repeat-keys
+ evil-repeat-buffer
+ this-command
+ last-command)
+ ,@body))
+
+(defun evil-repeat-different-buffer-p (&optional strict)
+ "Whether the buffer has changed in a repeat.
+If STRICT is non-nil, returns t if the previous buffer
+is unknown; otherwise returns t only if the previous
+buffer is known and different from the current buffer."
+ (and (or (buffer-live-p evil-repeat-buffer) strict)
+ (not (minibufferp))
+ (not (eq (current-buffer) evil-repeat-buffer))))
+
+(defun evil-repeat-type (command &optional default)
+ "Return the :repeat property of COMMAND.
+If COMMAND doesn't have this property, return DEFAULT."
+ (when (functionp command) ; ignore keyboard macros
+ (let* ((type (evil-get-command-property command :repeat default))
+ (repeat-type (assq type evil-repeat-types)))
+ (if repeat-type (cdr repeat-type) type))))
+
+(defun evil-repeat-force-abort-p (repeat-type)
+ "Returns non-nil iff the current command should abort the recording of repeat information."
+ (or (evil-repeat-different-buffer-p) ; ... buffer changed
+ (eq repeat-type 'abort) ; ... explicitely forced
+ (eq evil-recording-repeat 'abort) ; ... already aborted
+ (evil-emacs-state-p) ; ... in Emacs state
+ (and (evil-mouse-events-p (this-command-keys)) ; ... mouse events
+ (eq repeat-type nil))
+ (minibufferp))) ; ... minibuffer activated
+
+(defun evil-repeat-record (info)
+ "Add INFO to the end of `evil-repeat-info'."
+ (when (evil-repeat-recording-p)
+ (setq evil-repeat-info (nconc evil-repeat-info (list info)))))
+
+;; called from `evil-normal-state-exit-hook'
+(defun evil-repeat-start-hook ()
+ "Record a new repeat when exiting Normal state.
+Does not record in Emacs state or if the current command
+has :repeat nil."
+ (when (and (eq (evil-repeat-type this-command t) t)
+ (not (evil-emacs-state-p)))
+ (evil-repeat-start)))
+
+;; called from `pre-command-hook'
+(defun evil-repeat-pre-hook ()
+ "Prepare the current command for recording the repeation."
+ (when evil-local-mode
+ (let ((repeat-type (evil-repeat-type this-command t)))
+ (cond
+ ;; abort the repeat
+ ((evil-repeat-force-abort-p repeat-type)
+ ;; We mark the current record as being aborted, because there
+ ;; may be further pre-hooks following before the post-hook is
+ ;; called.
+ (evil-repeat-abort))
+ ;; ignore those commands completely
+ ((null repeat-type))
+ ;; record command
+ (t
+ ;; In normal-state or visual state, each command is a single
+ ;; repeation, therefore start a new repeation.
+ (when (or (evil-normal-state-p)
+ (evil-visual-state-p))
+ (evil-repeat-start))
+ (setq evil-recording-current-command t)
+ (funcall repeat-type 'pre))))))
+(put 'evil-repeat-pre-hook 'permanent-local-hook t)
+
+;; called from `post-command-hook'
+(defun evil-repeat-post-hook ()
+ "Finish recording of repeat-information for the current-command."
+ (when (and evil-local-mode evil-recording-repeat)
+ (let ((repeat-type (evil-repeat-type this-command t)))
+ (cond
+ ;; abort the repeat
+ ((evil-repeat-force-abort-p repeat-type)
+ ;; The command has been aborted but is complete, so just reset
+ ;; the recording state.
+ (evil-repeat-reset nil))
+ ;; ignore if command should not be recorded or the current
+ ;; command is not being recorded
+ ((or (null repeat-type)
+ (not evil-recording-current-command)))
+ ;; record command
+ (t
+ (funcall repeat-type 'post)
+ ;; In normal state, the repeat sequence is complete, so record it.
+ (when (evil-normal-state-p)
+ (evil-repeat-stop)))))
+ ;; done with recording the current command
+ (setq evil-recording-current-command nil)))
+(put 'evil-repeat-post-hook 'permanent-local-hook t)
+
+(defun evil-clear-command-keys ()
+ "Clear `this-command-keys' and all information about the current command keys.
+Calling this function prevents further recording of the keys that
+invoked the current command"
+ (clear-this-command-keys t)
+ (setq evil-repeat-keys ""))
+
+(defun evil-this-command-keys (&optional post-cmd)
+ "Version of `this-command-keys' with finer control over prefix args."
+ (let ((arg (if post-cmd current-prefix-arg prefix-arg)))
+ (vconcat
+ (when (and (numberp arg)
+ ;; Only add prefix if no repeat info recorded yet
+ (null evil-repeat-info))
+ (string-to-vector (number-to-string arg)))
+ (this-single-command-keys))))
+
+(defun evil-repeat-keystrokes (flag)
+ "Repeation recording function for commands that are repeated by keystrokes."
+ (cond
+ ((eq flag 'pre)
+ (when evil-this-register
+ (evil-repeat-record
+ `(set evil-this-register ,evil-this-register)))
+ (setq evil-repeat-keys (evil-this-command-keys)))
+ ((eq flag 'post)
+ (evil-repeat-record (if (zerop (length (evil-this-command-keys t)))
+ evil-repeat-keys
+ (evil-this-command-keys t)))
+ ;; erase commands keys to prevent double recording
+ (evil-clear-command-keys))))
+
+(defun evil-repeat-motion (flag)
+ "Repeation for motions. Motions are recorded by keystroke but only in insert state."
+ (when (memq evil-state '(insert replace))
+ (evil-repeat-keystrokes flag)))
+
+(defun evil-repeat-changes (flag)
+ "Repeation recording function for commands that are repeated by buffer changes."
+ (cond
+ ((eq flag 'pre)
+ (add-hook 'after-change-functions #'evil-repeat-change-hook nil t)
+ (evil-repeat-start-record-changes))
+ ((eq flag 'post)
+ (remove-hook 'after-change-functions #'evil-repeat-change-hook t)
+ (evil-repeat-finish-record-changes))))
+
+;; called from the `after-change-functions' hook
+(defun evil-repeat-change-hook (beg end length)
+ "Record change information for current command."
+ (let ((repeat-type (evil-repeat-type this-command t)))
+ (when (and (evil-repeat-recording-p)
+ (eq repeat-type 'evil-repeat-changes)
+ (not (evil-emacs-state-p))
+ (not (evil-repeat-different-buffer-p t))
+ evil-state)
+ (unless (evil-repeat-recording-p)
+ (evil-repeat-start))
+ (evil-repeat-record-change (- beg evil-repeat-pos)
+ (buffer-substring beg end)
+ length))))
+(put 'evil-repeat-change-hook 'permanent-local-hook t)
+
+(defun evil-repeat-record-change (relpos ins ndel)
+ "Record the current buffer changes during a repeat.
+If CHANGE is specified, it is added to `evil-repeat-changes'."
+ (when (evil-repeat-recording-p)
+ (setq evil-repeat-changes
+ (nconc evil-repeat-changes (list (list relpos ins ndel))))))
+
+(defun evil-repeat-start-record-changes ()
+ "Starts the recording of a new set of buffer changes."
+ (setq evil-repeat-changes nil)
+ (evil-repeat-record-position))
+
+(defun evil-repeat-finish-record-changes ()
+ "Finishes the recording of buffer changes and records them as repeat."
+ (when (evil-repeat-recording-p)
+ (evil-repeat-record `(evil-execute-change
+ ,evil-repeat-changes
+ ,(- (point) evil-repeat-pos)))
+ (setq evil-repeat-changes nil)))
+
+(defun evil-repeat-insert-at-point (flag)
+ "Repeation recording function for commands that insert text in region.
+This records text insertion when a command inserts some text in a
+buffer between (point) and (mark)."
+ (cond
+ ((eq flag 'pre)
+ (add-hook 'after-change-functions #'evil-repeat-insert-at-point-hook nil t))
+ ((eq flag 'post)
+ (remove-hook 'after-change-functions #'evil-repeat-insert-at-point-hook t))))
+
+(defun evil-repeat-insert-at-point-hook (beg end length)
+ (let ((repeat-type (evil-repeat-type this-command t)))
+ (when (and (evil-repeat-recording-p)
+ (eq repeat-type 'evil-repeat-insert-at-point)
+ (not (evil-emacs-state-p))
+ (not (evil-repeat-different-buffer-p t))
+ evil-state)
+ (setq evil-repeat-pos beg)
+ (evil-repeat-record (list 'insert (buffer-substring beg end))))))
+(put 'evil-repeat-insert-at-point-hook 'permanent-local-hook t)
+
+(defun evil-normalize-repeat-info (repeat-info)
+ "Concatenate consecutive arrays in REPEAT-INFO.
+Returns a single array."
+ (let* ((result (cons nil nil))
+ (result-last result)
+ cur cur-last)
+ (dolist (rep repeat-info)
+ (cond
+ ((null rep))
+ ((arrayp rep)
+ (setq rep (listify-key-sequence rep))
+ (cond
+ (cur
+ (setcdr cur-last (cons rep nil))
+ (setq cur-last (cdr cur-last)))
+ (t
+ (setq cur (cons rep nil))
+ (setq cur-last cur))))
+ (t
+ (when cur
+ (setcdr result-last (cons (apply #'vconcat cur) nil))
+ (setq result-last (cdr result-last))
+ (setq cur nil))
+ (setcdr result-last (cons rep nil))
+ (setq result-last (cdr result-last)))))
+ (when cur
+ (setcdr result-last (cons (apply #'vconcat cur) nil)))
+ (cdr result)))
+
+(defun evil-repeat-visual-char (nfwdlines nfwdchars)
+ "Restores a character visual selection.
+If the selection is in a single line, the restored visual
+selection covers the same number of characters. If the selection
+covers several lines, the restored selection covers the same
+number of lines and the same number of characters in the last
+line as the original selection."
+ (evil-visual-char)
+ (when (> nfwdlines 0)
+ (forward-line nfwdlines))
+ (forward-char nfwdchars))
+
+(defun evil-repeat-visual-line (nfwdlines)
+ "Restores a character visual selection.
+If the selection is in a single line, the restored visual
+selection covers the same number of characters. If the selection
+covers several lines, the restored selection covers the same
+number of lines and the same number of characters in the last
+line as the original selection."
+ (evil-visual-line)
+ (forward-line nfwdlines))
+
+(defun evil-repeat-visual-block (nfwdlines nfwdchars)
+ "Restores a character visual selection.
+If the selection is in a single line, the restored visual
+selection covers the same number of characters. If the selection
+covers several lines, the restored selection covers the same
+number of lines and the same number of characters in the last
+line as the original selection."
+ (evil-visual-block)
+ (let ((col (current-column)))
+ (forward-line nfwdlines)
+ (move-to-column (+ col nfwdchars) t)))
+
+(defun evil-execute-change (changes rel-point)
+ "Executes as list of changes.
+
+CHANGES is a list of triples (REL-BEG INSERT-TEXT NDEL).
+REL-BEG is the relative position (to point) where the change
+takes place. INSERT-TEXT is the text to be inserted at that
+position and NDEL the number of characters to be deleted at that
+position before insertion.
+
+REL-POINT is the relative position to point before the changed
+where point should be placed after all changes."
+ (evil-save-repeat-info
+ (let ((point (point)))
+ (dolist (change changes)
+ (goto-char (+ point (nth 0 change)))
+ (delete-char (nth 2 change))
+ (insert (nth 1 change)))
+ (goto-char (+ point rel-point)))))
+
+(defun evil-execute-repeat-info (repeat-info)
+ "Executes a repeat-information REPEAT-INFO."
+ (evil-save-repeat-info
+ (dolist (rep repeat-info)
+ (cond
+ ((or (arrayp rep) (stringp rep))
+ (let ((input-method current-input-method)
+ (evil-input-method nil))
+ (deactivate-input-method)
+ (unwind-protect
+ (execute-kbd-macro rep)
+ (activate-input-method input-method))))
+ ((consp rep)
+ (when (and (= 3 (length rep))
+ (eq (nth 0 rep) 'set)
+ (eq (nth 1 rep) 'evil-this-register)
+ (>= (nth 2 rep) ?0)
+ (< (nth 2 rep) ?9))
+ (setcar (nthcdr 2 rep) (1+ (nth 2 rep))))
+ (apply (car rep) (cdr rep)))
+ (t
+ (error "Unexpected repeat-info: %S" rep))))))
+
+;; TODO: currently we prepend the replacing count before the
+;; key-sequence that calls the command. Can we use direct
+;; modification of prefix-arg instead? Does it work in
+;; conjunction with `execute-kbd-macro'?
+(defun evil-execute-repeat-info-with-count (count repeat-info)
+ "Repeat the repeat-information REPEAT-INFO with the count of
+the first command replaced by COUNT. The count is replaced if
+and only if COUNT is non-nil."
+ (evil-save-repeat-info
+ (cond
+ ;; do nothing (zero repeating)
+ ((and count (zerop count)))
+ ;; replace count
+ (count
+ (let ((evil-repeat-count count)
+ done)
+ (while (and repeat-info
+ (arrayp (car repeat-info))
+ (not done))
+ (let* ((count-and-cmd (evil-extract-count (pop repeat-info))))
+ (push (vconcat (number-to-string count)
+ (nth 2 count-and-cmd)
+ (nth 3 count-and-cmd))
+ repeat-info)
+ (setq done t)))
+ (evil-execute-repeat-info repeat-info)))
+ ;; repeat with original count
+ (t
+ (evil-execute-repeat-info repeat-info)))))
+
+(evil-define-command evil-repeat (count &optional save-point)
+ "Repeat the last editing command with count replaced by COUNT.
+If SAVE-POINT is non-nil, do not move point."
+ :repeat ignore
+ :suppress-operator t
+ (interactive (list current-prefix-arg
+ (not evil-repeat-move-cursor)))
+ (cond
+ ((null evil-repeat-ring)
+ (error "Already executing repeat"))
+ (save-point
+ (save-excursion
+ (evil-repeat count)))
+ (t
+ (unwind-protect
+ (let ((confirm-kill-emacs t)
+ (kill-buffer-hook
+ (cons #'(lambda ()
+ (user-error "Cannot delete buffer in repeat command"))
+ kill-buffer-hook))
+ (undo-pointer buffer-undo-list))
+ (evil-with-single-undo
+ (setq evil-last-repeat (list (point) count undo-pointer))
+ (evil-execute-repeat-info-with-count
+ count (ring-ref evil-repeat-ring 0))))
+ (evil-normal-state)))))
+
+;; TODO: the same issue concering disabled undos as for `evil-paste-pop'
+(evil-define-command evil-repeat-pop (count &optional save-point)
+ "Replace the just repeated command with a previously executed command.
+Only allowed after `evil-repeat', `evil-repeat-pop' or
+`evil-repeat-pop-next'. Uses the same repeat count that
+was used for the first repeat.
+
+The COUNT argument inserts the COUNT-th previous kill.
+If COUNT is negative, this is a more recent kill."
+ :repeat nil
+ :suppress-operator t
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ (not evil-repeat-move-cursor)))
+ (cond
+ ((not (and (eq last-command #'evil-repeat)
+ evil-last-repeat))
+ (user-error "Previous command was not evil-repeat: %s" last-command))
+ (save-point
+ (save-excursion
+ (evil-repeat-pop count)))
+ (t
+ (unless (eq buffer-undo-list (nth 2 evil-last-repeat))
+ (evil-undo-pop))
+ (goto-char (car evil-last-repeat))
+ ;; rotate the repeat-ring
+ (while (> count 0)
+ (when evil-repeat-ring
+ (ring-insert-at-beginning evil-repeat-ring
+ (ring-remove evil-repeat-ring 0)))
+ (setq count (1- count)))
+ (while (< count 0)
+ (when evil-repeat-ring
+ (ring-insert evil-repeat-ring
+ (ring-remove evil-repeat-ring)))
+ (setq count (1+ count)))
+ (setq this-command #'evil-repeat)
+ (evil-repeat (cadr evil-last-repeat)))))
+
+(evil-define-command evil-repeat-pop-next (count &optional save-point)
+ "Same as `evil-repeat-pop', but with negative COUNT."
+ :repeat nil
+ :suppress-operator t
+ (interactive (list (prefix-numeric-value current-prefix-arg)
+ (not evil-repeat-move-cursor)))
+ (evil-repeat-pop (- count) save-point))
+
+(defadvice read-key-sequence (before evil activate)
+ "Record `this-command-keys' before it is reset."
+ (when (and (evil-repeat-recording-p)
+ evil-recording-current-command)
+ (let ((repeat-type (evil-repeat-type this-command t)))
+ (if (functionp repeat-type)
+ (funcall repeat-type 'post)))))
+
+(provide 'evil-repeat)
+
+;;; evil-repeat.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-repeat.elc b/.emacs.d/elpa/evil-20171210.501/evil-repeat.elc
new file mode 100644
index 0000000..a23e41e
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-repeat.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-search.el b/.emacs.d/elpa/evil-20171210.501/evil-search.el
new file mode 100644
index 0000000..896b3b5
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-search.el
@@ -0,0 +1,1294 @@
+;;; evil-search.el --- Search and substitute
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-core)
+(require 'evil-common)
+(require 'evil-ex)
+
+;;; Code:
+
+(defun evil-select-search-module (option module)
+ "Change the search module according to MODULE.
+If MODULE is `isearch', then Emacs' isearch module is used.
+If MODULE is `evil-search', then Evil's own interactive
+search module is used."
+ (let ((search-functions
+ '(forward
+ backward
+ word-forward
+ word-backward
+ unbounded-word-forward
+ unbounded-word-backward
+ next
+ previous)))
+ (dolist (fun search-functions)
+ (let ((isearch (intern (format "evil-search-%s" fun)))
+ (evil-search (intern (format "evil-ex-search-%s" fun))))
+ (if (eq module 'isearch)
+ (substitute-key-definition
+ evil-search isearch evil-motion-state-map)
+ (substitute-key-definition
+ isearch evil-search evil-motion-state-map)))))
+ (set-default option module))
+
+;; this customization is here because it requires
+;; the knowledge of `evil-select-search-mode'
+(defcustom evil-search-module 'isearch
+ "The search module to be used."
+ :type '(radio (const :tag "Emacs built-in isearch." :value isearch)
+ (const :tag "Evil interactive search." :value evil-search))
+ :group 'evil
+ :set 'evil-select-search-module
+ :initialize 'evil-custom-initialize-pending-reset)
+
+(defun evil-push-search-history (string forward)
+ "Push STRING into the appropriate search history (determined by FORWARD)."
+ (let* ((history-var (if forward
+ 'evil-search-forward-history
+ 'evil-search-backward-history))
+ (history (symbol-value history-var)))
+ (unless (equal (car-safe history) string)
+ (set history-var (cons string history)))))
+
+(defun evil-search-incrementally (forward regexp-p)
+ "Search incrementally for user-entered text."
+ (let ((evil-search-prompt (evil-search-prompt forward))
+ (isearch-search-fun-function 'evil-isearch-function)
+ (point (point))
+ search-nonincremental-instead)
+ (setq isearch-forward forward)
+ (evil-save-echo-area
+ (evil-without-input-method-hooks
+ ;; set the input method locally rather than globally to ensure that
+ ;; isearch clears the input method when it's finished
+ (setq current-input-method evil-input-method)
+ (if forward
+ (isearch-forward regexp-p)
+ (isearch-backward regexp-p))
+ (evil-push-search-history isearch-string forward)
+ (setq current-input-method nil))
+ (when (/= (point) point)
+ ;; position the point at beginning of the match only if the call to
+ ;; `isearch' has really moved the point. `isearch' doesn't move the
+ ;; point only if "C-g" is hit twice to exit the search, in which case we
+ ;; shouldn't move the point either.
+ (when (and forward isearch-other-end)
+ (goto-char isearch-other-end))
+ (when (and (eq point (point))
+ (not (string= isearch-string "")))
+ (if forward
+ (isearch-repeat-forward)
+ (isearch-repeat-backward))
+ (isearch-exit)
+ (when (and forward isearch-other-end)
+ (goto-char isearch-other-end)))
+ (evil-flash-search-pattern
+ (evil-search-message isearch-string forward))))))
+
+(defun evil-flash-search-pattern (string &optional all)
+ "Flash last search matches for duration of `evil-flash-delay'.
+If ALL is non-nil, flash all matches. STRING is a message
+to display in the echo area."
+ (let ((lazy-highlight-initial-delay 0)
+ (isearch-search-fun-function 'evil-isearch-function)
+ (isearch-case-fold-search case-fold-search)
+ (disable #'(lambda (&optional arg) (evil-flash-hook t))))
+ (when evil-flash-timer
+ (cancel-timer evil-flash-timer))
+ (unless (or (null string)
+ (string= string ""))
+ (evil-echo-area-save)
+ (evil-echo "%s" string)
+ (isearch-highlight (match-beginning 0) (match-end 0))
+ (when all
+ (setq isearch-lazy-highlight-wrapped nil
+ isearch-lazy-highlight-start (point)
+ isearch-lazy-highlight-end (point))
+ (isearch-lazy-highlight-new-loop)
+ (unless isearch-lazy-highlight-overlays
+ (isearch-lazy-highlight-update)))
+ (add-hook 'pre-command-hook #'evil-flash-hook nil t)
+ (add-hook 'evil-operator-state-exit-hook #'evil-flash-hook nil t)
+ (add-hook 'pre-command-hook #'evil-clean-isearch-overlays nil t)
+ (setq evil-flash-timer
+ (run-at-time evil-flash-delay nil disable)))))
+
+(defun evil-clean-isearch-overlays ()
+ "Clean isearch overlays unless `this-command' is search."
+ (remove-hook 'pre-command-hook #'evil-clean-isearch-overlays t)
+ (unless (memq this-command
+ '(evil-search-backward
+ evil-search-forward
+ evil-search-next
+ evil-search-previous
+ evil-search-word-backward
+ evil-search-word-forward))
+ (isearch-clean-overlays)))
+(put 'evil-clean-isearch-overlays 'permanent-local-hook t)
+
+(defun evil-flash-hook (&optional force)
+ "Disable hightlighting if `this-command' is not search.
+Disable anyway if FORCE is t."
+ (when (or force
+ ;; to avoid flicker, don't disable highlighting
+ ;; if the next command is also a search command
+ (not (memq this-command
+ '(evil-search-backward
+ evil-search-forward
+ evil-search-next
+ evil-search-previous
+ evil-search-word-backward
+ evil-search-word-forward))))
+ (evil-echo-area-restore)
+ (isearch-dehighlight)
+ (setq isearch-lazy-highlight-last-string nil)
+ (lazy-highlight-cleanup t)
+ (when evil-flash-timer
+ (cancel-timer evil-flash-timer)))
+ (remove-hook 'pre-command-hook #'evil-flash-hook t)
+ (remove-hook 'evil-operator-state-exit-hook #'evil-flash-hook t))
+(put 'evil-flash-hook 'permanent-local-hook t)
+
+(defun evil-search-function (&optional forward regexp-p wrap)
+ "Return a search function.
+If FORWARD is nil, search backward, otherwise forward.
+If REGEXP-P is non-nil, the input is a regular expression.
+If WRAP is non-nil, the search wraps around the top or bottom
+of the buffer."
+ `(lambda (string &optional bound noerror count)
+ (let ((start (point))
+ (search-fun ',(if regexp-p
+ (if forward
+ 're-search-forward
+ 're-search-backward)
+ (if forward
+ 'search-forward
+ 'search-backward)))
+ result)
+ (setq result (funcall search-fun string bound
+ ,(if wrap t 'noerror) count))
+ (when (and ,wrap (null result))
+ (goto-char ,(if forward '(point-min) '(point-max)))
+ (unwind-protect
+ (setq result (funcall search-fun string bound noerror count))
+ (unless result
+ (goto-char start))))
+ result)))
+
+(defun evil-isearch-function ()
+ "Return a search function for use with isearch.
+Based on `isearch-regexp' and `isearch-forward'."
+ (evil-search-function isearch-forward evil-regexp-search evil-search-wrap))
+
+(defun evil-search (string forward &optional regexp-p start)
+ "Search for STRING and highlight matches.
+If FORWARD is nil, search backward, otherwise forward.
+If REGEXP-P is non-nil, STRING is taken to be a regular expression.
+START is the position to search from; if unspecified, it is
+one more than the current position."
+ (when (and (stringp string)
+ (not (string= string "")))
+ (let* ((orig (point))
+ (start (or start
+ (if forward
+ (min (point-max) (1+ orig))
+ orig)))
+ (isearch-regexp regexp-p)
+ (isearch-forward forward)
+ (case-fold-search
+ (unless (and search-upper-case
+ (not (isearch-no-upper-case-p string nil)))
+ case-fold-search))
+ (search-func (evil-search-function
+ forward regexp-p evil-search-wrap)))
+ ;; no text properties, thank you very much
+ (set-text-properties 0 (length string) nil string)
+ ;; position to search from
+ (goto-char start)
+ (setq isearch-string string)
+ (isearch-update-ring string regexp-p)
+ (condition-case nil
+ (funcall search-func string)
+ (search-failed
+ (goto-char orig)
+ (user-error "\"%s\": %s not found"
+ string (if regexp-p "pattern" "string"))))
+ ;; handle opening and closing of invisible area
+ (cond
+ ((boundp 'isearch-filter-predicates)
+ (dolist (pred isearch-filter-predicates)
+ (funcall pred (match-beginning 0) (match-end 0))))
+ ((boundp 'isearch-filter-predicate)
+ (funcall isearch-filter-predicate (match-beginning 0) (match-end 0))))
+ ;; always position point at the beginning of the match
+ (goto-char (match-beginning 0))
+ ;; determine message for echo area
+ (cond
+ ((and forward (< (point) start))
+ (setq string "Search wrapped around BOTTOM of buffer"))
+ ((and (not forward) (> (point) start))
+ (setq string "Search wrapped around TOP of buffer"))
+ (t
+ (setq string (evil-search-message string forward))))
+ (evil-flash-search-pattern string t))))
+
+(defun evil-search-word (forward unbounded symbol)
+ "Search for word near point.
+If FORWARD is nil, search backward, otherwise forward. If SYMBOL
+is non-nil then the functions searches for the symbol at point,
+otherwise for the word at point."
+ (let ((string (car-safe regexp-search-ring))
+ (move (if forward #'forward-char #'backward-char))
+ (end (if forward #'eobp #'bobp)))
+ (setq isearch-forward forward)
+ (cond
+ ((and (memq last-command
+ '(evil-search-word-forward
+ evil-search-word-backward))
+ (stringp string)
+ (not (string= string "")))
+ (evil-search string forward t))
+ (t
+ (setq string (evil-find-thing forward (if symbol 'symbol 'evil-word)))
+ (cond
+ ((null string)
+ (user-error "No word under point"))
+ (unbounded
+ (setq string (regexp-quote string)))
+ (t
+ (setq string
+ (format (if symbol "\\_<%s\\_>" "\\<%s\\>")
+ (regexp-quote string)))))
+ (evil-push-search-history string forward)
+ (evil-search string forward t)))))
+
+(defun evil-find-thing (forward thing)
+ "Return THING near point as a string.
+THING should be a symbol understood by `thing-at-point',
+e.g. 'symbol or 'word. If FORWARD is nil, search backward,
+otherwise forward. Returns nil if nothing is found."
+ (let ((move (if forward #'forward-char #'backward-char))
+ (end (if forward #'eobp #'bobp))
+ string)
+ (save-excursion
+ (setq string (thing-at-point thing))
+ ;; if there's nothing under point, go forwards
+ ;; (or backwards) to find it
+ (while (and (null string) (not (funcall end)))
+ (funcall move)
+ (setq string (thing-at-point thing)))
+ (when (stringp string)
+ (set-text-properties 0 (length string) nil string))
+ (when (> (length string) 0)
+ string))))
+
+(defun evil-find-word (forward)
+ "Return word near point as a string.
+If FORWARD is nil, search backward, otherwise forward. Returns
+nil if nothing is found."
+ (evil-find-thing forward 'word))
+
+(defun evil-find-symbol (forward)
+ "Return word near point as a string.
+If FORWARD is nil, search backward, otherwise forward. Returns
+nil if nothing is found."
+ (evil-find-thing forward 'symbol))
+
+(defun evil-search-prompt (forward)
+ "Return the search prompt for the given direction."
+ (if forward "/" "?"))
+
+(defun evil-search-message (string forward)
+ "Prefix STRING with the search prompt."
+ (format "%s%s" (evil-search-prompt forward) string))
+
+(defadvice isearch-message-prefix (around evil activate)
+ "Use `evil-search-prompt'."
+ (if evil-search-prompt
+ (setq ad-return-value evil-search-prompt)
+ ad-do-it))
+
+(defadvice isearch-delete-char (around evil activate)
+ "Exit search if no search string."
+ (cond
+ ((and evil-search-prompt (string= isearch-string ""))
+ (let (search-nonincremental-instead)
+ (setq isearch-success nil)
+ (isearch-exit)))
+ (t
+ ad-do-it)))
+
+(defadvice isearch-lazy-highlight-search (around evil activate)
+ "Never wrap the search in this context."
+ (let (evil-search-wrap)
+ ad-do-it))
+
+;;; Ex search
+
+(defun evil-ex-regex-without-case (re)
+ "Return the regular expression without all occurrences of \\c and \\C."
+ (evil-transform-regexp re '((?c . "") (?C . ""))))
+
+(defun evil-ex-regex-case (re default-case)
+ "Return the case as implied by \\c or \\C in regular expression RE.
+If \\c appears anywhere in the pattern, the pattern is case
+insensitive. If \\C appears, the pattern is case sensitive.
+Only the first occurrence of \\c or \\C is used, all others are
+ignored. If neither \\c nor \\C appears in the pattern, the case
+specified by DEFAULT-CASE is used. DEFAULT-CASE should be either
+`sensitive', `insensitive' or `smart'. In the latter case, the pattern
+will be case-sensitive if and only if it contains an upper-case
+letter, otherwise it will be case-insensitive."
+ (cond
+ ((string-match "\\(?:^\\|[^\\\\]\\)\\(?:\\\\\\\\\\)*\\\\\\([cC]\\)" re)
+ (if (eq (aref (match-string 1 re) 0) ?c) 'insensitive 'sensitive))
+ ((eq default-case 'smart)
+ (if (isearch-no-upper-case-p re t)
+ 'insensitive
+ 'sensitive))
+ (t default-case)))
+
+;; a pattern
+(defun evil-ex-make-substitute-pattern (regexp flags)
+ "Creates a PATTERN for substitution with FLAGS.
+This function respects the values of `evil-ex-substitute-case'
+and `evil-ex-substitute-global'."
+ (evil-ex-make-pattern regexp
+ (cond
+ ((memq ?i flags) 'insensitive)
+ ((memq ?I flags) 'sensitive)
+ ((not evil-ex-substitute-case)
+ evil-ex-search-case)
+ (t evil-ex-substitute-case))
+ (or (and evil-ex-substitute-global
+ (not (memq ?g flags)))
+ (and (not evil-ex-substitute-global)
+ (memq ?g flags)))))
+
+(defun evil-ex-make-search-pattern (regexp)
+ "Creates a PATTERN for search.
+This function respects the values of `evil-ex-search-case'."
+ (evil-ex-make-pattern regexp evil-ex-search-case t))
+
+(defun evil-ex-make-pattern (regexp case whole-line)
+ "Create a new search pattern.
+REGEXP is the regular expression to be searched for. CASE should
+be either 'sensitive, 'insensitive for case-sensitive and
+case-insensitive search, respectively, or anything else. In the
+latter case the pattern is smart-case, i.e. it is automatically
+sensitive of the pattern contains one upper case letter,
+otherwise it is insensitive. The input REGEXP is considered a
+Vim-style regular expression if `evil-ex-search-vim-style-regexp'
+is non-nil, in which case it is transformed to an Emacs style
+regular expression (i.e. certain backslash-codes are
+transformed. Otherwise REGEXP must be an Emacs style regular
+expression and is not transformed."
+ (let ((re (evil-ex-regex-without-case regexp))
+ (ignore-case (eq (evil-ex-regex-case regexp case) 'insensitive)))
+ ;; possibly transform regular expression from vim-style to
+ ;; Emacs-style.
+ (if evil-ex-search-vim-style-regexp
+ (setq re (evil-transform-vim-style-regexp re))
+ ;; Even for Emacs regular expressions we translate certain
+ ;; whitespace sequences
+ (setq re (evil-transform-regexp re
+ '((?t . "\t")
+ (?n . "\n")
+ (?r . "\r")))))
+ (list re ignore-case whole-line)))
+
+(defun evil-ex-pattern-regex (pattern)
+ "Return the regular expression of a search PATTERN."
+ (nth 0 pattern))
+
+(defun evil-ex-pattern-ignore-case (pattern)
+ "Return t if and only if PATTERN should ignore case."
+ (nth 1 pattern))
+
+(defun evil-ex-pattern-whole-line (pattern)
+ "Return t if and only if PATTERN should match all occurences of a line.
+Otherwise PATTERN matches only the first occurence."
+ (nth 2 pattern))
+
+;; Highlight
+(defun evil-ex-make-hl (name &rest args)
+ "Create a new highlight object with name NAME and properties ARGS.
+The following properties are supported:
+:face The face to be used for the highlighting overlays.
+:win The window in which the highlighting should be shown.
+ Note that the highlight will be visible in all windows showing
+ the corresponding buffer, but only the matches visible in the
+ specified window will actually be highlighted. If :win is nil,
+ the matches in all windows will be highlighted.
+:min The minimal buffer position for highlighted matches.
+:max The maximal buffer position for highlighted matches.
+:match-hook A hook to be called once for each highlight.
+ The hook must take two arguments, the highlight and
+ the overlay for that highlight.
+:update-hook A hook called once after updating the highlighting
+ with two arguments, the highlight and a message string
+ describing the current match status."
+ (unless (symbolp name)
+ (user-error "Expected symbol as name of highlight"))
+ (let ((face 'evil-ex-lazy-highlight)
+ (win (selected-window))
+ min max match-hook update-hook)
+ (while args
+ (let ((key (pop args))
+ (val (pop args)))
+ (cond
+ ((eq key :face) (setq face val))
+ ((eq key :win) (setq win val))
+ ((eq key :min) (setq min val))
+ ((eq key :max) (setq max val))
+ ((eq key :match-hook) (setq match-hook val))
+ ((eq key :update-hook) (setq update-hook val))
+ (t (user-error "Unexpected keyword: %s" key)))))
+ (when (assoc name evil-ex-active-highlights-alist)
+ (evil-ex-delete-hl name))
+ (when (null evil-ex-active-highlights-alist)
+ (add-hook 'window-scroll-functions
+ #'evil-ex-hl-update-highlights-scroll nil t)
+ (add-hook 'window-size-change-functions
+ #'evil-ex-hl-update-highlights-resize nil))
+ (push (cons name (vector name
+ nil
+ face
+ win
+ min
+ max
+ match-hook
+ update-hook
+ nil))
+ evil-ex-active-highlights-alist)))
+
+(defun evil-ex-hl-name (hl)
+ "Return the name of the highlight HL."
+ (aref hl 0))
+
+(defun evil-ex-hl-pattern (hl)
+ "Return the pattern of the highlight HL."
+ (aref hl 1))
+
+(defun evil-ex-hl-set-pattern (hl pattern)
+ "Set the pattern of the highlight HL to PATTERN."
+ (aset hl 1 pattern))
+
+(defun evil-ex-hl-face (hl)
+ "Return the face of the highlight HL."
+ (aref hl 2))
+
+(defun evil-ex-hl-window (hl)
+ "Return the window of the highlight HL."
+ (aref hl 3))
+
+(defun evil-ex-hl-min (hl)
+ "Return the minimal buffer position of the highlight HL."
+ (aref hl 4))
+
+(defun evil-ex-hl-set-min (hl min)
+ "Set the minimal buffer position of the highlight HL to MIN."
+ (aset hl 4 min))
+
+(defun evil-ex-hl-max (hl)
+ "Return the maximal buffer position of the highlight HL."
+ (aref hl 5))
+
+(defun evil-ex-hl-set-max (hl max)
+ "Set the minimal buffer position of the highlight HL to MAX."
+ (aset hl 5 max))
+
+(defun evil-ex-hl-match-hook (hl)
+ "Return the match-hook of the highlight HL."
+ (aref hl 6))
+
+(defun evil-ex-hl-update-hook (hl)
+ "Return the update-hook of the highlight HL."
+ (aref hl 7))
+
+(defun evil-ex-hl-overlays (hl)
+ "Return the list of active overlays of the highlight HL."
+ (aref hl 8))
+
+(defun evil-ex-hl-set-overlays (hl overlays)
+ "Set the list of active overlays of the highlight HL to OVERLAYS."
+ (aset hl 8 overlays))
+
+(defun evil-ex-delete-hl (name)
+ "Remove the highlighting object with a certain NAME."
+ (let ((hl (cdr-safe (assoc name evil-ex-active-highlights-alist))))
+ (when hl
+ (mapc #'delete-overlay (evil-ex-hl-overlays hl))
+ (setq evil-ex-active-highlights-alist
+ (assq-delete-all name evil-ex-active-highlights-alist))
+ (evil-ex-hl-update-highlights))
+ (when (null evil-ex-active-highlights-alist)
+ (remove-hook 'window-scroll-functions
+ #'evil-ex-hl-update-highlights-scroll t)
+ (remove-hook 'window-size-change-functions
+ #'evil-ex-hl-update-highlights-resize))))
+
+(defun evil-ex-hl-active-p (name)
+ "Whether the highlight with a certain NAME is active."
+ (and (assoc name evil-ex-active-highlights-alist) t))
+
+(defun evil-ex-hl-change (name pattern)
+ "Set the regular expression of highlight NAME to PATTERN."
+ (let ((hl (cdr-safe (assoc name evil-ex-active-highlights-alist))))
+ (when hl
+ (evil-ex-hl-set-pattern hl
+ (if (zerop (length pattern))
+ nil
+ pattern))
+ (evil-ex-hl-idle-update))))
+
+(defun evil-ex-hl-set-region (name beg end &optional type)
+ "Set minimal and maximal position of highlight NAME to BEG and END."
+ (let ((hl (cdr-safe (assoc name evil-ex-active-highlights-alist))))
+ (when hl
+ (evil-ex-hl-set-min hl beg)
+ (evil-ex-hl-set-max hl end)
+ (evil-ex-hl-idle-update))))
+
+(defun evil-ex-hl-get-max (name)
+ "Return the maximal position of the highlight with name NAME."
+ (let ((hl (cdr-safe (assoc name evil-ex-active-highlights-alist))))
+ (and hl (evil-ex-hl-max hl))))
+
+(defun evil-ex-hl-update-highlights ()
+ "Update the overlays of all active highlights."
+ (dolist (hl (mapcar #'cdr evil-ex-active-highlights-alist))
+ (let* ((old-ovs (evil-ex-hl-overlays hl))
+ new-ovs
+ (pattern (evil-ex-hl-pattern hl))
+ (case-fold-search (evil-ex-pattern-ignore-case pattern))
+ (case-replace case-fold-search)
+ (face (evil-ex-hl-face hl))
+ (match-hook (evil-ex-hl-match-hook hl))
+ result)
+ (if pattern
+ ;; collect all visible ranges
+ (let (ranges sranges)
+ (dolist (win (if (eq evil-ex-interactive-search-highlight
+ 'all-windows)
+ (get-buffer-window-list (current-buffer) nil t)
+ (list (evil-ex-hl-window hl))))
+ (let ((beg (max (window-start win)
+ (or (evil-ex-hl-min hl) (point-min))))
+ (end (min (window-end win)
+ (or (evil-ex-hl-max hl) (point-max)))))
+ (when (< beg end)
+ (push (cons beg end) ranges))))
+ (setq ranges
+ (sort ranges #'(lambda (r1 r2) (< (car r1) (car r2)))))
+ (while ranges
+ (let ((r1 (pop ranges))
+ (r2 (pop ranges)))
+ (cond
+ ;; last range
+ ((null r2)
+ (push r1 sranges))
+ ;; ranges overlap, union
+ ((>= (cdr r1) (car r2))
+ (push (cons (car r1)
+ (max (cdr r1) (cdr r2)))
+ ranges))
+ ;; ranges distinct
+ (t
+ (push r1 sranges)
+ (push r2 ranges)))))
+
+ ;; run through all ranges
+ (condition-case lossage
+ (save-match-data
+ (dolist (r sranges)
+ (let ((beg (car r))
+ (end (cdr r)))
+ (save-excursion
+ (goto-char beg)
+ ;; set the overlays for the current highlight,
+ ;; reusing old overlays (if possible)
+ (while (and (not (eobp))
+ (evil-ex-search-find-next-pattern pattern)
+ (<= (match-end 0) end)
+ (not (and (= (match-end 0) end)
+ (string= (evil-ex-pattern-regex pattern)
+ "^"))))
+ (let ((ov (or (pop old-ovs) (make-overlay 0 0))))
+ (move-overlay ov (match-beginning 0) (match-end 0))
+ (overlay-put ov 'face face)
+ (overlay-put ov 'evil-ex-hl (evil-ex-hl-name hl))
+ (overlay-put ov 'priority 1000)
+ (push ov new-ovs)
+ (when match-hook (funcall match-hook hl ov)))
+ (cond
+ ((and (not (evil-ex-pattern-whole-line pattern))
+ (not (string-match-p "\n" (buffer-substring-no-properties
+ (match-beginning 0)
+ (match-end 0)))))
+ (forward-line))
+ ((= (match-beginning 0) (match-end 0))
+ (forward-char))
+ (t (goto-char (match-end 0))))))))
+ (mapc #'delete-overlay old-ovs)
+ (evil-ex-hl-set-overlays hl new-ovs)
+ (if (or (null pattern) new-ovs)
+ (setq result t)
+ ;; Maybe the match could just not be found somewhere else?
+ (save-excursion
+ (goto-char (or (evil-ex-hl-min hl) (point-min)))
+ (if (and (evil-ex-search-find-next-pattern pattern)
+ (< (match-end 0) (or (evil-ex-hl-max hl)
+ (point-max))))
+ (setq result (format "Match in line %d"
+ (line-number-at-pos
+ (match-beginning 0))))
+ (setq result "No match")))))
+
+ (invalid-regexp
+ (setq result (cadr lossage)))
+
+ (search-failed
+ (setq result (nth 2 lossage)))
+
+ (error
+ (setq result (format "%s" (cadr lossage))))
+
+ (user-error
+ (setq result (format "%s" (cadr lossage))))))
+ ;; no pattern, remove all highlights
+ (mapc #'delete-overlay old-ovs)
+ (evil-ex-hl-set-overlays hl new-ovs))
+ (when (evil-ex-hl-update-hook hl)
+ (funcall (evil-ex-hl-update-hook hl) hl result)))))
+
+(defun evil-ex-search-find-next-pattern (pattern &optional direction)
+ "Look for the next occurrence of PATTERN in a certain DIRECTION.
+Note that this function ignores the whole-line property of PATTERN."
+ (setq direction (or direction 'forward))
+ (let ((case-fold-search (evil-ex-pattern-ignore-case pattern)))
+ (cond
+ ((eq direction 'forward)
+ (re-search-forward (evil-ex-pattern-regex pattern) nil t))
+ ((eq direction 'backward)
+ (let* ((pnt (point))
+ (ret (re-search-backward (evil-ex-pattern-regex pattern) nil t))
+ (m (and ret (match-data))))
+ (if ret
+ (forward-char)
+ (goto-char (point-min)))
+ (let ((fwdret
+ (re-search-forward (evil-ex-pattern-regex pattern) nil t)))
+ (cond
+ ((and fwdret (< (match-beginning 0) pnt))
+ (setq ret fwdret)
+ (goto-char (match-beginning 0)))
+ (ret
+ (set-match-data m)
+ (goto-char (match-beginning 0)))
+ (t
+ (goto-char pnt)
+ ret)))))
+ (t
+ (user-error "Unknown search direction: %s" direction)))))
+
+(defun evil-ex-hl-idle-update ()
+ "Triggers the timer to update the highlights in the current buffer."
+ (when (and evil-ex-interactive-search-highlight
+ evil-ex-active-highlights-alist)
+ (when evil-ex-hl-update-timer
+ (cancel-timer evil-ex-hl-update-timer))
+ (setq evil-ex-hl-update-timer
+ (run-at-time evil-ex-hl-update-delay nil
+ #'evil-ex-hl-do-update-highlight
+ (current-buffer)))))
+
+(defun evil-ex-hl-do-update-highlight (&optional buffer)
+ "Timer function for updating the highlights."
+ (when (buffer-live-p buffer)
+ (with-current-buffer buffer
+ (evil-ex-hl-update-highlights)))
+ (setq evil-ex-hl-update-timer nil))
+
+(defun evil-ex-hl-update-highlights-scroll (win beg)
+ "Update highlights after scrolling in some window."
+ (with-current-buffer (window-buffer win)
+ (evil-ex-hl-idle-update)))
+(put 'evil-ex-hl-update-highlights-scroll 'permanent-local-hook t)
+
+(defun evil-ex-hl-update-highlights-resize (frame)
+ "Update highlights after resizing a window."
+ (let ((buffers (delete-dups (mapcar #'window-buffer (window-list frame)))))
+ (dolist (buf buffers)
+ (with-current-buffer buf
+ (evil-ex-hl-idle-update)))))
+(put 'evil-ex-hl-update-highlights-resize 'permanent-local-hook t)
+
+;; interactive search
+(defun evil-ex-search-activate-highlight (pattern)
+ "Activate highlighting of the search pattern set to PATTERN.
+This function does nothing if `evil-ex-search-interactive' or
+`evil-ex-search-highlight-all' is nil. "
+ (when (and evil-ex-search-interactive evil-ex-search-highlight-all)
+ (with-current-buffer (or evil-ex-current-buffer (current-buffer))
+ (unless (evil-ex-hl-active-p 'evil-ex-search)
+ (evil-ex-make-hl 'evil-ex-search
+ :win (minibuffer-selected-window)))
+ (if pattern
+ (evil-ex-hl-change 'evil-ex-search pattern)))))
+
+(defun evil-ex-search (&optional count)
+ "Search forward or backward COUNT times for the current ex search pattern.
+The search pattern is determined by `evil-ex-search-pattern' and
+the direcion is determined by `evil-ex-search-direction'."
+ (setq evil-ex-search-start-point (point)
+ evil-ex-last-was-search t
+ count (or count 1))
+ (let ((orig (point))
+ wrapped)
+ (dotimes (i (or count 1))
+ (when (eq evil-ex-search-direction 'forward)
+ (unless (eobp) (forward-char))
+ ;; maybe skip end-of-line
+ (when (and evil-move-cursor-back (eolp) (not (eobp)))
+ (forward-char)))
+ (let ((res (evil-ex-find-next nil nil (not evil-search-wrap))))
+ (cond
+ ((not res)
+ (goto-char orig)
+ (signal 'search-failed
+ (list (evil-ex-pattern-regex evil-ex-search-pattern))))
+ ((eq res 'wrapped) (setq wrapped t)))))
+ (if wrapped
+ (let (message-log-max)
+ (message "Search wrapped")))
+ (goto-char (match-beginning 0))
+ (setq evil-ex-search-match-beg (match-beginning 0)
+ evil-ex-search-match-end (match-end 0))
+ (evil-ex-search-goto-offset evil-ex-search-offset)
+ (evil-ex-search-activate-highlight evil-ex-search-pattern)))
+
+(defun evil-ex-find-next (&optional pattern direction nowrap)
+ "Search for the next occurrence of the PATTERN in DIRECTION.
+PATTERN must be created using `evil-ex-make-pattern', DIRECTION
+is either 'forward or 'backward. If NOWRAP is non nil, the search
+does not wrap at buffer boundaries. Furthermore this function
+only searches invisible text if `search-invisible' is t. If
+PATTERN is not specified the current global pattern
+`evil-ex-search-pattern' and if DIRECTION is not specified the
+current global direction `evil-ex-search-direction' is used.
+This function returns t if the search was successful, nil if it
+was unsuccessful and 'wrapped if the search was successful but
+has been wrapped at the buffer boundaries."
+ (setq pattern (or pattern evil-ex-search-pattern)
+ direction (or direction evil-ex-search-direction))
+ (unless (and pattern (evil-ex-pattern-regex pattern))
+ (signal 'search-failed (list "No search pattern")))
+ (catch 'done
+ (let (wrapped)
+ (while t
+ (let ((search-result (evil-ex-search-find-next-pattern pattern
+ direction)))
+ (cond
+ ((and search-result
+ (or (eq search-invisible t)
+ (not (isearch-range-invisible
+ (match-beginning 0) (match-end 0)))))
+ ;; successful search and not invisible
+ (throw 'done (if wrapped 'wrapped t)))
+ ((not search-result)
+ ;; unsuccessful search
+ (if nowrap
+ (throw 'done nil)
+ (setq nowrap t
+ wrapped t)
+ (goto-char (if (eq direction 'forward)
+ (point-min)
+ (point-max)))))))))))
+
+(defun evil-ex-search-update (pattern offset beg end message)
+ "Update the highlighting and info-message for the search pattern.
+PATTERN is the search pattern and OFFSET the associated offset.
+BEG and END specifiy the current match, MESSAGE is the info
+message to be shown. This function does nothing if
+`evil-ex-search-interactive' is nil."
+ (when evil-ex-search-interactive
+ (cond
+ ((and beg end)
+ ;; update overlay
+ (if evil-ex-search-overlay
+ (move-overlay evil-ex-search-overlay beg end)
+ (setq evil-ex-search-overlay
+ (make-overlay beg end))
+ (overlay-put evil-ex-search-overlay 'priority 1001)
+ (overlay-put evil-ex-search-overlay 'face 'evil-ex-search))
+ ;; move point
+ (goto-char beg)
+ (evil-ex-search-goto-offset offset)
+ ;; update highlights
+ (when evil-ex-search-highlight-all
+ (evil-ex-hl-change 'evil-ex-search pattern)))
+ (t
+ ;; no match
+ (when evil-ex-search-overlay
+ ;; remove overlay
+ (delete-overlay evil-ex-search-overlay)
+ (setq evil-ex-search-overlay nil))
+ ;; no highlights
+ (when evil-ex-search-highlight-all
+ (evil-ex-hl-change 'evil-ex-search nil))
+ ;; and go to initial position
+ (goto-char evil-ex-search-start-point)))
+ (when (stringp message)
+ (evil-ex-echo "%s" message))))
+
+(defun evil-ex-search-start-session ()
+ "Initialize Ex for interactive search."
+ (remove-hook 'minibuffer-setup-hook #'evil-ex-search-start-session)
+ (add-hook 'after-change-functions #'evil-ex-search-update-pattern nil t)
+ (add-hook 'minibuffer-exit-hook #'evil-ex-search-stop-session)
+ (evil-ex-search-activate-highlight nil))
+(put 'evil-ex-search-start-session 'permanent-local-hook t)
+
+(defun evil-ex-search-stop-session ()
+ "Stop interactive search."
+ (with-current-buffer evil-ex-current-buffer
+ ;; TODO: This is a bad fix to remove duplicates. The duplicates
+ ;; exist because `isearch-range-invisible' may add a single
+ ;; overlay multiple times if we are in an unlucky situation
+ ;; of overlapping overlays. This happens in our case because
+ ;; of the overlays that are used for (lazy) highlighting.
+ ;; Perhaps it would be better to disable those overlays
+ ;; temporarily before calling `isearch-range-invisible'.
+ (setq isearch-opened-overlays (delete-dups isearch-opened-overlays))
+ (isearch-clean-overlays))
+ (remove-hook 'minibuffer-exit-hook #'evil-ex-search-stop-session)
+ (remove-hook 'after-change-functions #'evil-ex-search-update-pattern t)
+ (when evil-ex-search-overlay
+ (delete-overlay evil-ex-search-overlay)
+ (setq evil-ex-search-overlay nil)))
+(put 'evil-ex-search-stop-session 'permanent-local-hook t)
+
+(defun evil-ex-split-search-pattern (pattern direction)
+ "Split PATTERN in regexp, offset and next-pattern parts.
+Returns a triple (regexp offset next-search)."
+ (save-match-data
+ (if (or (and (eq direction 'forward)
+ (string-match "\\(?:^\\|[^\\\\]\\)\\(?:\\\\\\\\\\)*\\(/\\([^;]*\\)\\(?:;\\([/?].*\\)?\\)?\\)?$"
+ pattern))
+ (and (eq direction 'backward)
+ (string-match "\\(?:^\\|[^\\\\]\\)\\(?:\\\\\\\\\\)*\\(\\?\\([^;]*\\)\\(?:;\\([/?].*\\)?\\)?\\)?$"
+ pattern)))
+ (list (substring pattern 0 (match-beginning 1))
+ (match-string 2 pattern)
+ (match-string 3 pattern))
+ (list pattern nil nil))))
+
+(defun evil-ex-search-full-pattern (pattern-string count direction)
+ "Search for a full search pattern PATTERN-STRING in DIRECTION.
+This function split PATTERN-STRING in
+pattern/offset/;next-pattern parts and performs the search in
+DIRECTION which must be either 'forward or 'backward. The first
+search is repeated COUNT times. If the pattern part of
+PATTERN-STRING is empty, the last global pattern stored in
+`evil-ex-search-pattern' is used instead if in addition the
+offset part is nil (i.e. no pattern/offset separator), the last
+global offset stored in `evil-ex-search-offset' is used as
+offset. The current match data will correspond to the last
+successful match. This function returns a triple (RESULT PATTERN
+OFFSET) where RESULT is
+
+ t the search has been successful without wrap
+ 'wrap the search has been successful with wrap
+ 'empty-pattern the last pattern has been empty
+ nil the search has not been successful
+
+and PATTERN and OFFSET are the last pattern and offset this
+function searched for. Note that this function does not handle
+any error conditions."
+ (setq count (or count 1))
+ (catch 'done
+ (while t
+ (let* ((res (evil-ex-split-search-pattern pattern-string direction))
+ (pat (pop res))
+ (offset (pop res))
+ (next-pat (pop res)))
+ ;; use last pattern of no new pattern has been specified
+ (if (not (zerop (length pat)))
+ (setq pat (evil-ex-make-search-pattern pat))
+ (setq pat evil-ex-search-pattern
+ offset (or offset evil-ex-search-offset)))
+ (when (zerop (length pat))
+ (throw 'done (list 'empty-pattern pat offset)))
+ (let (search-result)
+ (while (> count 0)
+ (let ((result (evil-ex-find-next pat direction
+ (not evil-search-wrap))))
+ (if (not result) (setq search-result nil count 0)
+ (setq search-result
+ (if (or (eq result 'wrap)
+ (eq search-result 'wrap))
+ 'wrap t)
+ count (1- count)))))
+ (cond
+ ;; search failed
+ ((not search-result) (throw 'done (list nil pat offset)))
+ ;; no next pattern, search complete
+ ((zerop (length next-pat))
+ (evil-ex-search-goto-offset offset)
+ (throw 'done (list search-result pat offset)))
+ ;; next pattern but empty
+ ((= 1 (length next-pat))
+ (evil-ex-search-goto-offset offset)
+ (throw 'done (list 'empty-pattern pat offset)))
+ ;; next non-empty pattern, next search iteration
+ (t
+ (evil-ex-search-goto-offset offset)
+ (setq count 1
+ pattern-string (substring next-pat 1)
+ direction (if (= (aref next-pat 0) ?/)
+ 'forward
+ 'backward)))))))))
+
+(defun evil-ex-search-update-pattern (beg end range)
+ "Update the current search pattern."
+ (save-match-data
+ (let ((pattern-string (minibuffer-contents)))
+ (with-current-buffer evil-ex-current-buffer
+ (with-selected-window (minibuffer-selected-window)
+ (goto-char (1+ evil-ex-search-start-point))
+ (condition-case err
+ (let* ((result (evil-ex-search-full-pattern pattern-string
+ (or evil-ex-search-count 1)
+ evil-ex-search-direction))
+ (success (pop result))
+ (pattern (pop result))
+ (offset (pop result)))
+ (cond
+ ((eq success 'wrap)
+ (evil-ex-search-update pattern offset
+ (match-beginning 0) (match-end 0)
+ "Wrapped"))
+ ((eq success 'empty-pattern)
+ (evil-ex-search-update nil nil nil nil nil))
+ (success
+ (evil-ex-search-update pattern offset
+ (match-beginning 0) (match-end 0)
+ nil))
+ (t
+ (evil-ex-search-update nil nil
+ nil nil
+ "search failed"))))
+ (invalid-regexp
+ (evil-ex-search-update nil nil nil nil (cadr err)))
+ (error
+ (evil-ex-search-update nil nil nil nil (format "%s" err)))))))))
+(put 'evil-ex-search-update-pattern 'permanent-local-hook t)
+
+(defun evil-ex-search-exit ()
+ "Exit interactive search, keeping lazy highlighting active."
+ (interactive)
+ (evil-ex-search-stop-session)
+ (exit-minibuffer))
+
+(defun evil-ex-search-abort ()
+ "Abort interactive search, disabling lazy highlighting."
+ (interactive)
+ (evil-ex-search-stop-session)
+ (evil-ex-delete-hl 'evil-ex-search)
+ (abort-recursive-edit))
+
+(defun evil-ex-search-goto-offset (offset)
+ "Move point according to search OFFSET and set `evil-this-type' accordingly.
+This function assumes that the current match data represents the
+current search result."
+ (unless (zerop (length offset))
+ (let ((beg (match-beginning 0))
+ (end (match-end 0)))
+ (save-match-data
+ (unless
+ (string-match
+ "^\\([esb]\\)?\\(\\([-+]\\)?\\([0-9]*\\)\\)$"
+ offset)
+ (user-error "Invalid search offset: %s" offset))
+ (let ((count (if (= (match-beginning 4) (match-end 4))
+ (cond
+ ((not (match-beginning 3)) 0)
+ ((= (aref offset (match-beginning 3)) ?+) +1)
+ (t -1))
+ (string-to-number (match-string 2 offset)))))
+ (cond
+ ((not (match-beginning 1))
+ (setq evil-this-type 'line)
+ (forward-line count))
+ ((= (aref offset (match-beginning 1)) ?e)
+ (goto-char (+ end count -1))
+ (setq evil-this-type 'inclusive))
+ ((memq (aref offset (match-beginning 1)) '(?s ?b))
+ (goto-char (+ beg count))
+ (setq evil-this-type 'inclusive))))))))
+
+(defun evil-ex-search-setup ()
+ "Hook to initialize the minibuffer for ex search."
+ (add-hook 'pre-command-hook #'evil-ex-remove-default))
+
+(defun evil-ex-start-search (direction count)
+ "Start a new search in a certain DIRECTION."
+ ;; store buffer and window where the search started
+ (let ((evil-ex-current-buffer (current-buffer)))
+ (setq evil-ex-search-count count
+ evil-ex-search-direction direction
+ evil-ex-search-start-point (point)
+ evil-ex-last-was-search t)
+ (progn
+ ;; ensure minibuffer is initialized accordingly
+ (add-hook 'minibuffer-setup-hook #'evil-ex-search-start-session)
+ ;; read the search string
+ (let* ((minibuffer-local-map evil-ex-search-keymap)
+ (search-string
+ (condition-case err
+ (minibuffer-with-setup-hook
+ #'evil-ex-search-setup
+ (read-string (if (eq evil-ex-search-direction 'forward)
+ "/" "?")
+ (and evil-ex-search-history
+ (propertize
+ (car evil-ex-search-history)
+ 'face 'shadow))
+ 'evil-ex-search-history))
+ (quit
+ (evil-ex-search-stop-session)
+ (evil-ex-delete-hl 'evil-ex-search)
+ (goto-char evil-ex-search-start-point)
+ (signal (car err) (cdr err))))))
+ ;; pattern entered successful
+ (goto-char (1+ evil-ex-search-start-point))
+ (let* ((result
+ (evil-ex-search-full-pattern search-string
+ evil-ex-search-count
+ evil-ex-search-direction))
+ (success (pop result))
+ (pattern (pop result))
+ (offset (pop result)))
+ (setq evil-ex-search-pattern pattern
+ evil-ex-search-offset offset)
+ (cond
+ ((memq success '(t wrap))
+ (goto-char (match-beginning 0))
+ (setq evil-ex-search-match-beg (match-beginning 0)
+ evil-ex-search-match-end (match-end 0))
+ (evil-ex-search-goto-offset offset)
+ (evil-push-search-history search-string (eq direction 'forward))
+ (unless evil-ex-search-persistent-highlight
+ (evil-ex-delete-hl 'evil-ex-search)))
+ (t
+ (goto-char evil-ex-search-start-point)
+ (evil-ex-delete-hl 'evil-ex-search)
+ (signal 'search-failed (list search-string)))))))))
+
+(defun evil-ex-start-word-search (unbounded direction count &optional symbol)
+ "Search for the symbol under point.
+The search matches the COUNT-th occurrence of the word. If the
+UNBOUNDED argument is nil, the search matches only at symbol
+boundaries, otherwise it matches anywhere. The DIRECTION
+argument should be either `forward' or `backward', determining
+the search direction. If SYMBOL is non-nil then the functions
+searches for the symbol at point, otherwise for the word at
+point."
+ (let ((string (evil-find-thing (eq direction 'forward)
+ (if symbol 'symbol 'word))))
+ (if (null string)
+ (user-error "No word under point")
+ (let ((regex (if unbounded
+ (regexp-quote string)
+ (format (if symbol "\\_<%s\\_>" "\\<%s\\>")
+ (regexp-quote string)))))
+ (setq evil-ex-search-count count
+ evil-ex-search-direction direction
+ evil-ex-search-pattern
+ (evil-ex-make-search-pattern regex)
+ evil-ex-search-offset nil
+ evil-ex-last-was-search t)
+ ;; update search history unless this pattern equals the
+ ;; previous pattern
+ (unless (equal (car-safe evil-ex-search-history) regex)
+ (push regex evil-ex-search-history))
+ (evil-push-search-history regex (eq direction 'forward)))
+ (evil-ex-delete-hl 'evil-ex-search)
+ (when (fboundp 'evil-ex-search-next)
+ (evil-ex-search-next count)))))
+
+;; substitute
+(evil-ex-define-argument-type substitution
+ "A substitution pattern argument /pattern/replacement/flags.
+This handler highlights the pattern of the current substitution."
+ :runner
+ (lambda (flag &optional arg)
+ (with-selected-window (minibuffer-selected-window)
+ (with-current-buffer evil-ex-current-buffer
+ (cond
+ ((eq flag 'start)
+ (evil-ex-make-hl
+ 'evil-ex-substitute
+ :face 'evil-ex-substitute-matches
+ :update-hook #'evil-ex-pattern-update-ex-info
+ :match-hook (and evil-ex-substitute-interactive-replace
+ #'evil-ex-pattern-update-replacement))
+ (setq flag 'update))
+
+ ((eq flag 'stop)
+ (evil-ex-delete-hl 'evil-ex-substitute))))
+
+ (when (and (eq flag 'update)
+ evil-ex-substitute-highlight-all
+ (not (zerop (length arg))))
+ (condition-case lossage
+ (let* ((result (evil-ex-get-substitute-info arg t))
+ (pattern (pop result))
+ (replacement (pop result))
+ (range (or (evil-copy-range evil-ex-range)
+ (evil-range (line-beginning-position)
+ (line-end-position)
+ 'line
+ :expanded t))))
+ (setq evil-ex-substitute-current-replacement replacement)
+ (evil-expand-range range)
+ (evil-ex-hl-set-region 'evil-ex-substitute
+ (evil-range-beginning range)
+ (evil-range-end range))
+ (evil-ex-hl-change 'evil-ex-substitute pattern))
+ (end-of-file
+ (evil-ex-pattern-update-ex-info nil
+ "incomplete replacement"))
+ (user-error
+ (evil-ex-pattern-update-ex-info nil
+ (format "%s" lossage))))))))
+
+(defun evil-ex-pattern-update-ex-info (hl result)
+ "Update the Ex info string."
+ (when (stringp result)
+ (evil-ex-echo "%s" result)))
+
+(defun evil-ex-pattern-update-replacement (hl overlay)
+ "Update the replacement display."
+ (when (fboundp 'match-substitute-replacement)
+ (let ((fixedcase (not case-replace))
+ repl)
+ (setq repl (if evil-ex-substitute-current-replacement
+ (evil-match-substitute-replacement
+ evil-ex-substitute-current-replacement
+ fixedcase)
+ ""))
+ (put-text-property 0 (length repl)
+ 'face 'evil-ex-substitute-replacement
+ repl)
+ (overlay-put overlay 'after-string repl))))
+
+(defun evil-ex-parse-global (string)
+ "Parse STRING as a global argument."
+ (let* ((args (evil-delimited-arguments string 2))
+ (pattern (nth 0 args))
+ (command (nth 1 args)))
+ ;; use last pattern if none given
+ (when (zerop (length pattern))
+ (setq pattern
+ (cond
+ ((and (eq evil-search-module 'evil-search) evil-ex-search-pattern)
+ (evil-ex-pattern-regex evil-ex-search-pattern))
+ ((and (eq evil-search-module 'isearch) (not (zerop (length isearch-string))))
+ isearch-string)
+ (t (user-error "No previous pattern")))))
+ (list pattern command)))
+
+(defun evil-ex-get-substitute-info (string &optional implicit-r)
+ "Returns the substitution info of command line STRING.
+This function returns a three-element list \(PATTERN REPLACEMENT
+FLAGS) consisting of the substitution parts of STRING. PATTERN is
+a ex-pattern (see `evil-ex-make-pattern') and REPLACEMENT in a
+compiled replacement expression (see `evil-compile-replacement').
+The information returned is the actual substitution information
+w.r.t. to special situations like empty patterns or repetition of
+previous substitution commands. If IMPLICIT-R is non-nil, then
+the flag 'r' is assumed, i.e. in the case of an empty pattern the
+last search pattern is used. This will be used when called from
+a :substitute command with arguments."
+ (let (pattern replacement flags)
+ (cond
+ ((or (null string) (string-match "^[a-zA-Z]" string))
+ ;; starts with letter so there is no pattern because the
+ ;; separator must not be a letter repeat last substitute
+ (setq replacement evil-ex-substitute-replacement)
+ ;; flags are everything that is not a white space
+ (when (and string (string-match "[^[:space:]]+" string))
+ (setq flags (match-string 0 string))))
+ (t
+ (let ((args (evil-delimited-arguments string 3)))
+ (setq pattern (pop args)
+ replacement (pop args)
+ flags (pop args))
+ ;; if replacment equals "~" use previous replacement
+ (if (equal replacement "~")
+ (setq replacement evil-ex-substitute-replacement)
+ (setq replacement (evil-compile-replacement replacement)))
+ ;; append implicit "r" flag if required
+ (when (and implicit-r (not (memq ?r (append flags nil))))
+ (setq flags (concat flags "r"))))))
+ ;; if flags equals "&" add previous flags
+ (if (and (not (zerop (length flags)))
+ (= (aref flags 0) ?&))
+ (setq flags (append (substring flags 1)
+ evil-ex-substitute-flags))
+ (setq flags (append flags nil)))
+ ;; if no pattern, use previous pattern, either search or
+ ;; substitute pattern depending on `evil-ex-last-was-search' and
+ ;; the r flag
+ (when (zerop (length pattern))
+ (setq pattern
+ (if (eq evil-search-module 'evil-search)
+ (if (and evil-ex-last-was-search (memq ?r flags))
+ (and evil-ex-search-pattern
+ (evil-ex-pattern-regex evil-ex-search-pattern))
+ (and evil-ex-substitute-pattern
+ (evil-ex-pattern-regex evil-ex-substitute-pattern)))
+ (if (eq case-fold-search t)
+ isearch-string
+ (concat isearch-string "\\C")))
+ flags (remq ?r flags)))
+ ;; generate pattern
+ (when pattern
+ (setq pattern (evil-ex-make-substitute-pattern pattern flags)))
+ (list pattern replacement flags)))
+
+(defun evil-ex-nohighlight ()
+ "Disable the active search highlightings."
+ (interactive)
+ (evil-ex-delete-hl 'evil-ex-substitute)
+ (evil-ex-delete-hl 'evil-ex-search))
+
+(provide 'evil-search)
+
+;;; evil-search.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-search.elc b/.emacs.d/elpa/evil-20171210.501/evil-search.elc
new file mode 100644
index 0000000..2068c60
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-search.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-states.el b/.emacs.d/elpa/evil-20171210.501/evil-states.el
new file mode 100644
index 0000000..9655b65
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-states.el
@@ -0,0 +1,905 @@
+;;; evil-states.el --- States
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+(require 'evil-core)
+
+;;; Code:
+
+;;; Normal state
+
+(evil-define-state normal
+ "Normal state.
+AKA \"Command\" state."
+ :tag " <N> "
+ :enable (motion)
+ :exit-hook (evil-repeat-start-hook)
+ (cond
+ ((evil-normal-state-p)
+ (overwrite-mode -1)
+ (add-hook 'post-command-hook #'evil-normal-post-command nil t))
+ (t
+ (remove-hook 'post-command-hook #'evil-normal-post-command t))))
+
+(defun evil-normal-post-command (&optional command)
+ "Reset command loop variables in Normal state.
+Also prevent point from reaching the end of the line.
+If the region is activated, enter Visual state."
+ (unless (or (evil-initializing-p)
+ (null this-command))
+ (setq command (or command this-command))
+ (when (evil-normal-state-p)
+ (setq evil-this-type nil
+ evil-this-operator nil
+ evil-this-motion nil
+ evil-this-motion-count nil
+ evil-inhibit-operator nil
+ evil-inhibit-operator-value nil)
+ (unless (memq command '(evil-use-register
+ digit-argument
+ negative-argument
+ universal-argument
+ universal-argument-minus
+ universal-argument-more
+ universal-argument-other-key))
+ (setq evil-this-register nil))
+ (evil-adjust-cursor))))
+(put 'evil-normal-post-command 'permanent-local-hook t)
+
+;;; Insert state
+
+(defun evil-maybe-remove-spaces (&optional do-remove)
+ "Remove space from newly opened empty line.
+This function removes (indentation) spaces that have been
+inserted by opening a new empty line. The behavior depends on the
+variable `evil-maybe-remove-spaces'. If this variable is nil the
+function does nothing. Otherwise the behavior depends on
+DO-REMOVE. If DO-REMOVE is non-nil the spaces are
+removed. Otherwise `evil-maybe-remove-spaces' is set to nil
+unless the last command opened yet another new line.
+
+This function should be added as a post-command-hook to track
+commands opening a new line."
+ (cond
+ ((not evil-maybe-remove-spaces)
+ (remove-hook 'post-command-hook #'evil-maybe-remove-spaces))
+ (do-remove
+ (when (save-excursion
+ (beginning-of-line)
+ (looking-at "^\\s-*$"))
+ (delete-region (line-beginning-position)
+ (line-end-position)))
+ (setq evil-maybe-remove-spaces nil)
+ (remove-hook 'post-command-hook #'evil-maybe-remove-spaces))
+ ((not (memq this-command
+ '(evil-open-above
+ evil-open-below
+ evil-append
+ evil-append-line
+ newline
+ newline-and-indent
+ indent-and-newline)))
+ (setq evil-maybe-remove-spaces nil)
+ (remove-hook 'post-command-hook #'evil-maybe-remove-spaces))))
+
+(evil-define-state insert
+ "Insert state."
+ :tag " <I> "
+ :cursor (bar . 2)
+ :message "-- INSERT --"
+ :entry-hook (evil-start-track-last-insertion)
+ :exit-hook (evil-cleanup-insert-state evil-stop-track-last-insertion)
+ :input-method t
+ (cond
+ ((evil-insert-state-p)
+ (add-hook 'post-command-hook #'evil-maybe-remove-spaces)
+ (add-hook 'pre-command-hook #'evil-insert-repeat-hook)
+ (setq evil-maybe-remove-spaces t)
+ (unless (eq evil-want-fine-undo t)
+ (evil-start-undo-step)))
+ (t
+ (remove-hook 'post-command-hook #'evil-maybe-remove-spaces)
+ (remove-hook 'pre-command-hook #'evil-insert-repeat-hook)
+ (evil-maybe-remove-spaces t)
+ (setq evil-insert-repeat-info evil-repeat-info)
+ (evil-set-marker ?^ nil t)
+ (unless (eq evil-want-fine-undo t)
+ (evil-end-undo-step))
+ (when evil-move-cursor-back
+ (when (or (evil-normal-state-p evil-next-state)
+ (evil-motion-state-p evil-next-state))
+ (evil-move-cursor-back))))))
+
+(defun evil-insert-repeat-hook ()
+ "Record insertion keys in `evil-insert-repeat-info'."
+ (setq evil-insert-repeat-info (last evil-repeat-info))
+ (remove-hook 'pre-command-hook #'evil-insert-repeat-hook))
+(put 'evil-insert-repeat-hook 'permanent-local-hook t)
+
+(defun evil-cleanup-insert-state ()
+ "Called when Insert state is about to be exited.
+Handles the repeat-count of the insertion command."
+ (when evil-insert-count
+ (dotimes (i (1- evil-insert-count))
+ (when evil-insert-lines
+ (evil-insert-newline-below)
+ (when evil-auto-indent
+ (indent-according-to-mode)))
+ (when (fboundp 'evil-execute-repeat-info)
+ (evil-execute-repeat-info
+ (cdr evil-insert-repeat-info)))))
+ (when evil-insert-vcount
+ (let ((buffer-invisibility-spec buffer-invisibility-spec))
+ ;; make all lines hidden by hideshow temporarily visible
+ (when (listp buffer-invisibility-spec)
+ (setq buffer-invisibility-spec
+ (evil-filter-list
+ #'(lambda (x)
+ (or (eq x 'hs)
+ (eq (car-safe x) 'hs)))
+ buffer-invisibility-spec)))
+ (let ((line (nth 0 evil-insert-vcount))
+ (col (nth 1 evil-insert-vcount))
+ (vcount (nth 2 evil-insert-vcount)))
+ (save-excursion
+ (dotimes (v (1- vcount))
+ (goto-char (point-min))
+ (forward-line (+ line v))
+ (when (or (not evil-insert-skip-empty-lines)
+ (not (integerp col))
+ (save-excursion
+ (evil-move-end-of-line)
+ (>= (current-column) col)))
+ (if (integerp col)
+ (move-to-column col t)
+ (funcall col))
+ (dotimes (i (or evil-insert-count 1))
+ (when (fboundp 'evil-execute-repeat-info)
+ (evil-execute-repeat-info
+ (cdr evil-insert-repeat-info)))))))))))
+
+;;; Visual state
+
+;; Visual selections are implemented in terms of types, and are
+;; compatible with the Emacs region. This is achieved by "translating"
+;; the region to the selected text right before a command is executed.
+;; If the command is a motion, the translation is postponed until a
+;; non-motion command is invoked (distinguished by the :keep-visual
+;; command property).
+;;
+;; Visual state activates the region, enabling Transient Mark mode if
+;; not already enabled. This is only temporay: if Transient Mark mode
+;; was disabled before entering Visual state, it is disabled when
+;; exiting Visual state. This allows Visual state to harness the
+;; "transient" behavior of many commands without overriding the user's
+;; preferences in other states.
+
+(defmacro evil-define-visual-selection (selection doc &rest body)
+ "Define a Visual selection SELECTION.
+Creates a command evil-visual-SELECTION for enabling the selection.
+DOC is the function's documentation string. The following keywords
+may be specified in BODY:
+
+:message STRING Status message when enabling the selection.
+:type TYPE Type to use (defaults to SELECTION).
+
+Following the keywords is optional code which is executed each time
+the selection is enabled.
+
+\(fn SELECTION DOC [[KEY VAL]...] BODY...)"
+ (declare (indent defun)
+ (debug (&define name stringp
+ [&rest keywordp sexp]
+ def-body)))
+ (let* ((name (intern (format "evil-visual-%s" selection)))
+ (message (intern (format "%s-message" name)))
+ (type selection)
+ arg key string)
+ ;; collect keywords
+ (while (keywordp (car-safe body))
+ (setq key (pop body)
+ arg (pop body))
+ (cond
+ ((eq key :message)
+ (setq string arg))
+ ((eq key :type)
+ (setq type arg))))
+ ;; macro expansion
+ `(progn
+ (add-to-list 'evil-visual-alist (cons ',selection ',name))
+ (defvar ,name ',type ,(format "*%s" doc))
+ (defvar ,message ,string ,doc)
+ (evil-define-command ,name (&optional mark point type message)
+ ,@(when doc `(,doc))
+ :keep-visual t
+ :repeat nil
+ (interactive
+ (list nil nil
+ (if (and (evil-visual-state-p)
+ (eq evil-visual-selection ',selection))
+ 'exit ,name) t))
+ (if (eq type 'exit)
+ (evil-exit-visual-state)
+ (setq type (or type ,name)
+ evil-visual-selection ',selection)
+ (evil-visual-make-region mark point type message)
+ ,@body))
+ ',selection)))
+
+(evil-define-visual-selection char
+ "Characterwise selection."
+ :type inclusive
+ :message "-- VISUAL --")
+
+(evil-define-visual-selection line
+ "Linewise selection."
+ :message "-- VISUAL LINE --")
+
+(evil-define-visual-selection block
+ "Blockwise selection."
+ :message "-- VISUAL BLOCK --"
+ (evil-transient-mark -1)
+ ;; refresh the :corner property
+ (setq evil-visual-properties
+ (plist-put evil-visual-properties :corner
+ (evil-visual-block-corner 'upper-left))))
+
+(evil-define-state visual
+ "Visual state."
+ :tag " <V> "
+ :enable (motion normal)
+ :message 'evil-visual-message
+ (cond
+ ((evil-visual-state-p)
+ (evil-save-transient-mark-mode)
+ (setq select-active-regions nil)
+ (cond
+ ((region-active-p)
+ (if (< (evil-visual-direction) 0)
+ (evil-visual-select (region-beginning) (region-end)
+ evil-visual-char
+ (evil-visual-direction))
+ (evil-visual-make-selection (mark t) (point)
+ evil-visual-char))
+ (evil-visual-highlight))
+ (t
+ (evil-visual-make-region (point) (point) evil-visual-char)))
+ (add-hook 'pre-command-hook #'evil-visual-pre-command nil t)
+ (add-hook 'post-command-hook #'evil-visual-post-command nil t)
+ (add-hook 'deactivate-mark-hook #'evil-visual-deactivate-hook nil t))
+ (t
+ ;; Postpone deactivation of region if next state is Insert.
+ ;; This gives certain insertion commands (auto-pairing characters,
+ ;; for example) an opportunity to access the region.
+ (if (and (eq evil-next-state 'insert)
+ (eq evil-visual-selection 'char))
+ (add-hook 'evil-normal-state-entry-hook
+ #'evil-visual-deactivate-hook nil t)
+ (evil-visual-deactivate-hook))
+ (setq evil-visual-region-expanded nil)
+ (remove-hook 'pre-command-hook #'evil-visual-pre-command t)
+ (remove-hook 'post-command-hook #'evil-visual-post-command t)
+ (remove-hook 'deactivate-mark-hook #'evil-visual-deactivate-hook t)
+ (evil-visual-highlight -1))))
+
+(defun evil-visual-pre-command (&optional command)
+ "Run before each COMMAND in Visual state.
+Expand the region to the selection unless COMMAND is a motion."
+ (when (evil-visual-state-p)
+ (setq command (or command this-command))
+ (when evil-visual-x-select-timer
+ (cancel-timer evil-visual-x-select-timer))
+ (unless (evil-get-command-property command :keep-visual)
+ (evil-visual-update-x-selection)
+ (evil-visual-expand-region
+ ;; exclude final newline from linewise selection
+ ;; unless the command has real need of it
+ (and (eq (evil-visual-type) 'line)
+ (evil-get-command-property command :exclude-newline))))))
+
+(put 'evil-visual-pre-command 'permanent-local-hook t)
+
+(defun evil-visual-post-command (&optional command)
+ "Run after each COMMAND in Visual state.
+If COMMAND is a motion, refresh the selection;
+otherwise exit Visual state."
+ (when (evil-visual-state-p)
+ (setq command (or command this-command))
+ (if (or quit-flag
+ (eq command #'keyboard-quit)
+ ;; Is `mark-active' nil for an unexpanded region?
+ deactivate-mark
+ (and (not evil-visual-region-expanded)
+ (not (region-active-p))
+ (not (eq evil-visual-selection 'block))))
+ (progn
+ (evil-exit-visual-state)
+ (evil-adjust-cursor))
+ (if evil-visual-region-expanded
+ (evil-visual-contract-region)
+ (evil-visual-refresh))
+ (setq evil-visual-x-select-timer
+ (run-with-idle-timer evil-visual-x-select-timeout nil
+ #'evil-visual-update-x-selection
+ (current-buffer)))
+ (evil-visual-highlight))))
+(put 'evil-visual-post-command 'permanent-local-hook t)
+
+(defun evil-visual-update-x-selection (&optional buffer)
+ "Update the X selection with the current visual region."
+ (let ((buf (or buffer (current-buffer))))
+ (when (buffer-live-p buf)
+ (with-current-buffer buf
+ (when (and (evil-visual-state-p)
+ (fboundp 'x-select-text)
+ (or (not (boundp 'ns-initialized))
+ (with-no-warnings ns-initialized))
+ (not (eq evil-visual-selection 'block)))
+ (x-select-text (buffer-substring-no-properties
+ evil-visual-beginning
+ evil-visual-end)))))))
+
+(defun evil-visual-activate-hook (&optional command)
+ "Enable Visual state if the region is activated."
+ (unless (evil-visual-state-p)
+ (evil-delay nil
+ ;; the activation may only be momentary, so re-check
+ ;; in `post-command-hook' before entering Visual state
+ '(unless (or (evil-visual-state-p)
+ (evil-insert-state-p)
+ (evil-emacs-state-p))
+ (when (and (region-active-p)
+ (not deactivate-mark))
+ (evil-visual-state)))
+ 'post-command-hook nil t
+ "evil-activate-visual-state")))
+(put 'evil-visual-activate-hook 'permanent-local-hook t)
+
+(defun evil-visual-deactivate-hook (&optional command)
+ "Deactivate the region and restore Transient Mark mode."
+ (setq command (or command this-command))
+ (remove-hook 'deactivate-mark-hook
+ #'evil-visual-deactivate-hook t)
+ (remove-hook 'evil-normal-state-entry-hook
+ #'evil-visual-deactivate-hook t)
+ (cond
+ ((and (evil-visual-state-p) command
+ (not (evil-get-command-property command :keep-visual)))
+ (setq evil-visual-region-expanded nil)
+ (evil-exit-visual-state))
+ ((not (evil-visual-state-p))
+ (evil-active-region -1)
+ (evil-restore-transient-mark-mode))))
+(put 'evil-visual-deactivate-hook 'permanent-local-hook t)
+
+(evil-define-command evil-exit-visual-state (&optional later buffer)
+ "Exit from Visual state to the previous state.
+If LATER is non-nil, exit after the current command."
+ :keep-visual t
+ :repeat abort
+ (with-current-buffer (or buffer (current-buffer))
+ (when (evil-visual-state-p)
+ (if later
+ (setq deactivate-mark t)
+ (when evil-visual-region-expanded
+ (evil-visual-contract-region))
+ (evil-change-to-previous-state)))))
+
+(defun evil-visual-message (&optional selection)
+ "Create an echo area message for SELECTION.
+SELECTION is a kind of selection as defined by
+`evil-define-visual-selection', such as `char', `line'
+or `block'."
+ (let (message)
+ (setq selection (or selection evil-visual-selection))
+ (when selection
+ (setq message
+ (symbol-value (intern (format "evil-visual-%s-message"
+ selection))))
+ (cond
+ ((functionp message)
+ (funcall message))
+ ((stringp message)
+ (evil-echo "%s" message))))))
+
+(defun evil-visual-select (beg end &optional type dir message)
+ "Create a Visual selection of type TYPE from BEG to END.
+Point and mark are positioned so that the resulting selection
+has the specified boundaries. If DIR is negative, point precedes mark,
+otherwise it succedes it. To specify point and mark directly,
+use `evil-visual-make-selection'."
+ (let* ((range (evil-contract beg end type))
+ (mark (evil-range-beginning range))
+ (point (evil-range-end range))
+ (dir (or dir 1)))
+ (when (< dir 0)
+ (evil-swap mark point))
+ (evil-visual-make-selection mark point type message)))
+
+(defun evil-visual-make-selection (mark point &optional type message)
+ "Create a Visual selection with point at POINT and mark at MARK.
+The boundaries of the selection are inferred from these
+and the current TYPE. To specify the boundaries and infer
+mark and point, use `evil-visual-select' instead."
+ (let* ((selection (evil-visual-selection-for-type type))
+ (func (evil-visual-selection-function selection))
+ (prev (and (evil-visual-state-p) evil-visual-selection))
+ (mark (evil-normalize-position mark))
+ (point (evil-normalize-position point))
+ (state evil-state))
+ (unless (evil-visual-state-p)
+ (evil-visual-state))
+ (setq evil-visual-selection selection)
+ (funcall func mark point type
+ ;; signal a message when changing the selection
+ (when (or (not (evil-visual-state-p state))
+ (not (eq selection prev)))
+ message))))
+
+(defun evil-visual-make-region (mark point &optional type message)
+ "Create an active region from MARK to POINT.
+If TYPE is given, also set the Visual type.
+If MESSAGE is given, display it in the echo area."
+ (interactive)
+ (let* ((point (evil-normalize-position
+ (or point (point))))
+ (mark (evil-normalize-position
+ (or mark
+ (when (or (evil-visual-state-p)
+ (region-active-p))
+ (mark t))
+ point))))
+ (unless (evil-visual-state-p)
+ (evil-visual-state))
+ (evil-active-region 1)
+ (setq evil-visual-region-expanded nil)
+ (evil-visual-refresh mark point type)
+ (cond
+ ((null evil-echo-state))
+ ((stringp message)
+ (evil-echo "%s" message))
+ (message
+ (cond
+ ((stringp evil-visual-state-message)
+ (evil-echo "%s" evil-visual-state-message))
+ ((functionp evil-visual-state-message)
+ (funcall evil-visual-state-message)))))))
+
+(defun evil-visual-expand-region (&optional exclude-newline)
+ "Expand the region to the Visual selection.
+If EXCLUDE-NEWLINE is non-nil and the selection ends with a newline,
+exclude that newline from the region."
+ (when (and (evil-visual-state-p)
+ (not evil-visual-region-expanded))
+ (let ((mark evil-visual-beginning)
+ (point evil-visual-end))
+ (when (< evil-visual-direction 0)
+ (evil-swap mark point))
+ (setq evil-visual-region-expanded t)
+ (evil-visual-refresh mark point)
+ (when (and exclude-newline
+ (save-excursion
+ (goto-char evil-visual-end)
+ (and (bolp) (not (bobp)))))
+ (if (< evil-visual-direction 0)
+ (evil-move-mark (max point (1- (mark))))
+ (goto-char (max mark (1- (point)))))))))
+
+(defun evil-visual-contract-region ()
+ "The inverse of `evil-visual-expand-region'.
+Create a Visual selection that expands to the current region."
+ (evil-visual-refresh)
+ (setq evil-visual-region-expanded nil)
+ (evil-visual-refresh evil-visual-mark evil-visual-point))
+
+(defun evil-visual-refresh (&optional mark point type &rest properties)
+ "Refresh point, mark and Visual variables.
+Refreshes `evil-visual-beginning', `evil-visual-end',
+`evil-visual-mark', `evil-visual-point', `evil-visual-selection',
+`evil-visual-direction', `evil-visual-properties' and `evil-this-type'."
+ (let* ((point (or point (point)))
+ (mark (or mark (mark t) point))
+ (dir (evil-visual-direction))
+ (type (or type (evil-visual-type evil-visual-selection)
+ (evil-visual-type)))
+ range)
+ (evil-move-mark mark)
+ (goto-char point)
+ (setq evil-visual-beginning
+ (or evil-visual-beginning
+ (let ((marker (make-marker)))
+ (move-marker marker (min point mark))))
+ evil-visual-end
+ (or evil-visual-end
+ (let ((marker (make-marker)))
+ (set-marker-insertion-type marker t)
+ (move-marker marker (max point mark))))
+ evil-visual-mark
+ (or evil-visual-mark
+ (let ((marker (make-marker)))
+ (move-marker marker mark)))
+ evil-visual-point
+ (or evil-visual-point
+ (let ((marker (make-marker)))
+ (move-marker marker point))))
+ (setq evil-visual-properties
+ (evil-concat-plists evil-visual-properties properties))
+ (cond
+ (evil-visual-region-expanded
+ (setq type (or (evil-visual-type) type))
+ (move-marker evil-visual-beginning (min point mark))
+ (move-marker evil-visual-end (max point mark))
+ ;; if the type is one-to-one, we can safely refresh
+ ;; the unexpanded positions as well
+ (when (evil-type-property type :one-to-one)
+ (setq range (apply #'evil-contract point mark type
+ evil-visual-properties)
+ mark (evil-range-beginning range)
+ point (evil-range-end range))
+ (when (< dir 0)
+ (evil-swap mark point))
+ (move-marker evil-visual-mark mark)
+ (move-marker evil-visual-point point)))
+ (t
+ (setq range (apply #'evil-expand point mark type
+ evil-visual-properties)
+ type (evil-type range type))
+ (move-marker evil-visual-beginning (evil-range-beginning range))
+ (move-marker evil-visual-end (evil-range-end range))
+ (move-marker evil-visual-mark mark)
+ (move-marker evil-visual-point point)))
+ (setq evil-visual-direction dir
+ evil-this-type type)))
+
+(defun evil-visual-highlight (&optional arg)
+ "Highlight Visual selection, depending on the Visual type.
+With negative ARG, disable highlighting."
+ (cond
+ ((and (numberp arg) (< arg 1))
+ (when evil-visual-overlay
+ (delete-overlay evil-visual-overlay)
+ (setq evil-visual-overlay nil))
+ (when evil-visual-block-overlays
+ (mapc #'delete-overlay evil-visual-block-overlays)
+ (setq evil-visual-block-overlays nil)))
+ ((eq evil-visual-selection 'block)
+ (when evil-visual-overlay
+ (evil-visual-highlight -1))
+ (evil-visual-highlight-block
+ evil-visual-beginning
+ evil-visual-end))
+ (t
+ (when evil-visual-block-overlays
+ (evil-visual-highlight -1))
+ (if evil-visual-overlay
+ (move-overlay evil-visual-overlay
+ evil-visual-beginning evil-visual-end)
+ (setq evil-visual-overlay
+ (make-overlay evil-visual-beginning evil-visual-end)))
+ (overlay-put evil-visual-overlay 'face 'region)
+ (overlay-put evil-visual-overlay 'priority 99))))
+
+(defun evil-visual-highlight-block (beg end &optional overlays)
+ "Highlight rectangular region from BEG to END.
+Do this by putting an overlay on each line within the rectangle.
+Each overlay extends across all the columns of the rectangle.
+Reuse overlays where possible to prevent flicker."
+ (let* ((point (point))
+ (mark (or (mark t) point))
+ (overlays (or overlays 'evil-visual-block-overlays))
+ (old (symbol-value overlays))
+ (eol-col (and (memq this-command '(next-line previous-line))
+ (numberp temporary-goal-column)
+ (1+ (min (round temporary-goal-column)
+ (1- most-positive-fixnum)))))
+ beg-col end-col new nlines overlay window-beg window-end)
+ (save-excursion
+ ;; calculate the rectangular region represented by BEG and END,
+ ;; but put BEG in the upper-left corner and END in the
+ ;; lower-right if not already there
+ (setq beg-col (evil-column beg)
+ end-col (evil-column end))
+ (when (>= beg-col end-col)
+ (if (= beg-col end-col)
+ (setq end-col (1+ end-col))
+ (evil-sort beg-col end-col))
+ (setq beg (save-excursion
+ (goto-char beg)
+ (evil-move-to-column beg-col))
+ end (save-excursion
+ (goto-char end)
+ (evil-move-to-column end-col 1))))
+ ;; update end column with eol-col (extension to eol).
+ (when (and eol-col (> eol-col end-col))
+ (setq end-col eol-col))
+ ;; force a redisplay so we can do reliable window
+ ;; BEG/END calculations
+ (sit-for 0)
+ (setq window-beg (max (window-start) beg)
+ window-end (min (window-end) (1+ end))
+ nlines (count-lines window-beg
+ (min window-end (point-max))))
+ ;; iterate over those lines of the rectangle which are
+ ;; visible in the currently selected window
+ (goto-char window-beg)
+ (dotimes (i nlines)
+ (let (before after row-beg row-end)
+ ;; beginning of row
+ (evil-move-to-column beg-col)
+ (when (< (current-column) beg-col)
+ ;; prepend overlay with virtual spaces if unable to
+ ;; move directly to the first column
+ (setq before
+ (propertize
+ (make-string
+ (- beg-col (current-column)) ?\s)
+ 'face
+ (or (get-text-property (1- (point)) 'face)
+ 'default))))
+ (setq row-beg (point))
+ ;; end of row
+ (evil-move-to-column end-col)
+ (when (and (not (eolp))
+ (< (current-column) end-col))
+ ;; append overlay with virtual spaces if unable to
+ ;; move directly to the last column
+ (setq after
+ (propertize
+ (make-string
+ (if (= (point) row-beg)
+ (- end-col beg-col)
+ (- end-col (current-column)))
+ ?\s) 'face 'region))
+ ;; place cursor on one of the virtual spaces
+ (if (= point row-beg)
+ (put-text-property
+ 0 (min (length after) 1)
+ 'cursor t after)
+ (put-text-property
+ (max 0 (1- (length after))) (length after)
+ 'cursor t after)))
+ (setq row-end (min (point) (line-end-position)))
+ ;; trim old leading overlays
+ (while (and old
+ (setq overlay (car old))
+ (< (overlay-start overlay) row-beg)
+ (/= (overlay-end overlay) row-end))
+ (delete-overlay overlay)
+ (setq old (cdr old)))
+ ;; reuse an overlay if possible, otherwise create one
+ (cond
+ ((and old (setq overlay (car old))
+ (or (= (overlay-start overlay) row-beg)
+ (= (overlay-end overlay) row-end)))
+ (move-overlay overlay row-beg row-end)
+ (overlay-put overlay 'before-string before)
+ (overlay-put overlay 'after-string after)
+ (setq new (cons overlay new)
+ old (cdr old)))
+ (t
+ (setq overlay (make-overlay row-beg row-end))
+ (overlay-put overlay 'before-string before)
+ (overlay-put overlay 'after-string after)
+ (setq new (cons overlay new)))))
+ (forward-line 1))
+ ;; display overlays
+ (dolist (overlay new)
+ (overlay-put overlay 'face 'region)
+ (overlay-put overlay 'priority 99))
+ ;; trim old overlays
+ (dolist (overlay old)
+ (delete-overlay overlay))
+ (set overlays (nreverse new)))))
+
+(defun evil-visual-range ()
+ "Return the Visual selection as a range.
+This is a list (BEG END TYPE PROPERTIES...), where BEG is the
+beginning of the selection, END is the end of the selection,
+TYPE is the selection's type, and PROPERTIES is a property list
+of miscellaneous selection attributes."
+ (apply #'evil-range
+ evil-visual-beginning evil-visual-end
+ (evil-visual-type)
+ :expanded t
+ evil-visual-properties))
+
+(defun evil-visual-direction ()
+ "Return direction of Visual selection.
+The direction is -1 if point precedes mark and 1 otherwise.
+See also the variable `evil-visual-direction', which holds
+the direction of the last selection."
+ (let* ((point (point))
+ (mark (or (mark t) point)))
+ (if (< point mark) -1 1)))
+
+(defun evil-visual-type (&optional selection)
+ "Return the type of the Visual selection.
+If SELECTION is specified, return the type of that instead."
+ (if (and (null selection) (evil-visual-state-p))
+ (or evil-this-type (evil-visual-type evil-visual-selection))
+ (setq selection (or selection evil-visual-selection))
+ (symbol-value (cdr-safe (assq selection evil-visual-alist)))))
+
+(defun evil-visual-goto-end ()
+ "Go to the last line of the Visual selection.
+This position may differ from `evil-visual-end' depending on
+the selection type, and is contained in the selection."
+ (let ((range (evil-contract-range (evil-visual-range))))
+ (goto-char (evil-range-end range))))
+
+(defun evil-visual-alist ()
+ "Return an association list from types to selection symbols."
+ (mapcar #'(lambda (e)
+ (cons (symbol-value (cdr-safe e)) (cdr-safe e)))
+ evil-visual-alist))
+
+(defun evil-visual-selection-function (selection)
+ "Return a selection function for TYPE.
+Default to `evil-visual-make-region'."
+ (or (cdr-safe (assq selection evil-visual-alist))
+ ;; generic selection function
+ 'evil-visual-make-region))
+
+(defun evil-visual-selection-for-type (type)
+ "Return a Visual selection for TYPE."
+ (catch 'done
+ (dolist (selection evil-visual-alist)
+ (when (eq (symbol-value (cdr selection)) type)
+ (throw 'done (car selection))))))
+
+(defun evil-visual-block-corner (&optional corner point mark)
+ "Block corner corresponding to POINT, with MARK in opposite corner.
+Depending on POINT and MARK, the return value is `upper-left',
+`upper-right', `lower-left' or `lower-right':
+
+ upper-left +---+ upper-right
+ | |
+ lower-left +---+ lower-right
+
+One-column or one-row blocks are ambiguous. In such cases,
+the horizontal or vertical component of CORNER is used.
+CORNER defaults to `upper-left'."
+ (let* ((point (or point (point)))
+ (mark (or mark (mark t)))
+ (corner (symbol-name
+ (or corner
+ (and (overlayp evil-visual-overlay)
+ (overlay-get evil-visual-overlay
+ :corner))
+ 'upper-left)))
+ (point-col (evil-column point))
+ (mark-col (evil-column mark))
+ horizontal vertical)
+ (cond
+ ((= point-col mark-col)
+ (setq horizontal
+ (or (and (string-match "left\\|right" corner)
+ (match-string 0 corner))
+ "left")))
+ ((< point-col mark-col)
+ (setq horizontal "left"))
+ ((> point-col mark-col)
+ (setq horizontal "right")))
+ (cond
+ ((= (line-number-at-pos point)
+ (line-number-at-pos mark))
+ (setq vertical
+ (or (and (string-match "upper\\|lower" corner)
+ (match-string 0 corner))
+ "upper")))
+ ((< point mark)
+ (setq vertical "upper"))
+ ((> point mark)
+ (setq vertical "lower")))
+ (intern (format "%s-%s" vertical horizontal))))
+
+;;; Operator-Pending state
+
+(evil-define-state operator
+ "Operator-Pending state."
+ :tag " <O> "
+ :cursor evil-half-cursor
+ :enable (evil-operator-shortcut-map operator motion normal))
+
+(evil-define-keymap evil-operator-shortcut-map
+ "Keymap for Operator-Pending shortcuts like \"dd\" and \"gqq\"."
+ :local t
+ (setq evil-operator-shortcut-map (make-sparse-keymap))
+ (evil-initialize-local-keymaps))
+
+;; the half-height "Operator-Pending cursor" cannot be specified
+;; as a static `cursor-type' value, since its height depends on
+;; the current font size
+(defun evil-half-cursor ()
+ "Change cursor to a half-height box.
+\(This is really just a thick horizontal bar.)"
+ (let ((height (/ (window-pixel-height) (* (window-height) 2))))
+ (setq cursor-type (cons 'hbar height))))
+
+;;; Replace state
+
+(evil-define-state replace
+ "Replace state."
+ :tag " <R> "
+ :cursor hbar
+ :message "-- REPLACE --"
+ :input-method t
+ (cond
+ ((evil-replace-state-p)
+ (overwrite-mode 1)
+ (add-hook 'pre-command-hook #'evil-replace-pre-command nil t)
+ (unless (eq evil-want-fine-undo t)
+ (evil-start-undo-step)))
+ (t
+ (overwrite-mode -1)
+ (remove-hook 'pre-command-hook #'evil-replace-pre-command t)
+ (unless (eq evil-want-fine-undo t)
+ (evil-end-undo-step))
+ (when evil-move-cursor-back
+ (evil-move-cursor-back))))
+ (setq evil-replace-alist nil))
+
+(defun evil-replace-pre-command ()
+ "Remember the character under point."
+ (when (evil-replace-state-p)
+ (unless (assq (point) evil-replace-alist)
+ (add-to-list 'evil-replace-alist
+ (cons (point)
+ (unless (eolp)
+ (char-after)))))))
+(put 'evil-replace-pre-command 'permanent-local-hook t)
+
+(defun evil-replace-backspace ()
+ "Restore character under cursor."
+ (interactive)
+ (let (char)
+ (backward-char)
+ (when (assq (point) evil-replace-alist)
+ (setq char (cdr (assq (point) evil-replace-alist)))
+ (save-excursion
+ (delete-char 1)
+ (when char
+ (insert char))))))
+
+;;; Motion state
+
+(evil-define-state motion
+ "Motion state."
+ :tag " <M> "
+ :suppress-keymap t)
+
+;;; Emacs state
+
+(evil-define-state emacs
+ "Emacs state."
+ :tag " <E> "
+ :message "-- EMACS --"
+ :input-method t
+ :intercept-esc nil)
+
+(provide 'evil-states)
+
+;;; evil-states.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-states.elc b/.emacs.d/elpa/evil-20171210.501/evil-states.elc
new file mode 100644
index 0000000..821eed6
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-states.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-types.el b/.emacs.d/elpa/evil-20171210.501/evil-types.el
new file mode 100644
index 0000000..eefd9ac
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-types.el
@@ -0,0 +1,424 @@
+;;; evil-types.el --- Type system
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; A type defines a transformation on a pair of buffer positions.
+;; Types are used by Visual state (character/line/block selection)
+;; and Operator-Pending state (character/line/block motions).
+;;
+;; The basic transformation is "expansion". For example, the `line'
+;; type "expands" a pair of positions to whole lines by moving the
+;; first position to the beginning of the line and the last position
+;; to the end of the line. That expanded selection is what the rest
+;; of Emacs sees and acts on.
+;;
+;; An optional transformation is "contraction", which is the opposite
+;; of expansion. If the transformation is one-to-one, expansion
+;; followed by contraction always returns the original range.
+;; (The `line' type is not one-to-one, as it may expand multiple
+;; positions to the same lines.)
+;;
+;; Another optional transformation is "normalization", which takes
+;; two unexpanded positions and adjusts them before expansion.
+;; This is useful for cleaning up "invalid" positions.
+;;
+;; Types are defined at the end of this file using the macro
+;; `evil-define-type'.
+
+(require 'evil-common)
+(require 'evil-macros)
+
+;;; Code:
+
+;;; Type definitions
+
+(evil-define-type exclusive
+ "Return the positions unchanged, with some exceptions.
+If the end position is at the beginning of a line, then:
+
+* If the beginning position is at or before the first non-blank
+ character on the line, return `line' (expanded).
+
+* Otherwise, move the end position to the end of the previous
+ line and return `inclusive' (expanded)."
+ :normalize (lambda (beg end)
+ (cond
+ ((progn
+ (goto-char end)
+ (and (/= beg end) (bolp)))
+ (setq end (max beg (1- end)))
+ (cond
+ ((progn
+ (goto-char beg)
+ (looking-back "^[ \f\t\v]*" (line-beginning-position)))
+ (evil-expand beg end 'line))
+ (t
+ (unless evil-cross-lines
+ (setq end (max beg (1- end))))
+ (evil-expand beg end 'inclusive))))
+ (t
+ (evil-range beg end))))
+ :string (lambda (beg end)
+ (let ((width (- end beg)))
+ (format "%s character%s" width
+ (if (= width 1) "" "s")))))
+
+(evil-define-type inclusive
+ "Include the character under point.
+If the end position is at the beginning of a line or the end of a
+line and `evil-want-visual-char-semi-exclusive', then:
+
+* If in visual state return `exclusive' (expanded)."
+ :expand (lambda (beg end)
+ (if (and evil-want-visual-char-semi-exclusive
+ (evil-visual-state-p)
+ (< beg end)
+ (save-excursion
+ (goto-char end)
+ (or (bolp) (eolp))))
+ (evil-range beg end 'exclusive)
+ (evil-range beg (1+ end))))
+ :contract (lambda (beg end)
+ (evil-range beg (max beg (1- end))))
+ :normalize (lambda (beg end)
+ (goto-char end)
+ (when (eq (char-after) ?\n)
+ (setq end (max beg (1- end))))
+ (evil-range beg end))
+ :string (lambda (beg end)
+ (let ((width (- end beg)))
+ (format "%s character%s" width
+ (if (= width 1) "" "s")))))
+
+(evil-define-type line
+ "Include whole lines."
+ :one-to-one nil
+ :expand (lambda (beg end)
+ (evil-range
+ (progn
+ (goto-char beg)
+ (min (line-beginning-position)
+ (progn
+ ;; move to beginning of line as displayed
+ (evil-move-beginning-of-line)
+ (line-beginning-position))))
+ (progn
+ (goto-char end)
+ (max (line-beginning-position 2)
+ (progn
+ ;; move to end of line as displayed
+ (evil-move-end-of-line)
+ (line-beginning-position 2))))))
+ :contract (lambda (beg end)
+ (evil-range beg (max beg (1- end))))
+ :string (lambda (beg end)
+ (let ((height (count-lines beg end)))
+ (format "%s line%s" height
+ (if (= height 1) "" "s")))))
+
+(evil-define-type block
+ "Like `inclusive', but for rectangles:
+the last column is included."
+ :expand (lambda (beg end &rest properties)
+ (let ((beg-col (evil-column beg))
+ (end-col (evil-column end))
+ (corner (plist-get properties :corner)))
+ ;; Since blocks are implemented as a pair of buffer
+ ;; positions, expansion is restricted to what the buffer
+ ;; allows. In the case of a one-column block, there are
+ ;; two ways to expand it (either move the upper corner
+ ;; beyond the lower corner, or the lower beyond the
+ ;; upper), so try out both possibilities when
+ ;; encountering the end of the line.
+ (cond
+ ((= beg-col end-col)
+ (goto-char end)
+ (cond
+ ((eolp)
+ (goto-char beg)
+ (if (eolp)
+ (evil-range beg end)
+ (evil-range (1+ beg) end)))
+ ((memq corner '(lower-right upper-right right))
+ (evil-range (1+ beg) end))
+ (t
+ (evil-range beg (1+ end)))))
+ ((< beg-col end-col)
+ (goto-char end)
+ (if (eolp)
+ (evil-range beg end)
+ (evil-range beg (1+ end))))
+ (t
+ (goto-char beg)
+ (if (eolp)
+ (evil-range beg end)
+ (evil-range (1+ beg) end))))))
+ :contract (lambda (beg end)
+ (let ((beg-col (evil-column beg))
+ (end-col (evil-column end)))
+ (if (> beg-col end-col)
+ (evil-range (1- beg) end)
+ (evil-range beg (max beg (1- end))))))
+ :string (lambda (beg end)
+ (let ((height (count-lines
+ beg
+ (progn
+ (goto-char end)
+ (if (and (bolp) (not (eobp)))
+ (1+ end)
+ end))))
+ (width (abs (- (evil-column beg)
+ (evil-column end)))))
+ (format "%s row%s and %s column%s"
+ height
+ (if (= height 1) "" "s")
+ width
+ (if (= width 1) "" "s"))))
+ :rotate (lambda (beg end &rest properties)
+ "Rotate block according to :corner property.
+:corner can be one of `upper-left',``upper-right', `lower-left'
+and `lower-right'."
+ (let ((left (evil-column beg))
+ (right (evil-column end))
+ (corner (or (plist-get properties :corner)
+ 'upper-left)))
+ (evil-sort left right)
+ (goto-char beg)
+ (if (memq corner '(upper-right lower-left))
+ (move-to-column right)
+ (move-to-column left))
+ (setq beg (point))
+ (goto-char end)
+ (if (memq corner '(upper-right lower-left))
+ (move-to-column left)
+ (move-to-column right))
+ (setq end (point))
+ (setq properties (plist-put properties
+ :corner corner))
+ (apply #'evil-range beg end properties))))
+
+(evil-define-type rectangle
+ "Like `exclusive', but for rectangles:
+the last column is excluded."
+ :expand (lambda (beg end)
+ ;; select at least one column
+ (if (= (evil-column beg) (evil-column end))
+ (evil-expand beg end 'block)
+ (evil-range beg end 'block))))
+
+;;; Standard interactive codes
+
+(evil-define-interactive-code "*"
+ "Signal error if the buffer is read-only."
+ (when buffer-read-only
+ (signal 'buffer-read-only nil)))
+
+(evil-define-interactive-code "b" (prompt)
+ "Name of existing buffer."
+ (list (read-buffer prompt (current-buffer) t)))
+
+(evil-define-interactive-code "c"
+ "Read character."
+ (list (read-char)))
+
+(evil-define-interactive-code "p"
+ "Prefix argument converted to number."
+ (list (prefix-numeric-value current-prefix-arg)))
+
+(evil-define-interactive-code "P"
+ "Prefix argument in raw form."
+ (list current-prefix-arg))
+
+;;; Custom interactive codes
+
+(evil-define-interactive-code "<c>"
+ "Count."
+ (list (when current-prefix-arg
+ (prefix-numeric-value
+ current-prefix-arg))))
+
+(evil-define-interactive-code "<vc>"
+ "Count, but only in visual state.
+This should be used by an operator taking a count. In normal
+state the count should not be handled by the operator but by the
+motion that defines the operator's range. In visual state the
+range is specified by the visual region and the count is not used
+at all. Thus in the case the operator may use the count
+directly."
+ (list (when (and (evil-visual-state-p) current-prefix-arg)
+ (prefix-numeric-value
+ current-prefix-arg))))
+
+(evil-define-interactive-code "<C>"
+ "Character read through `evil-read-key'."
+ (list
+ (if (evil-operator-state-p)
+ (evil-without-restriction (evil-read-key))
+ (evil-read-key))))
+
+(evil-define-interactive-code "<r>"
+ "Untyped motion range (BEG END)."
+ (evil-operator-range))
+
+(evil-define-interactive-code "<R>"
+ "Typed motion range (BEG END TYPE)."
+ (evil-operator-range t))
+
+(evil-define-interactive-code "<v>"
+ "Typed motion range of visual range(BEG END TYPE).
+If visual state is inactive then those values are nil."
+ (if (evil-visual-state-p)
+ (let ((range (evil-visual-range)))
+ (list (car range)
+ (cadr range)
+ (evil-type range)))
+ (list nil nil nil)))
+
+(evil-define-interactive-code "<x>"
+ "Current register."
+ (list evil-this-register))
+
+(evil-define-interactive-code "<y>"
+ "Current yank-handler."
+ (list (evil-yank-handler)))
+
+(evil-define-interactive-code "<a>"
+ "Ex argument."
+ :ex-arg t
+ (list (when (evil-ex-p) evil-ex-argument)))
+
+(evil-define-interactive-code "<f>"
+ "Ex file argument."
+ :ex-arg file
+ (list (when (evil-ex-p) (evil-ex-file-arg))))
+
+(evil-define-interactive-code "<b>"
+ "Ex buffer argument."
+ :ex-arg buffer
+ (list (when (evil-ex-p) evil-ex-argument)))
+
+(evil-define-interactive-code "<sh>"
+ "Ex shell command argument."
+ :ex-arg shell
+ (list (when (evil-ex-p) evil-ex-argument)))
+
+(evil-define-interactive-code "<fsh>"
+ "Ex file or shell command argument."
+ :ex-arg file-or-shell
+ (list (when (evil-ex-p) evil-ex-argument)))
+
+(evil-define-interactive-code "<sym>"
+ "Ex symbolic argument."
+ :ex-arg sym
+ (list (when (and (evil-ex-p) evil-ex-argument)
+ (intern evil-ex-argument))))
+
+(evil-define-interactive-code "<addr>"
+ "Ex line number."
+ (list
+ (and (evil-ex-p)
+ (let ((expr (evil-ex-parse evil-ex-argument)))
+ (if (eq (car expr) 'evil-goto-line)
+ (save-excursion
+ (goto-char evil-ex-point)
+ (eval (cadr expr)))
+ (user-error "Invalid address"))))))
+
+(evil-define-interactive-code "<!>"
+ "Ex bang argument."
+ :ex-bang t
+ (list (when (evil-ex-p) evil-ex-bang)))
+
+(evil-define-interactive-code "</>"
+ "Ex delimited argument."
+ (when (evil-ex-p)
+ (evil-delimited-arguments evil-ex-argument)))
+
+(evil-define-interactive-code "<g/>"
+ "Ex global argument."
+ (when (evil-ex-p)
+ (evil-ex-parse-global evil-ex-argument)))
+
+(evil-define-interactive-code "<s/>"
+ "Ex substitution argument."
+ :ex-arg substitution
+ (when (evil-ex-p)
+ (evil-ex-get-substitute-info evil-ex-argument t)))
+
+(evil-define-interactive-code "<xc/>"
+ "Ex register and count argument, both optional.
+Can be used for commands such as :delete [REGISTER] [COUNT] where the
+command can be called with either zero, one or two arguments. When the
+argument is one, if it's numeric it's treated as a COUNT, otherwise -
+REGISTER"
+ (when (evil-ex-p)
+ (evil-ex-get-optional-register-and-count evil-ex-argument)))
+
+(defun evil-ex-get-optional-register-and-count (string)
+ "Parse STRING as an ex arg with both optional REGISTER and COUNT.
+Returns a list (REGISTER COUNT)."
+ (let* ((split-args (split-string (or string "")))
+ (arg-count (length split-args))
+ (arg0 (car split-args))
+ (arg1 (cadr split-args))
+ (number-regex "^-?[1-9][0-9]*$")
+ (register nil)
+ (count nil))
+ (cond
+ ;; :command REGISTER or :command COUNT
+ ((= arg-count 1)
+ (if (string-match-p number-regex arg0)
+ (setq count arg0)
+ (setq register arg0)))
+ ;; :command REGISTER COUNT
+ ((eq arg-count 2)
+ (setq register arg0
+ count arg1))
+ ;; more than 2 args aren't allowed
+ ((> arg-count 2)
+ (user-error "Invalid use")))
+
+ ;; if register is given, check it's valid
+ (when register
+ (unless (= (length register) 1)
+ (user-error "Invalid register"))
+ (setq register (string-to-char register)))
+
+ ;; if count is given, check it's valid
+ (when count
+ (unless (string-match-p number-regex count)
+ (user-error "Invalid count"))
+ (setq count (string-to-number count))
+ (unless (> count 0)
+ (user-error "Invalid count")))
+
+ (list register count)))
+
+(provide 'evil-types)
+
+;;; evil-types.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-types.elc b/.emacs.d/elpa/evil-20171210.501/evil-types.elc
new file mode 100644
index 0000000..7d16df5
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-types.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-vars.el b/.emacs.d/elpa/evil-20171210.501/evil-vars.el
new file mode 100644
index 0000000..899aab5
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-vars.el
@@ -0,0 +1,1862 @@
+;;; evil-vars.el --- Settings and variables
+
+;; Author: Vegard Øye <vegard_oye at hotmail.com>
+;; Maintainer: Vegard Øye <vegard_oye at hotmail.com>
+
+;; Version: 1.2.13
+
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(declare-function evil-add-command-properties "evil-common"
+ (command &rest properties))
+(declare-function evil-update-insert-state-bindings "evil-maps"
+ (&optional _option-name remove force))
+
+;;; Hooks
+
+(defvar evil-after-load-hook nil
+ "Functions to be run when loading of evil is finished.
+This hook can be used the execute some initialization routines
+when evil is completely loaded.")
+
+;;; Initialization
+
+(defvar evil-pending-custom-initialize nil
+ "A list of pending initializations for custom variables.
+Each element is a triple (FUNC VAR VALUE). When evil is
+completely loaded then the functions (funcall FUNC VAR VALUE) is
+called for each element. FUNC should be a function suitable for
+the :initialize property of `defcustom'.")
+
+(defun evil-custom-initialize-pending-reset (var value)
+ "Add a pending customization with `custom-initialize-reset'."
+ (push (list 'custom-initialize-reset var value)
+ evil-pending-custom-initialize))
+
+(defun evil-run-pending-custom-initialize ()
+ "Executes the pending initializations.
+See `evil-pending-custom-initialize'."
+ (dolist (init evil-pending-custom-initialize)
+ (apply (car init) (cdr init)))
+ (remove-hook 'evil-after-load-hook 'evil-run-pending-custom-initialize))
+(add-hook 'evil-after-load-hook 'evil-run-pending-custom-initialize)
+
+;;; Setters
+
+(defun evil-set-toggle-key (key)
+ "Set `evil-toggle-key' to KEY.
+KEY must be readable by `read-kbd-macro'."
+ (let ((old-key (read-kbd-macro
+ (if (boundp 'evil-toggle-key)
+ evil-toggle-key
+ "C-z")))
+ (key (read-kbd-macro key)))
+ (with-no-warnings
+ (dolist (pair '((evil-motion-state-map evil-emacs-state)
+ (evil-insert-state-map evil-emacs-state)
+ (evil-emacs-state-map evil-exit-emacs-state)))
+ (when (boundp (car pair))
+ (let ((map (symbol-value (car pair)))
+ (fun (cadr pair)))
+ (when (keymapp map)
+ (define-key map key fun)
+ (define-key map old-key nil))))))))
+
+(defun evil-set-custom-state-maps (var pending-var key make newlist)
+ "Changes the list of special keymaps.
+VAR is the variable containing the list of keymaps.
+PENDING-VAR is the variable containing the list of the currently pending
+ keymaps.
+KEY the special symbol to be stored in the keymaps.
+MAKE the creation function of the special keymaps.
+NEWLIST the list of new special keymaps."
+ (set-default pending-var newlist)
+ (when (default-boundp var)
+ (dolist (map (default-value var))
+ (when (and (boundp (car map))
+ (keymapp (default-value (car map))))
+ (define-key (default-value (car map)) (vector key) nil))))
+ (set-default var newlist)
+ (evil-update-pending-maps))
+
+(defun evil-update-pending-maps (&optional file)
+ "Tries to set pending special keymaps.
+This function should be called from an `after-load-functions'
+hook."
+ (let ((maps '((evil-make-overriding-map . evil-pending-overriding-maps)
+ (evil-make-intercept-map . evil-pending-intercept-maps))))
+ (while maps
+ (let* ((map (pop maps))
+ (make (car map))
+ (pending-var (cdr map))
+ (pending (symbol-value pending-var))
+ newlist)
+ (while pending
+ (let* ((map (pop pending))
+ (kmap (and (boundp (car map))
+ (keymapp (symbol-value (car map)))
+ (symbol-value (car map))))
+ (state (cdr map)))
+ (if kmap
+ (funcall make kmap state)
+ (push map newlist))))
+ (set-default pending-var newlist)))))
+
+(defun evil-set-visual-newline-commands (var value)
+ "Set the value of `evil-visual-newline-commands'.
+Setting this variable changes the properties of the appropriate
+commands."
+ (with-no-warnings
+ (when (default-boundp var)
+ (dolist (cmd (default-value var))
+ (evil-set-command-property cmd :exclude-newline nil)))
+ (set-default var value)
+ (dolist (cmd (default-value var))
+ (evil-set-command-property cmd :exclude-newline t))))
+
+(defun evil-set-custom-motions (var values)
+ "Sets the list of motion commands."
+ (with-no-warnings
+ (when (default-boundp var)
+ (dolist (motion (default-value var))
+ (evil-add-command-properties motion :keep-visual nil :repeat nil)))
+ (set-default var values)
+ (mapc #'evil-declare-motion (default-value var))))
+
+;;; Customization group
+
+(defgroup evil nil
+ "Extensible vi layer."
+ :group 'emulations
+ :prefix 'evil-)
+
+(defcustom evil-auto-indent t
+ "Whether to auto-indent when opening lines."
+ :type 'boolean
+ :group 'evil)
+(make-variable-buffer-local 'evil-auto-indent)
+
+(defcustom evil-shift-width 4
+ "The offset used by \\<evil-normal-state-map>\\[evil-shift-right] \
+and \\[evil-shift-left]."
+ :type 'integer
+ :group 'evil)
+(make-variable-buffer-local 'evil-shift-width)
+
+(defcustom evil-shift-round t
+ "Whether \\<evil-normal-state-map>\\[evil-shift-right] \
+and \\[evil-shift-left] round to the nearest multiple \
+of `evil-shift-width'."
+ :type 'boolean
+ :group 'evil)
+(make-variable-buffer-local 'evil-shift-round)
+
+(defcustom evil-indent-convert-tabs t
+ "If non-nil `evil-indent' converts between leading tabs and spaces.
+ Whether tabs are converted to spaces or vice versa depends on the
+ value of `indent-tabs-mode'."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-default-cursor t
+ "The default cursor.
+May be a cursor type as per `cursor-type', a color string as passed
+to `set-cursor-color', a zero-argument function for changing the
+cursor, or a list of the above."
+ :type '(set symbol (cons symbol symbol) string function)
+ :group 'evil)
+
+(defvar evil-force-cursor nil
+ "Overwrite the current states default cursor.")
+
+(defcustom evil-repeat-move-cursor t
+ "Whether \"\\<evil-normal-state-map>\\[evil-repeat]\" \
+moves the cursor."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-cross-lines nil
+ "Whether motions may cross newlines."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-backspace-join-lines t
+ "Whether backward delete in insert state may join lines."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-move-cursor-back t
+ "Whether the cursor is moved backwards when exiting Insert state."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-move-beyond-eol nil
+ "Whether the cursor is allowed to move past the last character of \
+a line."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-respect-visual-line-mode nil
+ "Whether to remap movement commands when `visual-line-mode' is active.
+This variable must be set before evil is loaded. The commands
+swapped are
+
+`evil-next-line' <-> `evil-next-visual-line'
+`evil-previous-line' <-> `evil-previous-visual-line'
+`evil-beginning-of-line' <-> `evil-beginning-of-visual-line'
+`evil-end-of-line' <-> `evil-end-of-visual-line'"
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-repeat-find-to-skip-next t
+ "Whether a repeat of t or T should skip an adjacent character."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-kbd-macro-suppress-motion-error nil
+ "Whether left/right motions signal errors during keyboard-macro definition.
+If this variable is set to non-nil, then the function
+`evil-forward-char' and `evil-backward-char' do not signal
+`end-of-line' or `beginning-of-line' errors when a keyboard macro
+is being defined and/or it is being executed. This may be desired
+because such an error would cause the macro definition/execution
+being terminated."
+ :type '(radio (const :tag "No" :value nil)
+ (const :tag "Record" :value record)
+ (const :tag "Replay" :value replay)
+ (const :tag "Both" :value t))
+ :group 'evil)
+
+(defcustom evil-track-eol t
+ "If non-nil line moves after a call to `evil-end-of-line' stay at eol.
+This is analogous to `track-eol' but deals with the end-of-line
+interpretation of evil."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-mode-line-format 'before
+ "The position of the mode line tag.
+Either a symbol or a cons-cell. If it is a symbol it should be
+one of 'before, 'after or 'nil. 'before means the tag is
+placed before the mode-list, 'after means it is placed after the
+mode-list, and 'nil means no mode line tag. If it is a cons cell
+it should have the form (WHERE . WHICH) where WHERE is either
+'before or 'after and WHICH is a symbol in
+`mode-line-format'. The tag is then placed right before or after
+that symbol."
+ :type '(radio :value 'before
+ (const before)
+ (const after)
+ (cons :tag "Next to symbol"
+ (choice :value after
+ (const before)
+ (const after))
+ symbol))
+ :group 'evil)
+
+(defcustom evil-mouse-word 'evil-word
+ "The thing-at-point symbol for double click selection.
+The double-click starts visual state in a special word selection
+mode. This symbol is used to determine the words to be
+selected. Possible values are 'evil-word or
+'evil-WORD."
+ :type 'symbol
+ :group 'evil)
+
+(defcustom evil-bigword "^ \t\r\n"
+ "The characters to be considered as a big word.
+This should be a regexp set without the enclosing []."
+ :type 'string
+ :group 'evil)
+(make-variable-buffer-local 'evil-bigword)
+
+(defcustom evil-want-fine-undo nil
+ "Whether actions like \"cw\" are undone in several steps.
+There are three possible choices. \"No\" means all changes made
+during insert state including a possible delete after a change
+operation are collected in a single undo step. If \"Yes\" is
+selected, undo steps are determined according to Emacs heuristics
+and no attempt is made to further aggregate changes.
+
+As of 1.2.13, the option \"fine\" is ignored and means the same
+thing as \"No\". It used to be the case that fine would only try
+to merge the first two changes in an insert operation. For
+example, merging the delete and first insert operation after
+\"cw\", but this option was removed because it did not work
+consistently."
+ :type '(radio (const :tag "No" :value nil)
+ (const :tag "Fine (obsolete)" :value fine)
+ (const :tag "Yes" :value t))
+ :group 'evil)
+
+(defcustom evil-regexp-search t
+ "Whether to use regular expressions for searching."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-search-wrap t
+ "Whether search wraps around."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-flash-delay 2
+ "Time in seconds to flash search matches."
+ :type 'number
+ :group 'evil)
+
+(defcustom evil-fold-level 0
+ "Default fold level."
+ :type 'integer
+ :group 'evil)
+
+(defcustom evil-auto-balance-windows t
+ "If non-nil creating/deleting a window causes a rebalance."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-split-window-below nil
+ "If non-nil split windows are created below."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-vsplit-window-right nil
+ "If non-nil vsplit windows are created to the right."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-esc-delay 0.01
+ "Time in seconds to wait for another key after ESC."
+ :type 'number
+ :group 'evil)
+
+(defvar evil-esc-mode nil
+ "Non-nil if `evil-esc-mode' is enabled.")
+
+(defvar evil-esc-map nil
+ "Original ESC prefix map in `input-decode-map'.
+Used by `evil-esc-mode'.")
+
+(defvar evil-inhibit-esc nil
+ "If non-nil, the \\e event will never be translated to 'escape.")
+
+(defcustom evil-intercept-esc 'always
+ "Whether evil should intercept the ESC key.
+In terminal, a plain ESC key and a meta-key-sequence both
+generate the same event. In order to distinguish both evil
+modifies `input-decode-map'. This is necessary in terminal but
+not in X mode. However, the terminal ESC is equivalent to C-[, so
+if you want to use C-[ instead of ESC in X, then Evil must
+intercept the ESC event in X, too. This variable determines when
+Evil should intercept the event."
+ :type '(radio (const :tag "Never" :value nil)
+ (const :tag "In terminal only" :value t)
+ (const :tag "Always" :value always))
+ :group 'evil)
+
+(defcustom evil-show-paren-range 0
+ "The minimal distance between point and a parenthesis
+which causes the parenthesis to be highlighted."
+ :type 'integer
+ :group 'evil)
+
+(defcustom evil-ex-hl-update-delay 0.02
+ "Time in seconds of idle before updating search highlighting.
+Setting this to a period shorter than that of keyboard's repeat
+rate allows highlights to update while scrolling."
+ :type 'number
+ :group 'evil)
+
+(defcustom evil-highlight-closing-paren-at-point-states
+ '(not emacs insert replace)
+ "The states in which the closing parenthesis at point should be highlighted.
+All states listed here highlight the closing parenthesis at
+point (which is Vim default behavior), all others highlight the
+parenthesis before point (which is Emacs default behavior). If
+this list contains the symbol 'not then its meaning is inverted,
+i.e., all states listed here highlight the closing parenthesis
+before point."
+ :type '(repeat symbol)
+ :group 'evil)
+
+(defcustom evil-kill-on-visual-paste t
+ "Whether `evil-visual-paste' adds the replaced text to the kill
+ring, making it the default for the next paste. The default, t,
+replicates the default vim behavior."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-want-C-i-jump t
+ "Whether \"C-i\" jumps forward like in Vim."
+ :type 'boolean
+ :group 'evil
+ :set #'(lambda (sym value)
+ (set-default sym value)
+ (when (boundp 'evil-motion-state-map)
+ (cond
+ ((and (not value)
+ (eq (lookup-key evil-motion-state-map (kbd "C-i"))
+ 'evil-jump-forward))
+ (define-key evil-motion-state-map (kbd "C-i") nil))
+ ((and value
+ (not (lookup-key evil-motion-state-map (kbd "C-i"))))
+ (define-key evil-motion-state-map (kbd "C-i") 'evil-jump-forward))))))
+
+(defcustom evil-want-C-u-scroll nil
+ "Whether \"C-u\" scrolls like in Vim."
+ :type 'boolean
+ :group 'evil
+ :set #'(lambda (sym value)
+ (set-default sym value)
+ (when (boundp 'evil-motion-state-map)
+ (cond
+ ((and (not value)
+ (eq (lookup-key evil-motion-state-map (kbd "C-u"))
+ 'evil-scroll-up))
+ (define-key evil-motion-state-map (kbd "C-u") nil))
+ ((and value
+ (not (lookup-key evil-motion-state-map (kbd "C-u"))))
+ (define-key evil-motion-state-map (kbd "C-u") 'evil-scroll-up))))))
+
+(defcustom evil-want-C-d-scroll t
+ "Whether \"C-d\" scrolls like in Vim."
+ :type 'boolean
+ :group 'evil
+ :set #'(lambda (sym value)
+ (set-default sym value)
+ (when (boundp 'evil-motion-state-map)
+ (cond
+ ((and (not value)
+ (eq (lookup-key evil-motion-state-map (kbd "C-d"))
+ 'evil-scroll-down))
+ (define-key evil-motion-state-map (kbd "C-d") nil))
+ ((and value
+ (not (lookup-key evil-motion-state-map (kbd "C-d"))))
+ (define-key evil-motion-state-map (kbd "C-d") 'evil-scroll-down))))))
+
+(defcustom evil-want-C-w-delete t
+ "Whether \"C-w\" deletes a word in Insert state."
+ :type 'boolean
+ :group 'evil
+ :set #'(lambda (sym value)
+ (set-default sym value)
+ (when (boundp 'evil-insert-state-map)
+ (cond
+ ((and (not value)
+ (eq (lookup-key evil-insert-state-map (kbd "C-w"))
+ 'evil-delete-backward-word))
+ (define-key evil-insert-state-map (kbd "C-w") 'evil-window-map))
+ ((and value
+ (eq (lookup-key evil-insert-state-map (kbd "C-w"))
+ 'evil-window-map))
+ (define-key evil-insert-state-map (kbd "C-w") 'evil-delete-backward-word))))))
+
+(defcustom evil-want-C-w-in-emacs-state nil
+ "Whether \"C-w\" prefixes windows commands in Emacs state."
+ :type 'boolean
+ :group 'evil
+ :set #'(lambda (sym value)
+ (set-default sym value)
+ (when (boundp 'evil-emacs-state-map)
+ (cond
+ ((and (not value)
+ (eq (lookup-key evil-emacs-state-map (kbd "C-w"))
+ 'evil-window-map))
+ (define-key evil-emacs-state-map (kbd "C-w") nil))
+ ((and value
+ (not (lookup-key evil-emacs-state-map (kbd "C-w"))))
+ (define-key evil-emacs-state-map (kbd "C-w") 'evil-window-map))))))
+
+(defcustom evil-want-change-word-to-end t
+ "Whether \"cw\" behaves like \"ce\"."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-want-Y-yank-to-eol nil
+ "Whether \"Y\" yanks to the end of the line.
+The default behavior is to yank the whole line."
+ :group 'evil
+ :type 'boolean
+ :initialize #'evil-custom-initialize-pending-reset
+ :set #'(lambda (sym value)
+ (evil-add-command-properties
+ 'evil-yank-line
+ :motion (if value 'evil-end-of-line 'evil-line))))
+
+(defcustom evil-disable-insert-state-bindings nil
+ "Whether insert state bindings should be used. Excludes
+bindings for escape, delete and `evil-toggle-key'."
+ :group 'evil
+ :type 'boolean
+ :initialize #'evil-custom-initialize-pending-reset
+ :set #'evil-update-insert-state-bindings)
+
+(defcustom evil-echo-state t
+ "Whether to signal the current state in the echo area."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-complete-all-buffers t
+ "Whether completion looks for matches in all buffers."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-complete-next-func
+ #'(lambda (arg)
+ (require 'dabbrev)
+ (let ((dabbrev-search-these-buffers-only
+ (unless evil-complete-all-buffers
+ (list (current-buffer))))
+ dabbrev-case-distinction)
+ (condition-case nil
+ (if (eq last-command this-command)
+ (dabbrev-expand nil)
+ (dabbrev-expand (- (abs (or arg 1)))))
+ (error (dabbrev-expand nil)))))
+ "Completion function used by \
+\\<evil-insert-state-map>\\[evil-complete-next]."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-complete-previous-func
+ #'(lambda (arg)
+ (require 'dabbrev)
+ (let ((dabbrev-search-these-buffers-only
+ (unless evil-complete-all-buffers
+ (list (current-buffer))))
+ dabbrev-case-distinction)
+ (dabbrev-expand arg)))
+ "Completion function used by \
+\\<evil-insert-state-map>\\[evil-complete-previous]."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-complete-next-minibuffer-func 'minibuffer-complete
+ "Minibuffer completion function used by \
+\\<evil-insert-state-map>\\[evil-complete-next]."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-complete-previous-minibuffer-func 'minibuffer-complete
+ "Minibuffer completion function used by \
+\\<evil-insert-state-map>\\[evil-complete-previous]."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-complete-next-line-func
+ #'(lambda (arg)
+ (let ((hippie-expand-try-functions-list
+ '(try-expand-line
+ try-expand-line-all-buffers)))
+ (hippie-expand arg)))
+ "Minibuffer completion function used by \
+\\<evil-insert-state-map>\\[evil-complete-next-line]."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-complete-previous-line-func
+ evil-complete-next-line-func
+ "Minibuffer completion function used by \
+\\<evil-insert-state-map>\\[evil-complete-previous-line]."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-lookup-func #'woman
+ "Lookup function used by \
+\"\\<evil-motion-state-map>\\[evil-lookup]\"."
+ :type 'function
+ :group 'evil)
+
+(defcustom evil-toggle-key "C-z"
+ "The key used to change to and from Emacs state.
+Must be readable by `read-kbd-macro'. For example: \"C-z\"."
+ :type 'string
+ :group 'evil
+ :set #'(lambda (sym value)
+ (evil-set-toggle-key value)
+ (set-default sym value)))
+
+(defcustom evil-default-state 'normal
+ "The default state.
+This is the state a mode comes up in when it is not listed
+in `evil-emacs-state-modes', `evil-insert-state-modes' or
+`evil-motion-state-modes'. The value may be one of `normal',
+`insert', `visual', `replace', `operator', `motion' and
+`emacs'."
+ :type 'symbol
+ :group 'evil)
+
+(defcustom evil-buffer-regexps
+ '(("^ \\*load\\*" . nil))
+ "Regular expression determining the initial state for a buffer.
+Entries have the form (REGEXP . STATE), where REGEXP is a regular
+expression matching the buffer's name and STATE is one of `normal',
+`insert', `visual', `replace', `operator', `motion', `emacs' and nil.
+If STATE is nil, Evil is disabled in the buffer."
+ :type '(alist :key-type string :value-type symbol)
+ :group 'evil)
+
+(defcustom evil-emacs-state-modes
+ '(archive-mode
+ bbdb-mode
+ biblio-selection-mode
+ bookmark-bmenu-mode
+ bookmark-edit-annotation-mode
+ browse-kill-ring-mode
+ bzr-annotate-mode
+ calc-mode
+ cfw:calendar-mode
+ completion-list-mode
+ Custom-mode
+ custom-theme-choose-mode
+ debugger-mode
+ delicious-search-mode
+ desktop-menu-blist-mode
+ desktop-menu-mode
+ doc-view-mode
+ dvc-bookmarks-mode
+ dvc-diff-mode
+ dvc-info-buffer-mode
+ dvc-log-buffer-mode
+ dvc-revlist-mode
+ dvc-revlog-mode
+ dvc-status-mode
+ dvc-tips-mode
+ ediff-mode
+ ediff-meta-mode
+ efs-mode
+ Electric-buffer-menu-mode
+ emms-browser-mode
+ emms-mark-mode
+ emms-metaplaylist-mode
+ emms-playlist-mode
+ ess-help-mode
+ etags-select-mode
+ fj-mode
+ gc-issues-mode
+ gdb-breakpoints-mode
+ gdb-disassembly-mode
+ gdb-frames-mode
+ gdb-locals-mode
+ gdb-memory-mode
+ gdb-registers-mode
+ gdb-threads-mode
+ gist-list-mode
+ git-commit-mode
+ git-rebase-mode
+ gnus-article-mode
+ gnus-browse-mode
+ gnus-group-mode
+ gnus-server-mode
+ gnus-summary-mode
+ google-maps-static-mode
+ ibuffer-mode
+ jde-javadoc-checker-report-mode
+ magit-cherry-mode
+ magit-diff-mode
+ magit-log-mode
+ magit-log-select-mode
+ magit-popup-mode
+ magit-popup-sequence-mode
+ magit-process-mode
+ magit-reflog-mode
+ magit-refs-mode
+ magit-revision-mode
+ magit-stash-mode
+ magit-stashes-mode
+ magit-status-mode
+ ;; Obsolete as of Magit v2.1.0
+ magit-mode
+ magit-branch-manager-mode
+ magit-commit-mode
+ magit-key-mode
+ magit-rebase-mode
+ magit-wazzup-mode
+ ;; end obsolete
+ mh-folder-mode
+ monky-mode
+ mu4e-main-mode
+ mu4e-headers-mode
+ mu4e-view-mode
+ notmuch-hello-mode
+ notmuch-search-mode
+ notmuch-show-mode
+ occur-mode
+ org-agenda-mode
+ package-menu-mode
+ pdf-outline-buffer-mode
+ pdf-view-mode
+ proced-mode
+ rcirc-mode
+ rebase-mode
+ recentf-dialog-mode
+ reftex-select-bib-mode
+ reftex-select-label-mode
+ reftex-toc-mode
+ sldb-mode
+ slime-inspector-mode
+ slime-thread-control-mode
+ slime-xref-mode
+ sr-buttons-mode
+ sr-mode
+ sr-tree-mode
+ sr-virtual-mode
+ tar-mode
+ tetris-mode
+ tla-annotate-mode
+ tla-archive-list-mode
+ tla-bconfig-mode
+ tla-bookmarks-mode
+ tla-branch-list-mode
+ tla-browse-mode
+ tla-category-list-mode
+ tla-changelog-mode
+ tla-follow-symlinks-mode
+ tla-inventory-file-mode
+ tla-inventory-mode
+ tla-lint-mode
+ tla-logs-mode
+ tla-revision-list-mode
+ tla-revlog-mode
+ tla-tree-lint-mode
+ tla-version-list-mode
+ twittering-mode
+ urlview-mode
+ vc-annotate-mode
+ vc-dir-mode
+ vc-git-log-view-mode
+ vc-hg-log-view-mode
+ vc-svn-log-view-mode
+ vm-mode
+ vm-summary-mode
+ w3m-mode
+ wab-compilation-mode
+ xgit-annotate-mode
+ xgit-changelog-mode
+ xgit-diff-mode
+ xgit-revlog-mode
+ xhg-annotate-mode
+ xhg-log-mode
+ xhg-mode
+ xhg-mq-mode
+ xhg-mq-sub-mode
+ xhg-status-extra-mode)
+ "Modes that should come up in Emacs state."
+ :type '(repeat symbol)
+ :group 'evil)
+
+(defcustom evil-insert-state-modes
+ '(comint-mode
+ erc-mode
+ eshell-mode
+ geiser-repl-mode
+ gud-mode
+ inferior-apl-mode
+ inferior-caml-mode
+ inferior-emacs-lisp-mode
+ inferior-j-mode
+ inferior-python-mode
+ inferior-scheme-mode
+ inferior-sml-mode
+ internal-ange-ftp-mode
+ prolog-inferior-mode
+ reb-mode
+ shell-mode
+ slime-repl-mode
+ term-mode
+ wdired-mode)
+ "Modes that should come up in Insert state."
+ :type '(repeat symbol)
+ :group 'evil)
+
+(defcustom evil-motion-state-modes
+ '(apropos-mode
+ Buffer-menu-mode
+ calendar-mode
+ color-theme-mode
+ command-history-mode
+ compilation-mode
+ dictionary-mode
+ ert-results-mode
+ help-mode
+ Info-mode
+ Man-mode
+ speedbar-mode
+ undo-tree-visualizer-mode
+ woman-mode)
+ "Modes that should come up in Motion state."
+ :type '(repeat symbol)
+ :group 'evil)
+
+(defvar evil-pending-overriding-maps nil
+ "An alist of pending overriding maps.")
+
+(defvar evil-pending-intercept-maps nil
+ "An alist of pending intercept maps.")
+
+(defcustom evil-overriding-maps
+ '((Buffer-menu-mode-map . nil)
+ (color-theme-mode-map . nil)
+ (comint-mode-map . nil)
+ (compilation-mode-map . nil)
+ (grep-mode-map . nil)
+ (dictionary-mode-map . nil)
+ (ert-results-mode-map . motion)
+ (Info-mode-map . motion)
+ (speedbar-key-map . nil)
+ (speedbar-file-key-map . nil)
+ (speedbar-buffers-key-map . nil))
+ "Keymaps that should override Evil maps.
+Entries have the form (MAP-VAR . STATE), where MAP-VAR is
+a keymap variable and STATE is the state whose bindings
+should be overridden. If STATE is nil, all states are
+overridden."
+ :type '(alist :key-type symbol :value-type symbol)
+ :group 'evil
+ :set #'(lambda (var values)
+ (evil-set-custom-state-maps 'evil-overriding-maps
+ 'evil-pending-overriding-maps
+ 'override-state
+ 'evil-make-overriding-map
+ values))
+ :initialize 'evil-custom-initialize-pending-reset)
+
+(add-hook 'after-load-functions #'evil-update-pending-maps)
+
+(defcustom evil-intercept-maps
+ '((edebug-mode-map . nil))
+ "Keymaps that should intercept Evil maps.
+Entries have the form (MAP-VAR . STATE), where MAP-VAR is
+a keymap variable and STATE is the state whose bindings
+should be intercepted. If STATE is nil, all states are
+intercepted."
+ :type '(alist :key-type symbol :value-type symbol)
+ :group 'evil
+ :set #'(lambda (var values)
+ (evil-set-custom-state-maps 'evil-intercept-maps
+ 'evil-pending-intercept-maps
+ 'intercept-state
+ 'evil-make-intercept-map
+ values))
+ :initialize 'evil-custom-initialize-pending-reset)
+
+(defcustom evil-motions
+ '(back-to-indentation
+ backward-char
+ backward-list
+ backward-paragraph
+ backward-sentence
+ backward-sexp
+ backward-up-list
+ backward-word
+ beginning-of-buffer
+ beginning-of-defun
+ beginning-of-line
+ beginning-of-visual-line
+ c-beginning-of-defun
+ c-end-of-defun
+ diff-file-next
+ diff-file-prev
+ diff-hunk-next
+ diff-hunk-prev
+ down-list
+ end-of-buffer
+ end-of-defun
+ end-of-line
+ end-of-visual-line
+ exchange-point-and-mark
+ forward-char
+ forward-list
+ forward-paragraph
+ forward-sentence
+ forward-sexp
+ forward-word
+ goto-last-change
+ ibuffer-backward-line
+ ibuffer-forward-line
+ isearch-abort
+ isearch-cancel
+ isearch-complete
+ isearch-del-char
+ isearch-delete-char
+ isearch-edit-string
+ isearch-exit
+ isearch-highlight-regexp
+ isearch-occur
+ isearch-other-control-char
+ isearch-other-meta-char
+ isearch-printing-char
+ isearch-query-replace
+ isearch-query-replace-regexp
+ isearch-quote-char
+ isearch-repeat-backward
+ isearch-repeat-forward
+ isearch-ring-advance
+ isearch-ring-retreat
+ isearch-toggle-case-fold
+ isearch-toggle-input-method
+ isearch-toggle-regexp
+ isearch-toggle-specified-input-method
+ isearch-toggle-word
+ isearch-yank-char
+ isearch-yank-kill
+ isearch-yank-line
+ isearch-yank-word-or-char
+ keyboard-quit
+ left-char
+ left-word
+ mouse-drag-region
+ mouse-save-then-kill
+ mouse-set-point
+ mouse-set-region
+ mwheel-scroll
+ move-beginning-of-line
+ move-end-of-line
+ next-error
+ next-line
+ paredit-backward
+ paredit-backward-down
+ paredit-backward-up
+ paredit-forward
+ paredit-forward-down
+ paredit-forward-up
+ pop-global-mark
+ pop-tag-mark
+ pop-to-mark-command
+ previous-error
+ previous-line
+ right-char
+ right-word
+ scroll-down
+ scroll-down-command
+ scroll-up
+ scroll-up-command
+ sgml-skip-tag-backward
+ sgml-skip-tag-forward
+ up-list)
+ "Non-Evil commands to initialize to motions."
+ :type '(repeat symbol)
+ :group 'evil
+ :set 'evil-set-custom-motions
+ :initialize 'evil-custom-initialize-pending-reset)
+
+(defcustom evil-visual-newline-commands
+ '(LaTeX-section
+ TeX-font)
+ "Commands excluding the trailing newline of a Visual Line selection.
+These commands work better without this newline."
+ :type '(repeat symbol)
+ :group 'evil
+ :set 'evil-set-visual-newline-commands
+ :initialize 'evil-custom-initialize-pending-reset)
+
+(defcustom evil-want-visual-char-semi-exclusive nil
+ "Visual character selection to beginning/end of line is exclusive.
+If non nil then an inclusive visual character selection which
+ends at the beginning or end of a line is turned into an
+exclusive selection. Thus if the selected (inclusive) range ends
+at the beginning of a line it is changed to not include the first
+character of that line, and if the selected range ends at the end
+of a line it is changed to not include the newline character of
+that line."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-text-object-change-visual-type t
+ "Text objects change the current visual state type.
+If non-nil then a text-object changes the type of the visual state to
+its default selection type (e.g. a word object always changes to
+charwise visual state). Otherwise the current visual state type is
+preserved."
+ :type 'boolean
+ :group 'evil)
+
+(defgroup evil-cjk nil
+ "CJK support"
+ :prefix "evil-cjk-"
+ :group 'evil)
+
+(defcustom evil-cjk-emacs-word-boundary nil
+ "Determine word boundary exactly the same way as Emacs does."
+ :type 'boolean
+ :group 'evil-cjk)
+
+(defcustom evil-cjk-word-separating-categories
+ '(;; Kanji
+ (?C . ?H) (?C . ?K) (?C . ?k) (?C . ?A) (?C . ?G)
+ ;; Hiragana
+ (?H . ?C) (?H . ?K) (?H . ?k) (?H . ?A) (?H . ?G)
+ ;; Katakana
+ (?K . ?C) (?K . ?H) (?K . ?k) (?K . ?A) (?K . ?G)
+ ;; half-width Katakana
+ (?k . ?C) (?k . ?H) (?k . ?K) ; (?k . ?A) (?k . ?G)
+ ;; full-width alphanumeric
+ (?A . ?C) (?A . ?H) (?A . ?K) ; (?A . ?k) (?A . ?G)
+ ;; full-width Greek
+ (?G . ?C) (?G . ?H) (?G . ?K) ; (?G . ?k) (?G . ?A)
+ )
+ "List of pair (cons) of categories to determine word boundary
+used in `evil-cjk-word-boundary-p'. See the documentation of
+`word-separating-categories'. Use `describe-categories' to see
+the list of categories."
+ :type '((character . character))
+ :group 'evil-cjk)
+
+(defcustom evil-cjk-word-combining-categories
+ '(;; default value in word-combining-categories
+ (nil . ?^) (?^ . nil)
+ ;; Roman
+ (?r . ?k) (?r . ?A) (?r . ?G)
+ ;; half-width Katakana
+ (?k . ?r) (?k . ?A) (?k . ?G)
+ ;; full-width alphanumeric
+ (?A . ?r) (?A . ?k) (?A . ?G)
+ ;; full-width Greek
+ (?G . ?r) (?G . ?k) (?G . ?A)
+ )
+ "List of pair (cons) of categories to determine word boundary
+used in `evil-cjk-word-boundary-p'. See the documentation of
+`word-combining-categories'. Use `describe-categories' to see the
+list of categories."
+ :type '((character . character))
+ :group 'evil-cjk)
+
+(defcustom evil-ex-complete-emacs-commands 'in-turn
+ "TAB-completion for Emacs commands in ex command line.
+This variable determines when Emacs commands are considered for
+completion, always, never, or only if no Evil ex command is
+available for completion."
+ :group 'evil
+ :type '(radio (const :tag "Only if no ex-command." :value in-turn)
+ (const :tag "Never" :value nil)
+ (const :tag "Always" :value t)))
+
+(defface evil-ex-commands '(( nil
+ :underline t
+ :slant italic))
+ "Face for the evil command in completion in ex mode."
+ :group 'evil)
+
+(defface evil-ex-info '(( ((supports :slant))
+ :slant italic
+ :foreground "red"))
+ "Face for the info message in ex mode."
+ :group 'evil)
+
+(defcustom evil-ex-visual-char-range nil
+ "Type of default ex range in visual char state.
+If non-nil the default range when starting an ex command from
+character visual state is `<,`> otherwise it is '<,'>. In the
+first case the ex command will be passed a region covering only
+the visual selection. In the second case the passed region will
+be extended to contain full lines."
+ :group 'evil
+ :type 'boolean)
+
+;; Searching
+(defcustom evil-symbol-word-search nil
+ "If nil then * and # search for words otherwise for symbols."
+ :group 'evil
+ :type 'boolean)
+(make-variable-buffer-local 'evil-symbol-word-search)
+
+(defcustom evil-magic t
+ "Meaning which characters in a pattern are magic.
+The meaning of those values is the same as in Vim. Note that it
+only has influence if the evil search module is chosen in
+`evil-search-module'."
+ :group 'evil
+ :type '(radio (const :tag "Very magic." :value very-magic)
+ (const :tag "Magic" :value t)
+ (const :tag "Nomagic" :value nil)
+ (const :tag "Very nomagic" :value very-nomagic)))
+
+(defcustom evil-ex-search-vim-style-regexp nil
+ "If non-nil Vim-style backslash codes are supported in search patterns.
+See `evil-transform-vim-style-regexp' for the supported backslash
+codes. Note that this only affects the search command if
+`evil-search-module' is set to 'evil-search. The isearch module
+always uses plain Emacs regular expressions."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-ex-interactive-search-highlight 'all-windows
+ "Determine in which windows the interactive highlighting should be shown."
+ :type '(radio (const :tag "All windows." all-windows)
+ (const :tag "Selected window." selected-window)
+ (const :tag "Disable highlighting." nil))
+ :group 'evil)
+
+(defcustom evil-ex-search-persistent-highlight t
+ "If non-nil matches remain highlighted when the search ends."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-ex-search-case 'smart
+ "The case behaviour of the search command.
+Smart case means that the pattern is case sensitive if and only
+if it contains an upper case letter, otherwise it is case
+insensitive."
+ :type '(radio (const :tag "Case sensitive." sensitive)
+ (const :tag "Case insensitive." insensitive)
+ (const :tag "Smart case." smart))
+ :group 'evil)
+
+(defcustom evil-ex-substitute-case nil
+ "The case behaviour of the search command.
+Smart case means that the pattern is case sensitive if and only
+if it contains an upper case letter, otherwise it is case
+insensitive. If nil then the setting of `evil-ex-search-case' is
+used."
+ :type '(radio (const :tag "Same as interactive search." nil)
+ (const :tag "Case sensitive." sensitive)
+ (const :tag "Case insensitive." insensitive)
+ (const :tag "Smart case." smart))
+ :group 'evil)
+
+(defcustom evil-ex-search-interactive t
+ "If t search is interactive."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-ex-search-highlight-all t
+ "If t and interactive search is enabled, all matches are
+highlighted."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-ex-substitute-highlight-all t
+ "If t all matches for the substitute pattern are highlighted."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-ex-substitute-interactive-replace t
+ "If t and substitute patterns are highlighted,
+the replacement is shown interactively."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-ex-substitute-global nil
+ "If non-nil substitute patterns are global by default.
+Usually (if this variable is nil) a substitution works only on
+the first match of a pattern in a line unless the 'g' flag is
+given, in which case the substitution happens on all matches in a
+line. If this option is non-nil, this behaviour is reversed: the
+substitution works on all matches unless the 'g' pattern is
+specified, then is works only on the first match."
+ :type 'boolean
+ :group 'evil)
+
+(defface evil-ex-search '((t :inherit isearch))
+ "Face for interactive search."
+ :group 'evil)
+
+(defface evil-ex-lazy-highlight '((t :inherit lazy-highlight))
+ "Face for highlighting all matches in interactive search."
+ :group 'evil)
+
+(defface evil-ex-substitute-matches '((t :inherit lazy-highlight))
+ "Face for interactive substitute matches."
+ :group 'evil)
+
+(defface evil-ex-substitute-replacement '((((supports :underline))
+ :underline t
+ :foreground "red"))
+ "Face for interactive replacement text."
+ :group 'evil)
+
+(defcustom evil-command-window-height 8
+ "Height (in lines) of the command line window.
+Set to 0 to use the default height for `split-window'."
+ :type 'integer
+ :group 'evil)
+
+(defcustom evil-display-shell-error-in-message nil
+ "Show error output of a shell command in the error buffer.
+If this variable is non-nil the error output of a shell command
+goes to the messages buffer instead of being mixed with the
+regular output. This happens only if the exit status of the
+command is non-zero."
+ :type 'boolean
+ :group 'evil)
+
+(defcustom evil-want-abbrev-expand-on-insert-exit t
+ "If non-nil abbrevs will be expanded when leaving Insert state
+like in Vim. This variable is read only on load."
+ :type 'boolean
+ :group 'evil)
+
+;;; Variables
+
+(defmacro evil-define-local-var (symbol &optional initvalue docstring)
+ "Define SYMBOL as permanent buffer local variable, and return SYMBOL.
+The parameters are the same as for `defvar', but the variable
+SYMBOL is made permanent buffer local."
+ (declare (indent defun)
+ (debug (symbolp &optional form stringp)))
+ `(progn
+ (defvar ,symbol ,initvalue ,docstring)
+ (make-variable-buffer-local ',symbol)
+ (put ',symbol 'permanent-local t)))
+
+(evil-define-local-var evil-scroll-count 0
+ "Holds last used prefix for `evil-scroll-up'
+and `evil-scroll-down'.
+Determines how many lines should be scrolled.
+Default value is 0 - scroll half the screen.")
+
+(evil-define-local-var evil-state nil
+ "The current Evil state.
+To change the state, use `evil-change-state'
+or call the state function (e.g., `evil-normal-state').")
+
+;; these may be used inside `evil-define-state'
+(evil-define-local-var evil-next-state nil
+ "The Evil state being switched to.")
+
+(evil-define-local-var evil-previous-state-alist nil
+ "For Each evil state the Evil state being switched from.")
+
+(evil-define-local-var evil-previous-state nil
+ "The Evil state being switched from.")
+
+(defvar evil-execute-in-emacs-state-buffer nil
+ "The buffer of the latest `evil-execute-in-emacs-state'.
+When this command is being executed the current buffer is stored
+in this variable. This is necessary in case the Emacs-command to
+be called changes the current buffer.")
+
+(evil-define-local-var evil-mode-line-tag nil
+ "Mode-Line indicator for the current state.")
+(put 'evil-mode-line-tag 'risky-local-variable t)
+
+(defvar evil-global-keymaps-alist nil
+ "Association list of keymap variables.
+Entries have the form (MODE . KEYMAP), where KEYMAP
+is the variable containing the keymap for MODE.")
+
+(defvar evil-local-keymaps-alist nil
+ "Association list of keymap variables that must be
+reinitialized in each buffer. Entries have the form
+\(MODE . KEYMAP), where KEYMAP is the variable containing
+the keymap for MODE.")
+
+(defvar evil-minor-mode-keymaps-alist nil
+ "Association list of evil states to minor-mode keymap alists.
+Entries have the form (STATE . MODE-MAP-ALIST), where
+MODE-MAP-ALIST is an alist taking the form of
+`minor-mode-map-alist'.")
+
+(defvar evil-state-properties nil
+ "Specifications made by `evil-define-state'.
+Entries have the form (STATE . PLIST), where PLIST is a property
+list specifying various aspects of the state. To access a property,
+use `evil-state-property'.")
+
+(evil-define-local-var evil-mode-map-alist nil
+ "Association list of keymaps to use for Evil modes.
+Elements have the form (MODE . KEYMAP), with the first keymaps
+having higher priority.")
+
+(defvar evil-command-properties nil
+ "Specifications made by `evil-define-command'.")
+
+(defvar evil-change-commands '(evil-change)
+ "Commands that wrap or replace `evil-change'.
+This list exists to apply an inconsistency with vim's change command
+to commands that wrap or redefine it. See emacs-evil/evil#916.")
+
+(defvar evil-transient-vars '(cua-mode transient-mark-mode select-active-regions)
+ "List of variables pertaining to Transient Mark mode.")
+
+(defvar evil-transient-vals nil
+ "Association list of old values for Transient Mark mode variables.
+Entries have the form (VARIABLE VALUE LOCAL), where LOCAL is
+whether the variable was previously buffer-local.")
+
+(evil-define-local-var evil-no-display nil
+ "If non-nil, various Evil displays are inhibited.
+Use the macro `evil-without-display' to set this variable.")
+
+(defvar evil-type-properties nil
+ "Specifications made by `evil-define-type'.
+Entries have the form (TYPE . PLIST), where PLIST is a property
+list specifying functions for handling the type: expanding it,
+describing it, etc.")
+
+(defvar evil-interactive-alist nil
+ "Association list of Evil-specific interactive codes.")
+
+(evil-define-local-var evil-motion-marker nil
+ "Marker for storing the starting position of a motion.")
+
+(evil-define-local-var evil-this-type nil
+ "Current motion type.")
+
+(evil-define-local-var evil-this-type-modified nil
+ "Non-nil iff current motion type has been modified by the user.
+If the type has been modified, this variable contains the new
+type.")
+
+(evil-define-local-var evil-this-register nil
+ "Current register.")
+
+(defvar evil-this-macro nil
+ "Current macro register.")
+
+(evil-define-local-var evil-this-operator nil
+ "Current operator.")
+
+(evil-define-local-var evil-this-motion nil
+ "Current motion.")
+
+(evil-define-local-var evil-this-motion-count nil
+ "Current motion count.")
+
+(defvar evil-last-register nil
+ "The last executed register.")
+
+(defvar evil-inhibit-operator nil
+ "Inhibit current operator.
+If an operator calls a motion and the motion sets this variable
+to t, the operator code is not executed.")
+
+(defvar evil-inhibit-operator-value nil
+ "This variable is used to transfer the value
+of `evil-inhibit-operator' from one local scope to another.")
+
+;; used by `evil-define-operator'
+(defvar evil-operator-range-beginning nil
+ "Beginning of `evil-operator-range'.")
+
+(defvar evil-operator-range-end nil
+ "End of `evil-operator-range'.")
+
+(defvar evil-operator-range-type nil
+ "Type of `evil-operator-range'.")
+
+(defvar evil-operator-range-motion nil
+ "Motion of `evil-operator-range'.")
+
+(defvar evil-restriction-stack nil
+ "List of previous restrictions.
+Using `evil-with-restriction' stores the previous values of
+`point-min' and `point-max' as a pair in this list.")
+
+(evil-define-local-var evil-markers-alist
+ '((?\( . evil-backward-sentence)
+ (?\) . evil-forward-sentence)
+ (?{ . evil-backward-paragraph)
+ (?} . evil-forward-paragraph)
+ (?' . evil-jump-backward-swap)
+ (?` . evil-jump-backward-swap)
+ (?< . evil-visual-beginning)
+ (?> . evil-visual-goto-end)
+ (?. . (lambda ()
+ (let (last-command)
+ (goto-last-change nil)))))
+ "Association list for markers.
+Entries have the form (CHAR . DATA), where CHAR is the marker's
+name and DATA is either a marker object as returned by `make-marker',
+a variable, a movement function, or a cons cell (STRING NUMBER),
+where STRING is a file path and NUMBER is a buffer position.
+The global value of this variable holds markers available from
+every buffer, while the buffer-local value holds markers available
+only in the current buffer.")
+
+(defconst evil-suppress-map (make-keymap)
+ "Full keymap disabling default bindings to `self-insert-command'.")
+(suppress-keymap evil-suppress-map t)
+
+(defvar evil-read-key-map (make-sparse-keymap)
+ "Keymap active during `evil-read-key'.
+This keymap can be used to bind some commands during the
+execution of `evil-read-key' which is usually used to read a
+character argument for some commands, e.g. `evil-replace'.")
+
+;; TODO: customize size of ring
+(defvar evil-repeat-ring (make-ring 10)
+ "A ring of repeat-informations to repeat the last command.")
+
+(defvar evil-repeat-types
+ '((t . evil-repeat-keystrokes)
+ (change . evil-repeat-changes)
+ (motion . evil-repeat-motion)
+ (insert-at-point . evil-repeat-insert-at-point)
+ (ignore . nil))
+ "An alist of defined repeat-types.")
+
+(defvar evil-recording-repeat nil
+ "Whether we are recording a repeat.")
+
+(defvar evil-recording-current-command nil
+ "Whether we are recording the current command for repeat.")
+
+(defvar evil-repeat-changes nil
+ "Accumulated buffer changes for changed-based commands.")
+
+(defvar evil-repeat-info nil
+ "Information accumulated during current repeat.")
+
+(defvar evil-repeat-buffer nil
+ "The buffer in which the repeat started.
+If the buffer is changed, the repeat is cancelled.")
+
+(defvar evil-repeat-pos nil
+ "The position of point at the beginning of an change-tracking
+ editing command.")
+
+(defvar evil-repeat-keys nil
+ "The keys that invoked the current command.")
+
+(defvar evil-last-repeat nil
+ "Information about the latest repeat command.
+This is a list of three elements (POINT COUNT UNDO-POINTER),
+where POINT is the position of point before the latest repeat,
+COUNT the count-argument of the latest repeat command and
+UNDO-POINTER the head of the undo-list before the last command
+has been repeated.")
+
+(defvar evil-repeat-count nil
+ "The explicit count when repeating a command.")
+
+(defvar evil-maybe-remove-spaces nil
+ "Flag to determine if newly inserted spaces should be removed.
+See the function `evil-maybe-remove-spaces'.")
+
+(evil-define-local-var evil-insert-count nil
+ "The explicit count passed to an command starting Insert state.")
+
+(evil-define-local-var evil-insert-vcount nil
+ "The information about the number of following lines the
+insertion should be repeated. This is list (LINE COLUMN COUNT)
+where LINE is the line-number where the original insertion
+started and COLUMN is either a number or function determining the
+column where the repeated insertions should take place. COUNT is
+number of repeats (including the original insertion).")
+
+(defvar evil-insert-skip-empty-lines nil
+ "Non-nil of the current insertion should not take place on
+ lines at which the insertion point is behind the end of the
+ line.")
+
+(evil-define-local-var evil-insert-lines nil
+ "Non-nil if the current insertion command is a line-insertion
+command o or O.")
+
+(evil-define-local-var evil-insert-repeat-info nil
+ "Repeat information accumulated during an insertion.")
+
+(evil-define-local-var evil-replace-alist nil
+ "Association list of characters overwritten in Replace state.
+The format is (POS . CHAR).")
+
+(evil-define-local-var evil-echo-area-message nil
+ "Previous value of `current-message'.")
+
+(defvar evil-write-echo-area nil
+ "If set to t inside `evil-save-echo-area', then the echo area
+is not restored.")
+
+(defvar evil-last-find nil
+ "A pair (FUNCTION . CHAR) describing the lastest character
+ search command.")
+
+(defvar evil-last-paste nil
+ "Information about the latest paste.
+This should be a list (CMD COUNT POINT BEG END FIRSTVISUAL) where
+CMD is the last paste-command (`evil-paste-before',
+`evil-paste-after' or `evil-visual-paste'), COUNT is the repeat
+count of the paste, POINT is the position of point before the
+paste, BEG end END are the region of the inserted
+text. FIRSTVISUAL is t if and only if the previous command was
+the first visual paste (i.e. before any paste-pop).")
+
+(evil-define-local-var evil-last-undo-entry nil
+ "Information about the latest undo entry in the buffer.
+This should be a pair (OBJ . CONS) where OBJ is the entry as an
+object, and CONS is a copy of the entry.")
+
+(evil-define-local-var evil-current-insertion nil
+ "Information about the latest insertion in insert state.
+This should be a pair (BEG . END) that describes the
+buffer-region of the newly inserted text.")
+
+(defvar evil-last-insertion nil
+ "The last piece of inserted text.")
+
+(defvar evil-last-small-deletion nil
+ "The last piece of deleted text.
+The text should be less than a line.")
+
+(defvar evil-was-yanked-without-register t
+ "Whether text being saved to the numbered-register ring was
+not deleted and not yanked to a specific register.")
+
+(defvar evil-paste-count nil
+ "The count argument of the current paste command.")
+
+(defvar evil-temporary-undo nil
+ "When undo is disabled in current buffer.
+Certain commands depending on undo use this variable
+instead of `buffer-undo-list'.")
+
+(evil-define-local-var evil-undo-list-pointer nil
+ "Everything up to this mark is united in the undo-list.")
+
+(defvar evil-in-single-undo nil
+ "Set to non-nil if the current undo steps are connected.")
+
+(defvar evil-flash-timer nil
+ "Timer for flashing search results.")
+
+(defvar evil-search-prompt nil
+ "String to use for search prompt.")
+
+(defvar evil-search-forward-history nil
+ "History of forward searches.")
+
+(defvar evil-search-backward-history nil
+ "History of backward searches.")
+
+(defvar evil-inner-text-objects-map (make-sparse-keymap)
+ "Keymap for inner text objects.")
+
+(defvar evil-outer-text-objects-map (make-sparse-keymap)
+ "Keymap for outer text objects.")
+
+(defvar evil-window-map (make-sparse-keymap)
+ "Keymap for window-related commands.")
+
+(evil-define-local-var evil-input-method nil
+ "Input method used in Insert state and Emacs state.")
+
+;;; Visual state
+
+(evil-define-local-var evil-visual-beginning nil
+ "The beginning of the Visual selection, a marker.")
+
+(evil-define-local-var evil-visual-end nil
+ "The end of the Visual selection, a marker.")
+
+(evil-define-local-var evil-visual-point nil
+ "The position of point in Visual state, a marker.")
+
+(evil-define-local-var evil-visual-mark nil
+ "The position of mark in Visual state, a marker.")
+
+(evil-define-local-var evil-visual-previous-mark nil
+ "The position of mark before Visual state, a marker.")
+
+(evil-define-local-var evil-visual-selection nil
+ "The kind of Visual selection.
+This is a selection as defined by `evil-define-visual-selection'.")
+
+;; we could infer the direction by comparing `evil-visual-mark'
+;; and `evil-visual-point', but destructive operations may
+;; displace the markers
+(evil-define-local-var evil-visual-direction 0
+ "Whether point follows mark in Visual state.
+Negative if point precedes mark, otherwise positive.
+See also the function `evil-visual-direction'.")
+
+(evil-define-local-var evil-visual-properties nil
+ "Property list of miscellaneous Visual properties.")
+
+(evil-define-local-var evil-visual-region-expanded nil
+ "Whether the region matches the Visual selection.
+That is, whether the positions of point and mark have been
+expanded to coincide with the selection's boundaries.
+This makes the selection available to functions acting
+on Emacs' region.")
+
+(evil-define-local-var evil-visual-overlay nil
+ "Overlay for highlighting the Visual selection.
+Not used for blockwise selections, in which case
+see `evil-visual-block-overlays'.")
+
+(evil-define-local-var evil-visual-block-overlays nil
+ "Overlays for Visual Block selection, one for each line.
+They are reused to minimize flicker.")
+
+(defvar evil-visual-alist nil
+ "Association list of Visual selection functions.
+Elements have the form (NAME . FUNCTION).")
+
+(evil-define-local-var evil-visual-x-select-timer nil
+ "Timer for updating the X selection in visual state.")
+
+(defvar evil-visual-x-select-timeout 0.1
+ "Time in seconds for the update of the X selection.")
+
+(declare-function origami-open-all-nodes "origami.el")
+(declare-function origami-close-all-nodes "origami.el")
+(declare-function origami-toggle-node "origami.el")
+(declare-function origami-open-node "origami.el")
+(declare-function origami-open-node-recursively "origami.el")
+(declare-function origami-close-node "origami.el")
+
+(defvar evil-fold-list
+ `(((hs-minor-mode)
+ :open-all hs-show-all
+ :close-all hs-hide-all
+ :toggle hs-toggle-hiding
+ :open hs-show-block
+ :open-rec nil
+ :close hs-hide-block)
+ ((hide-ifdef-mode)
+ :open-all show-ifdefs
+ :close-all hide-ifdefs
+ :toggle nil
+ :open show-ifdef-block
+ :open-rec nil
+ :close hide-ifdef-block)
+ ((outline-mode
+ outline-minor-mode
+ org-mode
+ markdown-mode)
+ :open-all show-all
+ :close-all ,(lambda ()
+ (with-no-warnings (hide-sublevels 1)))
+ :toggle outline-toggle-children
+ :open ,(lambda ()
+ (with-no-warnings
+ (show-entry)
+ (show-children)))
+ :open-rec show-subtree
+ :close hide-subtree)
+ ((origami-mode)
+ :open-all ,(lambda () (origami-open-all-nodes (current-buffer)))
+ :close-all ,(lambda () (origami-close-all-nodes (current-buffer)))
+ :toggle ,(lambda () (origami-toggle-node (current-buffer) (point)))
+ :open ,(lambda () (origami-open-node (current-buffer) (point)))
+ :open-rec ,(lambda () (origami-open-node-recursively (current-buffer) (point)))
+ :close ,(lambda () (origami-close-node (current-buffer) (point))))
+ ((vdiff-mode)
+ :open-all vdiff-open-all-folds
+ :close-all vdiff-close-all-folds
+ :toggle nil
+ :open ,(lambda () (call-interactively 'vdiff-open-fold))
+ :open-rec ,(lambda () (call-interactively 'vdiff-open-fold))
+ :close ,(lambda () (call-interactively 'vdiff-close-fold))))
+ "Actions to be performed for various folding operations.
+
+The value should be a list of fold handlers, were a fold handler has
+the format:
+
+ ((MODES) PROPERTIES)
+
+MODES acts as a predicate, containing the symbols of all major or
+minor modes for which the handler should match. For example:
+
+ '((outline-minor-mode org-mode) ...)
+
+would match for either outline-minor-mode or org-mode, even though the
+former is a minor mode and the latter is a major.
+
+PROPERTIES specifies possible folding actions and the functions to be
+applied in the event of a match on one (or more) of the MODES; the
+supported properties are:
+
+ - `:open-all'
+ Open all folds.
+ - `:close-all'
+ Close all folds.
+ - `:toggle'
+ Toggle the display of the fold at point.
+ - `:open'
+ Open the fold at point.
+ - `:open-rec'
+ Open the fold at point recursively.
+ - `:close'
+ Close the fold at point.
+
+Each value must be a function. A value of `nil' will cause the action
+to be ignored for that respective handler. For example:
+
+ `((org-mode)
+ :close-all nil
+ :open ,(lambda ()
+ (show-entry)
+ (show-children))
+ :close hide-subtree)
+
+would ignore `:close-all' actions and invoke the provided functions on
+`:open' or `:close'.")
+
+;;; Ex
+
+(defvar evil-ex-map (make-sparse-keymap)
+ "Keymap for Ex.
+Key sequences bound in this map are immediately executed.")
+
+(defvar evil-ex-completion-map (make-sparse-keymap)
+ "Completion keymap for Ex.")
+
+(defvar evil-ex-initial-input nil
+ "Additional initial content of the ex command line.
+This content of this variable is appended to the ex command line
+if ex is started interactively.")
+
+(defvar evil-ex-shell-argument-initialized nil
+ "This variable is set to t if shell command completion has been initialized.
+See `evil-ex-init-shell-argument-completion'.")
+
+(defvar evil-ex-commands nil
+ "Association list of command bindings and functions.")
+
+(defvar evil-ex-history nil
+ "History of Ex commands.")
+
+(defvar evil-ex-current-buffer nil
+ "The buffer from which Ex was started.")
+
+(defvar evil-ex-expression nil
+ "The evaluation tree.")
+
+(defvar evil-ex-tree nil
+ "The syntax tree.")
+
+(defvar evil-ex-command nil
+ "The current Ex command.")
+
+(defvar evil-ex-previous-command nil
+ "The previously executed Ex command.")
+
+(defvar evil-ex-cmd nil
+ "The current Ex command string.")
+
+(defvar evil-ex-point nil
+ "The position of `point' when the ex command has been called.")
+
+(defvar evil-ex-range nil
+ "The current range of the Ex command.")
+
+(defvar evil-ex-bang nil
+ "The \"!\" argument of the current Ex command.")
+
+(defvar evil-ex-argument nil
+ "The current argument of the Ex command.")
+
+(defvar evil-ex-argument-handler nil
+ "The argument handler for the current Ex command.")
+
+(defvar evil-ex-argument-types nil
+ "Association list of argument handlers.")
+
+(defvar evil-previous-shell-command nil
+ "The last shell command.")
+
+;; Searching
+(defvar evil-ex-search-history nil
+ "The history for the search command.")
+
+(defvar evil-ex-search-direction nil
+ "The direction of the current search, either 'forward or 'backward.")
+
+(defvar evil-ex-search-count nil
+ "The count if the current search.")
+
+(defvar evil-ex-search-start-point nil
+ "The point where the search started.")
+
+(defvar evil-ex-search-overlay nil
+ "The overlay for the current search result.")
+
+(defvar evil-ex-search-pattern nil
+ "The last search pattern.")
+
+(defvar evil-ex-search-offset nil
+ "The last search offset.")
+
+(defvar evil-ex-search-match-beg nil
+ "The beginning position of the last match.")
+
+(defvar evil-ex-search-match-end nil
+ "The end position of the last match.")
+
+(defvar evil-ex-substitute-pattern nil
+ "The last substitute pattern.")
+
+(defvar evil-ex-substitute-replacement nil
+ "The last substitute replacement.")
+
+(defvar evil-ex-substitute-flags nil
+ "The last substitute flags.")
+
+(defvar evil-ex-substitute-current-replacement nil
+ "The actual replacement.")
+
+(defvar evil-ex-last-was-search nil
+ "Non-nil if the previous was a search.
+Otherwise the previous command is assumed as substitute.")
+
+;;; Command line window
+
+(defvar evil-command-window-current-buffer nil
+ "The buffer from which the command line window was called.")
+
+(evil-define-local-var evil-command-window-execute-fn nil
+ "The command to execute when exiting the command line window.")
+
+(evil-define-local-var evil-command-window-cmd-key nil
+ "The key for the command that opened the command line window (:, /, or ?).")
+
+;; The lazy-highlighting framework.
+(evil-define-local-var evil-ex-active-highlights-alist nil
+ "An alist of currently active highlights.")
+
+(evil-define-local-var evil-ex-hl-update-timer nil
+ "Time used for updating highlights.")
+
+(defvar evil-ex-search-keymap (make-sparse-keymap)
+ "Keymap used in ex-search-mode.")
+(define-key evil-ex-search-keymap [escape] 'abort-recursive-edit)
+(set-keymap-parent evil-ex-search-keymap minibuffer-local-map)
+
+(defconst evil-version
+ (eval-when-compile
+ (with-temp-buffer
+ (let ((dir (file-name-directory (or load-file-name
+ byte-compile-current-file))))
+ ;; git repository
+ (if (and (file-exists-p (concat dir "/.git"))
+ (ignore-errors
+ (zerop (call-process "git" nil '(t nil) nil
+ "rev-parse"
+ "--short" "HEAD"))))
+ (progn
+ (goto-char (point-min))
+ (concat "evil-git-"
+ (buffer-substring (point-min)
+ (line-end-position))))
+ ;; no repo, use plain version
+ "1.2.13"))))
+ "The current version of Evil")
+
+(defun evil-version ()
+ (interactive)
+ (message "Evil version %s" evil-version))
+
+(provide 'evil-vars)
+
+;;; evil-vars.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil-vars.elc b/.emacs.d/elpa/evil-20171210.501/evil-vars.elc
new file mode 100644
index 0000000..93c1e4c
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil-vars.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil.el b/.emacs.d/elpa/evil-20171210.501/evil.el
new file mode 100644
index 0000000..01b9bc1
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil.el
@@ -0,0 +1,146 @@
+;;; evil.el --- extensible vi layer
+
+;; The following list of authors was kept up to date until the beginning of
+;; 2017, when evil moved under new maintainers. For authors since then, please
+;; consult the git logs.
+
+;; Alessandro Piras <laynor at gmail.com>
+;; Alexander Baier <alexander.baier at mailbox.org>
+;; Antono Vasiljev <antono.vasiljev at gmail.com>
+;; Bailey Ling <bling at live.ca>
+;; Barry O'Reilly <gundaetiapo at gmail.com>
+;; Christoph Lange <langec at web.de>
+;; Daniel Reiter <danieltreiter at gmail.com>
+;; Eivind Fonn <evfonn at gmail.com>
+;; Emanuel Evans <emanuel.evans at gmail.com>
+;; Eric Siegel <siegel.eric at gmail.com>
+;; Eugene Yaremenko <w3techplayground at gmail.com>
+;; Frank Fischer <frank-fischer at shadow-soft.de>
+;; Frank Terbeck <ft at bewatermyfriend.org>
+;; Gordon Gustafson <gordon3.14 at gmail.com>
+;; Herbert Jones <jones.herbert at gmail.com>
+;; Jonas Bernoulli <jonas at bernoul.li>
+;; Jonathan Claggett <jclaggett at lonocloud.com>
+;; José A. Romero L. <escherdragon at gmail.com>
+;; Justin Burkett <justin at burkett.cc>
+;; Lars Andersen <expez at expez.com>
+;; Lintaro Ina <tarao.gnn at gmail.com>
+;; Lukasz Wrzosek <wrzoski at mail.com>
+;; Marian Schubert <maio at netsafe.cz>
+;; Matthew Malcomson <>
+;; Michael Markert <markert.michael at googlemail.com>
+;; Mike Gerwitz <mikegerwitz at gnu.org>
+;; Nikolai Weibull <now at bitwi.se>
+;; phaebz <phaebz at gmail.com>
+;; ralesi <scio62 at gmail.com>
+;; Rodrigo Setti <rodrigosetti at gmail.com>
+;; Sanel Zukan <sanelz at gmail.com>
+;; Sarah Brofeldt <sarah at thinkmonster.(none)>
+;; Simon Hafner <hafnersimon at gmail.com>
+;; Stefan Wehr <mail at stefanwehr.de>
+;; Sune Simonsen <sune.simonsen at jayway.com>
+;; Thomas Hisch <thomas at opentech.at>
+;; Tim Harper <timcharper at gmail.com>
+;; Tom Willemse <tom at ryuslash.org>
+;; Trevor Murphy <trevor.m.murphy at gmail.com>
+;; Ulrich Müller <ulm at gentoo.org>
+;; Vasilij Schneidermann <v.schneidermann at gmail.com>
+;; Vegard Øye <vegard_oye at hotmail.com>
+;; Winfred Lu <winfred.lu at gmail.com>
+;; Wolfgang Jenkner <wjenkner at inode.at>
+;; Xiao Hanyu <xiaohanyu1988 at gmail.com>
+;; York Zhao <yzhao at telecor.com>
+
+;; Maintainers: The emacs-evil team. <https://github.com/orgs/emacs-evil/people>
+;; To get in touch, please use the bug tracker or the
+;; mailing list (see below).
+;; Created: 2011-03-01
+;; Version: 1.2.13
+;; Keywords: emulation, vim
+;; URL: https://github.com/emacs-evil/evil
+;; Repository: https://github.com/emacs-evil/evil.git
+;; EmacsWiki: http://www.emacswiki.org/emacs/Evil
+;; Bug tracker: https://github.com/emacs-evil/evil/issues
+;; If you have bug reports, suggestions or patches, please
+;; create an issue at the bug tracker (open for everyone).
+;; Other discussions (tips, extensions) go to the mailing list.
+;; Mailing list: <implementations-list at lists.ourproject.org>
+;; Subscribe: http://tinyurl.com/implementations-list
+;; Newsgroup: nntp://news.gmane.org/gmane.emacs.vim-emulation
+;; Archives: http://dir.gmane.org/gmane.emacs.vim-emulation
+;; You don't have to subscribe to post; we usually reply
+;; within a few days and CC our replies back to you.
+;;
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This file is part of Evil.
+;;
+;; Evil 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.
+;;
+;; Evil 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 Evil. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Evil is an extensible vi layer for Emacs. It emulates the main
+;; features of Vim, and provides facilities for writing custom
+;; extensions.
+;;
+;; Evil lives in a Git repository. To obtain Evil, do
+;;
+;; git clone git://github.com/emacs-evil/evil.git
+;;
+;; Move Evil to ~/.emacs.d/evil (or somewhere else in the `load-path').
+;; Then add the following lines to ~/.emacs:
+;;
+;; (add-to-list 'load-path "~/.emacs.d/evil")
+;; (require 'evil)
+;; (evil-mode 1)
+;;
+;; Evil requires undo-tree.el for linear undo and undo branches:
+;;
+;; http://www.emacswiki.org/emacs/UndoTree
+;;
+;; Otherwise, Evil uses regular Emacs undo.
+;;
+;; Evil requires `goto-last-change' and `goto-last-change-reverse'
+;; function for the corresponding motions g; g, as well as the
+;; last-change-register `.'. One package providing these functions is
+;; goto-chg.el:
+;;
+;; http://www.emacswiki.org/emacs/GotoChg
+;;
+;; Without this package the corresponding motions will raise an error.
+
+;;; Code:
+
+(require 'evil-vars)
+(require 'evil-common)
+(require 'evil-core)
+(require 'evil-states)
+(require 'evil-repeat)
+(require 'evil-macros)
+(require 'evil-search)
+(require 'evil-ex)
+(require 'evil-digraphs)
+(require 'evil-types)
+(require 'evil-commands)
+(require 'evil-jumps)
+(require 'evil-maps)
+(require 'evil-integration)
+
+(run-hooks 'evil-after-load-hook)
+
+(provide 'evil)
+
+;;; evil.el ends here
diff --git a/.emacs.d/elpa/evil-20171210.501/evil.elc b/.emacs.d/elpa/evil-20171210.501/evil.elc
new file mode 100644
index 0000000..fc3a1c6
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-20171210.501/evil.info b/.emacs.d/elpa/evil-20171210.501/evil.info
new file mode 100644
index 0000000..6d9815c
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/evil.info
@@ -0,0 +1,1215 @@
+This is evil.info, produced by makeinfo version 5.2 from evil.texi.
+
+This manual is for Evil (version 0.1 of 2011-07-30), an extensible vi
+layer for Emacs.
+
+ Copyright © 2011 Frank Fischer and Vegard Øye.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License".
+
+ The Evil team thanks everyone at gmane.emacs.vim-emulation for their
+feedback and contributions.
+INFO-DIR-SECTION Emacs
+START-INFO-DIR-ENTRY
+* Evil: (evil). Extensible vi layer for Emacs.
+END-INFO-DIR-ENTRY
+
+
+File: evil.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir)
+
+Evil
+****
+
+This is the manual for Evil, an extensible vi layer for Emacs.
+
+* Menu:
+
+* Overview::
+* Settings::
+* Keymaps::
+* Hooks::
+* Macros::
+* Other internals::
+* GNU Free Documentation License::
+
+
+File: evil.info, Node: Overview, Next: Settings, Up: Top
+
+1 Overview
+**********
+
+Evil is an extensible vi layer for Emacs. It emulates the main features
+of Vim,(1) turning Emacs into a modal editor. Like Emacs in general,
+Evil is extensible in Emacs Lisp.
+
+* Menu:
+
+* Installation::
+* Modes and states::
+
+ ---------- Footnotes ----------
+
+ (1) Vim is the most popular version of "vi", a modal text editor with
+many implementations. Vim also adds some functions of its own, like
+Visual selection and text objects. For more information, see:
+<http://www.vim.org/>
+
+
+File: evil.info, Node: Installation, Next: Modes and states, Up: Overview
+
+1.1 Installation
+================
+
+Evil lives in a Git repository. To download Evil, do:
+
+ git clone https://github.com/emacs-evil/evil.git
+
+Move Evil to '~/.emacs.d/evil'. Then add the following lines to
+'~/.emacs':
+
+ (add-to-list 'load-path "~/.emacs.d/evil")
+ (require 'evil)
+ (evil-mode 1)
+
+Evil requires 'undo-tree.el' to provide linear undo and undo branches.
+It is available from EmacsWiki.(1) (A copy of 'undo-tree.el' is also
+included in the Git repository.)
+
+ ---------- Footnotes ----------
+
+ (1) <http://www.emacswiki.org/emacs/UndoTree>
+
+
+File: evil.info, Node: Modes and states, Prev: Installation, Up: Overview
+
+1.2 Modes and states
+====================
+
+The next time Emacs is started, it will come up in "Normal state",
+denoted by '<N>' on the mode line. This is where the main vi bindings
+are defined. Note that you can always disable Normal state with 'C-z',
+which switches to an "Emacs state" (denoted by '<E>') in which vi keys
+are completely disabled. Press 'C-z' again to switch back to Normal
+state.
+
+ Evil uses the term "state" for what is called a "mode" in vi, since
+"mode" already has its own meaning in Emacs. Evil defines a number of
+states, such as Normal state ('<N>'), Insert state ('<I>'), Visual state
+('<V>'), Replace state ('<R>'), Operator-Pending state ('<O>'), Motion
+state ('<M>') and Emacs state ('<E>'). Each state has its own keymaps
+and customization variables.
+
+ Meanwhile, a "mode" in Emacs is a set of key bindings for editing a
+certain sort of text, like 'emacs-lisp-mode' for Emacs Lisp. Modes may
+include custom bindings for Evil states.
+
+
+File: evil.info, Node: Settings, Next: Keymaps, Prev: Overview, Up: Top
+
+2 Settings
+**********
+
+Evil's behavior can be adjusted by setting various variables. The
+current values may be inspected by doing 'M-x customize-group RET evil
+RET'.
+
+ To change the value of a variable, add a 'setq' form to '~/.emacs',
+preferably before Evil is loaded:(1)
+
+ (setq evil-shift-width 8)
+ ;; Load Evil
+ (require 'evil) ...
+
+Note that if a variable is buffer-local, you must use 'setq-default'
+instead of 'setq' to change its global value.
+
+ -- Variable: evil-auto-indent
+ Whether the current line is indented when entering Insert state.
+ If 't' (the default), then the line is indented. If 'nil', then
+ the line is not indented. Buffer-local.
+
+ -- Variable: evil-shift-width
+ The number of columns a line is shifted by the commands '>' and
+ '<'.
+
+ -- Variable: evil-repeat-move-cursor
+ If 't' (the default), then repeating a command with '.' may change
+ the position of the cursor. If 'nil', then the original position
+ is preserved.
+
+ -- Variable: evil-find-skip-newlines
+ If 't', then 'f', 'F', 't' and 'T' may skip over newlines to find a
+ character. If 'nil' (the default), then they are restricted to the
+ current line.
+
+ -- Variable: evil-move-cursor-back
+ If 't' (the default), then the cursor moves backwards when exiting
+ Insert state. If 'nil', then the cursor does not move.
+
+ -- Variable: evil-want-fine-undo
+ If 't', then a change-based action like 'cw' may be undone in
+ several steps. If 'nil' (the default), then it is undone in one
+ step.
+
+ -- Variable: evil-regexp-search
+ If 't' (the default), then '/' and '?' use regular expressions for
+ searching. If 'nil', they use plain text.
+
+ -- Variable: evil-search-wrap
+ If 't' (the default), then '/' and '?' wrap the search around the
+ buffer. If 'nil', then they stop at buffer boundaries.
+
+ -- Variable: evil-flash-delay
+ The number of seconds to flash search matches when pressing 'n' and
+ 'N'.
+
+ -- Variable: evil-want-C-i-jump
+ If 't' (the default), then 'C-i' jumps forwards in the jump list.
+ If 'nil', then 'C-i' inserts a tab.
+
+ -- Variable: evil-want-C-u-scroll
+ If 't', then 'C-u' scrolls the buffer. If 'nil' (the default),
+ then 'C-u' begins a numeric prefix argument.
+
+* Menu:
+
+* The cursor::
+* The initial state::
+
+ ---------- Footnotes ----------
+
+ (1) Strictly speaking, the order only matters if the variable affects
+the way Evil is loaded. This is the case with some of the 'evil-want-'
+variables.
+
+
+File: evil.info, Node: The cursor, Next: The initial state, Up: Settings
+
+2.1 The cursor
+==============
+
+A state may change the cursor's appearance. The cursor settings are
+stored in the variables below, which may contain a cursor type as per
+the 'cursor-type' variable, a color string as passed to the
+'set-cursor-color' function, a zero-argument function for changing the
+cursor, or a list of the above. For example, the following changes the
+cursor in Replace state to a red box:
+
+ (setq evil-replace-state-cursor '("red" box))
+
+If the state does not specify a cursor, 'evil-default-cursor' is used.
+
+ -- Variable: evil-default-cursor
+ The default cursor.
+
+ -- Variable: evil-normal-state-cursor
+ The cursor for Normal state.
+
+ -- Variable: evil-insert-state-cursor
+ The cursor for Insert state.
+
+ -- Variable: evil-visual-state-cursor
+ The cursor for Visual state.
+
+ -- Variable: evil-replace-state-cursor
+ The cursor for Replace state.
+
+ -- Variable: evil-operator-state-cursor
+ The cursor for Operator-Pending state.
+
+ -- Variable: evil-motion-state-cursor
+ The cursor for Motion state.
+
+ -- Variable: evil-emacs-state-cursor
+ The cursor for Emacs state.
+
+
+File: evil.info, Node: The initial state, Prev: The cursor, Up: Settings
+
+2.2 The initial state
+=====================
+
+By default, a new buffer comes up in Normal state. This can be changed
+with the function 'evil-set-initial-state'.
+
+ -- Function: evil-set-initial-state mode state
+ Set the initial state for a buffer in which MODE is active to
+ STATE. MODE should be a major mode such as 'text-mode', although
+ minor modes work as well.
+
+
+File: evil.info, Node: Keymaps, Next: Hooks, Prev: Settings, Up: Top
+
+3 Keymaps
+*********
+
+Evil's key bindings are stored in a number of keymaps. Each state has a
+"global keymap", where the default key bindings for the state are
+stored. For example, the global keymap for Normal state is
+'evil-normal-state-map', and the key bindings in this map are seen in
+all buffers that are currently in Normal state.
+
+ Keymaps are modified with the Emacs function 'define-key':
+
+ (define-key evil-normal-state-map "w" 'foo)
+
+This binds the key 'w' to the command 'foo' in Normal state. The file
+'evil-maps.el' contains all the key bindings.
+
+ -- Variable: evil-normal-state-map
+ The global keymap for Normal state.
+
+ -- Variable: evil-insert-state-map
+ The global keymap for Insert state.
+
+ -- Variable: evil-visual-state-map
+ The global keymap for Visual state.
+
+ -- Variable: evil-replace-state-map
+ The global keymap for Replace state.
+
+ -- Variable: evil-operator-state-map
+ The global keymap for Operator-Pending state.
+
+ -- Variable: evil-motion-state-map
+ The global keymap for Motion state.
+
+Each state also has a "buffer-local keymap", which is specific to the
+current buffer and has precedence over the global keymap. These maps
+may be changed from a mode hook.
+
+ -- Variable: evil-normal-state-local-map
+ Buffer-local keymap for Normal state.
+
+ -- Variable: evil-insert-state-local-map
+ Buffer-local keymap for Insert state.
+
+ -- Variable: evil-visual-state-local-map
+ Buffer-local keymap for Visual state.
+
+ -- Variable: evil-replace-state-local-map
+ Buffer-local keymap for Replace state.
+
+ -- Variable: evil-operator-state-local-map
+ Buffer-local keymap for Operator-Pending state.
+
+ -- Variable: evil-motion-state-local-map
+ Buffer-local keymap for Motion state.
+
+* Menu:
+
+* 'evil-define-key'::
+
+
+File: evil.info, Node: 'evil-define-key', Up: Keymaps
+
+3.1 'evil-define-key'
+=====================
+
+Finally, Evil provides the function 'evil-define-key' for adding state
+bindings to a regular keymap.
+
+ -- Function: evil-define-key state keymap key def
+ In KEYMAP, create a binding from KEY to DEF in STATE. STATE is one
+ of 'normal', 'insert', 'visual', 'replace', 'operator' and
+ 'motion'. The other parameters are like those of 'define-key'.
+
+'evil-define-key' can be used to augment existing modes with state
+bindings, as well as create packages for custom bindings. For example,
+the following will create a minor mode 'foo-mode' with Normal state
+bindings for the keys 'w' and 'e':
+
+ (define-minor-mode foo-mode
+ "Foo mode."
+ :keymap (make-sparse-keymap))
+
+ (evil-define-key 'normal foo-mode-map "w" 'bar)
+ (evil-define-key 'normal foo-mode-map "e" 'baz)
+
+This minor mode can then be enabled in any buffers where the custom
+bindings are desired:
+
+ (add-hook 'text-mode-hook 'foo-mode) ; enable alongside 'text-mode'
+
+If the minor mode is put into its own file 'foo.el' with a '(provide
+'foo)' statement, it becomes an Emacs package.
+
+
+File: evil.info, Node: Hooks, Next: Macros, Prev: Keymaps, Up: Top
+
+4 Hooks
+*******
+
+A "hook" is a list of functions to execute. Hooks are modified with the
+Emacs function 'add-hook'. Evil provides entry and exit hooks for all
+of its states.
+
+ -- Variable: evil-normal-state-entry-hook
+ Run when entering Normal state.
+
+ -- Variable: evil-normal-state-exit-hook
+ Run when exiting Normal state.
+
+ -- Variable: evil-insert-state-entry-hook
+ Run when entering Insert state.
+
+ -- Variable: evil-insert-state-exit-hook
+ Run when exiting Insert state.
+
+ -- Variable: evil-visual-state-entry-hook
+ Run when entering Visual state.
+
+ -- Variable: evil-visual-state-exit-hook
+ Run when exiting Visual state.
+
+ -- Variable: evil-replace-state-entry-hook
+ Run when entering Replace state.
+
+ -- Variable: evil-replace-state-exit-hook
+ Run when exiting Replace state.
+
+ -- Variable: evil-operator-state-entry-hook
+ Run when entering Operator-Pending state.
+
+ -- Variable: evil-operator-state-exit-hook
+ Run when exiting Operator-Pending state.
+
+ -- Variable: evil-motion-state-entry-hook
+ Run when entering Motion state.
+
+ -- Variable: evil-motion-state-exit-hook
+ Run when exiting Motion state.
+
+When these hooks are run, the variables 'evil-next-state' and
+'evil-previous-state' hold information about the states being switched
+to and from.
+
+ -- Variable: evil-next-state
+ The state being switched to.
+
+ -- Variable: evil-previous-state
+ The state being switched from.
+
+
+File: evil.info, Node: Macros, Next: Other internals, Prev: Hooks, Up: Top
+
+5 Macros
+********
+
+Evil is implemented in terms of reusable macros. Package writers can
+use these to define new commands.
+
+* Menu:
+
+* Motions::
+* Operators::
+* Text objects::
+* Types::
+* States::
+
+
+File: evil.info, Node: Motions, Next: Operators, Up: Macros
+
+5.1 Motions
+===========
+
+A "motion" is a command which moves the cursor, such as 'w' and 'e'.
+Motions are defined with the macro 'evil-define-motion'. Motions not
+defined in this way should be declared with 'evil-declare-motion'.
+
+ -- Function: evil-declare-motion command
+ Declare COMMAND to be a motion. This ensures that it works
+ properly in Visual state.
+
+ -- Macro: evil-define-motion motion (count args...) doc keyword-args...
+ body...
+ Define a movement command MOTION. A motion can have any number of
+ arguments, but the first argument, if any, has a predefined meaning
+ as the COUNT. It is a positive or negative number, or 'nil'. The
+ argument list is followed by the documentation string DOC, which is
+ followed by optional keyword arguments:
+
+ ':type TYPE'
+ The TYPE determines how the motion works after an operator.
+ If TYPE is 'inclusive', then the ending position is included
+ in the motion range. If TYPE is 'line', then the range is
+ expanded to linewise positions. If TYPE is 'block', then the
+ range is blockwise. The default is 'exclusive', which means
+ that the range is used as-is.
+
+ ':jump JUMP'
+ If JUMP is 't', then the previous position is stored in the
+ jump list so it can be restored with 'C-o'. The default is
+ 'nil'.
+
+ The keyword arguments are followed by the BODY, which is where the
+ motion's behavior is defined. For instance:
+
+ (evil-define-motion foo-forward (count)
+ "Move to the right by COUNT characters."
+ :type inclusive
+ (forward-char (or count 1)))
+
+ For more examples, you can view the source code for any command
+ with 'C-h k'. For instance, 'evil-goto-line' may be viewed by
+ typing 'C-h k G' and following the file link.
+
+
+File: evil.info, Node: Operators, Next: Text objects, Prev: Motions, Up: Macros
+
+5.2 Operators
+=============
+
+An "operator" is a command which acts on the text moved over by a
+motion, such as 'c', 'd' and 'y'. Operators are defined with the macro
+'evil-define-operator'.
+
+ -- Macro: evil-define-operator operator (beg end type args...) doc
+ keyword-args... body...
+ Define an operator command OPERATOR. An operator must have at
+ least two or three arguments, which have predefined meanings. BEG
+ is the beginning position, END is the ending position, and TYPE, if
+ given, is the type of the motion range. The argument list is
+ followed by the documentation string DOC, which is followed by
+ optional keyword arguments:
+
+ ':type TYPE'
+ Make the input range be a certain TYPE. For example, an
+ operator which only works with whole lines may set TYPE to
+ 'line'.
+
+ ':motion MOTION'
+ Use the motion MOTION instead of reading one from the
+ keyboard. This does not affect the behavior in Visual state,
+ where the selection boundaries are used instead.
+
+ ':repeat REPEAT'
+ If REPEAT is 't' (the default), then '.' will repeat the
+ operator. If REPEAT is 'nil', then the operator will not be
+ repeated.
+
+ ':move-point MOVE-POINT'
+ If MOVE-POINT is 't' (the default), then the cursor is
+ positioned at the beginning of the range. If MOVE-POINT is
+ 'nil', then the original position is preserved.
+
+ ':keep-visual KEEP-VISUAL'
+ If KEEP-VISUAL is 't', then the selection is not disabled when
+ the operator is run in Visual state; it is up to the operator
+ to do this. The default is 'nil', which means that Visual
+ state is exited automatically.
+
+ The keyword arguments are followed by the BODY, which is where the
+ operator's actions on BEG and END are defined. For example,
+ 'evil-rot13', which is bound to 'g?' and performs ROT13 encryption
+ on the text, may be defined as:
+
+ (evil-define-operator evil-rot13 (beg end)
+ "ROT13 encrypt text."
+ (rot13-region beg end))
+
+ Pressing 'g?w' will encrypt a word by calling 'rot13-region' on the
+ text moved over by the 'w' motion.
+
+
+File: evil.info, Node: Text objects, Next: Types, Prev: Operators, Up: Macros
+
+5.3 Text objects
+================
+
+A "text object" is a special kind of motion which sets a beginning
+position as well as an ending position, such as 'iw' and 'a('. In
+Visual state, text objects alter both ends of the selection. Text
+objects are defined with the macro 'evil-define-text-object'.
+
+ -- Macro: evil-define-text-object object (count args...) doc
+ keyword-args... body...
+ Define a text object OBJECT. The first argument has a predefined
+ meaning as the COUNT: it is a positive or negative number. The
+ argument list is followed by the documentation string DOC, which is
+ followed by optional keyword arguments:
+
+ ':type TYPE'
+ Use the type TYPE after an operator. In Visual state, this is
+ the type of the selection.
+
+ ':extend-selection EXTEND-SELECTION'
+ If EXTEND-SELECTION is 't' (the default), then the text object
+ always enlarges the current selection. If 'nil', then the
+ object replaces the selection.
+
+ The keyword arguments are followed by the BODY, which should
+ evaluate to a list '(BEG END)' of two positions in the buffer. For
+ example, a text object which selects three characters following the
+ current position could be defined as:
+
+ (evil-define-text-object foo (count)
+ "Select three characters."
+ (list (point) (+ (point) 3)))
+
+Evil provides several functions which return a list of positions, for
+use in the definition of a text object. These functions follow the rule
+that a positive COUNT selects text after the current position, while a
+negative COUNT selects text before it.
+
+ -- Function: evil-inner-object-range count forward backward
+ Return a text range '(BEG END)' of COUNT "inner" text objects
+ (e.g., 'iw', 'is'). FORWARD is a function which moves to the end
+ of an object, and BACKWARD is a function which moves to the
+ beginning.
+
+ -- Function: evil-an-object-range count forward backward
+ Return a text range '(BEG END)' of COUNT text objects with
+ whitespace (e.g., 'aw', 'as'). FORWARD is a function which moves
+ to the end of an object, and BACKWARD is a function which moves to
+ the beginning.
+
+ -- Function: evil-paren-range count open close &optional exclusive
+ Return a text range '(BEG END)' of COUNT delimited blocks (e.g.,
+ 'i(', 'a('). OPEN and CLOSE are characters. If EXCLUSIVE is
+ non-nil, then the delimiters are excluded from the range. This
+ function uses Emacs' syntax table and is only applicable for
+ single-character delimiters; use 'evil-regexp-range' to match
+ multiple characters.
+
+ -- Function: evil-regexp-range count open close &optional exclusive
+ Return a text range '(BEG END)' of COUNT delimited blocks (e.g.,
+ 'it', 'at'). OPEN and CLOSE are regular expressions. If EXCLUSIVE
+ is non-nil, then the delimiters are excluded from the range.
+
+
+File: evil.info, Node: Types, Next: States, Prev: Text objects, Up: Macros
+
+5.4 Types
+=========
+
+A "type" is a transformation on a pair of buffer positions. Evil
+defines the types 'exclusive', 'inclusive', 'line' and 'block', which
+are used for motion ranges and Visual selection. Types are defined with
+the macro 'evil-define-type'.
+
+ -- Macro: evil-define-type type doc keyword-args...
+ Define a type TYPE, described by the documentation string DOC.
+ Then follows keyword arguments:
+
+ ':expand EXPAND'
+ A function which takes two buffer positions and returns a list
+ '(BEG END)' of expanded positions.
+
+ ':contract CONTRACT'
+ A function which takes two expanded buffer positions and
+ returns a list '(BEG END)' of unexpanded positions. Optional.
+
+ ':normalize NORMALIZE'
+ A function which takes two unexpanded buffer positions and
+ returns a list '(BEG END)' of adjusted positions. Optional.
+
+ ':injective INJECTIVE'
+ If 't' (the default), then expansion is one-to-one - i.e.,
+ EXPAND followed by CONTRACT always returns the original
+ positions. If 'nil', then several positions may expand to the
+ same (for example, the 'line' type is one-to-many as it
+ expands to the containing lines).
+
+ Further keywords and functions may be specified. These are
+ understood to be transformations on buffer positions, like EXPAND
+ and CONTRACT.
+
+
+File: evil.info, Node: States, Prev: Types, Up: Macros
+
+5.5 States
+==========
+
+States are defined with the macro 'evil-define-state'. The macro
+defines the necessary hooks, keymaps and variables for a state, as well
+as a toggle function 'evil-STATE-state' for entering the state, and a
+predicate function 'evil-STATE-state-p' which returns 't' when the state
+is active, and 'nil' otherwise.
+
+ -- Macro: evil-define-state state doc keyword-args... body...
+ Define an Evil state STATE, described by the documentation string
+ DOC. Then follows optional keyword arguments:
+
+ ':tag TAG'
+ Mode line indicitor, e.g., '"<T>"'.
+ ':message MESSAGE'
+ String shown in the echo area.
+ ':cursor CURSOR'
+ Cursor specification.
+ ':enable ENABLE'
+ List of other modes and states to enable. A state may enable
+ another state's keymaps in addition to its own.
+
+ This is followed the BODY, which is executed whenever the state is
+ enabled or disabled. The state's predicate function may be used to
+ distinguish between the two.
+
+
+File: evil.info, Node: Other internals, Next: GNU Free Documentation License, Prev: Macros, Up: Top
+
+6 Other internals
+*****************
+
+* Menu:
+
+* Command properties::
+
+
+File: evil.info, Node: Command properties, Up: Other internals
+
+6.1 Command properties
+======================
+
+Evil defines "command properties" to store information about commands,
+such as whether they should be repeated. A command property is a
+':KEYWORD' with an associated value, e.g., ':repeat nil'.
+
+ -- Function: evil-add-command-properties command &rest properties
+ Add PROPERTIES to COMMAND. The properties should be specified as a
+ list of keywords and values:
+
+ (evil-add-command-properties 'my-command :repeat t)
+
+ -- Function: evil-set-command-properties command &rest properties
+ Like 'evil-add-command-properties', but resets all previous
+ properties.
+
+ -- Function: evil-get-command-property command property
+ Return the value of a command property.
+
+ -- Macro: evil-define-command command (args...) doc keyword-args...
+ body...
+ Define a command with command properties KEYWORD-ARGS.
+
+For setting repeat properties, Evil provides the following functions:
+
+ -- Function: evil-declare-repeat command
+ Declare COMMAND to be repeatable.
+
+ -- Function: evil-declare-not-repeat command
+ Declare COMMAND to be nonrepeatable.
+
+ -- Function: evil-declare-change-repeat command
+ Declare COMMAND to be repeatable by buffer changes rather than
+ keystrokes.
+
+
+File: evil.info, Node: GNU Free Documentation License, Prev: Other internals, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+
+Tag Table:
+Node: Top819
+Node: Overview1092
+Ref: Overview-Footnote-11440
+Node: Installation1668
+Ref: Installation-Footnote-12272
+Node: Modes and states2322
+Node: Settings3375
+Ref: Settings-Footnote-15826
+Node: The cursor5983
+Node: The initial state7188
+Node: Keymaps7647
+Node: 'evil-define-key'9511
+Node: Hooks10697
+Node: Macros12219
+Node: Motions12499
+Node: Operators14436
+Node: Text objects16769
+Node: Types19782
+Node: States21264
+Node: Other internals22363
+Node: Command properties22540
+Node: GNU Free Documentation License23867
+
+End Tag Table
+
+
+Local Variables:
+coding: iso-8859-1
+End:
diff --git a/.emacs.d/elpa/evil-20171210.501/fdl-1.3.info b/.emacs.d/elpa/evil-20171210.501/fdl-1.3.info
new file mode 100644
index 0000000..be77015
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/fdl-1.3.info
@@ -0,0 +1,484 @@
+This is fdl-1.3.info, produced by makeinfo version 5.2 from
+fdl-1.3.texi.
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+
+Tag Table:
+
+End Tag Table
diff --git a/.emacs.d/elpa/evil-20171210.501/macros.info b/.emacs.d/elpa/evil-20171210.501/macros.info
new file mode 100644
index 0000000..4febc11
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/macros.info
@@ -0,0 +1,7 @@
+This is macros.info, produced by makeinfo version 5.2 from macros.texi.
+
+
+
+Tag Table:
+
+End Tag Table
diff --git a/.emacs.d/elpa/evil-20171210.501/version.info b/.emacs.d/elpa/evil-20171210.501/version.info
new file mode 100644
index 0000000..c8ed433
--- /dev/null
+++ b/.emacs.d/elpa/evil-20171210.501/version.info
@@ -0,0 +1,8 @@
+This is version.info, produced by makeinfo version 5.2 from
+version.texi.
+
+
+
+Tag Table:
+
+End Tag Table
diff --git a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-autoloads.el b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-autoloads.el
new file mode 100644
index 0000000..fc8eb5a
--- /dev/null
+++ b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-autoloads.el
@@ -0,0 +1,42 @@
+;;; evil-leader-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
+
+;;;### (autoloads nil "evil-leader" "evil-leader.el" (23088 12599
+;;;;;; 430742 351000))
+;;; Generated autoloads from evil-leader.el
+
+(autoload 'global-evil-leader-mode "evil-leader" "\
+Global minor mode for <leader> support.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'evil-leader-mode "evil-leader" "\
+Minor mode to enable <leader> support.
+
+\(fn &optional ARG)" t nil)
+
+(autoload 'evil-leader/set-key "evil-leader" "\
+Bind `key' to command `def' in `evil-leader/default-map'.
+
+Key has to be readable by `read-kbd-macro' and `def' a command.
+Accepts further `key' `def' pairs.
+
+\(fn KEY DEF &rest BINDINGS)" t nil)
+
+(autoload 'evil-leader/set-key-for-mode "evil-leader" "\
+Create keybindings for major-mode `mode' with `key' bound to command `def'.
+
+See `evil-leader/set-key'.
+
+\(fn MODE KEY DEF &rest BINDINGS)" t nil)
+
+;;;***
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
+;;; evil-leader-autoloads.el ends here
diff --git a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-pkg.el b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-pkg.el
new file mode 100644
index 0000000..69db850
--- /dev/null
+++ b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-pkg.el
@@ -0,0 +1,2 @@
+;;; -*- no-byte-compile: t -*-
+(define-package "evil-leader" "20140606.543" "let there be <leader>" '((evil "0")) :commit "39f7014bcf8b36463e0c7512c638bda4bac6c2cf" :url "http://github.com/cofi/evil-leader" :keywords '("evil" "vim-emulation" "leader"))
diff --git a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.el b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.el
new file mode 100644
index 0000000..55bcf87
--- /dev/null
+++ b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.el
@@ -0,0 +1,213 @@
+;;; evil-leader.el --- let there be <leader>
+
+;; Copyright (C) 2011-2013 by Michael Markert
+;; Author: Michael Markert <markert.michael@googlemail.com>
+;; URL: http://github.com/cofi/evil-leader
+;; Package-Version: 20140606.543
+;; Git-Repository: git://github.com/cofi/evil-leader.git
+;; Created: 2011-09-13
+;; Version: 0.4.3
+;; Keywords: evil vim-emulation leader
+;; Package-Requires: ((evil "0"))
+
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; Known Bugs:
+;; See http://github.com/cofi/evil-leader/issues
+
+;; Install:
+;; (require 'evil-leader)
+
+;; Usage:
+;;
+;; (global-evil-leader-mode)
+;;
+;; to enable `evil-leader' in every buffer where `evil' is enabled.
+;;
+;; Note: You should enable `global-evil-leader-mode' before you enable
+;; `evil-mode', otherwise `evil-leader' won't be enabled in initial
+;; buffers (*scratch*, *Messages*, ...).
+;;
+;; Use `evil-leader/set-key' to bind keys in the leader map.
+;; For example:
+;;
+;; (evil-leader/set-key "e" 'find-file)
+;;
+;; You can also bind several keys at once:
+;;
+;; (evil-leader/set-key
+;; "e" 'find-file
+;; "b" 'switch-to-buffer
+;; "k" 'kill-buffer)
+;;
+;; The key map can of course be filled in several places.
+;;
+;; After you set up the key map you can access the bindings by pressing =<leader>=
+;; (default: \) and the key(s). E.g. \ e would call `find-file' to open a file.
+;;
+;; If you wish to change so you can customize =evil-leader/leader= or call
+;; `evil-leader/set-leader', e.g. (evil-leader/set-leader ",") to change it to
+;; ",".
+;; The leader has to be readable by `read-kbd-macro', so using Space as a
+;; prefix key would be (evil-leader/set-leader "<SPC>").
+;;
+;; Beginning with version 0.3 evil-leader has support for mode-local bindings:
+;;
+;; (evil-leader/set-key-for-mode 'emacs-lisp-mode "b" 'byte-compile-file)
+;;
+;; Again, you can bind several keys at once.
+;;
+;; A mode-local binding shadows a normal mode-independent binding.
+
+;;; Code:
+
+(require 'evil)
+
+(defvar evil-leader--default-map (make-sparse-keymap)
+ "Keymap used for mode-independent leader bindings.")
+
+(defvar evil-leader--mode-maps nil
+ "Alist of mode-local leader bindings, shadows mode-independent bindings.")
+
+;;; customization
+(defgroup evil-leader nil
+ "<leader> support for evil."
+ :group 'evil
+ :prefix 'evil-leader/)
+
+(defcustom evil-leader/leader "\\"
+ "The <leader> key, used to access keys defined by `evil-leader/set-key' in normal and visual state.
+Must be readable by `read-kbd-macro'. For example: \",\"."
+ :type 'string
+ :group 'evil-leader)
+
+(defcustom evil-leader/non-normal-prefix "C-"
+ "Prefix for leader-map in insert- and emacs-state.
+`evil-leader/in-all-states' has to be non-nil for this to be set.
+The combination has to be readable by `read-kbd-macro'."
+ :type 'string
+ :group 'evil-leader)
+
+(defcustom evil-leader/no-prefix-mode-rx nil
+ "List of regular expressions for mode names where `evil-leader/leader' is used regardless of the state.
+
+If the current major mode is matched by one of the regular expressions
+`evil-leader/leader' is installed in emacs/insert state without
+the prefix additionally to the prefixed key.
+
+`evil-leader/in-all-states' has to be non-nil for this setting to have any effect."
+ :type 'list
+ :group 'evil-leader)
+
+(defcustom evil-leader/in-all-states nil
+ "If is non-nil leader-map is accessible by <prefixed-leader> in emacs/insert state.
+
+<prefixed-leader> is `evil-leader/non-normal-prefix' + `evil-leader/leader'"
+ :type 'boolean
+ :group 'evil-leader)
+
+;;;###autoload
+(define-minor-mode global-evil-leader-mode
+ "Global minor mode for <leader> support."
+ nil nil nil
+ (if global-evil-leader-mode
+ (add-hook 'evil-local-mode-hook #'evil-leader-mode t)
+ (remove-hook 'evil-local-mode-hook #'evil-leader-mode t)))
+
+;;;###autoload
+(define-minor-mode evil-leader-mode
+ "Minor mode to enable <leader> support."
+ :init-value nil
+ :keymap nil
+ (let* ((prefixed (read-kbd-macro (concat evil-leader/non-normal-prefix evil-leader/leader)))
+ (no-prefix (read-kbd-macro evil-leader/leader))
+ (mode-map (cdr (assoc major-mode evil-leader--mode-maps)))
+ (map (or mode-map evil-leader--default-map))
+ (no-prefix-rx (if evil-leader/no-prefix-mode-rx
+ (mapconcat #'identity evil-leader/no-prefix-mode-rx "\\|")
+ nil)))
+ (if evil-leader-mode
+ (progn
+ (evil-normalize-keymaps)
+ (define-key evil-motion-state-local-map no-prefix map)
+ (define-key evil-normal-state-local-map no-prefix map)
+ (when evil-leader/in-all-states
+ (define-key evil-emacs-state-local-map prefixed map)
+ (define-key evil-insert-state-local-map prefixed map))
+ (when (and no-prefix-rx (string-match-p no-prefix-rx (symbol-name major-mode)))
+ (define-key evil-emacs-state-local-map no-prefix map)
+ (define-key evil-insert-state-local-map no-prefix map)))
+ (define-key evil-motion-state-local-map no-prefix nil)
+ (define-key evil-normal-state-local-map no-prefix nil)
+ (when evil-leader/in-all-states
+ (define-key evil-emacs-state-local-map prefixed nil)
+ (define-key evil-insert-state-local-map prefixed nil)
+ (when (and no-prefix-rx (string-match-p no-prefix-rx (symbol-name major-mode)))
+ (define-key evil-emacs-state-local-map no-prefix nil)
+ (define-key evil-insert-state-local-map no-prefix nil))))))
+
+(defun evil-leader/set-leader (key &optional prefix)
+ "Set leader key to `key' and non-normal-prefix to `prefix' and remove old bindings.
+
+Passing `nil' as `prefix' leaves prefix unchanged."
+ (let ((global-on global-evil-leader-mode)
+ (local-on evil-leader-mode))
+ (when local-on
+ (evil-leader-mode -1))
+ (when global-on
+ (global-evil-leader-mode -1))
+ (setq evil-leader/leader key)
+ (when prefix
+ (setq evil-leader/non-normal-prefix prefix))
+ (if global-on
+ (global-evil-leader-mode 1)
+ (when local-on
+ (evil-leader-mode 1)))))
+
+;;;###autoload
+(defun evil-leader/set-key (key def &rest bindings)
+ "Bind `key' to command `def' in `evil-leader/default-map'.
+
+Key has to be readable by `read-kbd-macro' and `def' a command.
+Accepts further `key' `def' pairs."
+ (interactive "kKey: \naCommand: ")
+ (evil-leader--def-keys evil-leader--default-map key def bindings))
+(put 'evil-leader/set-key 'lisp-indent-function 'defun)
+
+;;;###autoload
+(defun evil-leader/set-key-for-mode (mode key def &rest bindings)
+ "Create keybindings for major-mode `mode' with `key' bound to command `def'.
+
+See `evil-leader/set-key'."
+ (interactive "SMode: \nkKey: \naCommand: ")
+ (let ((mode-map (cdr (assoc mode evil-leader--mode-maps))))
+ (unless mode-map
+ (setq mode-map (make-sparse-keymap))
+ (set-keymap-parent mode-map evil-leader--default-map)
+ (push (cons mode mode-map) evil-leader--mode-maps))
+ (evil-leader--def-keys mode-map key def bindings)))
+(put 'evil-leader/set-key-for-mode 'lisp-indent-function 'defun)
+
+(defun evil-leader--def-keys (map key def bindings)
+ (while key
+ (define-key map (read-kbd-macro key) def)
+ (setq key (pop bindings)
+ def (pop bindings))))
+
+(provide 'evil-leader)
+;;; evil-leader.el ends here
diff --git a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.elc b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.elc
new file mode 100644
index 0000000..e7ec165
--- /dev/null
+++ b/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.elc
Binary files differ
diff --git a/.emacs.d/elpa/evil-leader-readme.txt b/.emacs.d/elpa/evil-leader-readme.txt
new file mode 100644
index 0000000..090d911
--- /dev/null
+++ b/.emacs.d/elpa/evil-leader-readme.txt
@@ -0,0 +1,46 @@
+Known Bugs:
+See http://github.com/cofi/evil-leader/issues
+
+Install:
+(require 'evil-leader)
+
+Usage:
+
+(global-evil-leader-mode)
+
+ to enable `evil-leader' in every buffer where `evil' is enabled.
+
+ Note: You should enable `global-evil-leader-mode' before you enable
+ `evil-mode', otherwise `evil-leader' won't be enabled in initial
+ buffers (*scratch*, *Messages*, ...).
+
+ Use `evil-leader/set-key' to bind keys in the leader map.
+ For example:
+
+(evil-leader/set-key "e" 'find-file)
+
+ You can also bind several keys at once:
+
+(evil-leader/set-key
+ "e" 'find-file
+ "b" 'switch-to-buffer
+ "k" 'kill-buffer)
+
+ The key map can of course be filled in several places.
+
+ After you set up the key map you can access the bindings by pressing =<leader>=
+ (default: \) and the key(s). E.g. \ e would call `find-file' to open a file.
+
+ If you wish to change so you can customize =evil-leader/leader= or call
+ `evil-leader/set-leader', e.g. (evil-leader/set-leader ",") to change it to
+ ",".
+ The leader has to be readable by `read-kbd-macro', so using Space as a
+ prefix key would be (evil-leader/set-leader "<SPC>").
+
+ Beginning with version 0.3 evil-leader has support for mode-local bindings:
+
+(evil-leader/set-key-for-mode 'emacs-lisp-mode "b" 'byte-compile-file)
+
+ Again, you can bind several keys at once.
+
+ A mode-local binding shadows a normal mode-independent binding.
diff --git a/.emacs.d/elpa/evil-readme.txt b/.emacs.d/elpa/evil-readme.txt
new file mode 100644
index 0000000..239636a
--- /dev/null
+++ b/.emacs.d/elpa/evil-readme.txt
@@ -0,0 +1,29 @@
+Evil is an extensible vi layer for Emacs. It emulates the main
+features of Vim, and provides facilities for writing custom
+extensions.
+
+Evil lives in a Git repository. To obtain Evil, do
+
+ git clone git://github.com/emacs-evil/evil.git
+
+Move Evil to ~/.emacs.d/evil (or somewhere else in the `load-path').
+Then add the following lines to ~/.emacs:
+
+ (add-to-list 'load-path "~/.emacs.d/evil")
+ (require 'evil)
+ (evil-mode 1)
+
+Evil requires undo-tree.el for linear undo and undo branches:
+
+ http://www.emacswiki.org/emacs/UndoTree
+
+Otherwise, Evil uses regular Emacs undo.
+
+Evil requires `goto-last-change' and `goto-last-change-reverse'
+function for the corresponding motions g; g, as well as the
+last-change-register `.'. One package providing these functions is
+goto-chg.el:
+
+ http://www.emacswiki.org/emacs/GotoChg
+
+Without this package the corresponding motions will raise an error.
diff --git a/.emacs.d/elpa/gnupg/pubring.kbx b/.emacs.d/elpa/gnupg/pubring.kbx
new file mode 100644
index 0000000..92b8c80
--- /dev/null
+++ b/.emacs.d/elpa/gnupg/pubring.kbx
Binary files differ
diff --git a/.emacs.d/elpa/gnupg/pubring.kbx~ b/.emacs.d/elpa/gnupg/pubring.kbx~
new file mode 100644
index 0000000..7f4e95d
--- /dev/null
+++ b/.emacs.d/elpa/gnupg/pubring.kbx~
Binary files differ
diff --git a/.emacs.d/elpa/gnupg/trustdb.gpg b/.emacs.d/elpa/gnupg/trustdb.gpg
new file mode 100644
index 0000000..155f0d5
--- /dev/null
+++ b/.emacs.d/elpa/gnupg/trustdb.gpg
Binary files differ
diff --git a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-autoloads.el b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-autoloads.el
new file mode 100644
index 0000000..4af982d
--- /dev/null
+++ b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-autoloads.el
@@ -0,0 +1,50 @@
+;;; goto-chg-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
+
+;;;### (autoloads nil "goto-chg" "goto-chg.el" (23088 12569 157409
+;;;;;; 757000))
+;;; Generated autoloads from goto-chg.el
+
+(autoload 'goto-last-change "goto-chg" "\
+Go to the point where the last edit was made in the current buffer.
+Repeat the command to go to the second last edit, etc.
+
+To go back to more recent edit, the reverse of this command, use \\[goto-last-change-reverse]
+or precede this command with \\[universal-argument] - (minus).
+
+It does not go to the same point twice even if there has been many edits
+there. I call the minimal distance between distinguishable edits \"span\".
+Set variable `glc-default-span' to control how close is \"the same point\".
+Default span is 8.
+The span can be changed temporarily with \\[universal-argument] right before \\[goto-last-change]:
+\\[universal-argument] <NUMBER> set current span to that number,
+\\[universal-argument] (no number) multiplies span by 4, starting with default.
+The so set span remains until it is changed again with \\[universal-argument], or the consecutive
+repetition of this command is ended by any other command.
+
+When span is zero (i.e. \\[universal-argument] 0) subsequent \\[goto-last-change] visits each and
+every point of edit and a message shows what change was made there.
+In this case it may go to the same point twice.
+
+This command uses undo information. If undo is disabled, so is this command.
+At times, when undo information becomes too large, the oldest information is
+discarded. See variable `undo-limit'.
+
+\(fn ARG)" t nil)
+
+(autoload 'goto-last-change-reverse "goto-chg" "\
+Go back to more recent changes after \\[goto-last-change] have been used.
+See `goto-last-change' for use of prefix argument.
+
+\(fn ARG)" t nil)
+
+;;;***
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; End:
+;;; goto-chg-autoloads.el ends here
diff --git a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-pkg.el b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-pkg.el
new file mode 100644
index 0000000..e0ebac3
--- /dev/null
+++ b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-pkg.el
@@ -0,0 +1,2 @@
+;;; -*- no-byte-compile: t -*-
+(define-package "goto-chg" "20170917.1200" "goto last change" 'nil :commit "81fca94d2592cf32bab451c39a9cd2d9b03fbd6b" :keywords '("convenience" "matching"))
diff --git a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.el b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.el
new file mode 100644
index 0000000..6491545
--- /dev/null
+++ b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.el
@@ -0,0 +1,349 @@
+;;; goto-chg.el --- goto last change
+;;--------------------------------------------------------------------
+;;
+;; Copyright (C) 2002-2008,2013 David Andersson
+;;
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2 of
+;; the License, or (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be
+;; useful, but WITHOUT ANY WARRANTY; without even the implied
+;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+;; PURPOSE. See the GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public
+;; License along with this program; if not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+;; MA 02111-1307 USA
+;;
+;;-------------------------------------------------------------------
+;;
+;; Author: David Andersson <l.david.andersson(at)sverige.nu>
+;; Maintainer: Vasilij Schneidermann <v.schneidermann@github.com>
+;; Created: 16 May 2002
+;; Version: 1.7
+;; Package-Version: 20170917.1200
+;; Keywords: convenience, matching
+;;
+;;; Commentary:
+;;
+;; Goto Last Change
+;;
+;; Goto the point of the most recent edit in the buffer.
+;; When repeated, goto the second most recent edit, etc.
+;; Negative argument, C-u -, for reverse direction.
+;; Works by looking into buffer-undo-list to find points of edit.
+;;
+;; You would probably like to bind this command to a key.
+;; For example in your ~/.emacs:
+;;
+;; (require 'goto-chg)
+;;
+;; (global-set-key [(control ?.)] 'goto-last-change)
+;; (global-set-key [(control ?,)] 'goto-last-change-reverse)
+;;
+;; Works with emacs-19.29, 19.31, 20.3, 20.7, 21.1, 21.4, 22.1 and 23.1
+;; Works with XEmacs-20.4 and 21.4 (but see todo about `last-command' below)
+;;
+;;--------------------------------------------------------------------
+;; History
+;;
+;; Ver 1.7 2017-09-17 Vasilij Schneidermann
+;; Make it work with undo-tree-mode (see
+;; <https://github.com/martinp26/goto-chg>)
+;; Ver 1.6 2013-12-12 David Andersson
+;; Add keywords; Cleanup comments
+;; Ver 1.5 2013-12-11 David Andersson
+;; Autoload and document `goto-last-change-reverse'
+;; Ver 1.4 2008-09-20 David Andersson
+;; Improved property change description; Update comments.
+;; Ver 1.3 2007-03-14 David Andersson
+;; Added `goto-last-change-reverse'
+;; Ver 1.2 2003-04-06 David Andersson
+;; Don't let repeating error depthen glc-probe-depth.
+;; Ver 1.1 2003-04-06 David Andersson
+;; Zero arg describe changes. Negative arg go back.
+;; Autoload. Remove message using nil in stead of an empty string.
+;; Ver 1.0 2002-05-18 David Andersson
+;; Initial version
+;;
+;;--------------------------------------------------------------------
+;;
+;;todo: Rename "goto-chg.el" -> "gotochange.el" or "goto-chgs" ?
+;;todo: Rename function goto-last-change -> goto-last-edit ?
+;;todo: Rename adjective "-last-" -> "-latest-" or "-most-recent-" ?
+;;todo: There are some, maybe useful, funcs for region undo
+;; in simple.el in emacs 20. Take a look.
+;;todo: Add functionality to visit changed point in text order, not only in
+;; chronological order. (Naa, highlight-changes-mode does that).
+;;todo: Inverse indication that a change has been saved or not
+;;todo: Highlight the range of text involved in the last change?
+;;todo: See session-jump-to-last-change in session.el?
+;;todo: Unhide invisible text (e.g. outline mode) like isearch do.
+;;todo: XEmacs sets last-command to `t' after an error, so you cannot reverse
+;; after "No furter change info". Should we bother?
+;;todo: Try distinguish "No further change info" (end of truncated undo list)
+;; and "No further changes" (end of a complete undo list).
+;;
+;;--------------------------------------------------------------------
+
+;;; Code:
+
+(defvar glc-default-span 8 "*goto-last-change don't visit the same point twice. glc-default-span tells how far around a visited point not to visit again.")
+(defvar glc-current-span 8 "Internal for goto-last-change.\nA copy of glc-default-span or the ARG passed to goto-last-change.")
+(defvar glc-probe-depth 0 "Internal for goto-last-change.\nIt is non-zero between successive goto-last-change.")
+
+;;todo: Find begin and end of line, then use it somewhere
+
+(defun glc-center-ellipsis (str maxlen &optional ellipsis)
+ "Truncate STRING in the middle to length MAXLEN.
+If STRING is max MAXLEN just return the string.
+Optional third argument is the replacement, which defaults to \"...\"."
+ (if (<= (length str) maxlen)
+ str
+ ;; else
+ (let* ((lipsis (or ellipsis "..."))
+ (i (/ (- maxlen (length lipsis)) 2)))
+ (concat (substring str 0 i)
+ lipsis
+ (substring str (- i))))))
+
+(defun glc-adjust-pos2 (pos p1 p2 adj)
+ ;; Helper function to glc-adjust-pos
+ ;; p1, p2: interval where an edit occured
+ ;; adj: amount of text added (positive) or removed (negativ) by the edit
+ ;; Return pos if well before p1, or pos+adj if well after p2, or nil if too close
+ (cond ((<= pos (- p1 glc-current-span))
+ pos)
+ ((> pos (+ p2 glc-current-span))
+ (+ pos adj))
+ ((zerop glc-current-span)
+ p1)
+ (t
+ nil)))
+
+(defun glc-adjust-pos (pos e)
+ "Given POS, a buffer position before the edit E, compute and return
+the \"same\" buffer position after E happened.
+Exception: return nil if POS is closer than `glc-current-span' to the edit E.
+\nInsertion edits before POS returns a larger value.
+Deletion edits before POS returns a smaller value.
+\nThe edit E is an entry from the `buffer-undo-list'. See for details."
+ (cond ((atom e) ; nil==cmd boundary, or, num==changed pos
+ pos)
+ ((numberp (car e)) ; (beg . end)==insertion
+ (glc-adjust-pos2 pos (car e) (car e) (- (cdr e) (car e))))
+ ((stringp (car e)) ; (string . pos)==deletion
+ (glc-adjust-pos2 pos (abs (cdr e)) (+ (abs (cdr e)) (length (car e))) (- (length (car e)))))
+ ((null (car e)) ; (nil prop val beg . end)==prop change
+ (glc-adjust-pos2 pos (nth 3 e) (nthcdr 4 e) 0))
+ (t ; (marker . dist)==marker moved
+ pos)))
+
+;; If recursive in stead of iterative (while), it tends to fill the call stack.
+;; (Isn't it tail optimized?)
+(defun glc-adjust-list (r)
+ "R is list of edit entries in chronological order.
+Pick the point of the first edit entry and update that point with
+the second, third, etc, edit entries. Return the final updated point,
+or nil if the point was closer than `glc-current-span' to some edit in R.
+\nR is basically a reversed slice from the buffer-undo-list."
+ (if r
+ ;; Get pos
+ (let ((pos (glc-get-pos (car r))))
+ (setq r (cdr r))
+ ;; Walk back in reverse list
+ (while (and r pos)
+ (setq pos (glc-adjust-pos pos (car r))
+ r (cdr r)))
+ pos)
+ ;; else
+ nil))
+
+(defun glc-get-pos (e)
+ "If E represents an edit, return a position value in E, the position
+where the edit took place. Return nil if E represents no real change.
+\nE is an entry in the buffer-undo-list."
+ (cond ((numberp e) e) ; num==changed position
+ ((atom e) nil) ; nil==command boundary
+ ((numberp (car e)) (cdr e)) ; (beg . end)==insertion
+ ((stringp (car e)) (abs (cdr e))) ; (string . pos)==deletion
+ ((null (car e)) (nthcdr 4 e)) ; (nil ...)==text property change
+ ((atom (car e)) nil) ; (t ...)==file modification time
+ (t nil))) ; (marker ...)==marker moved
+
+(defun glc-get-descript (e &optional n)
+ "If E represents an edit, return a short string describing E.
+Return nil if E represents no real change.
+\nE is an entry in the buffer-undo-list."
+ (let ((nn (or (format "T-%d: " n) "")))
+ (cond ((numberp e) "New position") ; num==changed position
+ ((atom e) nil) ; nil==command boundary
+ ((numberp (car e)) ; (beg . end)==insertion
+ (if (and n (< n 2))
+ (format "%sInserted %d chars \"%s\"" nn (- (cdr e) (car e))
+ (glc-center-ellipsis (buffer-substring (car e) (cdr e)) 60))
+ ;; else
+ ;; An older insert. The inserted text cannot easily be computed.
+ ;; Just show the char count.
+ (format "%sInserted %d chars" nn (- (cdr e) (car e)))))
+ ((stringp (car e)) ; (string . pos)==deletion
+ (format "%sDeleted \"%s\"" nn (glc-center-ellipsis (car e) 60)))
+ ((null (car e)) ; (nil ...)==text property change
+ (format "%sProperty change" nn))
+ ((atom (car e)) nil) ; (t ...)==file modification time
+ (t nil)))) ; (marker ...)==marker moved
+
+(defun glc-is-positionable (e)
+ "Return non-nil if E is an insertion, deletion or text property change.
+\nE is an entry in the buffer-undo-list."
+ (and (not (numberp e)) (glc-get-pos e)))
+
+(defun glc-is-filetime (e)
+ "Return t if E indicates a buffer became \"modified\",
+that is, it was previously saved or unchanged. Nil otherwise."
+ (and (listp e) (eq (car e) t)))
+
+;;;###autoload
+(defun goto-last-change (arg)
+"Go to the point where the last edit was made in the current buffer.
+Repeat the command to go to the second last edit, etc.
+\nTo go back to more recent edit, the reverse of this command, use \\[goto-last-change-reverse]
+or precede this command with \\[universal-argument] - (minus).
+\nIt does not go to the same point twice even if there has been many edits
+there. I call the minimal distance between distinguishable edits \"span\".
+Set variable `glc-default-span' to control how close is \"the same point\".
+Default span is 8.
+The span can be changed temporarily with \\[universal-argument] right before \\[goto-last-change]:
+\\[universal-argument] <NUMBER> set current span to that number,
+\\[universal-argument] (no number) multiplies span by 4, starting with default.
+The so set span remains until it is changed again with \\[universal-argument], or the consecutive
+repetition of this command is ended by any other command.
+\nWhen span is zero (i.e. \\[universal-argument] 0) subsequent \\[goto-last-change] visits each and
+every point of edit and a message shows what change was made there.
+In this case it may go to the same point twice.
+\nThis command uses undo information. If undo is disabled, so is this command.
+At times, when undo information becomes too large, the oldest information is
+discarded. See variable `undo-limit'."
+ (interactive "P")
+ (cond ((not (eq this-command last-command))
+ ;; Start a glc sequence
+ ;; Don't go to current point if last command was an obvious edit
+ ;; (yank or self-insert, but not kill-region). Makes it easier to
+ ;; jump back and forth when copying seleced lines.
+ (setq glc-probe-depth (if (memq last-command '(yank self-insert-command)) 1 0)
+ glc-direction 1
+ glc-current-span glc-default-span)
+ (if (< (prefix-numeric-value arg) 0)
+ (error "Negative arg: Cannot reverse as the first operation"))))
+ (cond ((null buffer-undo-list)
+ (error "Buffer has not been changed"))
+ ((eq buffer-undo-list t)
+ (error "No change info (undo is disabled)")))
+ (cond ((numberp arg) ; Numeric arg sets span
+ (setq glc-current-span (abs arg)))
+ ((consp arg) ; C-u's multiply previous span by 4
+ (setq glc-current-span (* (abs (car arg)) glc-default-span))
+ (message "Current span is %d chars" glc-current-span))) ;todo: keep message with "waiting" and "is saved"
+ (cond ((< (prefix-numeric-value arg) 0)
+ (setq glc-direction -1))
+ (t
+ (setq glc-direction 1)))
+ (let (rev ; Reversed (and filtered) undo list
+ pos ; The pos we look for, nil until found
+ (n 0) ; Steps in undo list (length of 'rev')
+ (l buffer-undo-list)
+ (passed-save-entry (not (buffer-modified-p)))
+ (new-probe-depth glc-probe-depth)
+ (undo-tree-p (bound-and-true-p undo-tree-mode))
+ glc-seen-canary)
+ ;; Walk back and forth in the buffer-undo-list, each time one step deeper,
+ ;; until we can walk back the whole list with a 'pos' that is not coming
+ ;; too close to another edit.
+ (while (null pos)
+ (setq new-probe-depth (+ new-probe-depth glc-direction))
+ (if (< glc-direction 0)
+ (setq rev ()
+ n 0
+ l buffer-undo-list
+ passed-save-entry (not (buffer-modified-p))))
+ (if (< new-probe-depth 1)
+ (error "No later change info"))
+ (if (> n 150)
+ (message "working..."))
+ ;; Walk forward in buffer-undo-list, glc-probe-depth steps.
+ ;; Build reverse list along the way
+ (if (not undo-tree-p)
+ (while (< n new-probe-depth)
+ (cond ((null l)
+ ;(setq this-command t) ; Disrupt repeat sequence
+ (error "No further change info"))
+ ((glc-is-positionable (car l))
+ (setq n (1+ n)
+ rev (cons (car l) rev)))
+ ((or passed-save-entry (glc-is-filetime (car l)))
+ (setq passed-save-entry t)))
+ (setq l (cdr l)))
+ (when (not glc-seen-canary)
+ (while (and (not (null l)) (not glc-seen-canary) (< n new-probe-depth))
+ (cond ((eq 'undo-tree-canary (car l)) ; used by buffer-undo-tree
+ (message "Canary found...")
+ (setq l (undo-tree-current buffer-undo-tree)
+ glc-seen-canary t))
+ ((glc-is-positionable (car l))
+ (setq n (1+ n)
+ rev (cons (car l) rev)))
+ ((or passed-save-entry (glc-is-filetime (car l)))
+ (setq passed-save-entry t)))
+ (when (not glc-seen-canary)
+ (setq l (cdr l)))))
+ (when glc-seen-canary
+ (while (< n new-probe-depth)
+ (cond ((null l)
+ ;(setq this-command t) ; Disrupt repeat sequence
+ (error "No further change info"))
+ ((glc-is-positionable (car (undo-tree-node-undo l)))
+ (setq n (1+ n)
+ rev (cons (car (undo-tree-node-undo l)) rev)))
+ ((or passed-save-entry (glc-is-filetime (car (undo-tree-node-undo l))))
+ (setq passed-save-entry t)))
+ (setq l (undo-tree-node-previous l))))
+ (when (null l)
+ (error "No further change info")))
+ ;; Walk back in reverse list, from older to newer edits.
+ ;; Adjusting pos along the way.
+ (setq pos (glc-adjust-list rev)))
+ ;; Found a place not previously visited, in 'pos'.
+ ;; (An error have been issued if nothing (more) found.)
+ (if (> n 150)
+ (message nil)) ; remove message "working..."
+ (if (and (= glc-current-span 0) (glc-get-descript (car rev) n))
+ (message "%s" (glc-get-descript (car rev) n))
+ ;; else
+ (if passed-save-entry
+ (message "(This change is saved)")))
+ (setq glc-probe-depth new-probe-depth)
+ (goto-char pos)))
+
+;;;###autoload
+(defun goto-last-change-reverse (arg)
+ "Go back to more recent changes after \\[goto-last-change] have been used.
+See `goto-last-change' for use of prefix argument."
+ (interactive "P")
+ ;; Negate arg, all kinds
+ (cond ((eq arg nil) (setq arg '-))
+ ((eq arg '-) (setq arg nil))
+ ((listp arg) (setq arg (list (- (car arg)))))
+ (t (setq arg (- arg))))
+ ;; Make 'goto-last-change-reverse' look like 'goto-last-change'
+ (cond ((eq last-command this-command)
+ (setq last-command 'goto-last-change)))
+ (setq this-command 'goto-last-change)
+ ;; Call 'goto-last-change' to do the job
+ (goto-last-change arg))
+
+(provide 'goto-chg)
+
+;;; goto-chg.el ends here
diff --git a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.elc b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.elc
new file mode 100644
index 0000000..088d716
--- /dev/null
+++ b/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.elc
Binary files differ
diff --git a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-autoloads.el b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-autoloads.el
new file mode 100644
index 0000000..9e3420c
--- /dev/null
+++ b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-autoloads.el
@@ -0,0 +1,19 @@
+;;; oceanic-theme-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path))))
+
+;;;### (autoloads nil "oceanic-theme" "oceanic-theme.el" (23088 12647
+;;;;;; 50741 187000))
+;;; Generated autoloads from oceanic-theme.el
+
+(when (and (boundp 'custom-theme-load-path) load-file-name) (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:
+;;; oceanic-theme-autoloads.el ends here
diff --git a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-pkg.el b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-pkg.el
new file mode 100644
index 0000000..173ebcb
--- /dev/null
+++ b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-pkg.el
@@ -0,0 +1,2 @@
+;;; -*- no-byte-compile: t -*-
+(define-package "oceanic-theme" "20161015.119" "Oceanic theme." 'nil :commit "a92ee9b470843c923e6cdcafdd65106ff994d04d" :url "https://github.com/terry3/oceanic-theme" :keywords '("oceanic" "color" "theme"))
diff --git a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.el b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.el
new file mode 100644
index 0000000..29149fb
--- /dev/null
+++ b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.el
@@ -0,0 +1,87 @@
+;;; oceanic-theme.el --- Oceanic theme.
+
+;; Copyright (C) 2016, Tengfei Guo <terryr3rd@yeah.net>
+
+;; Author: Tengfei Guo
+;; Keywords: oceanic color theme
+;; Package-Version: 20161015.119
+;; URL: https://github.com/terry3/oceanic-theme
+;; Version: 0.0.1
+
+;; This file is NOT part of GNU Emacs.
+
+;;; License:
+
+;; This 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 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.
+
+;;; Code:
+
+(deftheme oceanic
+ "A color theme based on the Oceanic.")
+
+;; base 00: #1B2B34
+;; base 01: #343D46
+;; base 02: #4F5B66
+;; base 03: #65737E
+;; base 04: #A7ADBA
+;; base 05: #C0C5CE
+;; base 06: #CDD3DE
+;; base 07: #D8DEE9
+;; base 08: #EC5f67
+;; base 09: #F99157
+;; base 0A: #FAC863
+;; base 0B: #99C794
+;; base 0C: #5FB3B3
+;; base 0D: #6699CC
+;; base 0E: #C594C5
+;; base 0F: #AB7967
+
+(custom-theme-set-faces
+ 'oceanic
+ '(default ((t (:foreground "#D8DEE9" :background "#1B2B34"))))
+ '(cursor ((t (:background "#6699CC"))))
+ '(fringe ((t (:background "#1a1a1a"))))
+ '(region ((t (:background "#343D46"))))
+ '(font-lock-builtin-face ((t (:foreground "#FAC863" :weight normal))))
+ '(font-lock-comment-face ((t (:foreground "#4F5B66" :weight normal))))
+ '(font-lock-function-name-face ((t (:foreground "#D8DEE9" :weight normal))))
+ '(font-lock-keyword-face ((t (:foreground "#5FB3B3" :weight normal))))
+ '(font-lock-string-face ((t (:foreground "#99C794" :weight normal))))
+ '(font-lock-type-face ((t (:foreground "#C594C5" :weight normal))))
+ '(font-lock-constant-face ((t (:foreground "#EC5f67" :weight normal))))
+ '(font-lock-variable-name-face ((t (:foreground "#C594C5" :weight normal))))
+ '(minibuffer-prompt ((t (:foreground "#6699CC" :weight normal))))
+ '(font-lock-warning-face ((t (:foreground "#EC5f67" :weight normal))))
+ '(highlight ((t (:background "#343D46" :weight normal))))
+ '(linum ((t (:foreground "#AB7967" :weight normal))))
+ '(mode-line ((t (:background "#6699CC" :foreground "#1B2B34"
+ :box "#6699CC" :weight normal))))
+ '(mode-line-highlight ((t (:box nil))))
+
+ '(show-paren-match ((t (:background "#FAC863"))))
+ '(show-paren-mismatch ((t (:background "#EC5f67"))))
+ )
+
+;; Autoload for MELPA
+
+;;;###autoload
+(when (and (boundp 'custom-theme-load-path) load-file-name)
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory (file-name-directory load-file-name))))
+
+(provide-theme 'oceanic)
+
+;;; oceanic-theme.el ends here
diff --git a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.elc b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.elc
new file mode 100644
index 0000000..9561845
--- /dev/null
+++ b/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.elc
Binary files differ
diff --git a/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el
new file mode 100644
index 0000000..34110f4
--- /dev/null
+++ b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el
@@ -0,0 +1,59 @@
+;;; 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" (23088 12570 860743
+;;;;;; 49000))
+;;; 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.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el
new file mode 100644
index 0000000..378b712
--- /dev/null
+++ b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el
@@ -0,0 +1,2 @@
+;;; -*- 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.d/elpa/undo-tree-20170706.246/undo-tree.el b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el
new file mode 100644
index 0000000..063c2df
--- /dev/null
+++ b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el
@@ -0,0 +1,4433 @@
+;;; undo-tree.el --- Treat undo history as a tree -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2009-2014 Free Software Foundation, Inc
+
+;; Author: Toby Cubitt <toby-undo-tree@dr-qubit.org>
+;; Maintainer: Toby Cubitt <toby-undo-tree@dr-qubit.org>
+;; 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 <http://www.gnu.org/licenses/>.
+
+
+;;; 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:
+;;
+;; <up> p C-p (`undo-tree-visualize-undo')
+;; Undo changes.
+;;
+;; <down> n C-n (`undo-tree-visualize-redo')
+;; Redo changes.
+;;
+;; <left> b C-b (`undo-tree-visualize-switch-branch-left')
+;; Switch to previous undo-tree branch.
+;;
+;; <right> f C-f (`undo-tree-visualize-switch-branch-right')
+;; Switch to next undo-tree branch.
+;;
+;; C-<up> M-{ (`undo-tree-visualize-undo-to-x')
+;; Undo changes up to last branch point.
+;;
+;; C-<down> M-} (`undo-tree-visualize-redo-to-x')
+;; Redo changes down to next branch point.
+;;
+;; <down> n C-n (`undo-tree-visualize-redo')
+;; Redo changes.
+;;
+;; <mouse-1> (`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.
+;;
+;; <pgup> M-v
+;; Scroll up.
+;;
+;; <pgdown> C-v
+;; Scroll down.
+;;
+;;
+;;
+;; In visualizer selection mode:
+;;
+;; <up> p C-p (`undo-tree-visualizer-select-previous')
+;; Select previous node.
+;;
+;; <down> n C-n (`undo-tree-visualizer-select-next')
+;; Select next node.
+;;
+;; <left> b C-b (`undo-tree-visualizer-select-left')
+;; Select left sibling node.
+;;
+;; <right> f C-f (`undo-tree-visualizer-select-right')
+;; Select right sibling node.
+;;
+;; <pgup> M-v
+;; Select node 10 above.
+;;
+;; <pgdown> C-v
+;; Select node 10 below.
+;;
+;; <enter> (`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 <enter> 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
+\".<buffer-file-name>.~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 "<disabled>" 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.
+
+\\<undo-tree-visualizer-mode-map>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.
+
+\\<undo-tree-visualizer-mode-map>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)))
+ ;; <enter> 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
+\".<buffer-file-name>.~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
+\".<buffer-file-name>.~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.d/elpa/undo-tree-20170706.246/undo-tree.elc b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elc
new file mode 100644
index 0000000..1aee42f
--- /dev/null
+++ b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elc
Binary files differ