diff options
| author | Steve Lee <me@xiangyangli.com> | 2017-12-13 03:54:19 +0800 |
|---|---|---|
| committer | Steve Lee <me@xiangyangli.com> | 2017-12-13 03:54:19 +0800 |
| commit | 6c022e47e456736bdb7f6aea4b4e3942aa973fa4 (patch) | |
| tree | 573c2b26ff1ee81b1e298126f6cfc7d3ef37df59 | |
| parent | c23ecd572bf70854eaf41bd37472624371e37778 (diff) | |
| download | dotfiles-6c022e47e456736bdb7f6aea4b4e3942aa973fa4.tar.xz dotfiles-6c022e47e456736bdb7f6aea4b4e3942aa973fa4.zip | |
untrack elpa
63 files changed, 0 insertions, 28537 deletions
diff --git a/.emacs.d/elpa/archives/gnu/archive-contents b/.emacs.d/elpa/archives/gnu/archive-contents deleted file mode 100644 index ff91429..0000000 --- a/.emacs.d/elpa/archives/gnu/archive-contents +++ /dev/null @@ -1,1209 +0,0 @@ -(1 - (ace-window . - [(0 9 0) - ((avy - (0 2 0))) - "Quickly switch windows." single - ((:url . "https://github.com/abo-abo/ace-window") - (:keywords "window" "location"))]) - (ack . - [(1 5) - nil "interface to ack-like tools" tar - ((:keywords "tools" "processes" "convenience") - (:url . "https://github.com/leoliu/ack-el"))]) - (ada-mode . - [(5 3 1) - ((wisi - (1 1 6)) - (cl-lib - (0 4)) - (emacs - (24 3))) - "major-mode for editing Ada sources" tar - ((:keywords "languages" "ada") - (:url . "http://www.nongnu.org/ada-mode/"))]) - (ada-ref-man . - [(2012 3) - nil "Ada Reference Manual 2012" tar - ((:keywords "languages" "ada") - (:url . "http://stephe-leake.org/ada/arm.html"))]) - (adaptive-wrap . - [(0 5 1) - nil "Smart line-wrapping with wrap-prefix" single - ((:url . "http://elpa.gnu.org/packages/adaptive-wrap.html") - (:keywords))]) - (adjust-parens . - [(3 0) - nil "Indent and dedent Lisp code, automatically adjust close parens" tar - ((:url . "http://elpa.gnu.org/packages/adjust-parens.html"))]) - (aggressive-indent . - [(1 8 3) - ((emacs - (24 1)) - (cl-lib - (0 5))) - "Minor mode to aggressively keep your code always indented" single - ((:url . "https://github.com/Malabarba/aggressive-indent-mode") - (:keywords "indent" "lisp" "maint" "tools"))]) - (ahungry-theme . - [(1 8 0) - ((emacs - (24))) - "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." tar - ((:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme") - (:url . "https://github.com/ahungry/color-theme-ahungry"))]) - (all . - [(1 0) - nil "Edit all lines matching a given regexp" single - ((:url . "http://elpa.gnu.org/packages/all.html") - (:keywords "matching"))]) - (ampc . - [(0 2) - nil "Asynchronous Music Player Controller" single - ((:url . "http://elpa.gnu.org/packages/ampc.html") - (:keywords "ampc" "mpc" "mpd"))]) - (arbitools . - [(0 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 deleted file mode 100644 index 8c87603..0000000 --- a/.emacs.d/elpa/archives/gnu/archive-contents.signed +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index c090836..0000000 --- a/.emacs.d/elpa/archives/melpa/archive-contents +++ /dev/null @@ -1,2 +0,0 @@ - -(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 deleted file mode 100644 index b0c316e..0000000 --- a/.emacs.d/elpa/evil-20171210.501/dir +++ /dev/null @@ -1,18 +0,0 @@ -This is the file .../info/dir, which contains the -topmost node of the Info hierarchy, called (dir)Top. -The first time you invoke Info you start off looking at this node. - -File: dir, Node: Top This is the top of the INFO tree - - This (the Directory node) gives a menu of major topics. - Typing "q" exits, "?" lists all Info commands, "d" returns here, - "h" gives a primer for first-timers, - "mEmacs<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 deleted file mode 100644 index cb43870..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-autoloads.el +++ /dev/null @@ -1,26 +0,0 @@ -;;; 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 deleted file mode 100644 index 62ed189..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-command-window.el +++ /dev/null @@ -1,168 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index ce53b7d..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-command-window.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-commands.el b/.emacs.d/elpa/evil-20171210.501/evil-commands.el deleted file mode 100644 index 4def324..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-commands.el +++ /dev/null @@ -1,4453 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 31c72c3..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-commands.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-common.el b/.emacs.d/elpa/evil-20171210.501/evil-common.el deleted file mode 100644 index a9d6cd3..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-common.el +++ /dev/null @@ -1,3882 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 3d4462c..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-common.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-core.el b/.emacs.d/elpa/evil-20171210.501/evil-core.el deleted file mode 100644 index 125c166..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-core.el +++ /dev/null @@ -1,1336 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index c0cf18d..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-core.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-digraphs.el b/.emacs.d/elpa/evil-20171210.501/evil-digraphs.el deleted file mode 100644 index 2046f74..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-digraphs.el +++ /dev/null @@ -1,1729 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 7a79188..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-digraphs.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-ex.el b/.emacs.d/elpa/evil-20171210.501/evil-ex.el deleted file mode 100644 index 123e57f..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-ex.el +++ /dev/null @@ -1,1164 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 369d758..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-ex.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-integration.el b/.emacs.d/elpa/evil-20171210.501/evil-integration.el deleted file mode 100644 index cf9c00e..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-integration.el +++ /dev/null @@ -1,573 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 043dfd6..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-integration.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-jumps.el b/.emacs.d/elpa/evil-20171210.501/evil-jumps.el deleted file mode 100644 index eb6f3bb..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-jumps.el +++ /dev/null @@ -1,314 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 91716a8..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-jumps.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-macros.el b/.emacs.d/elpa/evil-20171210.501/evil-macros.el deleted file mode 100644 index ed98e7d..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-macros.el +++ /dev/null @@ -1,777 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 1fd266f..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-macros.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-maps.el b/.emacs.d/elpa/evil-20171210.501/evil-maps.el deleted file mode 100644 index 551cf2b..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-maps.el +++ /dev/null @@ -1,559 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 2af5fc3..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-maps.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-pkg.el b/.emacs.d/elpa/evil-20171210.501/evil-pkg.el deleted file mode 100644 index 9d9c73f..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-pkg.el +++ /dev/null @@ -1,8 +0,0 @@ -(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 deleted file mode 100644 index 80ef0bf..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-repeat.el +++ /dev/null @@ -1,638 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index a23e41e..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-repeat.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-search.el b/.emacs.d/elpa/evil-20171210.501/evil-search.el deleted file mode 100644 index 896b3b5..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-search.el +++ /dev/null @@ -1,1294 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 2068c60..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-search.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-states.el b/.emacs.d/elpa/evil-20171210.501/evil-states.el deleted file mode 100644 index 9655b65..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-states.el +++ /dev/null @@ -1,905 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 821eed6..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-states.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-types.el b/.emacs.d/elpa/evil-20171210.501/evil-types.el deleted file mode 100644 index eefd9ac..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-types.el +++ /dev/null @@ -1,424 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 7d16df5..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-types.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil-vars.el b/.emacs.d/elpa/evil-20171210.501/evil-vars.el deleted file mode 100644 index 899aab5..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-vars.el +++ /dev/null @@ -1,1862 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 93c1e4c..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil-vars.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil.el b/.emacs.d/elpa/evil-20171210.501/evil.el deleted file mode 100644 index 01b9bc1..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil.el +++ /dev/null @@ -1,146 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index fc3a1c6..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-20171210.501/evil.info b/.emacs.d/elpa/evil-20171210.501/evil.info deleted file mode 100644 index 6d9815c..0000000 --- a/.emacs.d/elpa/evil-20171210.501/evil.info +++ /dev/null @@ -1,1215 +0,0 @@ -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 deleted file mode 100644 index be77015..0000000 --- a/.emacs.d/elpa/evil-20171210.501/fdl-1.3.info +++ /dev/null @@ -1,484 +0,0 @@ -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 deleted file mode 100644 index 4febc11..0000000 --- a/.emacs.d/elpa/evil-20171210.501/macros.info +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index c8ed433..0000000 --- a/.emacs.d/elpa/evil-20171210.501/version.info +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index fc8eb5a..0000000 --- a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-autoloads.el +++ /dev/null @@ -1,42 +0,0 @@ -;;; 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 deleted file mode 100644 index 69db850..0000000 --- a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- 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 deleted file mode 100644 index 55bcf87..0000000 --- a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.el +++ /dev/null @@ -1,213 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index e7ec165..0000000 --- a/.emacs.d/elpa/evil-leader-20140606.543/evil-leader.elc +++ /dev/null diff --git a/.emacs.d/elpa/evil-leader-readme.txt b/.emacs.d/elpa/evil-leader-readme.txt deleted file mode 100644 index 090d911..0000000 --- a/.emacs.d/elpa/evil-leader-readme.txt +++ /dev/null @@ -1,46 +0,0 @@ -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 deleted file mode 100644 index 239636a..0000000 --- a/.emacs.d/elpa/evil-readme.txt +++ /dev/null @@ -1,29 +0,0 @@ -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 Binary files differdeleted file mode 100644 index 92b8c80..0000000 --- a/.emacs.d/elpa/gnupg/pubring.kbx +++ /dev/null diff --git a/.emacs.d/elpa/gnupg/pubring.kbx~ b/.emacs.d/elpa/gnupg/pubring.kbx~ Binary files differdeleted file mode 100644 index 7f4e95d..0000000 --- a/.emacs.d/elpa/gnupg/pubring.kbx~ +++ /dev/null diff --git a/.emacs.d/elpa/gnupg/trustdb.gpg b/.emacs.d/elpa/gnupg/trustdb.gpg Binary files differdeleted file mode 100644 index 155f0d5..0000000 --- a/.emacs.d/elpa/gnupg/trustdb.gpg +++ /dev/null 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 deleted file mode 100644 index 4af982d..0000000 --- a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-autoloads.el +++ /dev/null @@ -1,50 +0,0 @@ -;;; 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 deleted file mode 100644 index e0ebac3..0000000 --- a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- 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 deleted file mode 100644 index 6491545..0000000 --- a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.el +++ /dev/null @@ -1,349 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 088d716..0000000 --- a/.emacs.d/elpa/goto-chg-20170917.1200/goto-chg.elc +++ /dev/null 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 deleted file mode 100644 index 9e3420c..0000000 --- a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-autoloads.el +++ /dev/null @@ -1,19 +0,0 @@ -;;; 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 deleted file mode 100644 index 173ebcb..0000000 --- a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- 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 deleted file mode 100644 index 29149fb..0000000 --- a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.el +++ /dev/null @@ -1,87 +0,0 @@ -;;; 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 Binary files differdeleted file mode 100644 index 9561845..0000000 --- a/.emacs.d/elpa/oceanic-theme-20161015.119/oceanic-theme.elc +++ /dev/null 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 deleted file mode 100644 index 34110f4..0000000 --- a/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-autoloads.el +++ /dev/null @@ -1,59 +0,0 @@ -;;; undo-tree-autoloads.el --- automatically extracted autoloads -;; -;;; Code: -(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) - -;;;### (autoloads nil "undo-tree" "undo-tree.el" (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 deleted file mode 100644 index 378b712..0000000 --- a/.emacs.d/elpa/undo-tree-20170706.246/undo-tree-pkg.el +++ /dev/null @@ -1,2 +0,0 @@ -;;; -*- no-byte-compile: t -*- -(define-package "undo-tree" "20170706.246" "Treat undo history as a tree" 'nil :commit "e9a9102f515acd7523158f20e83f300600374989" :url "http://www.dr-qubit.org/emacs.php" :keywords '("convenience" "files" "undo" "redo" "history" "tree")) diff --git a/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el b/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el deleted file mode 100644 index 063c2df..0000000 --- a/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.el +++ /dev/null @@ -1,4433 +0,0 @@ -;;; undo-tree.el --- Treat undo history as a tree -*- lexical-binding: t; -*- - -;; Copyright (C) 2009-2014 Free Software Foundation, Inc - -;; Author: Toby Cubitt <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 Binary files differdeleted file mode 100644 index 1aee42f..0000000 --- a/.emacs.d/elpa/undo-tree-20170706.246/undo-tree.elc +++ /dev/null |
