emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master a8174b7: * externals-list: Yet more conversion to :externa


From: Stefan Monnier
Subject: [elpa] master a8174b7: * externals-list: Yet more conversion to :external
Date: Mon, 30 Nov 2020 18:49:30 -0500 (EST)

branch: master
commit a8174b738b7f84d9f0b47bcdc2a53373bd2d52bb
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    * externals-list: Yet more conversion to :external
    
    Affected packages:
    
        ace-window ahungry-theme avy beacon company-statistics hook-helpers
        hydra load-relative loc-changes loccur mines
---
 externals-list                                     |   13 +-
 packages/ace-window/Cask                           |    8 -
 packages/ace-window/Makefile                       |   15 -
 packages/ace-window/README.md                      |  120 --
 packages/ace-window/ace-window.el                  |  540 -----
 packages/ahungry-theme/.gitignore                  |    1 -
 packages/ahungry-theme/LICENSE.md                  |  674 ------
 packages/ahungry-theme/README.md                   |   64 -
 packages/ahungry-theme/ahungry-theme.el            |  357 ----
 packages/ahungry-theme/color-theme-ahungry.el      |  217 --
 packages/avy/.dir-locals.el                        |    9 -
 packages/avy/Makefile                              |   23 -
 packages/avy/README.md                             |  127 --
 packages/avy/avy-test.el                           |   72 -
 packages/avy/avy.el                                | 2142 --------------------
 packages/avy/doc/Changelog.org                     |  498 -----
 packages/avy/targets/avy-init.el                   |   26 -
 packages/avy/targets/checkdoc.el                   |    4 -
 packages/beacon/COPYING                            |  674 ------
 packages/beacon/Readme.org                         |   41 -
 packages/beacon/beacon.el                          |  481 -----
 packages/beacon/example-beacon.gif                 |  Bin 2578269 -> 0 bytes
 packages/company-statistics/.dir-locals.el         |    4 -
 packages/company-statistics/.gitignore             |    2 -
 packages/company-statistics/README.org             |   34 -
 .../company-statistics/company-statistics-tests.el |  330 ---
 packages/company-statistics/company-statistics.el  |  375 ----
 packages/hook-helpers/.gitignore                   |    3 -
 packages/hook-helpers/.hgignore                    |    5 -
 packages/hook-helpers/COPYING                      |  674 ------
 packages/hook-helpers/Makefile                     |   58 -
 packages/hook-helpers/hook-helpers-tests.el        |   94 -
 packages/hook-helpers/hook-helpers.el              |  253 ---
 packages/hook-helpers/hook-helpers.info            |  283 ---
 packages/hook-helpers/hook-helpers.org             |  188 --
 packages/hydra/.dir-locals.el                      |    6 -
 packages/hydra/.elpaignore                         |    6 -
 packages/hydra/.travis.yml                         |   14 -
 packages/hydra/Makefile                            |   22 -
 packages/hydra/README.md                           |  422 ----
 packages/hydra/hydra-examples.el                   |  386 ----
 packages/hydra/hydra-ox.el                         |  127 --
 packages/hydra/hydra-test.el                       | 1561 --------------
 packages/hydra/hydra.el                            | 1405 -------------
 packages/hydra/lv.el                               |  117 --
 packages/hydra/targets/hydra-init.el               |   27 -
 packages/load-relative/.gitignore                  |   17 -
 packages/load-relative/.travis.yml                 |   17 -
 packages/load-relative/AUTHORS                     |    1 -
 packages/load-relative/COPYING                     |  674 ------
 packages/load-relative/ChangeLog                   |  233 ---
 packages/load-relative/INSTALL                     |  246 ---
 packages/load-relative/Makefile.am                 |   55 -
 packages/load-relative/NEWS                        |    0
 packages/load-relative/README.md                   |  133 --
 packages/load-relative/THANKS                      |    3 -
 packages/load-relative/autogen.sh                  |   12 -
 packages/load-relative/common.mk                   |    5 -
 packages/load-relative/configure.ac                |   30 -
 packages/load-relative/copyright_exceptions        |    0
 packages/load-relative/elisp-comp                  |   87 -
 packages/load-relative/install-from-git.sh         |   99 -
 packages/load-relative/load-relative.el            |  310 ---
 packages/load-relative/test/.gitignore             |    3 -
 packages/load-relative/test/Makefile.am            |   68 -
 packages/load-relative/test/load-file1.el          |   18 -
 packages/load-relative/test/load-file2.el          |   17 -
 packages/load-relative/test/load-file3.el          |   17 -
 packages/load-relative/test/make-check-filter.rb   |   23 -
 packages/load-relative/test/require-file1.el       |   17 -
 packages/load-relative/test/require-file2.el       |   17 -
 packages/load-relative/test/require-file3.el       |   17 -
 packages/load-relative/test/simple-test.el         |  386 ----
 packages/load-relative/test/simple.txt             |    1 -
 packages/load-relative/test/subdir/.gitignore      |    1 -
 packages/load-relative/test/subdir/Makefile        |    7 -
 .../test/subdir/test-require-list-from-subdir.el   |   36 -
 packages/load-relative/test/test-file.el           |   62 -
 packages/load-relative/test/test-load.el           |   97 -
 packages/load-relative/test/test-require-list.el   |   28 -
 packages/loc-changes/.gitignore                    |   14 -
 packages/loc-changes/.travis.yml                   |   18 -
 packages/loc-changes/AUTHORS                       |    1 -
 packages/loc-changes/COPYING                       |  674 ------
 packages/loc-changes/INSTALL                       |  370 ----
 packages/loc-changes/Makefile.am                   |   48 -
 packages/loc-changes/NEWS                          |    0
 packages/loc-changes/README                        |    1 -
 packages/loc-changes/README.md                     |   15 -
 packages/loc-changes/THANKS                        |    1 -
 packages/loc-changes/autogen.sh                    |    6 -
 packages/loc-changes/common.mk                     |    5 -
 packages/loc-changes/configure.ac                  |   13 -
 packages/loc-changes/copyright_exceptions          |    0
 packages/loc-changes/elisp-comp                    |   93 -
 packages/loc-changes/loc-changes.el                |  259 ---
 packages/loc-changes/test/Makefile.am              |   72 -
 packages/loc-changes/test/make-check-filter.rb     |   25 -
 packages/loc-changes/test/sample.txt               |   14 -
 packages/loc-changes/test/test-basic.el            |  107 -
 packages/loccur/README.md                          |   63 -
 packages/loccur/loccur.el                          |  358 ----
 packages/mines/.travis.yml                         |   22 -
 packages/mines/LICENSE                             |  674 ------
 packages/mines/Makefile                            |   16 -
 packages/mines/README.md                           |   37 -
 packages/mines/mines-tests.el                      |  251 ---
 packages/mines/mines.el                            |  709 -------
 108 files changed, 12 insertions(+), 19093 deletions(-)

diff --git a/externals-list b/externals-list
index 42df02f..e636325 100644
--- a/externals-list
+++ b/externals-list
@@ -30,19 +30,23 @@
 ;; some manual intervention (typically, because the two branches have
 ;; diverged).
 
-(("ack"                        :external "https://github.com/leoliu/ack-el";)
+(("ace-window"         :external "https://github.com/abo-abo/ace-window";)
+ ("ack"                        :external "https://github.com/leoliu/ack-el";)
  ("ada-mode" :external nil)
  ("ada-ref-man"                :external nil)
  ("adaptive-wrap"      :external nil)
  ("advice-patch"       :external nil)
  ("aggressive-indent"  :external 
"https://github.com/Malabarba/aggressive-indent-mode";)
+ ("ahungry-theme"      :external 
"https://github.com/ahungry/color-theme-ahungry";)
  ("ampc"               :external nil)
  ("arbitools"          :external nil)
  ("ascii-art-to-unicode" :external nil)
  ("async"              :external "https://github.com/jwiegley/emacs-async";)
  ("auctex"             :external "git://git.sv.gnu.org/auctex.git")
  ("aumix-mode"         :external nil)
+ ("avy"                        :external "https://github.com/abo-abo/avy";)
  ("bbdb"               :external "git://git.savannah.nongnu.org/bbdb.git")
+ ("beacon"             :external "https://github.com/Malabarba/beacon";)
  ("bluetooth"          :external "https://gitlab.com/rstocker/emacs-bluetooth";)
  ("bnf-mode"           :external "https://github.com/sergeyklay/bnf-mode";)
  ("brief"              :external nil)
@@ -73,6 +77,7 @@
  ("compact-docstrings"  :external 
"https://github.com/cpitclaudel/compact-docstrings";)
  ("company"            :external 
"https://github.com/company-mode/company-mode.git";)
  ("company-math"       :external "https://github.com/vspinu/company-math.git";)
+ ("company-statistics" :external 
"https://github.com/company-mode/company-statistics";)
  ("context-coloring"   :external 
"https://github.com/jacksonrayhamilton/context-coloring.git";)
  ("cpio-mode"          :external "https://github.com/dlewan/cpio-mode";)
  ("csv-mode"           :external nil)
@@ -119,7 +124,9 @@
  ("greader"            :external 
"https://gitlab.com/michelangelo-rodriguez/greader";)
  ("guess-language"     :external 
"https://github.com/tmalsburg/guess-language.el";)
  ("highlight-escape-sequences" :external 
"https://github.com/dgutov/highlight-escape-sequences/";)
+ ("hook-helpers"       :external 
"https://git.savannah.nongnu.org/git/hook-helpers-el.git";)
  ("html5-schema"       :external nil)
+ ("hydra"              :external "https://github.com/abo-abo/hydra";)
  ("hyperbole"           :external 
"http://git.savannah.gnu.org/r/hyperbole.git";)
  ("ioccur"             :external 
"https://github.com/thierryvolpiatto/ioccur.git";)
  ("ivy-explorer"        :external "https://github.com/clemera/ivy-explorer";)
@@ -132,11 +139,15 @@
  ("let-alist"          :core "lisp/emacs-lisp/let-alist.el")
  ("lmc"                        :external nil)
  ("load-dir"           :external nil)
+ ("load-relative"      :external "http://github.com/rocky/emacs-load-relative";)
+ ("loc-changes"                :external 
"http://github.com/rocky/emacs-loc-changes";)
+ ("loccur"             :external "https://github.com/fourier/loccur";)
  ("map"                 :core "lisp/emacs-lisp/map.el")
  ("markchars"          :external nil)
  ("math-symbol-lists"  :external 
"https://github.com/vspinu/math-symbol-lists.git";)
  ("metar"              :external nil)
  ("midi-kbd"           :external nil)
+ ("mines"              :external "https://github.com/calancha/Minesweeper";)
  ("mmm-mode"            :external "https://github.com/purcell/mmm-mode.git";)
  ("modus-operandi-theme":external 
"https://gitlab.com/protesilaos/modus-themes";)
  ("modus-vivendi-theme"        :external 
"https://gitlab.com/protesilaos/modus-themes";)
diff --git a/packages/ace-window/Cask b/packages/ace-window/Cask
deleted file mode 100644
index 5526c3c..0000000
--- a/packages/ace-window/Cask
+++ /dev/null
@@ -1,8 +0,0 @@
-(source gnu)
-(source melpa)
-
-(package-file "ace-window.el")
-
-(development
- (depends-on "avy"))
-
diff --git a/packages/ace-window/Makefile b/packages/ace-window/Makefile
deleted file mode 100644
index 8dff696..0000000
--- a/packages/ace-window/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-emacs ?= emacs
-CASK = ~/.cask/bin/cask
-
-.PHONY: all clean
-
-all: compile
-
-cask:
-       $(shell EMACS=$(emacs) $(CASK) --verbose --debug)
-
-compile:
-       $(CASK) exec $(emacs) -batch --eval "(byte-compile-file 
\"ace-window.el\")"
-
-clean:
-       rm -f *.elc
diff --git a/packages/ace-window/README.md b/packages/ace-window/README.md
deleted file mode 100644
index d70548a..0000000
--- a/packages/ace-window/README.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# ace-window
-
-**GNU Emacs package for selecting a window to switch to**
-
-## What and why
-
-I'm sure you're aware of `other-window` command. While it's great for
-two windows, it quickly loses it's value when there are more windows:
-you need to call it many times, and since it's not easily predictable,
-you have to check each time if you're in the window that you wanted.
-
-Another approach is to use `windmove-left`, `windmove-up` etc.  These
-are fast and predictable. Their disadvantage is that they need 4 key
-bindings.  The default ones are shift+arrows, which are hard to reach.
-
-This package aims to take the speed and predictability of `windmove`
-and pack it into a single key binding, similar to `other-window`.
-
-## Setup
-
-Just assign `ace-window` to a short key binding, as switching windows
-is a common task. I suggest <kbd>M-p</kbd>, as it's short and not
-bound in the default Emacs.
-
-## Usage
-
-When there are two windows, `ace-window` will call `other-window`.  If
-there are more, each window will have its first character highlighted.
-Pressing that character will switch to that window.  Note that, unlike
-`ace-jump-mode`, the point position will not be changed: it's the same
-behavior as that of `other-window`.
-
-The windows are ordered top-down, left-to-right. This means that if
-you remember your window layouts, you can switch windows without even
-looking at the leading char.  For instance, the top left window will
-always be `1`.
-
-`ace-window` works across multiple frames, as you can see from the
-[in-action gif](http://oremacs.com/download/ace-window.gif).
-
-## Swap and delete window
-
-- You can swap windows by calling `ace-window` with a prefix argument 
<kbd>C-u</kbd>.
-
-- You can delete the selected window by calling `ace-window` with a double 
prefix argument, i.e. <kbd>C-u C-u</kbd>.
-
-## Change the action midway
-
-You can also start by calling `ace-window` and then decide to switch the 
action to `delete` or `swap` etc.  By default the bindings are:
-
-- <kbd>x</kbd> - delete window
-- <kbd>m</kbd> - swap (move) window
-- <kbd>v</kbd> - split window vertically
-- <kbd>b</kbd> - split window horizontally
-- <kbd>n</kbd> - select the previous window
-- <kbd>i</kbd> - maximize window (select which window)
-- <kbd>o</kbd> - maximize current window
-
-In order for it to work, these keys *must not* be in `aw-keys` and you have to 
have `aw-dispatch-always` set to `t`.
-
-## Customization
-Aside from binding `ace-window`:
-
-    (global-set-key (kbd "M-p") 'ace-window)
-
-maybe you'd like the following customizations:
-
-### `aw-keys`
-`aw-keys` - the sequence of leading characters for each window:
-
-    (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
-
-`aw-keys` are 0-9 by default, which is reasonable, but in the setup
-above, the keys are on the home row.
-
-### `aw-scope`
-The default one is `global`, which means that `ace-window` will work
-across frames. If you set this to `frame`, `ace-window` will offer you
-the windows only on current frame.
-
-### `aw-background`
-
-By default, `ace-window` temporarily sets a gray background and
-removes color from available windows in order to make the
-window-switching characters more visible. This is the behavior
-inherited from `ace-jump-mode`.
-
-This behavior might not be necessary, as you already know the locations
-where to look, i.e. the top-left corners of each window.
-So you can turn off the gray background with:
-
-    (setq aw-background nil)
-
-### `aw-dispatch-always`
-
-When non-nil, `ace-window` will issue a `read-char` even for one window.
-This will make `ace-window` act differently from `other-window` for one
-or two windows. This is useful to change the action midway
-and execute other action other than the *jump* default.
-By default is set to `nil`
-
-### `aw-dispatch-alist`
-
-This is the list of actions that you can trigger from `ace-window` other than 
the
-*jump* default.
-By default is:
-
-    (defvar aw-dispatch-alist
-    '((?x aw-delete-window " Ace - Delete Window")
-        (?m aw-swap-window " Ace - Swap Window")
-        (?n aw-flip-window)
-        (?v aw-split-window-vert " Ace - Split Vert Window")
-        (?b aw-split-window-horz " Ace - Split Horz Window")
-        (?i delete-other-windows " Ace - Maximize Window")
-        (?o delete-other-windows))
-    "List of actions for `aw-dispatch-default'.")
-
-If the pair key-action is followed by a string, then `ace-window` will be
-invoked again to be able to select on which window you want to select the
-action. Otherwise the current window is selected.
diff --git a/packages/ace-window/ace-window.el 
b/packages/ace-window/ace-window.el
deleted file mode 100644
index a1c12ed..0000000
--- a/packages/ace-window/ace-window.el
+++ /dev/null
@@ -1,540 +0,0 @@
-;;; ace-window.el --- Quickly switch windows. -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel <ohwoeowho@gmail.com>
-;; Maintainer: Oleh Krehel <ohwoeowho@gmail.com>
-;; URL: https://github.com/abo-abo/ace-window
-;; Version: 0.9.0
-;; Package-Requires: ((avy "0.2.0"))
-;; Keywords: window, location
-
-;; This file is part of GNU Emacs.
-
-;; This file is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; The main function, `ace-window' is meant to replace `other-window'.
-;; In fact, when there are only two windows present, `other-window' is
-;; called.  If there are more, each window will have its first
-;; character highlighted.  Pressing that character will switch to that
-;; window.
-;;
-;; To setup this package, just add to your .emacs:
-;;
-;;    (global-set-key (kbd "M-p") 'ace-window)
-;;
-;; replacing "M-p"  with an appropriate shortcut.
-;;
-;; Depending on your window usage patterns, you might want to set
-;;
-;;    (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
-;;
-;; This way they are all on the home row, although the intuitive
-;; ordering is lost.
-;;
-;; If you don't want the gray background that makes the red selection
-;; characters stand out more, set this:
-;;
-;;    (setq aw-background nil)
-;;
-;; If you want to know the selection characters ahead of time, you can
-;; turn on `ace-window-display-mode'.
-;;
-;; When prefixed with one `universal-argument', instead of switching
-;; to selected window, the selected window is swapped with current one.
-;;
-;; When prefixed with two `universal-argument', the selected window is
-;; deleted instead.
-
-;;; Code:
-(require 'avy)
-(require 'ring)
-
-;;* Customization
-(defgroup ace-window nil
-  "Quickly switch current window."
-  :group 'convenience
-  :prefix "aw-")
-
-(defcustom aw-keys '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9)
-  "Keys for selecting window.")
-
-(defcustom aw-scope 'global
-  "The scope used by `ace-window'."
-  :type '(choice
-          (const :tag "global" global)
-          (const :tag "frame" frame)))
-
-(defcustom aw-ignored-buffers '("*Calc Trail*" "*LV*")
-  "List of buffers to ignore when selecting window."
-  :type '(repeat string))
-
-(defcustom aw-ignore-on t
-  "When t, `ace-window' will ignore `aw-ignored-buffers'.
-Use M-0 `ace-window' to toggle this value."
-  :type 'boolean)
-
-(defcustom aw-ignore-current nil
-  "When t, `ace-window' will ignore `selected-window'."
-  :type 'boolean)
-
-(defcustom aw-background t
-  "When t, `ace-window' will dim out all buffers temporarily when used.'."
-  :type 'boolean)
-
-(defcustom aw-leading-char-style 'char
-  "Style of the leading char overlay."
-  :type '(choice
-          (const :tag "single char" 'char)
-          (const :tag "full path" 'path)))
-
-(defcustom aw-dispatch-always nil
-  "When non-nil, `ace-window' will issue a `read-char' even for one window.
-This will make `ace-window' act different from `other-window' for
-  one or two windows."
-  :type 'boolean)
-
-(defface aw-leading-char-face
-    '((((class color)) (:foreground "red"))
-      (((background dark)) (:foreground "gray100"))
-      (((background light)) (:foreground "gray0"))
-      (t (:foreground "gray100" :underline nil)))
-  "Face for each window's leading char.")
-
-(defface aw-background-face
-  '((t (:foreground "gray40")))
-  "Face for whole window background during selection.")
-
-(defface aw-mode-line-face
-    '((t (:inherit mode-line-buffer-id)))
-  "Face used for displaying the ace window key in the mode-line.")
-
-;;* Implementation
-(defun aw-ignored-p (window)
-  "Return t if WINDOW should be ignored."
-  (or (and aw-ignore-on
-           (member (buffer-name (window-buffer window))
-                   aw-ignored-buffers))
-      (and aw-ignore-current
-           (equal window (selected-window)))))
-
-(defun aw-window-list ()
-  "Return the list of interesting windows."
-  (sort
-   (cl-remove-if
-    (lambda (w)
-      (let ((f (window-frame w)))
-        (or (not (and (frame-live-p f)
-                      (frame-visible-p f)))
-            (string= "initial_terminal" (terminal-name f))
-            (aw-ignored-p w))))
-    (cl-case aw-scope
-      (global
-       (cl-mapcan #'window-list (frame-list)))
-      (frame
-       (window-list))
-      (t
-       (error "Invalid `aw-scope': %S" aw-scope))))
-   'aw-window<))
-
-(defvar aw-overlays-back nil
-  "Hold overlays for when `aw-background' is t.")
-
-(defvar ace-window-mode nil
-  "Minor mode during the selection process.")
-
-;; register minor mode
-(or (assq 'ace-window-mode minor-mode-alist)
-    (nconc minor-mode-alist
-           (list '(ace-window-mode ace-window-mode))))
-
-(defvar aw-empty-buffers-list nil
-  "Store the read-only empty buffers which had to be modified.
-Modify them back eventually.")
-
-(defun aw--done ()
-  "Clean up mode line and overlays."
-  ;; mode line
-  (aw-set-mode-line nil)
-  ;; background
-  (mapc #'delete-overlay aw-overlays-back)
-  (setq aw-overlays-back nil)
-  (avy--remove-leading-chars)
-  (dolist (b aw-empty-buffers-list)
-    (with-current-buffer b
-      (when (string= (buffer-string) " ")
-        (let ((inhibit-read-only t))
-          (delete-region (point-min) (point-max))))))
-  (setq aw-empty-buffers-list nil))
-
-(defun aw--lead-overlay (path leaf)
-  "Create an overlay using PATH at LEAF.
-LEAF is (PT . WND)."
-  (let ((wnd (cdr leaf)))
-    (with-selected-window wnd
-      (when (= 0 (buffer-size))
-        (push (current-buffer) aw-empty-buffers-list)
-        (let ((inhibit-read-only t))
-          (insert " ")))
-      (let* ((pt (car leaf))
-             (ol (make-overlay pt (1+ pt) (window-buffer wnd)))
-             (old-str (or
-                       (ignore-errors
-                         (with-selected-window wnd
-                           (buffer-substring pt (1+ pt))))
-                       ""))
-             (new-str
-              (concat
-               (cl-case aw-leading-char-style
-                 (char
-                  (apply #'string (last path)))
-                 (path
-                  (apply #'string (reverse path)))
-                 (t
-                  (error "Bad `aw-leading-char-style': %S"
-                         aw-leading-char-style)))
-               (cond ((string-equal old-str "\t")
-                      (make-string (1- tab-width) ?\ ))
-                     ((string-equal old-str "\n")
-                      "\n")
-                     (t
-                      (make-string
-                       (max 0 (1- (string-width old-str)))
-                       ?\ ))))))
-        (overlay-put ol 'face 'aw-leading-char-face)
-        (overlay-put ol 'window wnd)
-        (overlay-put ol 'display new-str)
-        (push ol avy--overlays-lead)))))
-
-(defun aw--make-backgrounds (wnd-list)
-  "Create a dim background overlay for each window on WND-LIST."
-  (when aw-background
-    (setq aw-overlays-back
-          (mapcar (lambda (w)
-                    (let ((ol (make-overlay
-                               (window-start w)
-                               (window-end w)
-                               (window-buffer w))))
-                      (overlay-put ol 'face 'aw-background-face)
-                      ol))
-                  wnd-list))))
-
-(define-obsolete-variable-alias
-    'aw-flip-keys 'aw--flip-keys "0.1.0"
-    "Use `aw-dispatch-alist' instead.")
-
-(defvar aw-dispatch-function 'aw-dispatch-default
-  "Function to call when a character not in `aw-keys' is pressed.")
-
-(defvar aw-action nil
-  "Function to call at the end of `aw-select'.")
-
-(defun aw-set-mode-line (str)
-  "Set mode line indicator to STR."
-  (setq ace-window-mode str)
-  (force-mode-line-update))
-
-(defvar aw-dispatch-alist
-  '((?x aw-delete-window " Ace - Delete Window")
-    (?m aw-swap-window " Ace - Swap Window")
-    (?n aw-flip-window)
-    (?v aw-split-window-vert " Ace - Split Vert Window")
-    (?b aw-split-window-horz " Ace - Split Horz Window")
-    (?i delete-other-windows " Ace - Maximize Window")
-    (?o delete-other-windows))
-  "List of actions for `aw-dispatch-default'.")
-
-(defun aw-dispatch-default (char)
-  "Perform an action depending on CHAR."
-  (let ((val (cdr (assoc char aw-dispatch-alist))))
-    (if val
-        (if (and (car val) (cadr val))
-            (prog1 (setq aw-action (car val))
-              (aw-set-mode-line (cadr val)))
-          (funcall (car val))
-          (throw 'done 'exit))
-      (avy-handler-default char))))
-
-(defun aw-select (mode-line &optional action)
-  "Return a selected other window.
-Amend MODE-LINE to the mode line for the duration of the selection."
-  (setq aw-action action)
-  (let ((start-window (selected-window))
-        (next-window-scope (cl-case aw-scope
-                             ('global 'visible)
-                             ('frame 'frame)))
-        (wnd-list (aw-window-list))
-        window)
-    (setq window
-          (cond ((<= (length wnd-list) 1)
-                 (when aw-dispatch-always
-                   (setq aw-action
-                         (unwind-protect
-                              (catch 'done
-                                (funcall aw-dispatch-function (read-char)))
-                           (aw--done)))
-                   (when (eq aw-action 'exit)
-                     (setq aw-action nil)))
-                 (or (car wnd-list) start-window))
-                ((and (= (length wnd-list) 2)
-                      (not aw-dispatch-always)
-                      (not aw-ignore-current))
-                 (let ((wnd (next-window nil nil next-window-scope)))
-                   (while (and (aw-ignored-p wnd)
-                               (not (equal wnd start-window)))
-                     (setq wnd (next-window wnd nil next-window-scope)))
-                   wnd))
-                (t
-                 (let ((candidate-list
-                        (mapcar (lambda (wnd)
-                                  (cons (aw-offset wnd) wnd))
-                                wnd-list)))
-                   (aw--make-backgrounds wnd-list)
-                   (aw-set-mode-line mode-line)
-                   ;; turn off helm transient map
-                   (remove-hook 'post-command-hook 'helm--maybe-update-keymap)
-                   (unwind-protect
-                        (let* ((avy-handler-function aw-dispatch-function)
-                               (res (avy-read (avy-tree candidate-list aw-keys)
-                                              #'aw--lead-overlay
-                                              #'avy--remove-leading-chars)))
-                          (if (eq res 'exit)
-                              (setq aw-action nil)
-                            (or (cdr res)
-                                start-window)))
-                     (aw--done))))))
-    (if aw-action
-        (funcall aw-action window)
-      window)))
-
-;;* Interactive
-;;;###autoload
-(defun ace-select-window ()
-  "Ace select window."
-  (interactive)
-  (aw-select " Ace - Window"
-             #'aw-switch-to-window))
-
-;;;###autoload
-(defun ace-delete-window ()
-  "Ace delete window."
-  (interactive)
-  (aw-select " Ace - Delete Window"
-             #'aw-delete-window))
-
-;;;###autoload
-(defun ace-swap-window ()
-  "Ace swap window."
-  (interactive)
-  (aw-select " Ace - Swap Window"
-             #'aw-swap-window))
-
-;;;###autoload
-(defun ace-maximize-window ()
-  "Ace maximize window."
-  (interactive)
-  (aw-select " Ace - Maximize Window"
-             #'delete-other-windows))
-
-;;;###autoload
-(defun ace-window (arg)
-  "Select a window.
-Perform an action based on ARG described below.
-
-By default, behaves like extended `other-window'.
-
-Prefixed with one \\[universal-argument], does a swap between the
-selected window and the current window, so that the selected
-buffer moves to current window (and current buffer moves to
-selected window).
-
-Prefixed with two \\[universal-argument]'s, deletes the selected
-window."
-  (interactive "p")
-  (cl-case arg
-    (0
-     (setq aw-ignore-on
-           (not aw-ignore-on))
-     (ace-select-window))
-    (4 (ace-swap-window))
-    (16 (ace-delete-window))
-    (t (ace-select-window))))
-
-;;* Utility
-(defun aw-window< (wnd1 wnd2)
-  "Return true if WND1 is less than WND2.
-This is determined by their respective window coordinates.
-Windows are numbered top down, left to right."
-  (let ((f1 (window-frame wnd1))
-        (f2 (window-frame wnd2))
-        (e1 (window-edges wnd1))
-        (e2 (window-edges wnd2)))
-    (cond ((string< (frame-parameter f1 'window-id)
-                    (frame-parameter f2 'window-id))
-           t)
-          ((< (car e1) (car e2))
-           t)
-          ((> (car e1) (car e2))
-           nil)
-          ((< (cadr e1) (cadr e2))
-           t))))
-
-(defvar aw--window-ring (make-ring 10)
-  "Hold the window switching history.")
-
-(defun aw--push-window (window)
-  "Store WINDOW to `aw--window-ring'."
-  (when (or (zerop (ring-length aw--window-ring))
-            (not (equal
-                  (ring-ref aw--window-ring 0)
-                  window)))
-    (ring-insert aw--window-ring (selected-window))))
-
-(defun aw--pop-window ()
-  "Return the removed top of `aw--window-ring'."
-  (let (res)
-    (condition-case nil
-        (while (or (not (window-live-p
-                         (setq res (ring-remove aw--window-ring 0))))
-                   (equal res (selected-window))))
-      (error
-       (if (= (length (aw-window-list)) 2)
-           (progn
-             (other-window 1)
-             (setq res (selected-window)))
-         (error "No previous windows stored"))))
-    res))
-
-(defun aw-switch-to-window (window)
-  "Switch to the window WINDOW."
-  (let ((frame (window-frame window)))
-    (when (and (frame-live-p frame)
-               (not (eq frame (selected-frame))))
-      (select-frame-set-input-focus frame))
-    (if (window-live-p window)
-        (progn
-          (aw--push-window (selected-window))
-          (select-window window))
-      (error "Got a dead window %S" window))))
-
-(defun aw-flip-window ()
-  "Switch to the window you were previously in."
-  (interactive)
-  (aw-switch-to-window (aw--pop-window)))
-
-(defun aw-delete-window (window)
-  "Delete window WINDOW."
-  (let ((frame (window-frame window)))
-    (when (and (frame-live-p frame)
-               (not (eq frame (selected-frame))))
-      (select-frame-set-input-focus (window-frame window)))
-    (if (= 1 (length (window-list)))
-        (delete-frame frame)
-      (if (window-live-p window)
-          (delete-window window)
-        (error "Got a dead window %S" window)))))
-
-(defcustom aw-swap-invert nil
-  "When non-nil, the other of the two swapped windows gets the point."
-  :type 'boolean)
-
-(defun aw-swap-window (window)
-  "Swap buffers of current window and WINDOW."
-  (cl-labels ((swap-windows (window1 window2)
-                "Swap the buffers of WINDOW1 and WINDOW2."
-                (let ((buffer1 (window-buffer window1))
-                      (buffer2 (window-buffer window2)))
-                  (set-window-buffer window1 buffer2)
-                  (set-window-buffer window2 buffer1)
-                  (select-window window2))))
-    (let ((frame (window-frame window))
-          (this-window (selected-window)))
-      (when (and (frame-live-p frame)
-                 (not (eq frame (selected-frame))))
-        (select-frame-set-input-focus (window-frame window)))
-      (when (and (window-live-p window)
-                 (not (eq window this-window)))
-        (aw--push-window this-window)
-        (if aw-swap-invert
-            (swap-windows window this-window)
-          (swap-windows this-window window))))))
-
-(defun aw-split-window-vert (window)
-  "Split WINDOW vertically."
-  (select-window window)
-  (split-window-vertically))
-
-(defun aw-split-window-horz (window)
-  "Split WINDOW horizontally."
-  (select-window window)
-  (split-window-horizontally))
-
-(defun aw-offset (window)
-  "Return point in WINDOW that's closest to top left corner.
-The point is writable, i.e. it's not part of space after newline."
-  (let ((h (window-hscroll window))
-        (beg (window-start window))
-        (end (window-end window))
-        (inhibit-field-text-motion t))
-    (with-current-buffer
-        (window-buffer window)
-      (save-excursion
-        (goto-char beg)
-        (while (and (< (point) end)
-                    (< (- (line-end-position)
-                          (line-beginning-position))
-                       h))
-          (forward-line))
-        (+ (point) h)))))
-
-;;* Mode line
-;;;###autoload
-(define-minor-mode ace-window-display-mode
-    "Minor mode for showing the ace window key in the mode line."
-  :global t
-  (if ace-window-display-mode
-      (progn
-        (aw-update)
-        (set-default
-         'mode-line-format
-         `((ace-window-display-mode
-            (:eval (window-parameter (selected-window) 'ace-window-path)))
-           ,@(assq-delete-all
-              'ace-window-display-mode
-              (default-value 'mode-line-format))))
-        (force-mode-line-update t)
-        (add-hook 'window-configuration-change-hook 'aw-update))
-    (set-default
-     'mode-line-format
-     (assq-delete-all
-      'ace-window-display-mode
-      (default-value 'mode-line-format)))
-    (remove-hook 'window-configuration-change-hook 'aw-update)))
-
-(defun aw-update ()
-  "Update ace-window-path window parameter for all windows."
-  (avy-traverse
-   (avy-tree (aw-window-list) aw-keys)
-   (lambda (path leaf)
-     (set-window-parameter
-      leaf 'ace-window-path
-      (propertize
-       (apply #'string (reverse path))
-       'face 'aw-mode-line-face)))))
-
-(provide 'ace-window)
-
-;;; ace-window.el ends here
diff --git a/packages/ahungry-theme/.gitignore 
b/packages/ahungry-theme/.gitignore
deleted file mode 100644
index 51661dd..0000000
--- a/packages/ahungry-theme/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-flycheck_*.el
diff --git a/packages/ahungry-theme/LICENSE.md 
b/packages/ahungry-theme/LICENSE.md
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/ahungry-theme/LICENSE.md
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 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.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  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, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public 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.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/ahungry-theme/README.md b/packages/ahungry-theme/README.md
deleted file mode 100644
index 0543b09..0000000
--- a/packages/ahungry-theme/README.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Color Theme Ahungry
-
-[![MELPA](http://melpa.org/packages/ahungry-theme-badge.svg)](http://melpa.org/#/ahungry-theme)
-
-This is a color theme with bold bright colors that works well with GNU
-Emacs in non window mode.
-
-## Installation
-To install, clone the repository via:
-
-```
-cd ~/.emacs.d
-git clone https://github.com/ahungry/color-theme-ahungry.git
-```
-
-Then, make sure to add the following to your ~/.emacs:
-### Using load-theme
-```lisp
-(add-to-list 'custom-theme-load-path "~/.emacs.d/color-theme-ahungry/")
-
-;; Only set this if you wish to retain your own font settings
-;; otherwise, leave it out.
-(setq ahungry-theme-font-settings nil)
-
-(load-theme 'ahungry t)
-```
-the first time you load it, you will need to accept the theme.
-
-### Using color-theme.el
-
-```lisp
-(add-to-list 'load-path "~/.emacs.d/color-theme-ahungry/")
-(require 'color-theme-ahungry)
-(color-theme-ahungry)
-```
-
-## Different sample shots
-These are shots in various language modes with random wallpapers
-taken while using emacs in rxvt-unicode with a transparent background
-set under the ~/.Xresources config.
-
-### Emacs Config (~/.emacs)
-![~/.emacs](http://ahungry.com/images/color-theme-ahungry/require.png)
-
-### Common Lisp
-![Common Lisp](http://ahungry.com/images/color-theme-ahungry/common-lisp.png)
-
-### PHP
-![PHP](http://ahungry.com/images/color-theme-ahungry/php.png)
-
-### Perl
-![Perl](http://ahungry.com/images/color-theme-ahungry/perl.png)
-
-### C
-![C](http://ahungry.com/images/color-theme-ahungry/c.png)
-
-### Javascript
-![Javascript](http://ahungry.com/images/color-theme-ahungry/javascript.png)
-
-### Assembly
-![Assembly](http://ahungry.com/images/color-theme-ahungry/assembly.png)
-
-## License
-GPLv3
diff --git a/packages/ahungry-theme/ahungry-theme.el 
b/packages/ahungry-theme/ahungry-theme.el
deleted file mode 100644
index 4e49a2f..0000000
--- a/packages/ahungry-theme/ahungry-theme.el
+++ /dev/null
@@ -1,357 +0,0 @@
-;;; ahungry-theme.el --- Ahungry color theme for Emacs.  Make sure to 
(load-theme 'ahungry).  -*- lexical-binding:t -*-
-
-;; Copyright (C) 2015-2018  Free Software Foundation, Inc.
-
-;; Author: Matthew Carter <m@ahungry.com>
-;; Maintainer: Matthew Carter <m@ahungry.com>
-;; URL: https://github.com/ahungry/color-theme-ahungry
-;; Version: 1.10.0
-;; Keywords: ahungry palette color theme emacs color-theme deftheme
-;; Package-Requires: ((emacs "24"))
-
-;; This file is part of GNU Emacs.
-
-;;; License:
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Bright and bold color theme for GNU Emacs.
-
-;; If you load it from a terminal, you will be able to make use of the
-;; transparent background.  If you load it from a GUI, it will default
-;; to a dark background.
-
-;;; News:
-
-;;;; Changes since 1.8.0:
-;; - Add eyebrowse face and rainbow-delimiters/blocks faces.
-
-;;;; Changes since 1.7.0:
-;; - Make helm faces easier on the eyes (less backgrounds).
-
-;;;; Changes since 1.6.0:
-;; - Add man/woman faces.
-
-;;;; Changes since 1.5.0:
-;; - Bump up font size
-;; - Make dark blues a little brighter.
-
-;;;; Changes since 1.4.0:
-;; - Add Man faces
-;; - Add button face
-
-;;;; Changes since 1.3.0:
-;; - Add realgud overlay arrow colors
-;; - Reverse org-link faces for readability
-
-;;;; Changes since 1.2.0:
-;; - Few new faces related to helm-grep search results (poor contrast 
previously)
-;; - Merge in GNU Elpa changes (avoid message clobbering in color-theme-mode)
-;; - Add lexical binding to the top of the file
-
-;;;; Changes since 1.1.0:
-;; - New variable ahungry-theme-font-settings to avoid overriding user font 
sizes
-;; - Add info-mode faces
-
-;;;; Changes since 1.0.12:
-;; - Add erc/jabber faces to begin with
-
-;;;; Changes since 1.0.11:
-;; - Purple is too hard to read on poor contrast monitors, use a blue
-
-;;;; Changes since 1.0.10:
-;; - Add faces for powerline/spaceline setup
-;; - Reduce org-mode heading sizes slightly
-
-;;;; Changes since 1.0.9:
-;; - Add/adjust some of the org-mode faces
-
-;;;; Changes since 1.0.8:
-;; - Add even more colors for magit 2.0 face names
-
-;;;; Changes since 1.0.7:
-;; - Add colors for magit 2.0 face names
-
-;;;; Changes since 1.0.6:
-;; - Remove warning producing call to "default" background color
-;; - Add a color update for mm-uu-extract
-
-;;;; Changes since 1.0.5:
-;; - Add a few colors for helm (the defaults did not work well with this theme)
-
-;;;; Changes since 1.0.4:
-;; - Don't circumvent normal autoloads functionality, use the comment load 
method
-
-;;;; Changes since 1.0.3:
-;; - Manually include an autoloads file to make sure
-;;   custom-theme-load-path is filled out
-;; - Update description to make mention of (load-theme 'ahungry) for new users
-
-;;; Code:
-
-(deftheme ahungry
-  "Ahungry Theme")
-
-(defvar ahungry-theme-font-settings
-  '(:family "Terminus" :foundry "xos4"
-            :slant normal :weight normal
-            :height 130 :width normal)
-  "If set to nil, will avoid overriding the user font settings.
-Leave this alone to retain defaults.
-
-Default value:
-   (:family \"Terminus\" :foundry \"xos4\"
-            :slant normal :weight normal
-            :height 100 :width normal)")
-
-(let ((mainbg (when (display-graphic-p) "#101010")));; "default")))
-  (custom-theme-set-faces
-   'ahungry ;; This is the theme name
-   `(default ((t (:foreground "#ffffff" :background ,mainbg
-                              ,@ahungry-theme-font-settings))))
-   '(cursor ((t (:background "#fce94f" :foreground "#ffffff"))))
-   '(highlight ((t (:background "brown4" :foreground nil))))
-   '(border ((t (:background "#888a85"))))
-   '(fringe ((t (:background "#333333"))))
-   '(error ((t (:foreground "Red1" :bold t))))
-   '(mode-line ((t (:foreground "#0022aa" :bold t :background "#77ff00"
-                                :box (:line-width 1 :color nil :style 
released-button)))))
-   '(mode-line-inactive ((t (:foreground "#444444" :background "#66ff33"))))
-   '(mode-line-buffer-id ((t (:bold t :foreground "#ffffff" :background 
"#0055ff"))))
-   '(powerline-active1 ((t (:foreground "#ffffff" :background "#222222"))))
-   '(powerline-active2 ((t (:foreground "#ffffff" :background "#77ff00"))))
-   '(powerline-inactive1 ((t (:foreground "#ffffff" :background "#555555"))))
-   '(powerline-inactive2 ((t (:foreground "#ffffff" :background "#66ff33"))))
-   '(spaceline-flycheck-error ((t (:foreground "#ff0066" :background 
"#333333"))))
-   '(spaceline-flycheck-info ((t (:foreground "#ffaa00" :background 
"#333333"))))
-   '(spaceline-flycheck-warning ((t (:foreground "#ffaa00" :background 
"#333333"))))
-   '(region ((t (:background "#444444"))))
-   '(link ((t (:underline t :foreground "#33ff99"))))
-   '(custom-link ((t (:inherit 'link))))
-   '(match ((t (:bold t :background "#e9b96e" :foreground "#2e3436"))))
-   '(tool-tips ((t (:inherit 'variable-pitch :foreground "black" :background 
"#ffff33"))))
-   '(tooltip ((t (:inherit 'variable-pitch :foreground "black" :background 
"#ffff33"))))
-   '(bold ((t (:bold t :underline nil :background nil))))
-   '(italic ((t (:italic t :underline nil :background nil))))
-   '(font-lock-builtin-face ((t (:foreground "#0099ff"))))
-   '(font-lock-comment-face ((t (:foreground "#888a85" :bold nil :italic t))))
-   '(font-lock-constant-face ((t (:foreground "#fff900"))))
-   '(font-lock-doc-face ((t (:foreground "#777700" :bold t :italic t))))
-   '(font-lock-keyword-face ((t (:foreground "#3cff00" :bold t))))
-   '(font-lock-string-face ((t (:foreground "#ff0077" :italic nil :bold nil))))
-   '(font-lock-type-face ((t (:foreground "#deff00" :bold t))))
-   '(font-lock-variable-name-face ((t (:foreground "#0066ff" :bold t))))
-   '(font-lock-warning-face ((t (:bold t :foreground "#ff0000"))))
-   '(font-lock-function-name-face ((t (:foreground "#ffee00" :bold t))))
-   '(comint-highlight-input ((t (:italic t :bold t))))
-   '(comint-highlight-prompt ((t (:foreground "#33cc33"))))
-   '(diff-header ((t (:background "#444444"))))
-   '(diff-index ((t (:foreground "#ffff00" :bold t))))
-   '(diff-file-header ((t (:foreground "#aaaaaa" :bold t))))
-   '(diff-hunk-header ((t (:foreground "#ffff00"))))
-   '(diff-added ((t (:background "default" :foreground "#00ff00" :weight 
normal))))
-   '(diff-removed ((t (:background "default" :foreground "#ff0000" :weight 
normal))))
-   '(diff-context ((t (:foreground "#777777"))))
-   '(diff-refine-change ((t (:bold t :background "#444444"))))
-   '(isearch ((t (:background "#ff6600" :foreground "#333333"))))
-   '(isearch-lazy-highlight-face ((t (:foreground "#2e3436" :background 
"#ff6600"))))
-   '(show-paren-match-face ((t (:background "#ff6600" :foreground "#2e3436"))))
-   '(show-paren-mismatch-face ((t (:background "#999999" :foreground 
"#ff6600"))))
-   '(diary ((t (:bold t :foreground "#ff0000"))))
-   '(message-cited-text ((t (:foreground "#ffc800"))))
-   '(gnus-cite-1 ((t (:foreground "#999999"))))
-   '(gnus-cite-2 ((t (:foreground "#cba559"))))
-   '(gnus-cite-3 ((t (:foreground "#83ae92"))))
-   '(gnus-cite-4 ((t (:foreground "#6898a7"))))
-   '(gnus-cite-face-1 ((t (:foreground "#999999"))))
-   '(gnus-cite-face-2 ((t (:foreground "#cba559"))))
-   '(gnus-cite-face-3 ((t (:foreground "#83ae92"))))
-   '(gnus-cite-face-4 ((t (:foreground "#6898a7"))))
-   '(gnus-group-mail-1-empty ((t (:foreground "#009955"))))
-   '(gnus-group-mail-1 ((t (:bold t :foreground "#ff9900"))))
-   '(gnus-group-mail-2-empty ((t (:foreground "#009955"))))
-   '(gnus-group-mail-2 ((t (:bold t :foreground "#ffaa00"))))
-   '(gnus-group-mail-3-empty ((t (:foreground "#009955"))))
-   '(gnus-group-mail-3 ((t (:bold t :foreground "#ffcc00"))))
-   '(gnus-group-mail-low-empty ((t (:foreground "#009955"))))
-   '(gnus-group-mail-low ((t (:bold t :foreground "#005fff"))))
-   '(gnus-group-news-1-empty ((t (:foreground "#009955"))))
-   '(gnus-group-news-1 ((t (:bold t :foreground "#ff9900"))))
-   '(gnus-group-news-2-empty ((t (:foreground "#009955"))))
-   '(gnus-group-news-2 ((t (:bold t :foreground "#ffaa00"))))
-   '(gnus-group-news-3-empty ((t (:foreground "#009955"))))
-   '(gnus-group-news-3 ((t (:bold t :foreground "#ffcc00"))))
-   '(gnus-group-news-low-empty ((t (:foreground "#009955"))))
-   '(gnus-group-news-low ((t (:bold t :foreground "#005fff"))))
-   '(gnus-header-name ((t (:bold t :foreground "#33ffbb"))))
-   '(gnus-header-from ((t (:bold t :foreground "#ffc800"))))
-   '(gnus-header-subject ((t (:foreground "#ffc800"))))
-   '(gnus-header-content ((t (:italic t :foreground "#33cc33"))))
-   '(gnus-header-newsgroups ((t (:italic t :bold t :foreground "#0088ff"))))
-   '(gnus-signature ((t (:italic t :foreground "#666666"))))
-   '(gnus-summary-cancelled ((t (:background "#222222" :foreground 
"#ffff00"))))
-   '(gnus-summary-high-ancient ((t (:bold t :foreground "#0099ff"))))
-   '(gnus-summary-high-read ((t (:bold t :foreground "#33ff99"))))
-   '(gnus-summary-high-ticked ((t (:bold t :foreground "#f68585"))))
-   '(gnus-summary-high-unread ((t (:bold t :foreground "#ffffff"))))
-   '(gnus-summary-low-ancient ((t (:italic t :foreground "#33ff99"))))
-   '(gnus-summary-low-read ((t (:italic t :foreground "#0099ff"))))
-   '(gnus-summary-low-ticked ((t (:italic t :foreground "#ff3333"))))
-   '(gnus-summary-low-unread ((t (:italic t :foreground "#ffffff"))))
-   '(gnus-summary-normal-ancient ((t (:foreground "#0099ff"))))
-   '(gnus-summary-normal-read ((t (:foreground "#33ff99"))))
-   '(gnus-summary-normal-ticked ((t (:foreground "#ff0000"))))
-   '(gnus-summary-normal-unread ((t (:foreground "#ffffff"))))
-   '(gnus-summary-selected ((t (:background "brown4" :foreground "#ffffff"))))
-   '(message-header-name ((t (:foreground "#f68585"))))
-   '(message-header-newsgroups ((t (:italic t :bold t :foreground "#0088ff"))))
-   '(message-header-other ((t (:foreground "#0088ff"))))
-   '(message-header-xheader ((t (:foreground "#0088ff"))))
-   '(message-header-subject ((t (:foreground "#ffffff"))))
-   '(message-header-to ((t (:foreground "#ffffff"))))
-   '(message-header-cc ((t (:foreground "#ffffff"))))
-   '(mm-uu-extract ((t (:foreground "#0066ff"))))
-   '(org-hide ((t (:foreground "#222222"))))
-   '(org-level-1 ((t (:bold t :foreground "#4477ff" :height 1.4))))
-   '(org-level-2 ((t (:bold nil :foreground "#ffc800" :height 1.1))))
-   '(org-level-3 ((t (:bold t :foreground "#00aa33" :height 1.0))))
-   '(org-level-4 ((t (:bold nil :foreground "#f68585" :height 1.0))))
-   '(org-date ((t (:underline t :foreground "#ff0066"))))
-   '(org-footnote  ((t (:underline t :foreground "#ff0066"))))
-   '(org-link ((t (:background "#111111" :foreground "#ff0099"))))
-   '(org-special-keyword ((t (:foreground "#cc0033"))))
-   '(org-verbatim ((t (:foreground "#cc6600" :underline t :slant italic))))
-   '(org-block ((t (:foreground "#999999"))))
-   '(org-quote ((t (:inherit org-block :bold t :slant italic))))
-   '(org-verse ((t (:inherit org-block :bold t :slant italic))))
-   '(org-table ((t (:foreground "#0055ff"))))
-   '(org-todo ((t (:bold t :foreground "#ff0099"))))
-   '(org-done ((t (:bold t :foreground "#00cc33"))))
-   '(org-agenda-structure ((t (:weight bold :foreground "#f68585"))))
-   '(org-agenda-date ((t (:foreground "#00ff55"))))
-   '(org-agenda-date-weekend ((t (:weight normal :foreground "#005fff"))))
-   '(org-agenda-date-today ((t (:weight bold :foreground "#ffc800"))))
-   '(org-agenda-done ((t (:weight normal :foreground "#00aa33"))))
-   '(org-agenda-clocking ((t (:background "#333333" :weight bold))))
-   '(org-block-begin-line ((t (:foreground "#bbbbbb" :background "#333333"))))
-   '(org-block-background ((t (:background "#333333"))))
-   '(org-block-end-line ((t (:foreground "#bbbbbb" :background "#333333"))))
-   '(org-document-title ((t (:weight bold :foreground "#0077cc"))))
-   '(org-document-info ((t (:weight normal :foreground "#0077cc"))))
-   '(org-document-info-keyword ((t (:weight normal :foreground "#aaaaaa"))))
-   '(org-warning ((t (:weight normal :foreground "#ee0033"))))
-   '(magit-hash ((t (:foreground "#6699aa"))))
-   '(magit-branch-local ((t (:foreground "#0066ff"))))
-   '(magit-branch-remote ((t (:foreground "#ffcc44"))))
-   '(magit-diffstat-added ((t (:foreground "#00ff66"))))
-   '(magit-diff-added-highlight ((t (:foreground "#33ff00" :weight normal))))
-   '(magit-diff-added ((t (:foreground "#44aa00" :weight normal))))
-   '(magit-diff-removed-highlight ((t (:foreground "#ff0033" :weight normal))))
-   '(magit-diff-removed ((t (:foreground "#aa0044" :weight normal))))
-   '(magit-diff-hunk-heading ((t (:foreground "#aaaa00"))))
-   '(magit-diff-hunk-heading-highlight ((t (:foreground "#ffff00"))))
-   '(magit-diffstat-removed ((t (:foreground "#ff0066"))))
-   '(magit-diff-context-highlight ((t (:foreground "#ffffff"))))
-   '(magit-section-heading ((t (:foreground "#ff0066"))))
-   '(magit-section-highlight ((t (:weight bold))));;:foreground "#ffffff"))))
-   '(minibuffer-prompt ((t (:foreground "#0055ff" :bold t))))
-   '(web-mode-html-tag-bracket-face ((t (:foreground "#666666"))))
-   '(helm-ff-directory ((t (:background "gold1" :foreground "#000000" :bold 
t))))
-   '(helm-ff-dotted-directory ((t (:foreground "#666"))))
-   '(helm-ff-dotted-symlink-directory ((t (:foreground "#999"))))
-   '(helm-grep-cmd-line ((t (:foreground "#0022aa"))))
-   '(helm-grep-finish ((t (:foreground "#0022aa"))))
-   '(helm-selection ((t (:foreground "#cf0066" :bold t))))
-   '(helm-match ((t (:foreground "gold1"))))
-   '(helm-visible-mark ((t (:foreground "#cf0066" :bold nil :italic t))))
-   '(helm-source-header ((t (:foreground "#36c" :bold t :italic t))))
-   '(helm-swoop-target-line-block-face ((t (:background "#ff6" :foreground 
"#000" :italic t))))
-   '(helm-swoop-target-line-face ((t (:background "#ff6" :foreground "#000" 
:italic t))))
-   '(helm-swoop-target-word-face ((t (:background "#000" :foreground "#ff6" 
:bold nil :italic t :underline t))))
-   '(erc-nick-default-face ((t (:foreground "#ff0099"))))
-   '(erc-current-nick-face ((t (:foreground "#0099ff"))))
-   '(erc-input-face ((t (:foreground "#0099ff"))))
-   '(erc-prompt-face ((t (:background nil :foreground "#666666" :bold t 
:italic t))))
-   '(erc-timestamp-face ((t (:background nil :foreground "#666666" :bold nil 
:italic t))))
-   '(jabber-chat-prompt-foreign ((t (:foreground "#ff0099"))))
-   '(jabber-chat-prompt-local ((t (:foreground "#0099ff"))))
-   '(jabber-rare-time-face ((t (:foreground "#666666" :bold nil :italic t))))
-   '(eshell-prompt ((t (:foreground "#0099ff"))))
-   '(info-menu-header ((t (:foreground "#0099ff" :bold t :underline t))))
-   '(info-header-xref ((t (:foreground "#0099ff"))))
-   '(info-header-node ((t (:foreground "#ff0099" :bold t :italic t))))
-   '(info-menu-star ((t (:foreground "#0099ff" :bold t))))
-   '(info-xref-visited ((t (:foreground "#999999"))))
-   '(info-xref ((t (:foreground "#0099ff"))))
-   '(info-node ((t (:foreground "#ff0099"))))
-   '(info-title-1 ((t (:foreground "yellow" :bold t))))
-   '(info-title-2 ((t (:foreground "#ff0099"))))
-   '(realgud-line-number ((t (:foreground "#999999"))))
-   '(realgud-overlay-arrow1 ((t (:foreground "#6699ff"))))
-   '(realgud-overlay-arrow2 ((t (:foreground "#0099ff"))))
-   '(realgud-overlay-arrow3 ((t (:foreground "#00aa99"))))
-   '(button ((t (:foreground "#0055ff" :bold t :underline t))))
-   '(Man-overstrike ((t (:foreground "yellow" :bold t))))
-   '(Man-underline ((t (:foreground "orange" :underline t))))
-   '(woman-bold ((t (:foreground "yellow" :bold t))))
-   '(woman-italic ((t (:foreground "orange" :underline t))))
-   '(evil-ex-lazy-highlight ((t (:foreground "orange" :italic t :bold t))))
-   '(dired-filetype-program ((t (:foreground "#0066ff"))))
-   '(diredp-compressed-file-suffix ((t (:foreground "#0066ff"))))
-   '(avy-lead-face ((t (:foreground "#f09" :bold t))))
-   '(avy-lead-face-0 ((t (:foreground "#cf0" :bold t))))
-   '(avy-lead-face-1 ((t (:foreground "#09f" :bold t))))
-   '(avy-lead-face-2 ((t (:foreground "#0ff" :bold t))))
-   '(eyebrowse-mode-line-active ((t (:bold t))))
-   '(eyebrowse-mode-line-inactive ((t (:bold nil))))
-
-   '(rainbow-delimiters-depth-1-face ((t (:foreground "#cf0"))))
-   '(rainbow-delimiters-depth-2-face ((t (:foreground "#0cf"))))
-   '(rainbow-delimiters-depth-3-face ((t (:foreground "#ff0"))))
-   '(rainbow-delimiters-depth-4-face ((t (:foreground "#0ff"))))
-   '(rainbow-delimiters-depth-5-face ((t (:foreground "#ff7"))))
-   '(rainbow-delimiters-depth-6-face ((t (:foreground "#f90"))))
-   '(rainbow-delimiters-depth-7-face ((t (:foreground "#f0a"))))
-   '(rainbow-delimiters-depth-8-face ((t (:foreground "#a0f"))))
-   '(rainbow-delimiters-depth-9-face ((t (:foreground "#0fa"))))
-
-   '(rainbow-blocks-depth-1-face ((t (:foreground "#cf0"))))
-   '(rainbow-blocks-depth-2-face ((t (:foreground "#0cf"))))
-   '(rainbow-blocks-depth-3-face ((t (:foreground "#ff0"))))
-   '(rainbow-blocks-depth-4-face ((t (:foreground "#0ff"))))
-   '(rainbow-blocks-depth-5-face ((t (:foreground "#ff7"))))
-   '(rainbow-blocks-depth-6-face ((t (:foreground "#f90"))))
-   '(rainbow-blocks-depth-7-face ((t (:foreground "#f0a"))))
-   '(rainbow-blocks-depth-8-face ((t (:foreground "#a0f"))))
-   '(rainbow-blocks-depth-9-face ((t (:foreground "#0fa"))))
-
-   '(link ((t (:foreground "#af0"))))
-   '(hackernews-link ((t (:foreground "#af0"))))
-   )
-  (custom-theme-set-variables
-   'ahungry
-   '(red "#ffffff"))
-  )
-
-;;;###autoload
-(when (and load-file-name (boundp 'custom-theme-load-path))
- (add-to-list
-      'custom-theme-load-path
-      (file-name-as-directory (file-name-directory load-file-name))))
-
-(provide-theme 'ahungry)
-
-;;; ahungry-theme.el ends here
diff --git a/packages/ahungry-theme/color-theme-ahungry.el 
b/packages/ahungry-theme/color-theme-ahungry.el
deleted file mode 100644
index c2c8326..0000000
--- a/packages/ahungry-theme/color-theme-ahungry.el
+++ /dev/null
@@ -1,217 +0,0 @@
-;;; color-theme-ahungry.el --- Ahungry color theme for Emacs.
-
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
-
-;; Author: Matthew Carter <m@ahungry.com>
-;; Maintainer: Matthew Carter <m@ahungry.com>
-;; URL: https://github.com/ahungry/color-theme-ahungry
-;; Version: 1.7.0
-;; Keywords: ahungry palette color theme emacs color-theme deftheme
-;; Package-Requires: ((color-theme "6.6.1"))
-
-;; This file is part of GNU Emacs.
-
-;;; License:
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Bright and bold color theme for GNU Emacs.
-
-;; If you load it from a terminal, you will be able to make use of the
-;; transparent background.  If you load it from a GUI, it will default
-;; to a dark background.
-
-;;; Code:
-
-(declare-function color-theme-install "color-theme" (theme))
-
-;; Currently background-color and foreground-color are intentionally left
-;; commented out, so that the color-theme in terminal mode will not overwrite
-;; a transparent background, while still remaining usable in GUI mode
-(defun color-theme-ahungry ()
-  "A color theme to my personal liking."
-  (interactive)
-  (color-theme-install
-   '(color-theme-ahungry
-     (;;(background-color . (if (display-graphic-p) "#2e3434" "default")) ; If 
-nw mode use transparent bg
-      (background-mode . light)
-      (border-color . "#888a85")
-      (cursor-color . "#ffffff")
-      ;;(foreground-color . "#ffffff")
-      (mouse-color . "#8ae234"))
-     (cursor ((t (:background "#fce94f" :foreground "#ffffff"))))
-     (highlight ((t (:background "brown4" :foreground nil))))
-     (border ((t (:background "#888a85"))))
-     (fringe ((t (:background "#333333"))))
-     (mode-line ((t (:foreground "#0022ff" :bold t :background "#77ff00"
-                                 :box (:line-width 1 :color nil :style 
released-button)))))
-     (mode-line-inactive ((t (:foreground "#444444" :background "#66ff33"))))
-     (mode-line-buffer-id ((t (:bold t :foreground "#ffffff" :background 
"#0055ff"))))
-     (region ((t (:background "#444444"))))
-     (link ((t (:underline t :foreground "#33ff99"))))
-     (custom-link ((t (:inherit 'link))))
-     (match ((t (:bold t :background "#e9b96e" :foreground "#2e3436"))))
-     (tool-tips ((t (:inherit 'variable-pitch :foreground "black" :background 
"#ffff33"))))
-     (tooltip ((t (:inherit 'variable-pitch :foreground "black" :background 
"#ffff33"))))
-     (bold ((t (:bold t :underline nil :background nil))))
-     (italic ((t (:italic t :underline nil :background nil))))
-     (font-lock-builtin-face ((t (:foreground "#0055ff"))))
-     (font-lock-comment-face ((t (:foreground "#888a85" :bold nil :italic t))))
-     (font-lock-constant-face ((t (:foreground "#fff900"))))
-     (font-lock-doc-face ((t (:foreground "#777700" :bold t :italic t))))
-     (font-lock-keyword-face ((t (:foreground "#3cff00" :bold t))))
-     (font-lock-string-face ((t (:foreground "#ff0077" :italic nil :bold 
nil))))
-     (font-lock-type-face ((t (:foreground "#deff00" :bold t))))
-     (font-lock-variable-name-face ((t (:foreground "#9900ff" :bold t))))
-     (font-lock-warning-face ((t (:bold t :foreground "#ff0000"))))
-     (font-lock-function-name-face ((t (:foreground "#ffee00" :bold t))))
-     (comint-highlight-input ((t (:italic t :bold t))))
-     (comint-highlight-prompt ((t (:foreground "#33cc33"))))
-     (diff-header ((t (:background "#444444"))))
-     (diff-index ((t (:foreground "#ffff00" :bold t))))
-     (diff-file-header ((t (:foreground "#aaaaaa" :bold t))))
-     (diff-hunk-header ((t (:foreground "#ffff00"))))
-     (diff-added ((t (:background "default" :foreground "#00ff00" :weight 
normal))))
-     (diff-removed ((t (:background "default" :foreground "#ff0000" :weight 
normal))))
-     (diff-context ((t (:foreground "#777777"))))
-     (diff-refine-change ((t (:bold t :background "#444444"))))
-     (isearch ((t (:background "#ff6600" :foreground "#333333"))))
-     (isearch-lazy-highlight-face ((t (:foreground "#2e3436" :background 
"#ff6600"))))
-     (show-paren-match-face ((t (:background "#ff6600" :foreground 
"#2e3436"))))
-     (show-paren-mismatch-face ((t (:background "#999999" :foreground 
"#ff6600"))))
-     (info-xref ((t (:foreground "#33ffbb"))))
-     (info-xref-visited ((t (:foreground "#999999"))))
-     (diary ((t (:bold t :foreground "#ff0000"))))
-     (message-cited-text ((t (:foreground "#ffc800"))))
-     (gnus-cite-1 ((t (:foreground "#999999"))))
-     (gnus-cite-2 ((t (:foreground "#cba559"))))
-     (gnus-cite-3 ((t (:foreground "#83ae92"))))
-     (gnus-cite-4 ((t (:foreground "#6898a7"))))
-     (gnus-cite-face-1 ((t (:foreground "#999999"))))
-     (gnus-cite-face-2 ((t (:foreground "#cba559"))))
-     (gnus-cite-face-3 ((t (:foreground "#83ae92"))))
-     (gnus-cite-face-4 ((t (:foreground "#6898a7"))))
-     (gnus-group-mail-1-empty ((t (:foreground "#00bbff"))))
-     (gnus-group-mail-1 ((t (:bold t :foreground "#00bbff"))))
-     (gnus-group-mail-2-empty ((t (:foreground "#00ffbb"))))
-     (gnus-group-mail-2 ((t (:bold t :foreground "#00ffbb"))))
-     (gnus-group-mail-3-empty ((t (:foreground "#33ffbb"))))
-     (gnus-group-mail-3 ((t (:bold t :foreground "#ffc800"))))
-     (gnus-group-mail-low-empty ((t (:foreground "#005fff"))))
-     (gnus-group-mail-low ((t (:bold t :foreground "#005fff"))))
-     (gnus-group-news-1-empty ((t (:foreground "#00bbff"))))
-     (gnus-group-news-1 ((t (:bold t :foreground "#00bbff"))))
-     (gnus-group-news-2-empty ((t (:foreground "#00ffbb"))))
-     (gnus-group-news-2 ((t (:bold t :foreground "#00ffbb"))))
-     (gnus-group-news-3-empty ((t (:foreground "#33ffbb"))))
-     (gnus-group-news-3 ((t (:bold t :foreground "#ffc800"))))
-     (gnus-group-news-low-empty ((t (:foreground "#005fff"))))
-     (gnus-group-news-low ((t (:bold t :foreground "#005fff"))))
-     (gnus-header-name ((t (:bold t :foreground "#33ffbb"))))
-     (gnus-header-from ((t (:bold t :foreground "#ffc800"))))
-     (gnus-header-subject ((t (:foreground "#ffc800"))))
-     (gnus-header-content ((t (:italic t :foreground "#33cc33"))))
-     (gnus-header-newsgroups ((t (:italic t :bold t :foreground "#0088ff"))))
-     (gnus-signature ((t (:italic t :foreground "#666666"))))
-     (gnus-summary-cancelled ((t (:background "#222222" :foreground 
"#ffff00"))))
-     (gnus-summary-high-ancient ((t (:bold t :foreground "#0099ff"))))
-     (gnus-summary-high-read ((t (:bold t :foreground "#33ff99"))))
-     (gnus-summary-high-ticked ((t (:bold t :foreground "#f68585"))))
-     (gnus-summary-high-unread ((t (:bold t :foreground "#ffffff"))))
-     (gnus-summary-low-ancient ((t (:italic t :foreground "#33ff99"))))
-     (gnus-summary-low-read ((t (:italic t :foreground "#0099ff"))))
-     (gnus-summary-low-ticked ((t (:italic t :foreground "#ff3333"))))
-     (gnus-summary-low-unread ((t (:italic t :foreground "#ffffff"))))
-     (gnus-summary-normal-ancient ((t (:foreground "#0099ff"))))
-     (gnus-summary-normal-read ((t (:foreground "#33ff99"))))
-     (gnus-summary-normal-ticked ((t (:foreground "#ff0000"))))
-     (gnus-summary-normal-unread ((t (:foreground "#ffffff"))))
-     (gnus-summary-selected ((t (:background "brown4" :foreground "#ffffff"))))
-     (message-header-name ((t (:foreground "#f68585"))))
-     (message-header-newsgroups ((t (:italic t :bold t :foreground 
"#0088ff"))))
-     (message-header-other ((t (:foreground "#0088ff"))))
-     (message-header-xheader ((t (:foreground "#0088ff"))))
-     (message-header-subject ((t (:foreground "#ffffff"))))
-     (message-header-to ((t (:foreground "#ffffff"))))
-     (message-header-cc ((t (:foreground "#ffffff"))))
-     (org-hide ((t (:foreground "#009933"))))
-     (org-level-1 ((t (:bold t :foreground "#4477ff" :height 1.5))))
-     (org-level-2 ((t (:bold nil :foreground "#ffc800" :height 1.2))))
-     (org-level-3 ((t (:bold t :foreground "#00aa33" :height 1.0))))
-     (org-level-4 ((t (:bold nil :foreground "#f68585" :height 1.0))))
-     (org-date ((t (:underline t :foreground "#ff0066"))))
-     (org-footnote  ((t (:underline t :foreground "#ff0066"))))
-     (org-link ((t (:background "#111111" :foreground "#ff0099"))))
-     (org-special-keyword ((t (:foreground "#cc0033"))))
-     (org-verbatim ((t (:foreground "#cc6600" :underline t :slant italic))))
-     (org-block ((t (:foreground "#999999"))))
-     (org-quote ((t (:inherit org-block :bold t :slant italic))))
-     (org-verse ((t (:inherit org-block :bold t :slant italic))))
-     (org-todo ((t (:bold t :foreground "#ff0099"))))
-     (org-done ((t (:bold t :foreground "#00cc33"))))
-     (org-agenda-structure ((t (:weight bold :foreground "#f68585"))))
-     (org-agenda-date ((t (:foreground "#00ff55"))))
-     (org-agenda-date-weekend ((t (:weight normal :foreground "#005fff"))))
-     (org-agenda-date-today ((t (:weight bold :foreground "#ffc800"))))
-     (org-agenda-done ((t (:weight normal :foreground "#00aa33"))))
-     (org-block-begin-line ((t (:foreground "#bbbbbb" :background "#333333"))))
-     (org-block-background ((t (:background "#333333"))))
-     (org-block-end-line ((t (:foreground "#bbbbbb" :background "#333333"))))
-     (org-document-title ((t (:weight bold :foreground "#0077cc"))))
-     (org-document-info ((t (:weight normal :foreground "#0077cc"))))
-     (org-warning ((t (:weight normal :foreground "#ee0033"))))
-     (magit-header ((t (:foreground "#ffc800"))))
-     (magit-diff-add ((t (:foreground "#00ff00"))))
-     (magit-diff-del ((t (:foreground "#ff0000"))))
-     (magit-item-highlight ((t (:background "#111111" :slant normal :weight 
extra-bold :inverse-video nil))))
-     (minibuffer-prompt ((t (:foreground "#0055ff" :bold t))))
-     (web-mode-html-tag-bracket-face ((t (:foreground "#666666"))))
-     (helm-selection ((t (:foreground "#ff0099" :italic t :bold t :background 
"#f2e997"))))
-     (helm-match ((t (:foreground "gold1"))))
-     (helm-visible-mark ((t (:background "#f2e997" :foreground "#ff0099" :bold 
nil :italic nil))))
-
-     (erc-nick-default-face ((t (:foreground "#ff0099"))))
-     (erc-current-nick-face ((t (:foreground "#0099ff"))))
-     (erc-input-face ((t (:foreground "#0099ff"))))
-     (erc-prompt-face ((t (:background nil :foreground "#666666" :bold t 
:italic t))))
-     (erc-timestamp-face ((t (:background nil :foreground "#666666" :bold nil 
:italic t))))
-     (jabber-chat-prompt-foreign ((t (:foreground "#ff0099"))))
-     (jabber-chat-prompt-local ((t (:foreground "#0099ff"))))
-     (jabber-rare-time-face ((t (:foreground "#666666" :bold nil :italic t))))
-     (eshell-prompt ((t (:foreground "#0099ff"))))
-     (info-menu-header ((t (:foreground "#0099ff" :bold t :underline t))))
-     (info-header-xref ((t (:foreground "#0099ff"))))
-     (info-header-node ((t (:foreground "#ff0099" :bold t :italic t))))
-     (info-menu-star ((t (:foreground "#0099ff" :bold t))))
-     (info-xref-visited ((t (:foreground "#999999"))))
-     (info-xref ((t (:foreground "#0099ff"))))
-     (info-node ((t (:foreground "#ff0099"))))
-     (info-title-1 ((t (:foreground "yellow" :bold t))))
-     (info-title-2 ((t (:foreground "#ff0099"))))
-     (realgud-line-number ((t (:foreground "#999999"))))
-     (realgud-overlay-arrow1 ((t (:foreground "#6699ff"))))
-     (realgud-overlay-arrow2 ((t (:foreground "#0099ff"))))
-     (realgud-overlay-arrow3 ((t (:foreground "#00aa99"))))
-     (button ((t (:foreground "#0055ff" :bold t :underline t))))
-     (Man-overstrike ((t (:foreground "yellow" :bold t))))
-     (Man-underline ((t (:foreground "orange" :underline t))))
-     (woman-bold ((t (:foreground "yellow" :bold t))))
-     (woman-italic ((t (:foreground "orange" :underline t))))
-     )))
-
-(provide 'color-theme-ahungry)
-
-;;; color-theme-ahungry.el ends here
diff --git a/packages/avy/.dir-locals.el b/packages/avy/.dir-locals.el
deleted file mode 100644
index 8b24b64..0000000
--- a/packages/avy/.dir-locals.el
+++ /dev/null
@@ -1,9 +0,0 @@
-;;; Directory Local Variables
-;;; For more information see (info "(emacs) Directory Variables")
-
-((emacs-lisp-mode
-  (indent-tabs-mode . nil)
-  (outline-regexp . ";;\\([;*]+ [^\s\t\n]\\|###autoload\\)\\|(")
-  (sentence-end-double-space . t)
-  ;; (lisp-indent-function . common-lisp-indent-function)
-  ))
diff --git a/packages/avy/Makefile b/packages/avy/Makefile
deleted file mode 100644
index 430da88..0000000
--- a/packages/avy/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-emacs ?= emacs
-# EMACS = emacs-24.3
-
-LOAD = -l avy.el -l avy-test.el
-
-.PHONY: all test clean checkdoc
-
-all: compile test checkdoc
-
-test:
-       $(emacs) -batch $(LOAD) -f ert-run-tests-batch-and-exit
-
-checkdoc:
-       $(emacs) -batch -l targets/checkdoc.el
-
-compile:
-       $(emacs) -batch -l targets/avy-init.el
-
-run:
-       $(emacs) -Q -l targets/avy-init.el
-
-clean:
-       rm -f *.elc
diff --git a/packages/avy/README.md b/packages/avy/README.md
deleted file mode 100644
index 76455de..0000000
--- a/packages/avy/README.md
+++ /dev/null
@@ -1,127 +0,0 @@
-[![MELPA](https://melpa.org/packages/avy-badge.svg)](https://melpa.org/#/avy)
-[![MELPA 
Stable](https://stable.melpa.org/packages/avy-badge.svg)](https://stable.melpa.org/#/avy)
-
-## Introduction
-
-`avy` is a GNU Emacs package for jumping to visible text using a char-based 
decision tree.  See also 
[ace-jump-mode](https://github.com/winterTTr/ace-jump-mode) and 
[vim-easymotion](https://github.com/Lokaltog/vim-easymotion) - `avy` uses the 
same idea.
-
-![logo](https://raw.githubusercontent.com/wiki/abo-abo/avy/images/avy-avatar-1.png)
-
-## Command overview
-
-You can bind some of these useful commands in your config.
-
-### `avy-goto-char`
-
-> Input one char, jump to it with a tree.
-
-```elisp
-(global-set-key (kbd "C-:") 'avy-goto-char)
-```
-
-After <kbd>C-: b</kbd>:
-
-![avy-goto-char](https://raw.githubusercontent.com/wiki/nloyola/avy/images/avy-goto-char.png)
-
-### `avy-goto-char-2`
-
-> Input two consecutive chars, jump to the first one with a tree.
-
-The advantage over the previous one is less candidates for the tree search. 
And it's not too inconvenient to enter two consecutive chars instead of one.
-
-```elisp
-(global-set-key (kbd "C-'") 'avy-goto-char-2)
-```
-
-After <kbd>C-' bu</kbd>:
-
-![avy-goto-char-2](http://oremacs.com/download/avi-goto-char-2.png)
-
-### `avy-goto-char-timer`
-
-> Input an arbitrary amount of consecutive chars, jump to the first one with a 
tree.
-
-This is a more flexible version of `avy-goto-char-2`. First part works 
similarly to `isearch`: you type a query and it's highlighted dynamically on 
the screen.  When you stop typing for `avy-timeout-seconds` (0.5s by default), 
you'll be able to select one of the candidates with `avy`. As you're inputting 
characters, you can use `C-h` (backspace) or `DEL` (delete) to
-forget the last typed character and `RET` to end the input sequence 
immediately and select a candidate.
-
-### `avy-goto-line`
-
-> Input zero chars, jump to a line start with a tree.
-
-```elisp
-(global-set-key (kbd "M-g f") 'avy-goto-line)
-```
-
-After <kbd>M-g f</kbd>:
-
-![avy-goto-line](http://oremacs.com/download/avi-goto-line.png)
-
-You can actually replace the <kbd>M-g g</kbd> binding of `goto-line`, since if 
you enter a digit for `avy-goto-line`, it will switch to `goto-line` with that 
digit already entered.
-
-### `avy-goto-word-1`
-
-> Input one char at word start, jump to a word start with a tree.
-
-```elisp
-(global-set-key (kbd "M-g w") 'avy-goto-word-1)
-```
-
-After <kbd>M-g wb</kbd>:
-
-![avy-goto-word-1](http://oremacs.com/download/avi-goto-word-1.png)
-
-### `avy-goto-word-0`
-
-> Input zero chars, jump to a word start with a tree.
-
-Compared to `avy-goto-word-1`, there are a lot more candidates. But at a least 
there's not need to input the initial char.
-
-```elisp
-(global-set-key (kbd "M-g e") 'avy-goto-word-0)
-```
-
-After <kbd>M-g e</kbd>:
-
-![avy-goto-word-0](http://oremacs.com/download/avi-goto-word-0.png)
-
-### Org-mode commands
-
-  * `avy-org-goto-heading-timer`: Type part of an Org heading.  When you stop 
typing, if only one heading on the screen matches, it will be jumped to; if 
more than one matches, you can jump to a heading with Avy.  This is like 
`avy-goto-char-timer` but for Org headings.
-  * `avy-org-refile-as-child`: With point in an entry you want to refile, run 
this command, select a heading with Avy, and the entry will be refiled as its 
first child heading.  This makes it quick and easy to refile to headings that 
are visible on-screen, even to other windows or buffers.
-
-### Other commands
-
-There are some more commands which you can explore yourself by looking at the 
code.
-
-### Bindings
-
-You add this to your config to bind some stuff:
-
-```elisp
-(avy-setup-default)
-(global-set-key (kbd "C-c C-j") 'avy-resume)
-```
-
-It will bind, for example, `avy-isearch` to <kbd>C-'</kbd> in 
`isearch-mode-map`, so that you can select one of the currently visible 
`isearch` candidates using `avy`.
-
-### Customization
-
-See the comprehensive custom variable list on [the defcustom wiki 
page](https://github.com/abo-abo/avy/wiki/defcustom).
-
-See how to write your own avy commands on [the custom-commands wiki 
page](https://github.com/abo-abo/avy/wiki/custom-commands).
-
-## Contributing
-
-### Copyright Assignment
-
-Avy is subject to the same [copyright 
assignment](http://www.gnu.org/prep/maintain/html_node/Copyright-Papers.html) 
policy as Emacs itself, org-mode, CEDET and other packages in [GNU 
ELPA](http://elpa.gnu.org/packages/). Any [legally 
significant](http://www.gnu.org/prep/maintain/html_node/Legally-Significant.html#Legally-Significant)
 contributions can only be accepted after the author has completed their 
paperwork. Please see [the request 
form](http://git.savannah.gnu.org/cgit/gnulib.git [...]
-
-The copyright assignment isn't a big deal, it just says that the copyright for 
your submitted changes to Emacs belongs to the FSF. This assignment works for 
all projects related to Emacs. To obtain it, you need to send one email, then 
send one letter (if you live in the US, it's digital), and wait for some time 
(in my case, I had to wait for one month).
-
-### Style
-
-The basic code style guide is to use `(setq indent-tabs-mode nil)`. It is 
provided for you in 
[.dir-locals.el](https://github.com/abo-abo/avy/blob/master/.dir-locals.el), 
please obey it.
-
-Before submitting the change, run `make compile` and `make test` to make sure 
that it doesn't introduce new compile warnings or test failures. Also run `make 
checkdoc` to see that your changes obey the documentation guidelines.
-
-Use your own judgment for the commit messages, I recommend a verbose style 
using `magit-commit-add-log`.
diff --git a/packages/avy/avy-test.el b/packages/avy/avy-test.el
deleted file mode 100644
index bb03599..0000000
--- a/packages/avy/avy-test.el
+++ /dev/null
@@ -1,72 +0,0 @@
-;;; avy-test.el --- Tests for avy
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'ert)
-(require 'avy)
-
-(ert-deftest avy-subdiv ()
-  (should
-   (equal (avy-subdiv 5 4)
-          '(1 1 1 2)))
-  (should
-   (equal (avy-subdiv 10 4)
-          '(1 1 4 4)))
-  (should
-   (equal (avy-subdiv 16 4)
-          '(4 4 4 4)))
-  (should
-   (equal (avy-subdiv 17 4)
-          '(4 4 4 5)))
-  (should
-   (equal (avy-subdiv 27 4)
-          '(4 4 4 15)))
-  (should
-   (equal (avy-subdiv 50 4)
-          '(4 14 16 16)))
-  (should
-   (equal (avy-subdiv 65 4)
-          '(16 16 16 17))))
-
-(ert-deftest avy-tree ()
-  (should
-   (equal
-    (avy-tree '(0 1 2 3 4 5 6 7 8 9 10)
-              '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
-    '((97 leaf . 0)
-      (115 leaf . 1)
-      (100 leaf . 2)
-      (102 leaf . 3)
-      (103 leaf . 4)
-      (104 leaf . 5)
-      (106 leaf . 6)
-      (107 leaf . 7)
-      (108 (97 leaf . 8)
-       (115 leaf . 9)
-       (100 leaf . 10))))))
-
-(provide 'avy-test)
-
-;;; avy-test.el ends here
diff --git a/packages/avy/avy.el b/packages/avy/avy.el
deleted file mode 100644
index 8b258da..0000000
--- a/packages/avy/avy.el
+++ /dev/null
@@ -1,2142 +0,0 @@
-;;; avy.el --- Jump to arbitrary positions in visible text and select text 
quickly. -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel <ohwoeowho@gmail.com>
-;; URL: https://github.com/abo-abo/avy
-;; Version: 0.5.0
-;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
-;; Keywords: point, location
-
-;; This file is part of GNU Emacs.
-
-;; This file is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; With Avy, you can move point to any position in Emacs – even in a
-;; different window – using very few keystrokes. For this, you look at
-;; the position where you want point to be, invoke Avy, and then enter
-;; the sequence of characters displayed at that position.
-;;
-;; If the position you want to jump to can be determined after only
-;; issuing a single keystroke, point is moved to the desired position
-;; immediately after that keystroke. In case this isn't possible, the
-;; sequence of keystrokes you need to enter is comprised of more than
-;; one character. Avy uses a decision tree where each candidate position
-;; is a leaf and each edge is described by a character which is distinct
-;; per level of the tree. By entering those characters, you navigate the
-;; tree, quickly arriving at the desired candidate position, such that
-;; Avy can move point to it.
-;;
-;; Note that this only makes sense for positions you are able to see
-;; when invoking Avy. These kinds of positions are supported:
-;;
-;; * character positions
-;; * word or subword start positions
-;; * line beginning positions
-;; * link positions
-;; * window positions
-;;
-;; If you're familiar with the popular `ace-jump-mode' package, this
-;; package does all that and more, without the implementation
-;; headache.
-
-;;; Code:
-(require 'cl-lib)
-(require 'ring)
-
-;;* Customization
-(defgroup avy nil
-  "Jump to things tree-style."
-  :group 'convenience
-  :prefix "avy-")
-
-(defcustom avy-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
-  "Default keys for jumping.
-Any key is either a character representing a self-inserting
-key (letters, digits, punctuation, etc.) or a symbol denoting a
-non-printing key like an arrow key (left, right, up, down).  For
-non-printing keys, a corresponding entry in
-`avy-key-to-char-alist' must exist in order to visualize the key
-in the avy overlays.
-
-If `avy-style' is set to words, make sure there are at least three
-keys different than the following: a, e, i, o, u, y"
-  :type '(repeat :tag "Keys" (choice
-                              (character :tag "char")
-                              (symbol :tag "non-printing key"))))
-
-(defconst avy--key-type
-  '(choice :tag "Command"
-    (const avy-goto-char)
-    (const avy-goto-char-2)
-    (const avy-isearch)
-    (const avy-goto-line)
-    (const avy-goto-subword-0)
-    (const avy-goto-subword-1)
-    (const avy-goto-word-0)
-    (const avy-goto-word-1)
-    (const avy-copy-line)
-    (const avy-copy-region)
-    (const avy-move-line)
-    (const avy-move-region)
-    (const avy-kill-whole-line)
-    (const avy-kill-region)
-    (const avy-kill-ring-save-whole-line)
-    (const avy-kill-ring-save-region)
-    (function :tag "Other command")))
-
-(defcustom avy-keys-alist nil
-  "Alist of avy-jump commands to `avy-keys' overriding the default `avy-keys'."
-  :type `(alist
-          :key-type ,avy--key-type
-          :value-type (repeat :tag "Keys" character)))
-
-(defcustom avy-orders-alist '((avy-goto-char . avy-order-closest))
-  "Alist of candidate ordering functions.
-Usually, candidates appear in their point position order."
-  :type `(alist
-          :key-type ,avy--key-type
-          :value-type function))
-
-(defcustom avy-words
-  '("am" "by" "if" "is" "it" "my" "ox" "up"
-    "ace" "act" "add" "age" "ago" "aim" "air" "ale" "all" "and" "ant" "any"
-    "ape" "apt" "arc" "are" "arm" "art" "ash" "ate" "awe" "axe" "bad" "bag"
-    "ban" "bar" "bat" "bay" "bed" "bee" "beg" "bet" "bid" "big" "bit" "bob"
-    "bot" "bow" "box" "boy" "but" "cab" "can" "cap" "car" "cat" "cog" "cop"
-    "cow" "cry" "cup" "cut" "day" "dew" "did" "die" "dig" "dim" "dip" "dog"
-    "dot" "dry" "dub" "dug" "dye" "ear" "eat" "eel" "egg" "ego" "elf" "eve"
-    "eye" "fan" "far" "fat" "fax" "fee" "few" "fin" "fit" "fix" "flu" "fly"
-    "foe" "fog" "for" "fox" "fry" "fun" "fur" "gag" "gap" "gas" "gel" "gem"
-    "get" "gig" "gin" "gnu" "god" "got" "gum" "gun" "gut" "guy" "gym" "had"
-    "hag" "ham" "has" "hat" "her" "hid" "him" "hip" "his" "hit" "hop" "hot"
-    "how" "hub" "hue" "hug" "hut" "ice" "icy" "imp" "ink" "inn" "ion" "ire"
-    "ivy" "jab" "jam" "jar" "jaw" "jet" "job" "jog" "joy" "key" "kid" "kit"
-    "lag" "lap" "lay" "let" "lid" "lie" "lip" "lit" "lob" "log" "lot" "low"
-    "mad" "man" "map" "mat" "may" "men" "met" "mix" "mob" "mop" "mud" "mug"
-    "nag" "nap" "new" "nil" "nod" "nor" "not" "now" "nun" "oak" "odd" "off"
-    "oil" "old" "one" "orb" "ore" "ork" "our" "out" "owl" "own" "pad" "pan"
-    "par" "pat" "paw" "pay" "pea" "pen" "pet" "pig" "pin" "pit" "pod" "pot"
-    "pry" "pub" "pun" "put" "rag" "ram" "ran" "rat" "raw" "ray" "red" "rib"
-    "rim" "rip" "rob" "rod" "rot" "row" "rub" "rug" "rum" "run" "sad" "sat"
-    "saw" "say" "sea" "see" "sew" "she" "shy" "sin" "sip" "sit" "six" "ski"
-    "sky" "sly" "sob" "son" "soy" "spy" "sum" "sun" "tab" "tad" "tag" "tan"
-    "tap" "tar" "tax" "tea" "the" "tie" "tin" "tip" "toe" "ton" "too" "top"
-    "toy" "try" "tub" "two" "urn" "use" "van" "war" "was" "wax" "way" "web"
-    "wed" "wet" "who" "why" "wig" "win" "wit" "woe" "won" "wry" "you" "zap"
-    "zip" "zoo")
-  "Words to use in case `avy-style' is set to `words'.
-Every word should contain at least one vowel i.e. one of the following
-characters: a, e, i, o, u, y
-They do not have to be sorted but no word should be a prefix of another one."
-  :type '(repeat string))
-
-(defcustom avy-style 'at-full
-  "The default method of displaying the overlays.
-Use `avy-styles-alist' to customize this per-command."
-  :type '(choice
-          (const :tag "Pre" pre)
-          (const :tag "At" at)
-          (const :tag "At Full" at-full)
-          (const :tag "Post" post)
-          (const :tag "De Bruijn" de-bruijn)
-          (const :tag "Words" words)))
-
-(defcustom avy-styles-alist nil
-  "Alist of avy-jump commands to the style for each command.
-If the commands isn't on the list, `avy-style' is used."
-  :type '(alist
-          :key-type (choice :tag "Command"
-                     (const avy-goto-char)
-                     (const avy-goto-char-2)
-                     (const avy-isearch)
-                     (const avy-goto-line)
-                     (const avy-goto-subword-0)
-                     (const avy-goto-subword-1)
-                     (const avy-goto-word-0)
-                     (const avy-goto-word-1)
-                     (const avy-copy-line)
-                     (const avy-copy-region)
-                     (const avy-move-line)
-                     (const avy-move-region)
-                     (const avy-kill-whole-line)
-                     (const avy-kill-region)
-                     (const avy-kill-ring-save-whole-line)
-                     (const avy-kill-ring-save-region)
-                     (function :tag "Other command"))
-          :value-type (choice
-                       (const :tag "Pre" pre)
-                       (const :tag "At" at)
-                       (const :tag "At Full" at-full)
-                       (const :tag "Post" post)
-                       (const :tag "De Bruijn" de-bruijn)
-                       (const :tag "Words" words))))
-
-(defcustom avy-dispatch-alist
-  '((?x . avy-action-kill-move)
-    (?X . avy-action-kill-stay)
-    (?t . avy-action-teleport)
-    (?m . avy-action-mark)
-    (?n . avy-action-copy)
-    (?y . avy-action-yank)
-    (?i . avy-action-ispell)
-    (?z . avy-action-zap-to-char))
-  "List of actions for `avy-handler-default'.
-
-Each item is (KEY . ACTION).  When KEY not on `avy-keys' is
-pressed during the dispatch, ACTION is set to replace the default
-`avy-action-goto' once a candidate is finally selected."
-  :type
-  '(alist
-    :key-type (choice (character :tag "Char"))
-    :value-type (choice
-                 (const :tag "Mark" avy-action-mark)
-                 (const :tag "Copy" avy-action-copy)
-                 (const :tag "Kill and move point" avy-action-kill-move)
-                 (const :tag "Kill" avy-action-kill-stay))))
-
-(defcustom avy-background nil
-  "When non-nil, a gray background will be added during the selection."
-  :type 'boolean)
-
-(defcustom avy-all-windows t
-  "Determine the list of windows to consider in search of candidates."
-  :type
-  '(choice
-    (const :tag "All Frames" all-frames)
-    (const :tag "This Frame" t)
-    (const :tag "This Window" nil)))
-
-(defcustom avy-case-fold-search t
-  "Non-nil if searches should ignore case."
-  :type 'boolean)
-
-(defcustom avy-word-punc-regexp "[!-/:-@[-`{-~]"
-  "Regexp of punctuation chars that count as word starts for `avy-goto-word-1'.
-When nil, punctuation chars will not be matched.
-
-\"[!-/:-@[-\\=`{-~]\" will match all printable punctuation chars."
-  :type 'regexp)
-
-(defcustom avy-goto-word-0-regexp "\\b\\sw"
-  "Regexp that determines positions for `avy-goto-word-0'."
-  :type '(choice
-          (const :tag "Default" "\\b\\sw")
-          (const :tag "Symbol" "\\_<\\(\\sw\\|\\s_\\)")
-          (const :tag "Not whitespace" "[^ \r\n\t]+")
-          (regexp :tag "Regex")))
-
-(defcustom avy-ignored-modes '(image-mode doc-view-mode pdf-view-mode)
-  "List of modes to ignore when searching for candidates.
-Typically, these modes don't use the text representation."
-  :type 'list)
-
-(defcustom avy-single-candidate-jump t
-  "In case there is only one candidate jumps directly to it."
-  :type 'boolean)
-
-(defcustom avy-del-last-char-by '(8 127)
-  "List of event types, i.e. key presses, that delete the last
-character read.  The default represents `C-h' and `DEL'.  See
-`event-convert-list'."
-  :type 'list)
-
-(defvar avy-ring (make-ring 20)
-  "Hold the window and point history.")
-
-(defvar avy-translate-char-function #'identity
-  "Function to translate user input key into another key.
-For example, to make SPC do the same as ?a, use
-\(lambda (c) (if (= c 32) ?a c)).")
-
-(defface avy-lead-face-0
-  '((t (:foreground "white" :background "#4f57f9")))
-  "Face used for first non-terminating leading chars.")
-
-(defface avy-lead-face-1
-  '((t (:foreground "white" :background "gray")))
-  "Face used for matched leading chars.")
-
-(defface avy-lead-face-2
-  '((t (:foreground "white" :background "#f86bf3")))
-  "Face used for leading chars.")
-
-(defface avy-lead-face
-  '((t (:foreground "white" :background "#e52b50")))
-  "Face used for the leading chars.")
-
-(defface avy-background-face
-  '((t (:foreground "gray40")))
-  "Face for whole window background during selection.")
-
-(defface avy-goto-char-timer-face
-  '((t (:inherit highlight)))
-  "Face for matches during reading chars using `avy-goto-char-timer'.")
-
-(defconst avy-lead-faces '(avy-lead-face
-                           avy-lead-face-0
-                           avy-lead-face-2
-                           avy-lead-face
-                           avy-lead-face-0
-                           avy-lead-face-2)
-  "Face sequence for `avy--overlay-at-full'.")
-
-(defvar avy-key-to-char-alist '((left . ?◀)
-                                (right . ?▶)
-                                (up . ?▲)
-                                (down . ?▼)
-                                (prior . ?△)
-                                (next . ?▽))
-  "An alist from non-character keys to printable chars used in avy overlays.
-This alist must contain all keys used in `avy-keys' which are not
-self-inserting keys and thus aren't read as characters.")
-
-;;* Internals
-;;** Tree
-(defmacro avy-multipop (lst n)
-  "Remove LST's first N elements and return them."
-  `(if (<= (length ,lst) ,n)
-       (prog1 ,lst
-         (setq ,lst nil))
-     (prog1 ,lst
-       (setcdr
-        (nthcdr (1- ,n) (prog1 ,lst (setq ,lst (nthcdr ,n ,lst))))
-        nil))))
-
-(defun avy--de-bruijn (keys n)
-  "De Bruijn sequence for alphabet KEYS and subsequences of length N."
-  (let* ((k (length keys))
-         (a (make-list (* n k) 0))
-         sequence)
-    (cl-labels ((db (T p)
-                  (if (> T n)
-                      (if (eq (% n p) 0)
-                          (setq sequence
-                                (append sequence
-                                        (cl-subseq a 1 (1+ p)))))
-                    (setf (nth T a) (nth (- T p) a))
-                    (db (1+ T) p)
-                    (cl-loop for j from (1+ (nth (- T p) a)) to (1- k) do
-                         (setf (nth T a) j)
-                         (db (1+ T) T)))))
-      (db 1 1)
-      (mapcar (lambda (n)
-                (nth n keys))
-              sequence))))
-
-(defun avy--path-alist-1 (lst seq-len keys)
-  "Build a De Bruin sequence from LST.
-SEQ-LEN is how many elements of KEYS it takes to identify a match."
-  (let ((db-seq (avy--de-bruijn keys seq-len))
-        prev-pos prev-seq prev-win path-alist)
-    ;; The De Bruijn seq is cyclic, so append the seq-len - 1 first chars to
-    ;; the end.
-    (setq db-seq (nconc db-seq (cl-subseq db-seq 0 (1- seq-len))))
-    (cl-labels ((subseq-and-pop ()
-                  (when (nth (1- seq-len) db-seq)
-                    (prog1 (cl-subseq db-seq 0 seq-len)
-                      (pop db-seq)))))
-      (while lst
-        (let* ((cur (car lst))
-               (pos (cond
-                      ;; ace-window has matches of the form (pos . wnd)
-                      ((integerp (car cur)) (car cur))
-                      ;; avy-jump have form ((start . end) . wnd)
-                      ((consp (car cur)) (caar cur))
-                      (t (error "Unexpected match representation: %s" cur))))
-               (win (cdr cur))
-               (path (if prev-pos
-                         (let ((diff (if (eq win prev-win)
-                                         (- pos prev-pos)
-                                       0)))
-                           (when (and (> diff 0) (< diff seq-len))
-                             (while (and (nth (1- seq-len) db-seq)
-                                         (not
-                                          (eq 0
-                                              (cl-search
-                                               (cl-subseq prev-seq diff)
-                                               (cl-subseq db-seq 0 seq-len)))))
-                               (pop db-seq)))
-                           (subseq-and-pop))
-                       (subseq-and-pop))))
-          (if (not path)
-              (setq lst nil
-                    path-alist nil)
-            (push (cons path (car lst)) path-alist)
-            (setq prev-pos pos
-                  prev-seq path
-                  prev-win win
-                  lst (cdr lst))))))
-    (nreverse path-alist)))
-
-(defun avy-order-closest (x)
-  (abs (- (caar x) (point))))
-
-(defvar avy-command nil
-  "Store the current command symbol.
-E.g. 'avy-goto-line or 'avy-goto-char.")
-
-(defun avy-tree (lst keys)
-  "Coerce LST into a balanced tree.
-The degree of the tree is the length of KEYS.
-KEYS are placed appropriately on internal nodes."
-  (let* ((len (length keys))
-         (order-fn (cdr (assq avy-command avy-orders-alist)))
-         (lst (if order-fn
-                  (cl-sort lst #'< :key order-fn)
-                lst)))
-    (cl-labels
-        ((rd (ls)
-           (let ((ln (length ls)))
-             (if (< ln len)
-                 (cl-pairlis keys
-                             (mapcar (lambda (x) (cons 'leaf x)) ls))
-               (let ((ks (copy-sequence keys))
-                     res)
-                 (dolist (s (avy-subdiv ln len))
-                   (push (cons (pop ks)
-                               (if (eq s 1)
-                                   (cons 'leaf (pop ls))
-                                 (rd (avy-multipop ls s))))
-                         res))
-                 (nreverse res))))))
-      (rd lst))))
-
-(defun avy-subdiv (n b)
-  "Distribute N in B terms in a balanced way."
-  (let* ((p (1- (floor (+ (log n b) 1e-6))))
-         (x1 (expt b p))
-         (x2 (* b x1))
-         (delta (- n x2))
-         (n2 (/ delta (- x2 x1)))
-         (n1 (- b n2 1)))
-    (append
-     (make-list n1 x1)
-     (list
-      (- n (* n1 x1) (* n2 x2)))
-     (make-list n2 x2))))
-
-(defun avy-traverse (tree walker &optional recur-key)
-  "Traverse TREE generated by `avy-tree'.
-WALKER is a function that takes KEYS and LEAF.
-
-RECUR-KEY is used in recursion.
-
-LEAF is a member of LST argument of `avy-tree'.
-
-KEYS is the path from the root of `avy-tree' to LEAF."
-  (dolist (br tree)
-    (let ((key (cons (car br) recur-key)))
-      (if (eq (cadr br) 'leaf)
-          (funcall walker key (cddr br))
-        (avy-traverse (cdr br) walker key)))))
-
-(defvar avy-action nil
-  "Function to call at the end of select.")
-
-(defun avy-handler-default (char)
-  "The default handler for a bad CHAR."
-  (let (dispatch)
-    (cond ((setq dispatch (assoc char avy-dispatch-alist))
-           (setq avy-action (cdr dispatch))
-           (throw 'done 'restart))
-          ((memq char '(27 ?\C-g))
-           ;; exit silently
-           (throw 'done 'exit))
-          ((eq char ??)
-           (avy-show-dispatch-help)
-           (throw 'done 'restart))
-          ((mouse-event-p char)
-           (signal 'user-error (list "Mouse event not handled" char)))
-          (t
-           (message "No such candidate: %s, hit `C-g' to quit."
-                    (if (characterp char) (string char) char))))))
-
-(defun avy-show-dispatch-help ()
-  "Display action shortucts in echo area."
-  (let ((len (length "avy-action-")))
-    (message "%s" (mapconcat
-                   (lambda (x)
-                     (format "%s: %s"
-                             (propertize
-                              (char-to-string (car x))
-                              'face 'aw-key-face)
-                             (substring (symbol-name (cdr x)) len)))
-                   avy-dispatch-alist
-                   " "))))
-
-(defvar avy-handler-function 'avy-handler-default
-  "A function to call for a bad `read-key' in `avy-read'.")
-
-(defvar avy-current-path ""
-  "Store the current incomplete path during `avy-read'.")
-
-(defun avy-mouse-event-window (char)
-  "If CHAR is a mouse event, return the window of the event if any or the 
selected window.
-Return nil if not a mouse event."
-  (when (mouse-event-p char)
-    (cond ((windowp (posn-window (event-start char)))
-           (posn-window (event-start char)))
-          ((framep (posn-window (event-start char)))
-           (frame-selected-window (posn-window (event-start char))))
-          (t (selected-window)))))
-
-(defun avy-read (tree display-fn cleanup-fn)
-  "Select a leaf from TREE using consecutive `read-key'.
-
-DISPLAY-FN should take CHAR and LEAF and signify that LEAFs
-associated with CHAR will be selected if CHAR is pressed.  This is
-commonly done by adding a CHAR overlay at LEAF position.
-
-CLEANUP-FN should take no arguments and remove the effects of
-multiple DISPLAY-FN invocations."
-  (catch 'done
-    (setq avy-current-path "")
-    (while tree
-      (let ((avy--leafs nil))
-        (avy-traverse tree
-                      (lambda (path leaf)
-                        (push (cons path leaf) avy--leafs)))
-        (dolist (x avy--leafs)
-          (funcall display-fn (car x) (cdr x))))
-      (let ((char (funcall avy-translate-char-function (read-key)))
-            window
-            branch)
-        (funcall cleanup-fn)
-        (if (setq window (avy-mouse-event-window char))
-            (throw 'done (cons char window))
-          ;; Ensure avy-current-path stores the full path prior to
-          ;; exit so other packages can utilize its value.
-          (setq avy-current-path
-                (concat avy-current-path (string (avy--key-to-char char))))
-          (if (setq branch (assoc char tree))
-              (if (eq (car (setq tree (cdr branch))) 'leaf)
-                  (throw 'done (cdr tree)))
-            (funcall avy-handler-function char)))))))
-
-(defun avy-read-de-bruijn (lst keys)
-  "Select from LST dispatching on KEYS."
-  ;; In theory, the De Bruijn sequence B(k,n) has k^n subsequences of length n
-  ;; (the path length) usable as paths, thus that's the lower bound.  Due to
-  ;; partially overlapping matches, not all subsequences may be usable, so it's
-  ;; possible that the path-len must be incremented, e.g., if we're matching
-  ;; for x and a buffer contains xaxbxcx only every second subsequence is
-  ;; usable for the four matches.
-  (catch 'done
-    (let* ((path-len (ceiling (log (length lst) (length keys))))
-           (alist (avy--path-alist-1 lst path-len keys)))
-      (while (not alist)
-        (cl-incf path-len)
-        (setq alist (avy--path-alist-1 lst path-len keys)))
-      (let* ((len (length (caar alist)))
-             (i 0))
-        (setq avy-current-path "")
-        (while (< i len)
-          (dolist (x (reverse alist))
-            (avy--overlay-at-full (reverse (car x)) (cdr x)))
-          (let ((char (funcall avy-translate-char-function (read-key))))
-            (avy--remove-leading-chars)
-            (setq alist
-                  (delq nil
-                        (mapcar (lambda (x)
-                                  (when (eq (caar x) char)
-                                    (cons (cdr (car x)) (cdr x))))
-                                alist)))
-            (setq avy-current-path
-                  (concat avy-current-path (string (avy--key-to-char char))))
-            (cl-incf i)
-            (unless alist
-              (funcall avy-handler-function char))))
-        (cdar alist)))))
-
-(defun avy-read-words (lst words)
-  "Select from LST using WORDS."
-  (catch 'done
-    (let ((num-words (length words))
-          (num-entries (length lst))
-          alist)
-      ;; If there are not enough words to cover all the candidates,
-      ;; we use a De Bruijn sequence to generate the remaining ones.
-      (when (< num-words num-entries)
-        (let ((keys avy-keys)
-              (bad-keys '(?a ?e ?i ?o ?u ?y))
-              (path-len 1)
-              (num-remaining (- num-entries num-words))
-              tmp-alist)
-          ;; Delete all keys which could lead to duplicates.
-          ;; We want at least three keys left to work with.
-          (dolist (x bad-keys)
-            (when (memq x keys)
-              (setq keys (delq ?a keys))))
-          (when (< (length keys) 3)
-            (signal 'user-error
-                    '("Please add more keys to the variable `avy-keys'.")))
-          ;; Generate the sequence and add the keys to the existing words.
-          (while (not tmp-alist)
-            (cl-incf path-len)
-            (setq tmp-alist (avy--path-alist-1 lst path-len keys)))
-          (while (>= (cl-decf num-remaining) 0)
-            (push (mapconcat 'string (caar tmp-alist) nil) (cdr (last words)))
-            (setq tmp-alist (cdr tmp-alist)))))
-      (dolist (x lst)
-        (push (cons (string-to-list (pop words)) x) alist))
-      (setq avy-current-path "")
-      (while (or (> (length alist) 1)
-                 (caar alist))
-        (dolist (x (reverse alist))
-          (avy--overlay-at-full (reverse (car x)) (cdr x)))
-        (let ((char (funcall avy-translate-char-function (read-key))))
-          (avy--remove-leading-chars)
-          (setq alist
-                (delq nil
-                      (mapcar (lambda (x)
-                                (when (eq (caar x) char)
-                                  (cons (cdr (car x)) (cdr x))))
-                              alist)))
-          (setq avy-current-path
-                (concat avy-current-path (string (avy--key-to-char char))))
-          (unless alist
-            (funcall avy-handler-function char))))
-      (cdar alist))))
-
-;;** Rest
-(defun avy-window-list ()
-  "Return a list of windows depending on `avy-all-windows'."
-  (cond ((eq avy-all-windows 'all-frames)
-         (cl-mapcan #'window-list (frame-list)))
-
-        ((eq avy-all-windows t)
-         (window-list))
-
-        ((null avy-all-windows)
-         (list (selected-window)))
-
-        (t
-         (error "Unrecognized option: %S" avy-all-windows))))
-
-(defcustom avy-all-windows-alt nil
-  "The alternative `avy-all-windows' for use with \\[universal-argument]."
-  :type '(choice
-          (const :tag "Current window" nil)
-          (const :tag "All windows on the current frame" t)
-          (const :tag "All windows on all frames" all-frames)))
-
-(defmacro avy-dowindows (flip &rest body)
-  "Depending on FLIP and `avy-all-windows' run BODY in each or selected 
window."
-  (declare (indent 1)
-           (debug (form body)))
-  `(let ((avy-all-windows (if ,flip
-                              avy-all-windows-alt
-                            avy-all-windows)))
-     (dolist (wnd (avy-window-list))
-       (with-selected-window wnd
-         (unless (memq major-mode avy-ignored-modes)
-           ,@body)))))
-
-(defun avy-resume ()
-  "Stub to hold last avy command.
-Commands using `avy-with' macro can be resumed."
-  (interactive))
-
-(defmacro avy-with (command &rest body)
-  "Set `avy-keys' according to COMMAND and execute BODY.
-Set `avy-style' according to COMMMAND as well."
-  (declare (indent 1)
-           (debug (form body)))
-  `(let ((avy-keys (or (cdr (assq ',command avy-keys-alist))
-                       avy-keys))
-         (avy-style (or (cdr (assq ',command avy-styles-alist))
-                        avy-style))
-         (avy-command ',command))
-     (setq avy-action nil)
-     (setf (symbol-function 'avy-resume)
-           (lambda ()
-             (interactive)
-             ,@body))
-     ,@body))
-
-(defun avy-action-goto (pt)
-  "Goto PT."
-  (let ((frame (window-frame (selected-window))))
-    (unless (equal frame (selected-frame))
-      (select-frame-set-input-focus frame)
-      (raise-frame frame))
-    (goto-char pt)))
-
-(defun avy-forward-item ()
-  (if (eq avy-command 'avy-goto-line)
-      (end-of-line)
-    (forward-sexp))
-  (point))
-
-(defun avy-action-mark (pt)
-  "Mark sexp at PT."
-  (goto-char pt)
-  (set-mark (point))
-  (avy-forward-item))
-
-(defun avy-action-copy (pt)
-  "Copy sexp starting on PT."
-  (save-excursion
-    (let (str)
-      (goto-char pt)
-      (avy-forward-item)
-      (setq str (buffer-substring pt (point)))
-      (kill-new str)
-      (message "Copied: %s" str)))
-  (let ((dat (ring-ref avy-ring 0)))
-    (select-frame-set-input-focus
-     (window-frame (cdr dat)))
-    (select-window (cdr dat))
-    (goto-char (car dat))))
-
-(defun avy-action-yank (pt)
-  "Yank sexp starting at PT at the current point."
-  (avy-action-copy pt)
-  (yank)
-  t)
-
-(defun avy-action-kill-move (pt)
-  "Kill sexp at PT and move there."
-  (goto-char pt)
-  (avy-forward-item)
-  (kill-region pt (point))
-  (message "Killed: %s" (current-kill 0))
-  (point))
-
-(defun avy-action-kill-stay (pt)
-  "Kill sexp at PT."
-  (save-excursion
-    (goto-char pt)
-    (avy-forward-item)
-    (kill-region pt (point))
-    (just-one-space))
-  (message "Killed: %s" (current-kill 0))
-  (select-window
-   (cdr
-    (ring-ref avy-ring 0)))
-  t)
-
-(defun avy-action-zap-to-char (pt)
-  "Kill from point up to PT."
-  (if (> pt (point))
-      (kill-region (point) pt)
-    (kill-region pt (point))))
-
-(defun avy-action-teleport (pt)
-  "Kill sexp starting on PT and yank into the current location."
-  (avy-action-kill-stay pt)
-  (select-window
-   (cdr
-    (ring-ref avy-ring 0)))
-  (save-excursion
-    (yank))
-  t)
-
-(declare-function flyspell-correct-word-before-point "flyspell")
-
-(defun avy-action-ispell (pt)
-  "Auto correct word at PT."
-  (save-excursion
-    (goto-char pt)
-    (cond
-      ((eq avy-command 'avy-goto-line)
-       (ispell-region
-        (line-beginning-position)
-        (line-end-position)))
-      ((bound-and-true-p flyspell-mode)
-       (flyspell-correct-word-before-point))
-      ((looking-at-p "\\b")
-       (ispell-word))
-      (t
-       (progn
-         (backward-word)
-         (when (looking-at-p "\\b")
-           (ispell-word)))))))
-
-(defvar avy-pre-action #'avy-pre-action-default
-  "Function to call before `avy-action' is called.")
-
-(defun avy-pre-action-default (res)
-  (avy-push-mark)
-  (when (and (consp res)
-             (windowp (cdr res)))
-    (let* ((window (cdr res))
-           (frame (window-frame window)))
-      (unless (equal frame (selected-frame))
-        (select-frame-set-input-focus frame))
-      (select-window window))))
-
-(defun avy--process-1 (candidates overlay-fn &optional cleanup-fn)
-  (let ((len (length candidates)))
-    (cond ((= len 0)
-           nil)
-          ((and (= len 1) avy-single-candidate-jump)
-           (car candidates))
-          (t
-           (unwind-protect
-                (progn
-                  (avy--make-backgrounds
-                   (avy-window-list))
-                  (cond ((eq avy-style 'de-bruijn)
-                         (avy-read-de-bruijn
-                          candidates avy-keys))
-                        ((eq avy-style 'words)
-                         (avy-read-words
-                          candidates avy-words))
-                        (t
-                         (avy-read (avy-tree candidates avy-keys)
-                                   overlay-fn
-                                   (or cleanup-fn 
#'avy--remove-leading-chars)))))
-             (avy--done))))))
-
-(defvar avy-last-candidates nil
-  "Store the last candidate list.")
-
-(defun avy--last-candidates-cycle (advancer)
-  (let* ((avy-last-candidates
-          (cl-remove-if-not
-           (lambda (x) (equal (cdr x) (selected-window)))
-           avy-last-candidates))
-         (min-dist
-          (apply #'min
-                 (mapcar (lambda (x) (abs (- (caar x) (point)))) 
avy-last-candidates)))
-         (pos
-          (cl-position-if
-           (lambda (x)
-             (= (- (caar x) (point)) min-dist))
-           avy-last-candidates)))
-    (funcall advancer pos avy-last-candidates)))
-
-(defun avy-prev ()
-  "Go to the previous candidate of the last `avy-read'."
-  (interactive)
-  (avy--last-candidates-cycle
-   (lambda (pos lst)
-     (when (> pos 0)
-       (goto-char (caar (nth (1- pos) lst)))))))
-
-(defun avy-next ()
-  "Go to the next candidate of the last `avy-read'."
-  (interactive)
-  (avy--last-candidates-cycle
-   (lambda (pos lst)
-     (when (< pos (1- (length lst)))
-       (goto-char (caar (nth (1+ pos) lst)))))))
-
-(defun avy-process (candidates &optional overlay-fn cleanup-fn)
-  "Select one of CANDIDATES using `avy-read'.
-Use OVERLAY-FN to visualize the decision overlay.
-CLEANUP-FN should take no arguments and remove the effects of
-multiple OVERLAY-FN invocations."
-  (setq overlay-fn (or overlay-fn (avy--style-fn avy-style)))
-  (setq cleanup-fn (or cleanup-fn #'avy--remove-leading-chars))
-  (unless (and (consp (car candidates))
-               (windowp (cdar candidates)))
-    (setq candidates
-          (mapcar (lambda (x) (cons x (selected-window)))
-                  candidates)))
-  (setq avy-last-candidates (copy-sequence candidates))
-  (let ((original-cands (copy-sequence candidates))
-        (res (avy--process-1 candidates overlay-fn cleanup-fn)))
-    (cond
-      ((null res)
-       (message "zero candidates")
-       t)
-      ((eq res 'restart)
-       (avy-process original-cands overlay-fn cleanup-fn))
-      ;; ignore exit from `avy-handler-function'
-      ((eq res 'exit))
-      (t
-       (funcall avy-pre-action res)
-       (setq res (car res))
-       (funcall (or avy-action 'avy-action-goto)
-                (if (consp res)
-                    (car res)
-                  res))
-       res))))
-
-(define-obsolete-function-alias 'avy--process 'avy-process
-  "0.4.0")
-
-(defvar avy--overlays-back nil
-  "Hold overlays for when `avy-background' is t.")
-
-(defun avy--make-backgrounds (wnd-list)
-  "Create a dim background overlay for each window on WND-LIST."
-  (when avy-background
-    (setq avy--overlays-back
-          (mapcar (lambda (w)
-                    (let ((ol (make-overlay
-                               (window-start w)
-                               (window-end w)
-                               (window-buffer w))))
-                      (overlay-put ol 'face 'avy-background-face)
-                      (overlay-put ol 'window w)
-                      ol))
-                  wnd-list))))
-
-(defun avy--done ()
-  "Clean up overlays."
-  (mapc #'delete-overlay avy--overlays-back)
-  (setq avy--overlays-back nil)
-  (avy--remove-leading-chars))
-
-(defun avy--visible-p (s)
-  (let ((invisible (get-char-property s 'invisible)))
-    (or (null invisible)
-        (eq t buffer-invisibility-spec)
-        (null (assoc invisible buffer-invisibility-spec)))))
-
-(defun avy--next-visible-point ()
-  "Return the next closest point without `invisible' property."
-  (let ((s (point)))
-    (while (and (not (= (point-max) (setq s (next-char-property-change s))))
-                (not (avy--visible-p s))))
-    s))
-
-(defun avy--next-invisible-point ()
-  "Return the next closest point with `invisible' property."
-  (let ((s (point)))
-    (while (and (not (= (point-max) (setq s (next-char-property-change s))))
-                (avy--visible-p s)))
-    s))
-
-(defun avy--find-visible-regions (rbeg rend)
-  "Return a list of all visible regions between RBEG and REND."
-  (setq rbeg (max rbeg (point-min)))
-  (setq rend (min rend (point-max)))
-  (when (< rbeg rend)
-    (let (visibles beg)
-      (save-excursion
-        (save-restriction
-          (narrow-to-region rbeg rend)
-          (setq beg (goto-char (point-min)))
-          (while (not (= (point) (point-max)))
-            (goto-char (avy--next-invisible-point))
-            (push (cons beg (point)) visibles)
-            (setq beg (goto-char (avy--next-visible-point))))
-          (nreverse visibles))))))
-
-(defun avy--regex-candidates (regex &optional beg end pred group)
-  "Return all elements that match REGEX.
-Each element of the list is ((BEG . END) . WND)
-When PRED is non-nil, it's a filter for matching point positions.
-When GROUP is non-nil, (BEG . END) should delimit that regex group."
-  (setq group (or group 0))
-  (let ((case-fold-search (or avy-case-fold-search
-                              (string= regex (downcase regex))))
-        candidates)
-    (avy-dowindows current-prefix-arg
-      (dolist (pair (avy--find-visible-regions
-                     (or beg (window-start))
-                     (or end (window-end (selected-window) t))))
-        (save-excursion
-          (goto-char (car pair))
-          (while (re-search-forward regex (cdr pair) t)
-            (when (avy--visible-p (1- (point)))
-              (when (or (null pred)
-                        (funcall pred))
-                (push (cons (cons (match-beginning group)
-                                  (match-end group))
-                            wnd) candidates)))))))
-    (nreverse candidates)))
-
-(defvar avy--overlay-offset 0
-  "The offset to apply in `avy--overlay'.")
-
-(defvar avy--overlays-lead nil
-  "Hold overlays for leading chars.")
-
-(defun avy--remove-leading-chars ()
-  "Remove leading char overlays."
-  (mapc #'delete-overlay avy--overlays-lead)
-  (setq avy--overlays-lead nil))
-
-(defun avy--old-str (pt wnd)
-  "Return a one-char string at PT in WND."
-  (let ((old-str (with-selected-window wnd
-                   (buffer-substring pt (1+ pt)))))
-    (if avy-background
-        (propertize old-str 'face 'avy-background-face)
-      old-str)))
-
-(defun avy--overlay (str beg end wnd &optional compose-fn)
-  "Create an overlay with STR from BEG to END in WND.
-COMPOSE-FN is a lambda that concatenates the old string at BEG with STR."
-  (let ((eob (with-selected-window wnd (point-max))))
-    (when (<= beg eob)
-      (let* ((beg (+ beg avy--overlay-offset))
-             (ol (make-overlay beg (or end (1+ beg)) (window-buffer wnd)))
-             (old-str (if (eq beg eob) "" (avy--old-str beg wnd)))
-             (os-line-prefix (get-text-property 0 'line-prefix old-str))
-             (os-wrap-prefix (get-text-property 0 'wrap-prefix old-str))
-             other-ol)
-        (when os-line-prefix
-          (add-text-properties 0 1 `(line-prefix ,os-line-prefix) str))
-        (when os-wrap-prefix
-          (add-text-properties 0 1 `(wrap-prefix ,os-wrap-prefix) str))
-        (when (setq other-ol (cl-find-if
-                              (lambda (o) (overlay-get o 'goto-address))
-                              (overlays-at beg)))
-          (add-text-properties
-           0 (length old-str)
-           `(face ,(overlay-get other-ol 'face)) old-str))
-        (overlay-put ol 'window wnd)
-        (overlay-put ol 'category 'avy)
-        (overlay-put ol (if (eq beg eob)
-                            'after-string
-                          'display)
-                     (funcall
-                      (or compose-fn #'concat)
-                      str old-str))
-        (push ol avy--overlays-lead)))))
-
-(defcustom avy-highlight-first nil
-  "When non-nil highlight the first decision char with `avy-lead-face-0'.
-Do this even when the char is terminating."
-  :type 'boolean)
-
-(defun avy--key-to-char (c)
-  "If C is no character, translate it using `avy-key-to-char-alist'."
-  (cond ((characterp c) c)
-        ((cdr (assoc c avy-key-to-char-alist)))
-        ((mouse-event-p c) c)
-        (t
-         (error "Unknown key %s" c))))
-
-(defun avy-candidate-beg (leaf)
-  "Return the start position for LEAF."
-  (cond ((numberp leaf)
-         leaf)
-        ((consp (car leaf))
-         (caar leaf))
-        (t
-         (car leaf))))
-
-(defun avy-candidate-end (leaf)
-  "Return the end position for LEAF."
-  (cond ((numberp leaf)
-         leaf)
-        ((consp (car leaf))
-         (cdar leaf))
-        (t
-         (car leaf))))
-
-(defun avy-candidate-wnd (leaf)
-  "Return the window for LEAF."
-  (if (consp leaf)
-      (cdr leaf)
-    (selected-window)))
-
-(defun avy--overlay-pre (path leaf)
-  "Create an overlay with PATH at LEAF.
-PATH is a list of keys from tree root to LEAF.
-LEAF is normally ((BEG . END) . WND)."
-  (let* ((path (mapcar #'avy--key-to-char path))
-         (str (propertize (apply #'string (reverse path))
-                          'face 'avy-lead-face)))
-    (when (or avy-highlight-first (> (length str) 1))
-      (set-text-properties 0 1 '(face avy-lead-face-0) str))
-    (setq str (concat
-               (propertize avy-current-path
-                           'face 'avy-lead-face-1)
-               str))
-    (avy--overlay
-     str
-     (avy-candidate-beg leaf) nil
-     (avy-candidate-wnd leaf))))
-
-(defun avy--overlay-at (path leaf)
-  "Create an overlay with PATH at LEAF.
-PATH is a list of keys from tree root to LEAF.
-LEAF is normally ((BEG . END) . WND)."
-  (let* ((path (mapcar #'avy--key-to-char path))
-         (str (propertize
-               (string (car (last path)))
-               'face 'avy-lead-face)))
-    (avy--overlay
-     str
-     (avy-candidate-beg leaf) nil
-     (avy-candidate-wnd leaf)
-     (lambda (str old-str)
-       (cond ((string= old-str "\n")
-              (concat str "\n"))
-             ;; add padding for wide-width character
-             ((eq (string-width old-str) 2)
-              (concat str " "))
-             (t
-              str))))))
-
-(defun avy--overlay-at-full (path leaf)
-  "Create an overlay with PATH at LEAF.
-PATH is a list of keys from tree root to LEAF.
-LEAF is normally ((BEG . END) . WND)."
-  (let* ((path (mapcar #'avy--key-to-char path))
-         (str (propertize
-               (apply #'string (reverse path))
-               'face 'avy-lead-face))
-         (len (length path))
-         (beg (avy-candidate-beg leaf))
-         (wnd (cdr leaf))
-         end)
-    (dotimes (i len)
-      (set-text-properties i (1+ i)
-                           `(face ,(nth i avy-lead-faces))
-                           str))
-    (when (eq avy-style 'de-bruijn)
-      (setq str (concat
-                 (propertize avy-current-path
-                             'face 'avy-lead-face-1)
-                 str))
-      (setq len (length str)))
-    (with-selected-window wnd
-      (save-excursion
-        (goto-char beg)
-        (let* ((lep (if (bound-and-true-p visual-line-mode)
-                        (save-excursion
-                          (end-of-visual-line)
-                          (point))
-                      (line-end-position)))
-               ;; `end-of-visual-line' is bugged sometimes
-               (lep (if (< lep beg)
-                        (line-end-position)
-                      lep))
-               (len-and-str (avy--update-offset-and-str len str lep)))
-          (setq len (car len-and-str))
-          (setq str (cdr len-and-str))
-          (setq end (if (= beg lep)
-                        (1+ beg)
-                      (min (+ beg
-                              (if (eq (char-after) ?\t)
-                                  1
-                                len))
-                           lep)))
-          (when (and (bound-and-true-p visual-line-mode)
-                     (> len (- end beg))
-                     (not (eq lep beg)))
-            (setq len (- end beg))
-            (let ((old-str (apply #'string (reverse path))))
-              (setq str
-                    (substring
-                     (propertize
-                      old-str
-                      'face
-                      (if (= (length old-str) 1)
-                          'avy-lead-face
-                        'avy-lead-face-0))
-                     0 len)))))))
-    (avy--overlay
-     str beg end wnd
-     (lambda (str old-str)
-       (cond ((string= old-str "\n")
-              (concat str "\n"))
-             ((string= old-str "\t")
-              (concat str (make-string (max (- tab-width len) 0) ?\ )))
-             (t
-              ;; add padding for wide-width character
-              (if (eq (string-width old-str) 2)
-                  (concat str " ")
-                str)))))))
-
-(defun avy--overlay-post (path leaf)
-  "Create an overlay with PATH at LEAF.
-PATH is a list of keys from tree root to LEAF.
-LEAF is normally ((BEG . END) . WND)."
-  (let* ((path (mapcar #'avy--key-to-char path))
-         (str (propertize (apply #'string (reverse path))
-                          'face 'avy-lead-face)))
-    (when (or avy-highlight-first (> (length str) 1))
-      (set-text-properties 0 1 '(face avy-lead-face-0) str))
-    (setq str (concat
-               (propertize avy-current-path
-                           'face 'avy-lead-face-1)
-               str))
-    (avy--overlay
-     str
-     (avy-candidate-end leaf) nil
-     (avy-candidate-wnd leaf))))
-
-(defun avy--update-offset-and-str (offset str lep)
-  "Recalculate the length of the new overlay at point.
-
-OFFSET is the previous overlay length.
-STR is the overlay string that we wish to add.
-LEP is the line end position.
-
-We want to add an overlay between point and END=point+OFFSET.
-When other overlays already exist between point and END, set
-OFFSET to be the difference between the start of the first
-overlay and point.  This is equivalent to truncating our new
-overlay, so that it doesn't intersect with overlays that already
-exist."
-  (let* ((wnd (selected-window))
-         (beg (point))
-         (oov (delq nil
-                    (mapcar
-                     (lambda (o)
-                       (and (eq (overlay-get o 'category) 'avy)
-                            (eq (overlay-get o 'window) wnd)
-                            (overlay-start o)))
-                     (overlays-in beg (min (+ beg offset) lep))))))
-    (when oov
-      (setq offset (- (apply #'min oov) beg))
-      (setq str (substring str 0 offset)))
-    (let ((other-ov (cl-find-if
-                     (lambda (o)
-                       (and (eq (overlay-get o 'category) 'avy)
-                            (eq (overlay-start o) beg)
-                            (not (eq (overlay-get o 'window) wnd))))
-                     (overlays-in (point) (min (+ (point) offset) lep)))))
-      (when (and other-ov
-                 (> (overlay-end other-ov)
-                    (+ beg offset)))
-        (setq str (concat str (buffer-substring
-                               (+ beg offset)
-                               (overlay-end other-ov))))
-        (setq offset (- (overlay-end other-ov)
-                        beg))))
-    (cons offset str)))
-
-(defun avy--style-fn (style)
-  "Transform STYLE symbol to a style function."
-  (cl-case style
-    (pre #'avy--overlay-pre)
-    (at #'avy--overlay-at)
-    (at-full 'avy--overlay-at-full)
-    (post #'avy--overlay-post)
-    (de-bruijn #'avy--overlay-at-full)
-    (words #'avy--overlay-at-full)
-    (ignore #'ignore)
-    (t (error "Unexpected style %S" style))))
-
-(cl-defun avy-jump (regex &key window-flip beg end action pred)
-  "Jump to REGEX.
-The window scope is determined by `avy-all-windows'.
-When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched.
-ACTION is a function that takes point position as an argument.
-When PRED is non-nil, it's a filter for matching point positions."
-  (setq avy-action (or action avy-action))
-  (let ((avy-all-windows
-         (if window-flip
-             (not avy-all-windows)
-           avy-all-windows)))
-    (avy-process
-     (avy--regex-candidates regex beg end pred))))
-
-(defun avy--generic-jump (regex window-flip &optional beg end)
-  "Jump to REGEX.
-The window scope is determined by `avy-all-windows'.
-When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched."
-  (declare (obsolete avy-jump "0.4.0"))
-  (let ((avy-all-windows
-         (if window-flip
-             (not avy-all-windows)
-           avy-all-windows)))
-    (avy-process
-     (avy--regex-candidates regex beg end))))
-
-;;* Commands
-;;;###autoload
-(defun avy-goto-char (char &optional arg)
-  "Jump to the currently visible CHAR.
-The window scope is determined by `avy-all-windows' (ARG negates it)."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-char
-    (avy-jump
-     (if (= 13 char)
-         "\n"
-       (regexp-quote (string char)))
-     :window-flip arg)))
-
-;;;###autoload
-(defun avy-goto-char-in-line (char)
-  "Jump to the currently visible CHAR in the current line."
-  (interactive (list (read-char "char: " t)))
-  (avy-with avy-goto-char
-    (avy-jump
-     (regexp-quote (string char))
-     :beg (line-beginning-position)
-     :end (line-end-position))))
-
-;;;###autoload
-(defun avy-goto-char-2 (char1 char2 &optional arg beg end)
-  "Jump to the currently visible CHAR1 followed by CHAR2.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched."
-  (interactive (list (read-char "char 1: " t)
-                     (read-char "char 2: " t)
-                     current-prefix-arg
-                     nil nil))
-  (when (eq char1 ?
)
-    (setq char1 ?\n))
-  (when (eq char2 ?
)
-    (setq char2 ?\n))
-  (avy-with avy-goto-char-2
-    (avy-jump
-     (regexp-quote (string char1 char2))
-     :window-flip arg
-     :beg beg
-     :end end)))
-
-;;;###autoload
-(defun avy-goto-char-2-above (char1 char2 &optional arg)
-  "Jump to the currently visible CHAR1 followed by CHAR2.
-This is a scoped version of `avy-goto-char-2', where the scope is
-the visible part of the current buffer up to point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char 1: " t)
-                     (read-char "char 2: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-char-2-above
-    (avy-goto-char-2
-     char1 char2 arg
-     (window-start) (point))))
-
-;;;###autoload
-(defun avy-goto-char-2-below (char1 char2 &optional arg)
-  "Jump to the currently visible CHAR1 followed by CHAR2.
-This is a scoped version of `avy-goto-char-2', where the scope is
-the visible part of the current buffer following point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char 1: " t)
-                     (read-char "char 2: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-char-2-below
-    (avy-goto-char-2
-     char1 char2 arg
-     (point) (window-end (selected-window) t))))
-
-;;;###autoload
-(defun avy-isearch ()
-  "Jump to one of the current isearch candidates."
-  (interactive)
-  (avy-with avy-isearch
-    (let ((avy-background nil))
-      (avy-process
-       (avy--regex-candidates (if isearch-regexp
-                                  isearch-string
-                                (regexp-quote isearch-string))))
-      (isearch-done))))
-
-;;;###autoload
-(defun avy-goto-word-0 (arg &optional beg end)
-  "Jump to a word start.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched."
-  (interactive "P")
-  (avy-with avy-goto-word-0
-    (avy-jump avy-goto-word-0-regexp
-              :window-flip arg
-              :beg beg
-              :end end)))
-
-(defun avy-goto-word-0-above (arg)
-  "Jump to a word start between window start and point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive "P")
-  (avy-with avy-goto-word-0
-    (avy-goto-word-0 arg (window-start) (point))))
-
-(defun avy-goto-word-0-below (arg)
-  "Jump to a word start between point and window end.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive "P")
-  (avy-with avy-goto-word-0
-    (avy-goto-word-0 arg (point) (window-end (selected-window) t))))
-
-;;;###autoload
-(defun avy-goto-word-1 (char &optional arg beg end symbol)
-  "Jump to the currently visible CHAR at a word start.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched.
-When SYMBOL is non-nil, jump to symbol start instead of word start."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-word-1
-    (let* ((str (string char))
-           (regex (cond ((string= str ".")
-                         "\\.")
-                        ((and avy-word-punc-regexp
-                              (string-match avy-word-punc-regexp str))
-                         (regexp-quote str))
-                        ((<= char 26)
-                         str)
-                        (t
-                         (concat
-                          (if symbol "\\_<" "\\b")
-                          str)))))
-      (avy-jump regex
-                :window-flip arg
-                :beg beg
-                :end end))))
-
-;;;###autoload
-(defun avy-goto-word-1-above (char &optional arg)
-  "Jump to the currently visible CHAR at a word start.
-This is a scoped version of `avy-goto-word-1', where the scope is
-the visible part of the current buffer up to point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-word-1
-    (avy-goto-word-1 char arg (window-start) (point))))
-
-;;;###autoload
-(defun avy-goto-word-1-below (char &optional arg)
-  "Jump to the currently visible CHAR at a word start.
-This is a scoped version of `avy-goto-word-1', where the scope is
-the visible part of the current buffer following point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-word-1
-    (avy-goto-word-1 char arg (point) (window-end (selected-window) t))))
-
-;;;###autoload
-(defun avy-goto-symbol-1 (char &optional arg)
-  "Jump to the currently visible CHAR at a symbol start.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-symbol-1
-    (avy-goto-word-1 char arg nil nil t)))
-
-;;;###autoload
-(defun avy-goto-symbol-1-above (char &optional arg)
-  "Jump to the currently visible CHAR at a symbol start.
-This is a scoped version of `avy-goto-symbol-1', where the scope is
-the visible part of the current buffer up to point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-symbol-1-above
-    (avy-goto-word-1 char arg (window-start) (point) t)))
-
-;;;###autoload
-(defun avy-goto-symbol-1-below (char &optional arg)
-  "Jump to the currently visible CHAR at a symbol start.
-This is a scoped version of `avy-goto-symbol-1', where the scope is
-the visible part of the current buffer following point.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-symbol-1-below
-    (avy-goto-word-1 char arg (point) (window-end (selected-window) t) t)))
-
-(declare-function subword-backward "subword")
-(defvar subword-backward-regexp)
-
-(defcustom avy-subword-extra-word-chars '(?{ ?= ?} ?* ?: ?> ?<)
-  "A list of characters that should temporarily match \"\\w\".
-This variable is used by `avy-goto-subword-0' and `avy-goto-subword-1'."
-  :type '(repeat character))
-
-;;;###autoload
-(defun avy-goto-subword-0 (&optional arg predicate beg end)
-  "Jump to a word or subword start.
-The window scope is determined by `avy-all-windows' (ARG negates it).
-
-When PREDICATE is non-nil it's a function of zero parameters that
-should return true.
-
-BEG and END narrow the scope where candidates are searched."
-  (interactive "P")
-  (require 'subword)
-  (avy-with avy-goto-subword-0
-    (let ((case-fold-search nil)
-          (subword-backward-regexp
-           
"\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([!-/:@`~[:upper:]]+\\W*\\)\\|\\W\\w+\\)")
-          candidates)
-      (avy-dowindows arg
-        (let ((syn-tbl (copy-syntax-table)))
-          (dolist (char avy-subword-extra-word-chars)
-            (modify-syntax-entry char "w" syn-tbl))
-          (with-syntax-table syn-tbl
-            (let ((ws (or beg (window-start)))
-                  window-cands)
-              (save-excursion
-                (goto-char (or end (window-end (selected-window) t)))
-                (subword-backward)
-                (while (> (point) ws)
-                  (when (or (null predicate)
-                            (and predicate (funcall predicate)))
-                    (unless (not (avy--visible-p (point)))
-                      (push (cons (point) (selected-window)) window-cands)))
-                  (subword-backward))
-                (and (= (point) ws)
-                     (or (null predicate)
-                         (and predicate (funcall predicate)))
-                     (not (get-char-property (point) 'invisible))
-                     (push (cons (point) (selected-window)) window-cands)))
-              (setq candidates (nconc candidates window-cands))))))
-      (avy-process candidates))))
-
-;;;###autoload
-(defun avy-goto-subword-1 (char &optional arg)
-  "Jump to the currently visible CHAR at a subword start.
-The window scope is determined by `avy-all-windows' (ARG negates it).
-The case of CHAR is ignored."
-  (interactive (list (read-char "char: " t)
-                     current-prefix-arg))
-  (avy-with avy-goto-subword-1
-    (let ((char (downcase char)))
-      (avy-goto-subword-0
-       arg (lambda ()
-             (and (char-after)
-                  (eq (downcase (char-after)) char)))))))
-
-;;;###autoload
-(defun avy-goto-word-or-subword-1 ()
-  "Forward to `avy-goto-subword-1' or `avy-goto-word-1'.
-Which one depends on variable `subword-mode'."
-  (interactive)
-  (if (bound-and-true-p subword-mode)
-      (call-interactively #'avy-goto-subword-1)
-    (call-interactively #'avy-goto-word-1)))
-
-(defvar visual-line-mode)
-
-(defcustom avy-indent-line-overlay nil
-  "When non-nil, `avy-goto-line' will display the line overlay next to the 
first non-whitespace character of each line."
-  :type 'boolean)
-
-(defun avy--line-cands (&optional arg beg end bottom-up)
-  "Get candidates for selecting a line.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched.
-When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
-  (let (candidates)
-    (avy-dowindows arg
-      (let ((ws (or beg (window-start))))
-        (save-excursion
-          (save-restriction
-            (narrow-to-region ws (or end (window-end (selected-window) t)))
-            (goto-char (point-min))
-            (while (< (point) (point-max))
-              (when (member (get-char-property
-                             (max (1- (point)) ws) 'invisible) '(nil org-link))
-                (push (cons
-                       (if (eq avy-style 'post)
-                           (line-end-position)
-                         (save-excursion
-                           (when avy-indent-line-overlay
-                             (skip-chars-forward " \t"))
-                           (point)))
-                       (selected-window)) candidates))
-              (if visual-line-mode
-                  (progn
-                    (setq temporary-goal-column 0)
-                    (line-move-visual 1 t))
-                (forward-line 1)))))))
-    (if bottom-up
-        candidates
-      (nreverse candidates))))
-
-(defun avy--linum-strings ()
-  "Get strings for `avy-linum-mode'."
-  (let* ((lines (mapcar #'car (avy--line-cands)))
-         (line-tree (avy-tree lines avy-keys))
-         (line-list nil))
-    (avy-traverse
-     line-tree
-     (lambda (path _leaf)
-       (let ((str (propertize (apply #'string (reverse path))
-                              'face 'avy-lead-face)))
-         (when (> (length str) 1)
-           (set-text-properties 0 1 '(face avy-lead-face-0) str))
-         (push str line-list))))
-    (nreverse line-list)))
-
-(defvar linum-available)
-(defvar linum-overlays)
-(defvar linum-format)
-(declare-function linum--face-width "linum")
-
-(define-minor-mode avy-linum-mode
-  "Minor mode that uses avy hints for `linum-mode'."
-  :group 'avy
-  (if avy-linum-mode
-      (progn
-        (require 'linum)
-        (advice-add 'linum-update-window :around 'avy--linum-update-window)
-        (linum-mode 1))
-    (advice-remove 'linum-update-window 'avy--linum-update-window)
-    (linum-mode -1)))
-
-(defun avy--linum-update-window (_ win)
-  "Update line numbers for the portion visible in window WIN."
-  (goto-char (window-start win))
-  (let ((line (line-number-at-pos))
-        (limit (window-end win t))
-        (fmt (cond ((stringp linum-format) linum-format)
-                   ((eq linum-format 'dynamic)
-                    (let ((w (length (number-to-string
-                                      (count-lines (point-min) (point-max))))))
-                      (concat "%" (number-to-string w) "d")))))
-        (width 0)
-        (avy-strs (when avy-linum-mode
-                    (avy--linum-strings))))
-    (run-hooks 'linum-before-numbering-hook)
-    ;; Create an overlay (or reuse an existing one) for each
-    ;; line visible in this window, if necessary.
-    (while (and (not (eobp)) (< (point) limit))
-      (let* ((str
-              (cond (avy-linum-mode
-                     (pop avy-strs))
-                    (fmt
-                     (propertize (format fmt line) 'face 'linum))
-                    (t
-                     (funcall linum-format line))))
-             (visited (catch 'visited
-                        (dolist (o (overlays-in (point) (point)))
-                          (when (equal-including-properties
-                                 (overlay-get o 'linum-str) str)
-                            (unless (memq o linum-overlays)
-                              (push o linum-overlays))
-                            (setq linum-available (delq o linum-available))
-                            (throw 'visited t))))))
-        (setq width (max width (length str)))
-        (unless visited
-          (let ((ov (if (null linum-available)
-                        (make-overlay (point) (point))
-                      (move-overlay (pop linum-available) (point) (point)))))
-            (push ov linum-overlays)
-            (overlay-put ov 'before-string
-                         (propertize " " 'display `((margin left-margin) 
,str)))
-            (overlay-put ov 'linum-str str))))
-      ;; Text may contain those nasty intangible properties, but that
-      ;; shouldn't prevent us from counting those lines.
-      (let ((inhibit-point-motion-hooks t))
-        (forward-line))
-      (setq line (1+ line)))
-    (when (display-graphic-p)
-      (setq width (ceiling
-                   (/ (* width 1.0 (linum--face-width 'linum))
-                      (frame-char-width)))))
-    (set-window-margins win width (cdr (window-margins win)))))
-
-(defun avy--line (&optional arg beg end bottom-up)
-  "Select a line.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'.
-BEG and END narrow the scope where candidates are searched.
-When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
-  (let ((avy-action #'identity)
-        (avy-style (if avy-linum-mode
-                       (progn
-                         (message "Goto line:")
-                         'ignore)
-                     avy-style)))
-    (avy-process
-     (avy--line-cands arg beg end bottom-up))))
-
-;;;###autoload
-(defun avy-goto-line (&optional arg)
-  "Jump to a line start in current buffer.
-
-When ARG is 1, jump to lines currently visible, with the option
-to cancel to `goto-line' by entering a number.
-
-When ARG is 4, negate the window scope determined by
-`avy-all-windows'.
-
-Otherwise, forward to `goto-line' with ARG."
-  (interactive "p")
-  (setq arg (or arg 1))
-  (if (not (memq arg '(1 4)))
-      (progn
-        (goto-char (point-min))
-        (forward-line (1- arg)))
-    (avy-with avy-goto-line
-      (let* ((avy-handler-old avy-handler-function)
-             (avy-handler-function
-              (lambda (char)
-                (if (or (< char ?0)
-                        (> char ?9))
-                    (funcall avy-handler-old char)
-                  (let ((line (read-from-minibuffer
-                               "Goto line: " (string char))))
-                    (when line
-                      (avy-push-mark)
-                      (save-restriction
-                        (widen)
-                        (goto-char (point-min))
-                        (forward-line (1- (string-to-number line))))
-                      (throw 'done 'exit))))))
-             (r (avy--line (eq arg 4))))
-        (unless (eq r t)
-          (avy-action-goto r))))))
-
-;;;###autoload
-(defun avy-goto-line-above (&optional offset bottom-up)
-  "Goto visible line above the cursor.
-OFFSET changes the distance between the closest key to the cursor and
-the cursor
-When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
-  (interactive)
-  (if offset
-    (setq offset (+ 2 (- offset))))
-  (let* ((avy-all-windows nil)
-         (r (avy--line nil (window-start)
-                       (line-beginning-position (or offset 1))
-                      bottom-up)))
-    (unless (eq r t)
-      (avy-action-goto r))))
-
-;;;###autoload
-(defun avy-goto-line-below (&optional offset bottom-up)
-  "Goto visible line below the cursor.
-OFFSET changes the distance between the closest key to the cursor and
-the cursor
-When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
-  (interactive)
-  (if offset
-    (setq offset (+ offset 1)))
-  (let* ((avy-all-windows nil)
-         (r (avy--line
-             nil (line-beginning-position (or offset 2))
-             (window-end (selected-window) t)
-            bottom-up)))
-    (unless (eq r t)
-      (avy-action-goto r))))
-
-(defcustom avy-line-insert-style 'above
-  "How to insert the newly copied/cut line."
-  :type '(choice
-          (const :tag "Above" above)
-          (const :tag "Below" below)))
-
-;;;###autoload
-(defun avy-goto-end-of-line (&optional arg)
-  "Call `avy-goto-line' and move to the end of the line."
-  (interactive "p")
-  (avy-goto-line arg)
-  (end-of-line))
-
-;;;###autoload
-(defun avy-copy-line (arg)
-  "Copy a selected line above the current line.
-ARG lines can be used."
-  (interactive "p")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-copy-line
-      (let* ((start (avy--line))
-             (str (buffer-substring-no-properties
-                   start
-                   (save-excursion
-                     (goto-char start)
-                     (move-end-of-line arg)
-                     (point)))))
-        (select-window initial-window)
-        (cond ((eq avy-line-insert-style 'above)
-               (beginning-of-line)
-               (save-excursion
-                 (insert str "\n")))
-              ((eq avy-line-insert-style 'below)
-               (end-of-line)
-               (insert "\n" str)
-               (beginning-of-line))
-              (t
-               (user-error "Unexpected `avy-line-insert-style'")))))))
-
-;;;###autoload
-(defun avy-move-line (arg)
-  "Move a selected line above the current line.
-ARG lines can be used."
-  (interactive "p")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-move-line
-      (let ((start (avy--line)))
-        (save-excursion
-          (goto-char start)
-          (kill-whole-line arg))
-        (select-window initial-window)
-        (cond ((eq avy-line-insert-style 'above)
-               (beginning-of-line)
-               (save-excursion
-                 (insert
-                  (current-kill 0))))
-              ((eq avy-line-insert-style 'below)
-               (end-of-line)
-               (newline)
-               (save-excursion
-                 (insert (substring (current-kill 0) 0 -1))))
-              (t
-               (user-error "Unexpected `avy-line-insert-style'")))))))
-
-;;;###autoload
-(defun avy-copy-region (arg)
-  "Select two lines and copy the text between them to point.
-
-The window scope is determined by `avy-all-windows' or
-`avy-all-windows-alt' when ARG is non-nil."
-  (interactive "P")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-copy-region
-      (let* ((beg (save-selected-window
-                    (avy--line arg)))
-             (end (avy--line arg))
-             (str (buffer-substring-no-properties
-                   beg
-                   (save-excursion
-                     (goto-char end)
-                     (line-end-position)))))
-        (select-window initial-window)
-        (cond ((eq avy-line-insert-style 'above)
-               (beginning-of-line)
-               (save-excursion
-                 (insert str "\n")))
-              ((eq avy-line-insert-style 'below)
-               (end-of-line)
-               (newline)
-               (save-excursion
-                 (insert str)))
-              (t
-               (user-error "Unexpected `avy-line-insert-style'")))))))
-
-;;;###autoload
-(defun avy-move-region ()
-  "Select two lines and move the text between them above the current line."
-  (interactive)
-  (avy-with avy-move-region
-    (let* ((initial-window (selected-window))
-           (beg (avy--line))
-           (end (avy--line))
-           text)
-      (when (> beg end)
-        (cl-rotatef beg end))
-      (setq end (save-excursion
-                  (goto-char end)
-                  (1+ (line-end-position))))
-      (setq text (buffer-substring beg end))
-      (move-beginning-of-line nil)
-      (delete-region beg end)
-      (select-window initial-window)
-      (insert text))))
-
-;;;###autoload
-(defun avy-kill-region (arg)
-  "Select two lines and kill the region between them.
-
-The window scope is determined by `avy-all-windows' or
-`avy-all-windows-alt' when ARG is non-nil."
-  (interactive "P")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-kill-region
-      (let* ((beg (save-selected-window
-                    (list (avy--line arg) (selected-window))))
-             (end (list (avy--line arg) (selected-window))))
-        (cond
-          ((not (numberp (car beg)))
-           (user-error "Fail to select the beginning of region"))
-          ((not (numberp (car end)))
-           (user-error "Fail to select the end of region"))
-          ;; Restrict operation to same window. It's better if it can be
-          ;; different windows but same buffer; however, then the cloned
-          ;; buffers with different narrowed regions might cause problem.
-          ((not (equal (cdr beg) (cdr end)))
-           (user-error "Selected points are not in the same window"))
-          ((< (car beg) (car end))
-           (save-excursion
-             (kill-region
-              (car beg)
-              (progn (goto-char (car end)) (forward-visible-line 1) (point)))))
-          (t
-           (save-excursion
-             (kill-region
-              (progn (goto-char (car beg)) (forward-visible-line 1) (point))
-              (car end)))))))
-    (select-window initial-window)))
-
-;;;###autoload
-(defun avy-kill-ring-save-region (arg)
-  "Select two lines and save the region between them to the kill ring.
-The window scope is determined by `avy-all-windows'.
-When ARG is non-nil, do the opposite of `avy-all-windows'."
-  (interactive "P")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-kill-ring-save-region
-      (let* ((beg (save-selected-window
-                    (list (avy--line arg) (selected-window))))
-             (end (list (avy--line arg) (selected-window))))
-        (cond
-          ((not (numberp (car beg)))
-           (user-error "Fail to select the beginning of region"))
-          ((not (numberp (car end)))
-           (user-error "Fail to select the end of region"))
-          ((not (equal (cdr beg) (cdr end)))
-           (user-error "Selected points are not in the same window"))
-          ((< (car beg) (car end))
-           (save-excursion
-             (kill-ring-save
-              (car beg)
-              (progn (goto-char (car end)) (forward-visible-line 1) (point)))))
-          (t
-           (save-excursion
-             (kill-ring-save
-              (progn (goto-char (car beg)) (forward-visible-line 1) (point))
-              (car end)))))))
-    (select-window initial-window)))
-
-;;;###autoload
-(defun avy-kill-whole-line (arg)
-  "Select line and kill the whole selected line.
-
-With a numerical prefix ARG, kill ARG line(s) starting from the
-selected line.  If ARG is negative, kill backward.
-
-If ARG is zero, kill the selected line but exclude the trailing
-newline.
-
-\\[universal-argument] 3 \\[avy-kil-whole-line] kill three lines
-starting from the selected line.  \\[universal-argument] -3
-
-\\[avy-kill-whole-line] kill three lines backward including the
-selected line."
-  (interactive "P")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-kill-whole-line
-      (let* ((start (avy--line)))
-        (if (not (numberp start))
-            (user-error "Fail to select the line to kill")
-          (save-excursion (goto-char start)
-                          (kill-whole-line arg)))))
-    (select-window initial-window)))
-
-;;;###autoload
-(defun avy-kill-ring-save-whole-line (arg)
-  "Select line and save the whole selected line as if killed, but don’t kill 
it.
-
-This command is similar to `avy-kill-whole-line', except that it
-saves the line(s) as if killed, but does not kill it(them).
-
-With a numerical prefix ARG, kill ARG line(s) starting from the
-selected line.  If ARG is negative, kill backward.
-
-If ARG is zero, kill the selected line but exclude the trailing
-newline."
-  (interactive "P")
-  (let ((initial-window (selected-window)))
-    (avy-with avy-kill-ring-save-whole-line
-      (let* ((start (avy--line)))
-        (if (not (numberp start))
-            (user-error "Fail to select the line to kill")
-          (save-excursion
-            (let ((kill-read-only-ok t)
-                  (buffer-read-only t))
-              (goto-char start)
-              (kill-whole-line arg))))))
-    (select-window initial-window)))
-
-;;;###autoload
-(defun avy-setup-default ()
-  "Setup the default shortcuts."
-  (eval-after-load "isearch"
-    '(define-key isearch-mode-map (kbd "C-'") 'avy-isearch)))
-
-(defcustom avy-timeout-seconds 0.5
-  "How many seconds to wait for the second char."
-  :type 'float)
-
-(defcustom avy-enter-times-out t
-  "Whether enter exits avy-goto-char-timer early. If nil it matches newline"
-  :type 'boolean)
-
-(defun avy--read-candidates (&optional re-builder)
-  "Read as many chars as possible and return their occurrences.
-At least one char must be read, and then repeatedly one next char
-may be read if it is entered before `avy-timeout-seconds'.  DEL
-deletes the last char entered, and RET exits with the currently
-read string immediately instead of waiting for another char for
-`avy-timeout-seconds'.
-The format of the result is the same as that of `avy--regex-candidates'.
-This function obeys `avy-all-windows' setting.
-RE-BUILDER is a function that takes a string and returns a regex.
-When nil, `regexp-quote' is used.
-If a group is captured, the first group is highlighted.
-Otherwise, the whole regex is highlighted."
-  (let ((str "")
-        (re-builder (or re-builder #'regexp-quote))
-        char break overlays regex)
-    (unwind-protect
-         (progn
-           (avy--make-backgrounds
-            (avy-window-list))
-           (while (and (not break)
-                       (setq char
-                             (read-char (format "%d  char%s: "
-                                                (length overlays)
-                                                (if (string= str "")
-                                                    str
-                                                  (format " (%s)" str)))
-                                        t
-                                        (and (not (string= str ""))
-                                             avy-timeout-seconds))))
-             ;; Unhighlight
-             (dolist (ov overlays)
-               (delete-overlay ov))
-             (setq overlays nil)
-             (cond
-               ;; Handle RET
-               ((= char 13)
-                (if avy-enter-times-out
-                    (setq break t)
-                  (setq str (concat str (list ?\n)))))
-               ;; Handle C-h, DEL
-               ((memq char avy-del-last-char-by)
-                (let ((l (length str)))
-                  (when (>= l 1)
-                    (setq str (substring str 0 (1- l))))))
-               ;; Handle ESC
-               ((= char 27)
-                (keyboard-quit))
-               (t
-                (setq str (concat str (list char)))))
-             ;; Highlight
-             (when (>= (length str) 1)
-               (let ((case-fold-search
-                      (or avy-case-fold-search (string= str (downcase str))))
-                     found)
-                 (avy-dowindows current-prefix-arg
-                   (dolist (pair (avy--find-visible-regions
-                                  (window-start)
-                                  (window-end (selected-window) t)))
-                     (save-excursion
-                       (goto-char (car pair))
-                       (setq regex (funcall re-builder str))
-                       (while (re-search-forward regex (cdr pair) t)
-                         (unless (not (avy--visible-p (1- (point))))
-                           (let* ((idx (if (= (length (match-data)) 4) 1 0))
-                                  (ov (make-overlay
-                                       (match-beginning idx) (match-end idx))))
-                             (setq found t)
-                             (push ov overlays)
-                             (overlay-put
-                              ov 'window (selected-window))
-                             (overlay-put
-                              ov 'face 'avy-goto-char-timer-face)))))))
-                 ;; No matches at all, so there's surely a typo in the input.
-                 (unless found (beep)))))
-           (nreverse (mapcar (lambda (ov)
-                               (cons (cons (overlay-start ov)
-                                           (overlay-end ov))
-                                     (overlay-get ov 'window)))
-                             overlays)))
-      (dolist (ov overlays)
-        (delete-overlay ov))
-      (avy--done))))
-
-;;;###autoload
-(defun avy-goto-char-timer (&optional arg)
-  "Read one or many consecutive chars and jump to the first one.
-The window scope is determined by `avy-all-windows' (ARG negates it)."
-  (interactive "P")
-  (let ((avy-all-windows (if arg
-                             (not avy-all-windows)
-                           avy-all-windows)))
-    (avy-with avy-goto-char-timer
-      (avy-process
-       (avy--read-candidates)))))
-
-(defun avy-push-mark ()
-  "Store the current point and window."
-  (let ((inhibit-message t))
-    (ring-insert avy-ring
-                 (cons (point) (selected-window)))
-    (unless (region-active-p)
-      (push-mark))))
-
-(defun avy-pop-mark ()
-  "Jump back to the last location of `avy-push-mark'."
-  (interactive)
-  (let (res)
-    (condition-case nil
-        (progn
-          (while (not (window-live-p
-                       (cdr (setq res (ring-remove avy-ring 0))))))
-          (let* ((window (cdr res))
-                 (frame (window-frame window)))
-            (when (and (frame-live-p frame)
-                       (not (eq frame (selected-frame))))
-              (select-frame-set-input-focus frame))
-            (select-window window)
-            (goto-char (car res))))
-      (error
-       (set-mark-command 4)))))
-
-;; ** Org-mode
-(defvar org-reverse-note-order)
-(declare-function org-refile "org")
-(declare-function org-back-to-heading "org")
-(declare-function org-reveal "org")
-
-(defvar org-after-refile-insert-hook)
-
-(defun avy-org-refile-as-child ()
-  "Refile current heading as first child of heading selected with `avy.'"
-  ;; Inspired by `org-teleport': 
http://kitchingroup.cheme.cmu.edu/blog/2016/03/18/Org-teleport-headlines/
-  (interactive)
-  (let* ((org-reverse-note-order t)
-         (marker (save-excursion
-                   (avy-with avy-goto-line
-                     (unless (eq 't (avy-jump (rx bol (1+ "*") (1+ space))))
-                       ;; `avy-jump' returns t when aborted with C-g.
-                       (point-marker)))))
-         (filename (buffer-file-name (or (buffer-base-buffer (marker-buffer 
marker))
-                                         (marker-buffer marker))))
-         (rfloc (list nil filename nil marker))
-         ;; Ensure the refiled heading is visible.
-         (org-after-refile-insert-hook (if (member 'org-reveal 
org-after-refile-insert-hook)
-                                           org-after-refile-insert-hook
-                                         (cons #'org-reveal 
org-after-refile-insert-hook))))
-    (when marker
-      ;; Only attempt refile if avy session was not aborted.
-      (org-refile nil nil rfloc))))
-
-(defun avy-org-goto-heading-timer (&optional arg)
-  "Read one or many characters and jump to matching Org headings.
-The window scope is determined by `avy-all-windows' (ARG negates it)."
-  (interactive "P")
-  (let ((avy-all-windows (if arg
-                             (not avy-all-windows)
-                           avy-all-windows)))
-    (avy-with avy-goto-char-timer
-      (avy-process
-       (avy--read-candidates
-        (lambda (input)
-          (format "^\\*+ .*\\(%s\\)" input))))
-      (org-back-to-heading))))
-
-(provide 'avy)
-
-;;; avy.el ends here
diff --git a/packages/avy/doc/Changelog.org b/packages/avy/doc/Changelog.org
deleted file mode 100644
index 1c9ea2f..0000000
--- a/packages/avy/doc/Changelog.org
+++ /dev/null
@@ -1,498 +0,0 @@
-* 0.3.0
-** Fixes
-*** Candidate window reversal
-See [[https://github.com/abo-abo/avy/issues/27][#27]].
-
-*** Jumping to newlines with =at-full= style
-See [[https://github.com/abo-abo/avy/issues/5][#5]].
-
-*** Stop =at-full= style from shifting text sometimes
-See [[https://github.com/abo-abo/avy/issues/5][#5]].
-
-*** Fix =at-full= interaction with tabs
-When at a tab, visualize it using =tab-width= spaces.
-
-See [[https://github.com/abo-abo/avy/issues/43][#43]].
-
-*** Fix overlay issue when the same buffer is in two windows
-
-See [[https://github.com/abo-abo/avy/issues/47][#47]] and 
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=20607.
-
-*** Quote punctuation chars
-
-See [[https://github.com/abo-abo/avy/issues/63][#63]].
-
-*** Update screenshot for =avy-goto-char= in README.md
-Use ~C-:~ as the new suggested binding instead of the pi char.
-
-See [[https://github.com/abo-abo/avy/issues/64][#64]].
-
-** New Features
-*** =avy-goto-line= can now break into =goto-line=
-Just enter a digit and you'll be transferred into =goto-line= prompt
-with that digit already entered.  This means that you can just bind
-~M-g g~ to =avy-goto-line= without losing anything.
-
-See [[https://github.com/abo-abo/avy/issues/29][#29]].
-
-*** =avy-goto-line= now works with all kinds of overlay styles
-Any of the following do something different now:
-
-#+begin_src elisp
-(setq avy-styles-alist
-      '((avy-goto-line . post)))
-(setq avy-styles-alist
-      '((avy-goto-line . at)))
-(setq avy-styles-alist
-      '((avy-goto-line . at-full)))
-(setq avy-styles-alist
-      '((avy-goto-line . pre)))
-#+end_src
-
-See [[https://github.com/abo-abo/ace-link/issues/17][#17]].
-
-*** New defcustom =avy-case-fold-search=
-Non-nil when searches should ignore case, so e.g. =avy-goto-char= "b"
-will match both "b" and "B". On by default. Use this to turn off this
-behavior:
-
-#+begin_src elisp
-(setq avy-case-fold-search nil)
-#+end_src
-
-See [[https://github.com/abo-abo/avy/issues/34][#34]].
-
-*** New command =avy-goto-word-or-subword-1=
-
-Enter one char, and select a visible word or subword that starts with
-it, depending on =subword-mode=. Move the point there.
-
-See [[https://github.com/abo-abo/avy/issues/33][#33]].
-
-*** =avy-move-line= should remove empty line after original one is moved
-
-See [[https://github.com/abo-abo/avy/issues/40][#40]].
-
-*** =avy-move-line= now takes a prefix arg
-Use e.g. ~M-3~ before =avy-move-line= to move 3 lines at once.
-
-*** Most commands can be used non-interactively
-Example:
-#+begin_src elisp
-(defun avy-goto-lp ()
-  (interactive)
-  (avy-goto-char ?\())
-#+end_src
-
-This command only goes to the "(" character. This is actually very
-similar to [[http://oremacs.com/lispy/#lispy-ace-paren][=lispy-ace-paren=]], 
except the implementation is only one
-line.
-
-See [[https://github.com/abo-abo/avy/issues/44][#44]].
-
-*** (almost) all defcustoms are explained on the wiki
-
-See [[https://github.com/abo-abo/avy/wiki/defcustom][the defcustom wiki page]].
-
-*** Allow all operations to work across frames
-
-You have to customize =avy-all-windows= for this. By default, it's set
-to work on all windows on the current frame.
-
-To make it work only on the current window, use:
-#+begin_src elisp
-(setq avy-all-windows nil)
-#+end_src
-
-To make it work on all frames, use:
-#+begin_src elisp
-(setq avy-all-windows 'all-frames)
-#+end_src
-
-*** New command =avy-goto-char-in-line=
-
-This is =avy-goto-char= reduced only to the current line. Few
-candidates means very short decision chars path.
-
-See [[https://github.com/abo-abo/avy/issues/49][#49]].
-
-*** New overlay style =de-bruijn=
-
-How to use it:
-
-#+begin_src elisp
-(setq avy-style 'de-bruijn)
-#+end_src
-
-What it does: when your leading chars are clumped up together, it's
-impossible to overlay the decision path without shifting the buffer
-text a bit. For example, with the word "buffer", you =avy-goto-char= "b", and:
-
-- the path for the first "f" is "aj"
-- the path for the second "f" is "ak"
-
-It's not possible to overlay 4 characters over "ff" in "buffer". But
-to with =de-bruijn= style, which results in the path being "aj" and
-"jk". It's possible to overlay "ajk" just fine.
-
-Pros and cons of =de-bruijn= over other styles:
-
-- a pro is that it's possible to display the full decision path for
-  clumped up chars, which is truncated for other styles
-- a con is that the decision path is of the same length (e.g. 2 or 3)
-  for all candidates, while with other styles it's possible to have a
-  few candidates with a shorter path.
-
-See [[https://github.com/abo-abo/avy/issues/51][#51]] and 
[[https://github.com/abo-abo/avy/issues/5][#5]].
-
-*** New defcustom =avy-ignored-modes=
-
-This is meant for visual modes like =doc-view-mode= or =image-mode=
-that can have a huge number of chars in a single window. Which results
-in a huge number of candidates even in other windows.
-
-Current setting:
-
-#+begin_src elisp
-(setq avy-ignored-modes '(image-mode doc-view-mode pdf-view-mode))
-#+end_src
-
-See [[https://github.com/abo-abo/avy/issues/57][#57]].
-
-*** New tutorial on writing custom commands
-
-See the [[https://github.com/abo-abo/avy/wiki/custom-commands][the 
custom-commands wiki page]] and 
[[https://github.com/abo-abo/avy/issues/55][#55]].
-
-*** New face setup
-New variable =avy-lead-faces= will determine the faces used to color
-the current decision depth you're in.  For example, if to select a
-particular candidate you need to press "abc":
-
-- "a" will be highlighted with a face that corresponds to depth 3
-- "b" will be highlighted with a face that corresponds to depth 2
-- "c" will be highlighted with a face that corresponds to depth 1
-
-But if another candidate needs "ef":
-
-- "e" will be highlighted with a face that corresponds to depth 2
-- "f" will be highlighted with a face that corresponds to depth 1
-
-See [[https://github.com/abo-abo/avy/issues/53][#53]].
-
-*** New variable =avy-translate-char-function=
-
-You can use this, for example, to interpret one character as another in 
=avy-keys=.
-
-Example:
-#+begin_src elisp
-(setq avy-translate-char-function
-          (lambda (c) (if (= c 32) ?a c)))
-#+end_src
-
-This will translate ~SPC~ (32) into ~a~. So you can press either ~a~ or ~SPC~ 
to mean "a".
-
-*** =avy-isearch= works for different styles
-
-See [[https://github.com/abo-abo/avy/issues/61][#61]].
-
-*** Switch the default style from =pre= to =at-full=
-
-I've come to like =at-full= more than =pre= over time. The difference
-is that =pre= hides no chars in your buffer, while =at-full= doesn't
-shift text.
-
-Use this to restore the previous default behavior:
-#+begin_src elisp
-(setq avy-style 'pre)
-#+end_src
-* 0.4.0
-** Fixes
-*** =avy-goto-char-timer= obeys =avy-styles-alist=
-See [[https://github.com/abo-abo/avy/issues/67][#67]].
-*** Add =de-bruijn= to the defcustom of =avy-styles-alist=
-See [[https://github.com/abo-abo/avy/issues/73][#73]].
-*** Respect the current input method for target chars
-See [[https://github.com/abo-abo/avy/issues/76][#76]].
-*** =avy-goto-subword-0= shouldn't offer invisible chars
-See [[https://github.com/abo-abo/avy/issues/90][#90]].
-*** Better =case-fold-search= handling
-See [[https://github.com/abo-abo/avy/issues/87][#87]].
-*** Add misc punctuation to subword commands
-See [[https://github.com/abo-abo/avy/issues/93][#93]].
-*** Add padding for wide-width chars (ex. Japanese and Chinese)
-See [[https://github.com/abo-abo/avy/issues/96][#96]].
-*** =avy-goto-line=
-**** Push mark for numeric line
-See [[https://github.com/abo-abo/avy/issues/74][#74]].
-**** Allow numeric prefix arg
-The old behavior remains for ARG 1 or 4. For all other ARG, simply go
-to that line.
-See [[https://github.com/abo-abo/avy/issues/86][#86]].
-**** Work for =visual-line-mode=
-See [[https://github.com/abo-abo/avy/issues/91][#91]].
-**** Don't error on end of buffer
-See [[https://github.com/abo-abo/avy/issues/91][#91]].
-**** Obey =avy-background=
-See [[https://github.com/abo-abo/avy/issues/94][#94]].
-**** Fix for narrowed regions
-See [[https://github.com/abo-abo/avy/issues/122][#122]], 
[[https://github.com/abo-abo/avy/issues/123][#123]].
-**** Don't modify =avy-action=
-See [[https://github.com/abo-abo/avy/issues/124][#124]].
-*** =avy-goto-char-timer=
-**** May read as many chars as you want
-See [[https://github.com/abo-abo/avy/issues/97][#97]].
-**** Highlight matches while reading chars
-See [[https://github.com/abo-abo/avy/issues/98][#98]].
-**** Highlight depending on =avy-all-windows=
-See [[https://github.com/abo-abo/avy/issues/104][#104]].
-**** Make faster for =org-mode=
-See [[https://github.com/abo-abo/avy/issues/100][#100]].
-**** Add case fold search
-See [[https://github.com/abo-abo/avy/issues/128][#128]].
-*** =avy-copy-region=
-**** Keep the same selectors for the second pass
-See [[https://github.com/abo-abo/avy/issues/120][#120]], 
[[https://github.com/abo-abo/avy/issues/121][#121]].
-**** Copy/move to initial window
-See [[https://github.com/abo-abo/avy/issues/131][#131]].
-*** Search only in the visible region
-See [[https://github.com/abo-abo/avy/issues/108][#108]], 
[[https://github.com/abo-abo/avy/issues/109][#109]].
-*** Fix jumping to the last char of a folded Org outline
-See [[https://github.com/abo-abo/avy/issues/108][#108]].
-*** Fix for both =org-indent-mode= and =visual-line-mode=
-See [[https://github.com/abo-abo/avy/issues/110][#110]].
-*** Beep when there are no matches
-See [[https://github.com/abo-abo/avy/issues/111][#111]].
-*** Simplify overlay code
-Most functions reuse =avy--overlay= now.
-*** Fix de-bruijn "no catch for tag"
-See [[https://github.com/abo-abo/avy/issues/116][#116]].
-*** Fix overlays at =point-max=
-See [[https://github.com/abo-abo/avy/issues/125][#125]].
-*** Improve =case-fold-search= condition
-See [[https://github.com/abo-abo/avy/issues/126][#126]].
-*** Don't shorten selector string for =visual-line-mode= and =bolp=
-See [[https://github.com/abo-abo/avy/issues/129][#129]].
-*** Fix interaction with =goto-address-mode=
-** New Features
-*** Allow non-printing keys in =avy-keys=
-Now you can set avy-keys also to the arrow keys and page up/down, e.g.
-
-#+begin_src elisp
-(setq avy-keys '(left right up down prior next))
-#+end_src
-
-and those will be displayed as ▲, ▼, ◀, ▶, △, ▽ in the overlays.  The
-display is controlled by the variable =avy-key-to-char-alist=.
-
-See [[https://github.com/abo-abo/avy/issues/77][#77]].
-*** Allow to switch action midway from goto to kill/mark/copy
-For example, suppose you have:
-
-#+begin_src elisp
-(global-set-key (kbd "M-t") 'avy-goto-word-1)
-#+end_src
-
-- To jump to a certain word starting with "w" (e.g. first one on
-  screen): ~M-t w a~
-- To copy the word instead of jumping to it: ~M-t w na~.
-- To mark the word after jumping to it: ~M-t w ma~.
-- To kill the word after jumping to it: ~M-t w xa~.
-
-You can customize =avy-dispatch-alist= to modify these actions.
-
-See [[https://github.com/abo-abo/avy/issues/78][#78]].
-
-*** New command =avy-pop-mark=
-Goes back to the last location of =push-mark=:
-
-- has its own history,
-- handles multiple frames.
-
-See [[https://github.com/abo-abo/avy/issues/81][#81]] 
[[https://github.com/abo-abo/avy/issues/88][#88]] 
[[https://github.com/abo-abo/avy/issues/69][#69]].
-*** New commands =avy-goto-line-above= and =avy-goto-line-below=
-See [[https://github.com/abo-abo/avy/issues/106][#106]].
-*** New defcustom =avy-line-insert-style=
-Allows to modify the behavior of =avy-copy-line=, =avy-move-line=, and 
=avy-copy-region=.
-See [[https://github.com/abo-abo/avy/issues/117][#117]].
-*** New defcustom =avy-all-windows-alt=
-Allows to customize the behavior of =universal-argument= modifying
-=avy-all-windows=.
-See [[https://github.com/abo-abo/avy/issues/118][#118]].
-*** New defcustom =avy-subword-extra-word-chars=
-Allows to customize the behavior of =avy-goto-subword-0= and
-=avy-goto-subword-1= by adding extra chars that should match as word
-constituents.
-See [[https://github.com/abo-abo/avy/issues/116][#116]].
-* 0.5.0
-** Fixes
-*** el:avy-action-copy
-Save selected window and frame. See 
[[https://github.com/abo-abo/avy/issues/133][#133]].
-
-Copy line for el:avy-goto-line. See 
[[https://github.com/abo-abo/avy/issues/191][#191]].
-*** el:avy-read
-Make ~C-g~ and ~ESC~ fail silently when reading char. See 
[[https://github.com/abo-abo/avy/issues/137][#137]].
-
-Display error message on mouse clicks. See 
[[https://github.com/abo-abo/avy/issues/226][#226]].
-
-Update el:avy-current-path before returning. See 
[[https://github.com/abo-abo/avy/issues/226][#226]].
-
-Quit on ~ESC~. See [[https://github.com/abo-abo/avy/issues/249][#249]].
-
-Fix for el:org-toggle-link-display. See 
[[https://github.com/abo-abo/avy/issues/261][#261]].
-
-Fix for el:buffer-invisibility-spec being t. See 
[[https://github.com/abo-abo/avy/issues/264][#264]].
-
-Allow "invisible" 'org-link. See 
[[https://github.com/abo-abo/avy/issues/269][#269]].
-*** el:avy-goto-word-1
-Works for "^A"-"^Z", see [[https://github.com/abo-abo/avy/issues/167][#167]].
-*** el:avy-goto-subword-0
-Add char at window start if empty, See 
[[https://github.com/abo-abo/avy/issues/145][#145]].
-
-Add option to limit scope. See 
[[https://github.com/abo-abo/avy/issues/235][#235]].
-*** el:avy-goto-subword-1
-Check el:char-after. See [[https://github.com/abo-abo/avy/issues/163][#163]].
-*** el:avy-isearch
-Escape regex. See [[https://github.com/abo-abo/avy/issues/147][#147]].
-*** el:avy-goto-char-2
-Translate ~RET~ to ~C-j~. See 
[[https://github.com/abo-abo/avy/issues/153][#153]].
-*** el:avy-action-goto
-Add el:raise-frame.
-*** el:avy-goto-char-timer
-Allow ~C-h~ to delete. See [[https://github.com/abo-abo/avy/issues/193][#193]].
-
-Obey el:avy-background for the initial search. See 
[[https://github.com/abo-abo/avy/issues/259][#259]].
-*** el:avy-goto-line
-Fix for empty buffer. See [[https://github.com/abo-abo/avy/issues/238][#238]].
-
-Add ability to display candidates from bottom to top. See 
[[https://github.com/abo-abo/avy/issues/236][#236]].
-*** el:avy--overlay-at-full
-More consistent face order.
-See [[https://github.com/abo-abo/avy/issues/270][#270]].
-*** documentation
-See [[https://github.com/abo-abo/avy/issues/223][#223]], 
[[https://github.com/abo-abo/avy/issues/226][#226]], 
[[https://github.com/abo-abo/avy/issues/218][#218]], 
[[https://github.com/abo-abo/avy/issues/245][#245]], 
[[https://github.com/abo-abo/avy/issues/262][#262]].
-
-** New Features
-*** API
-New functions have been added as drop-in replacements of double-dash (private) 
avy
-functions that were used in other packages and configs. Please replace the 
references to
-the obsolete functions.
-
-**** el:avy-jump
-New API function to replace el:avy--generic-jump. See 
[[https://github.com/abo-abo/avy/issues/265][#265]], 
[[https://github.com/abo-abo/avy/issues/267][#267]].
-**** el:avy-process
-New API function to replace el:avy--process. See 
[[https://github.com/abo-abo/avy/issues/266][#266]].
-
-*** New actions
-**** el:avy-action-kill-stay
-Kill a word with el:avy-goto-char without moving there.
-Bound to ~X~.
-**** el:avy-action-ispell
-Auto-correct word at point. See 
[[https://github.com/abo-abo/avy/issues/142][#142]], 
[[https://github.com/abo-abo/avy/issues/160][#160]], 
[[https://github.com/abo-abo/avy/issues/161][#161]].
-Bound to ~i~.
-**** el:avy-action-yank
-Yank sexp starting at selected point at the current point. See 
[[https://github.com/abo-abo/avy/issues/183][#183]].
-Bound to ~y~.
-**** el:avy-action-teleport
-Kill sexp starting on selected point and yank into the current location. See 
[[https://github.com/abo-abo/avy/issues/207][#207]].
-Bound to ~t~.
-**** el:avy-action-zap-to-char
-Kill from point up to selected point. See 
[[https://github.com/abo-abo/avy/issues/234][#234]].
-Bound to ~z~.
-
-*** New defcustoms
-**** New el:avy-style setting: 'words
-Use this setting:
-#+begin_src elisp
-(setq avy-style 'words)
-#+end_src
-And you'll see overlays like "by", "if", "is", "it", "my" for 2-letter 
sequences, and
-"can", "car", "cog" for 3-letter sequences. You might find them easier to type 
than "hla",
-"lls" and "jhl". But you will have to adjust your el:avy-dispatch-alist, e.g. 
to use only
-upper case characters.
-
-See [[https://github.com/abo-abo/avy/issues/210][#210]], 
[[https://github.com/abo-abo/avy/issues/219][#219]].
-**** el:avy-orders-alist
-Use it to customize the order of candidates with relation to point.  The 
default is for
-el:avy-goto-char to have the shortest overlay for candidates closest to point.
-See [[https://github.com/abo-abo/avy/issues/242][#242]].
-**** el:avy-indent-line-overlay
-When non-nil el:avy-goto-line will display the line overlay next to the first
-non-whitespace character of each line. See 
[[https://github.com/abo-abo/avy/issues/244][#244]].
-**** el:avy-single-candidate-jump
-When non-nil, and there is only one candidate, jump there. See 
[[https://github.com/abo-abo/avy/issues/250][#250]].
-**** el:avy-del-last-char-by
-Customize keys which delete the last read char. The defaults are ~C-h~ and 
~DEL~. See [[https://github.com/abo-abo/avy/issues/251][#251]].
-**** el:avy-goto-word-0-regexp
-Customize el:avy-goto-word-0. See 
[[https://github.com/abo-abo/avy/issues/136][#136]], 
[[https://github.com/abo-abo/avy/issues/156][#156]].
-**** el:avy-pre-action
-Function to all before el:avy-action. See 
[[https://github.com/abo-abo/avy/issues/260][#260]].
-**** el:avy-enter-times-out
-When non-nil (the default), ~RET~ exists el:avy-goto-char-timer early.
-When nil, it matches a newline.
-See [[https://github.com/abo-abo/avy/issues/220][#220]], 
[[https://github.com/abo-abo/avy/issues/225][#225]].
-
-*** New commands
-**** el:avy-move-region
-Select two lines and move the text between them above the current line.
-See [[https://github.com/abo-abo/avy/issues/75][#75]], 
[[https://github.com/abo-abo/avy/issues/187][#187]], 
[[https://github.com/abo-abo/avy/issues/188][#188]].
-**** el:avy-goto-end-of-line
-Call el:avy-goto-line and move to the end of the line. See 
[[https://github.com/abo-abo/avy/issues/240][#240]].
-
-**** el:avy-linum-mode
-Minor mode that uses avy hints for el:linum-mode.
-
-**** el:avy-resume
-Holds last command avy command after user input. This is a quick way to bring 
back the
-same markers after a jump. See 
[[https://github.com/abo-abo/avy/issues/157][#157]], 
[[https://github.com/abo-abo/avy/issues/165][#165]].
-**** el:avy-next
-Go to the next candidate after el:avy-read.
-Example config:
-
-#+begin_src elisp
-(defhydra hydra-avy-cycle ()
-  ("j" avy-next "next")
-  ("k" avy-prev "prev")
-  ("q" nil "quit"))
-
-(global-set-key (kbd "C-M-'") 'hydra-avy-cycle/body)
-#+end_src
-
-After e.g. el:avy-goto-char or el:avy-goto-char-timer, use the above hydra to 
cycle
-between the last candidates.  See 
[[https://github.com/abo-abo/avy/issues/254][#254]].
-**** *-above and *-below variants
-Command versions restricted to matches before or after the point.
-
-See [[https://github.com/abo-abo/avy/issues/148][#148]]:
-- el:avy-goto-char-2-above
-- el:avy-goto-char-2-below
-
-See [[https://github.com/abo-abo/avy/issues/151][#151]]:
-- el:avy-goto-word-1-above
-- el:avy-goto-word-1-below
-
-See [[https://github.com/abo-abo/avy/issues/156][#156]]:
-- el:avy-goto-symbol-1-above
-- el:avy-goto-symbol-1-below
-
-See [[https://github.com/abo-abo/avy/issues/186][#186]]:
-- el:avy-goto-word-0-below
-- el:avy-goto-word-0-above
-**** kill and save region functionality
-New avy-enabled commands:
-- el:avy-kill-whole-line
-- el:avy-kill-region
-- el:avy-kill-ring-save-whole-line
-- el:avy-kill-ring-save-region
-
-See [[https://github.com/abo-abo/avy/issues/158][#158]].
-**** org-mode functionality
-New avy-enabled commands:
-- el:avy-org-refile-as-child
-- el:avy-org-goto-heading-timer
-See [[https://github.com/abo-abo/avy/issues/214][#214]], 
[[https://github.com/abo-abo/avy/issues/258][#258]].
-*** el:avy-goto-char-timer
-Show the number of matches so far in the prompt. See 
[[https://github.com/abo-abo/avy/issues/253][#253]].
-*** el:avy-read
-Ignore mistyping when no candidates are available. See 
[[https://github.com/abo-abo/avy/issues/256][#256]].
-
-When the overlays are shown, press ~?~ to get dispatch help.
diff --git a/packages/avy/targets/avy-init.el b/packages/avy/targets/avy-init.el
deleted file mode 100644
index 6751b74..0000000
--- a/packages/avy/targets/avy-init.el
+++ /dev/null
@@ -1,26 +0,0 @@
-;;; avy-init.el --- bare avy init
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-(add-to-list 'load-path default-directory)
-(mapc #'byte-compile-file '("avy.el"))
-(require 'avy)
-(global-set-key (kbd "C-c j") 'avy-goto-char)
-(global-set-key (kbd "C-'") 'avy-goto-char-2)
diff --git a/packages/avy/targets/checkdoc.el b/packages/avy/targets/checkdoc.el
deleted file mode 100644
index eb2e9f6..0000000
--- a/packages/avy/targets/checkdoc.el
+++ /dev/null
@@ -1,4 +0,0 @@
-;; Copyright (C) 2019 Free Software Foundation, Inc.
-
-(checkdoc-file "avy-test.el")
-(checkdoc-file "avy.el")
diff --git a/packages/beacon/COPYING b/packages/beacon/COPYING
deleted file mode 100644
index 92b370f..0000000
--- a/packages/beacon/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
-GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 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.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  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, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public 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.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/beacon/Readme.org b/packages/beacon/Readme.org
deleted file mode 100644
index 50631c8..0000000
--- a/packages/beacon/Readme.org
+++ /dev/null
@@ -1,41 +0,0 @@
-#+TITLE: Beacon --- Never lose your cursor again
-
-This is a global minor-mode.  Turn it on everywhere with:
-#+BEGIN_SRC emacs-lisp
-(beacon-mode 1)
-#+END_SRC
-
-[[file:example-beacon.gif]]
-
-Whenever the window scrolls a light will shine on top of your cursor
-so you know where it is.
-
-That’s it.
-
-** Customizations
-
-- The appearance of the beacon is configured by ~beacon-size~ and
-  ~beacon-color~.
-
-- The duration is configured by ~beacon-blink-duration~ and
-  ~beacon-blink-delay~.
-
-- To customize /when/ the beacon should blink at all, configure
-  ~beacon-blink-when-window-scrolls~,
-  ~beacon-blink-when-window-changes~, and
-  ~beacon-blink-when-point-moves~.
-
-- To prevent the beacon from blinking only on specific situations
-  configure ~beacon-dont-blink-major-modes~,
-  ~beacon-dont-blink-predicates~, or ~beacon-dont-blink-commands~. You
-  can also disable it only in specific buffers by doing
-  ~(setq-local beacon-mode nil)~.
-
-- Beacon can also push the mark for you whenever point moves a long
-  distance. For this, configure ~beacon-push-mark~.
-
-** Contributors
-
-- [[https://github.com/tsdh][Tassilo Horn]]
-
-If you’d like to help too, just open a PR.
diff --git a/packages/beacon/beacon.el b/packages/beacon/beacon.el
deleted file mode 100644
index f3cdea9..0000000
--- a/packages/beacon/beacon.el
+++ /dev/null
@@ -1,481 +0,0 @@
-;;; beacon.el --- Highlight the cursor whenever the window scrolls  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <emacs@endlessparentheses.com>
-;; URL: https://github.com/Malabarba/beacon
-;; Keywords: convenience
-;; Version: 1.3.3
-;; Package-Requires: ((seq "2.14"))
-
-;; 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:
-
-;; This is a global minor-mode. Turn it on everywhere with:
-;; ┌────
-;; │ (beacon-mode 1)
-;; └────
-;;
-;; Whenever the window scrolls a light will shine on top of your cursor so
-;; you know where it is.
-;;
-;; That’s it.
-;;
-;; See the accompanying Readme.org for configuration details.
-
-;;; Code:
-
-(require 'seq)
-(require 'faces)
-(unless (fboundp 'seq-mapn)
-  ;; This is for people who are on outdated Emacs snapshots. Will be
-  ;; deleted in a couple of weeks.
-  (defun seq-mapn (function sequence &rest sequences)
-    "Like `seq-map' but FUNCTION is mapped over all SEQUENCES.
-The arity of FUNCTION must match the number of SEQUENCES, and the
-mapping stops on the shortest sequence.
-Return a list of the results.
-
-\(fn FUNCTION SEQUENCES...)"
-    (let ((result nil)
-          (sequences (seq-map (lambda (s) (seq-into s 'list))
-                            (cons sequence sequences))))
-      (while (not (memq nil sequences))
-        (push (apply function (seq-map #'car sequences)) result)
-        (setq sequences (seq-map #'cdr sequences)))
-      (nreverse result))))
-
-(defgroup beacon nil
-  "Customization group for beacon."
-  :group 'emacs
-  :prefix "beacon-")
-
-(defvar beacon--timer nil)
-
-(defcustom beacon-push-mark 35
-  "Should the mark be pushed before long movements?
-If nil, `beacon' will not push the mark.
-Otherwise this should be a number, and `beacon' will push the
-mark whenever point moves more than that many lines."
-  :type '(choice integer (const nil)))
-
-(defcustom beacon-blink-when-point-moves-vertically nil
-  "Should the beacon blink when moving a long distance vertically?
-If nil, don't blink due to vertical movement.
-If non-nil, this should be an integer, which is the minimum
-movement distance (in lines) that triggers a beacon blink."
-  :type '(choice integer (const nil)))
-
-(defcustom beacon-blink-when-point-moves-horizontally nil
-  "Should the beacon blink when moving a long distance horizontally?
-If nil, don't blink due to horizontal movement.
-If non-nil, this should be an integer, which is the minimum
-movement distance (in columns) that triggers a beacon blink."
-  :type '(choice integer (const nil)))
-
-(defcustom beacon-blink-when-buffer-changes t
-  "Should the beacon blink when changing buffer?"
-  :type 'boolean)
-
-(defcustom beacon-blink-when-window-scrolls t
-  "Should the beacon blink when the window scrolls?"
-  :type 'boolean)
-
-(defcustom beacon-blink-when-window-changes t
-  "Should the beacon blink when the window changes?"
-  :type 'boolean)
-
-(defcustom beacon-blink-when-focused nil
-  "Should the beacon blink when Emacs gains focus?
-Note that, due to a limitation of `focus-in-hook', this might
-trigger false positives on some systems."
-  :type 'boolean
-  :package-version '(beacon . "0.2"))
-
-(defcustom beacon-blink-duration 0.3
-  "Time, in seconds, that the blink should last."
-  :type 'number)
-
-(defcustom beacon-blink-delay 0.3
-  "Time, in seconds, before starting to fade the beacon."
-  :type 'number)
-
-(defcustom beacon-size 40
-  "Size of the beacon in characters."
-  :type 'number)
-
-(defcustom beacon-color 0.5
-  "Color of the beacon.
-This can be a string or a number.
-
-If it is a number, the color is taken to be white or
-black (depending on the current theme's background) and this
-number is a float between 0 and 1 specifing the brightness.
-
-If it is a string, it is a color name or specification,
-e.g. \"#666600\"."
-  :type '(choice number color))
-
-(defface beacon-fallback-background
-  '((((class color) (background light)) (:background "black"))
-    (((class color) (background dark)) (:background "white")))
-  "Fallback beacon background color.
-Used in cases where the color can't be determined by Emacs.
-Only the background of this face is used.")
-
-(defvar beacon-dont-blink-predicates nil
-  "A list of predicates that prevent the beacon blink.
-These predicate functions are called in order, with no
-arguments, before blinking the beacon.  If any returns
-non-nil, the beacon will not blink.
-
-For instance, if you want to disable beacon on buffers where
-`hl-line-mode' is on, you can do:
-
-    (add-hook \\='beacon-dont-blink-predicates
-              (lambda () (bound-and-true-p hl-line-mode)))")
-
-(defun beacon--compilation-mode-p ()
-  "Non-nil if this is some form of compilation mode."
-  (or (derived-mode-p 'compilation-mode)
-      (bound-and-true-p compilation-minor-mode)))
-
-(add-hook 'beacon-dont-blink-predicates #'window-minibuffer-p)
-(add-hook 'beacon-dont-blink-predicates #'beacon--compilation-mode-p)
-
-(defcustom beacon-dont-blink-major-modes '(t magit-status-mode magit-popup-mode
-                                       inf-ruby-mode
-                                       mu4e-headers-mode
-                                       gnus-summary-mode gnus-group-mode)
-  "A list of major-modes where the beacon won't blink.
-Whenever the current buffer satisfies `derived-mode-p' for
-one of the major-modes on this list, the beacon will not
-blink."
-  :type '(repeat symbol))
-
-(defcustom beacon-dont-blink-commands '(next-line previous-line
-                                            forward-line)
-  "A list of commands that should not make the beacon blink.
-Use this for commands that scroll the window in very
-predictable ways, when the blink would be more distracting
-than helpful.."
-  :type '(repeat symbol))
-
-(defcustom beacon-before-blink-hook nil
-  "Hook run immediately before blinking the beacon."
-  :type 'hook)
-
-
-;;; Internal variables
-(defvar beacon--window-scrolled nil)
-(defvar beacon--previous-place nil)
-(defvar beacon--previous-mark-head nil)
-(defvar beacon--previous-window nil)
-(defvar beacon--previous-window-start 0)
-
-(defun beacon--record-vars ()
-  (unless (window-minibuffer-p)
-    (setq beacon--previous-mark-head (car mark-ring))
-    (setq beacon--previous-place (point-marker))
-    (setq beacon--previous-window (selected-window))
-    (setq beacon--previous-window-start (window-start))))
-
-
-;;; Overlays
-(defvar beacon--ovs nil)
-
-(defconst beacon-overlay-priority (/ most-positive-fixnum 2)
-  "Priotiy used on all of our overlays.")
-
-(defun beacon--make-overlay (length &rest properties)
-  "Put an overlay at point with background COLOR."
-  (let ((ov (make-overlay (point) (+ length (point)))))
-    (overlay-put ov 'beacon t)
-    ;; Our overlay is very temporary, so we take the liberty of giving
-    ;; it a high priority.
-    (overlay-put ov 'priority beacon-overlay-priority)
-    (overlay-put ov 'window (selected-window))
-    (while properties
-      (overlay-put ov (pop properties) (pop properties)))
-    (push ov beacon--ovs)
-    ov))
-
-(defun beacon--colored-overlay (color)
-  "Put an overlay at point with background COLOR."
-  (beacon--make-overlay 1 'face (list :background color)))
-
-(defun beacon--ov-put-after-string (overlay colors)
-  "Add an after-string property to OVERLAY.
-The property's value is a string of spaces with background
-COLORS applied to each one.
-If COLORS is nil, OVERLAY is deleted!"
-  (if (not colors)
-      (when (overlayp overlay)
-        (delete-overlay overlay))
-    (overlay-put overlay 'beacon-colors colors)
-    (overlay-put overlay 'after-string
-                 (propertize
-                  (mapconcat (lambda (c) (propertize " " 'face (list 
:background c)))
-                             colors
-                             "")
-                  'cursor 1000))))
-
-(defun beacon--after-string-overlay (colors)
-  "Put an overlay at point with an after-string property.
-The property's value is a string of spaces with background
-COLORS applied to each one."
-  ;; The after-string must not be longer than the remaining columns
-  ;; from point to right window-end else it will be wrapped around.
-  (let ((colors (seq-take colors (- (window-width) (current-column) 1))))
-    (beacon--ov-put-after-string (beacon--make-overlay 0) colors)))
-
-(defun beacon--ov-at-point ()
-  (car (or (seq-filter (lambda (o) (overlay-get o 'beacon))
-                       (overlays-in (point) (point)))
-           (seq-filter (lambda (o) (overlay-get o 'beacon))
-                       (overlays-at (point))))))
-
-(defun beacon--vanish (&rest _)
-  "Turn off the beacon."
-  (unless (string-match "\\` \\*\\(temp-buffer\\|Echo Area.*\\)\\*"
-                        (buffer-name))
-    (when (timerp beacon--timer)
-      (cancel-timer beacon--timer))
-    (mapc #'delete-overlay beacon--ovs)
-    (setq beacon--ovs nil)))
-
-
-;;; Colors
-(defun beacon--int-range (a b)
-  "Return a list of integers between A inclusive and B exclusive.
-Only returns `beacon-size' elements."
-  (let ((d (/ (- b a) beacon-size))
-        (out (list a)))
-    (dotimes (_ (1- beacon-size))
-      (push (+ (car out) d) out))
-    (nreverse out)))
-
-(defun beacon--color-range ()
-  "Return a list of background colors for the beacon."
-  (let* ((default-bg (or (save-excursion
-                           (unless (eobp)
-                             (forward-line 1)
-                             (unless (or (bobp) (not (bolp)))
-                               (forward-char -1)))
-                           (background-color-at-point))
-                         (face-background 'default)))
-         (bg (color-values (if (or (not (stringp default-bg))
-                                   (string-match "\\`unspecified-" default-bg))
-                               (face-attribute 'beacon-fallback-background 
:background)
-                             default-bg)))
-         (fg (cond
-              ((stringp beacon-color) (color-values beacon-color))
-              ((and (stringp bg)
-                    (< (color-distance "black" bg)
-                       (color-distance "white" bg)))
-               (make-list 3 (* beacon-color 65535)))
-              (t (make-list 3 (* (- 1 beacon-color) 65535))))))
-    (when bg
-      (apply #'seq-mapn (lambda (r g b) (format "#%04x%04x%04x" r g b))
-             (mapcar (lambda (n) (butlast (beacon--int-range (elt fg n) (elt 
bg n))))
-                     [0 1 2])))))
-
-
-;;; Blinking
-(defun beacon--shine ()
-  "Shine a beacon at point."
-  (let ((colors (beacon--color-range)))
-    (save-excursion
-      (while colors
-        (if (looking-at "$")
-            (progn
-              (beacon--after-string-overlay colors)
-              (setq colors nil))
-          (beacon--colored-overlay (pop colors))
-          (forward-char 1))))))
-
-(defun beacon--dec ()
-  "Decrease the beacon brightness by one."
-  (pcase (beacon--ov-at-point)
-    (`nil (beacon--vanish))
-    ((and o (let c (overlay-get o 'beacon-colors)) (guard c))
-     (beacon--ov-put-after-string o (cdr c)))
-    (o
-     (delete-overlay o)
-     (save-excursion
-       (while (and (condition-case nil
-                       (progn (forward-char 1) t)
-                     (end-of-buffer nil))
-                   (setq o (beacon--ov-at-point)))
-         (let ((colors (overlay-get o 'beacon-colors)))
-           (if (not colors)
-               (move-overlay o (1- (point)) (point))
-             (forward-char -1)
-             (beacon--colored-overlay (pop colors))
-             (beacon--ov-put-after-string o colors)
-             (forward-char 1))))))))
-
-;;;###autoload
-(defun beacon-blink ()
-  "Blink the beacon at the position of the cursor.
-Unlike `beacon-blink-automated', the beacon will blink
-unconditionally (even if `beacon-mode' is disabled), and this can
-be invoked as a user command or called from lisp code."
-  (interactive)
-  (beacon--vanish)
-  (run-hooks 'beacon-before-blink-hook)
-  (beacon--shine)
-  (setq beacon--timer
-        (run-at-time beacon-blink-delay
-                     (/ beacon-blink-duration 1.0 beacon-size)
-                     #'beacon--dec)))
-
-(defun beacon-blink-automated ()
-  "If appropriate, blink the beacon at the position of the cursor.
-Unlike `beacon-blink', the blinking is conditioned on a series of
-variables: `beacon-mode', `beacon-dont-blink-commands',
-`beacon-dont-blink-major-modes', and
-`beacon-dont-blink-predicates'."
-  ;; Record vars here in case something is blinking outside the
-  ;; command loop.
-  (beacon--record-vars)
-  (unless (or (not beacon-mode)
-              (run-hook-with-args-until-success 'beacon-dont-blink-predicates)
-              (seq-find #'derived-mode-p beacon-dont-blink-major-modes)
-              (memq (or this-command last-command) beacon-dont-blink-commands))
-    (beacon-blink)))
-
-
-;;; Movement detection
-(defun beacon--movement-> (delta-y &optional delta-x)
-  "Return non-nil if latest vertical movement is > DELTA-Y.
-If DELTA-Y is nil, return nil.
-The same is true for DELTA-X and horizonta movement."
-  (and delta-y
-       (markerp beacon--previous-place)
-       (equal (marker-buffer beacon--previous-place)
-              (current-buffer))
-       ;; Quick check that prevents running the code below in very
-       ;; short movements (like typing).
-       (> (abs (- (point) beacon--previous-place))
-          delta-y)
-       ;; Col movement.
-       (or (and delta-x
-                (> (abs (- (current-column)
-                           (save-excursion
-                             (goto-char beacon--previous-place)
-                             (current-column))))
-                   delta-x))
-           ;; Check if the movement was >= DELTA lines by moving DELTA
-           ;; lines. `count-screen-lines' is too slow if the movement had
-           ;; thousands of lines.
-           (save-excursion
-             (let ((p (point)))
-               (goto-char (min beacon--previous-place p))
-               (vertical-motion delta-y)
-               (> (max p beacon--previous-place)
-                  (line-beginning-position)))))))
-
-(defun beacon--maybe-push-mark ()
-  "Push mark if it seems to be safe."
-  (when (and (not mark-active)
-             (beacon--movement-> beacon-push-mark))
-    (let ((head (car mark-ring)))
-      (when (and (eq beacon--previous-mark-head head)
-                 (not (equal head beacon--previous-place)))
-        (push-mark beacon--previous-place 'silent)))))
-
-(defun beacon--post-command ()
-  "Blink if point moved very far."
-  (cond
-   ;; Sanity check.
-   ((not (markerp beacon--previous-place)))
-   ;; Blink for switching buffers.
-   ((and beacon-blink-when-buffer-changes
-         (not (eq (marker-buffer beacon--previous-place)
-                  (current-buffer))))
-    (beacon-blink-automated))
-   ;; Blink for switching windows.
-   ((and beacon-blink-when-window-changes
-         (not (eq beacon--previous-window (selected-window))))
-    (beacon-blink-automated))
-   ;; Blink for scrolling.
-   ((and beacon--window-scrolled
-         (equal beacon--window-scrolled (selected-window)))
-    (beacon-blink-automated))
-   ;; Blink for movement
-   ((beacon--movement-> beacon-blink-when-point-moves-vertically
-                  beacon-blink-when-point-moves-horizontally)
-    (beacon-blink-automated)))
-  (beacon--maybe-push-mark)
-  (setq beacon--window-scrolled nil))
-
-(defun beacon--window-scroll-function (win start-pos)
-  "Blink the beacon or record that window has been scrolled.
-If invoked during the command loop, record the current window so
-that it may be blinked on post-command.  This is because the
-scrolled window might not be active, but we only know that at
-`post-command-hook'.
-
-If invoked outside the command loop, `post-command-hook' would be
-unreliable, so just blink immediately."
-  (unless (or (and (equal beacon--previous-window-start start-pos)
-                   (equal beacon--previous-window win))
-              (not beacon-blink-when-window-scrolls))
-    (if this-command
-        (setq beacon--window-scrolled win)
-      (setq beacon--window-scrolled nil)
-      (beacon-blink-automated))))
-
-(defun beacon--blink-on-focus ()
-  "Blink if `beacon-blink-when-focused' is non-nil"
-  (when beacon-blink-when-focused
-    (beacon-blink-automated)))
-
-
-;;; Minor-mode
-(defcustom beacon-lighter
-  (cond
-   ;; ((char-displayable-p ?💡) " 💡")
-   ;; ((char-displayable-p ?Λ) " Λ")
-   (t " (*)"))
-  "Lighter string used on the mode-line."
-  :type 'string)
-
-;;;###autoload
-(define-minor-mode beacon-mode
-  nil nil beacon-lighter nil
-  :global t
-  (if beacon-mode
-      (progn
-        (add-hook 'window-scroll-functions #'beacon--window-scroll-function)
-        (add-hook 'focus-in-hook #'beacon--blink-on-focus)
-        (add-hook 'post-command-hook #'beacon--post-command)
-        (add-hook 'before-change-functions #'beacon--vanish)
-        (add-hook 'pre-command-hook #'beacon--record-vars)
-        (add-hook 'pre-command-hook #'beacon--vanish))
-    (remove-hook 'focus-in-hook #'beacon--blink-on-focus)
-    (remove-hook 'window-scroll-functions #'beacon--window-scroll-function)
-    (remove-hook 'post-command-hook #'beacon--post-command)
-    (remove-hook 'before-change-functions #'beacon--vanish)
-    (remove-hook 'pre-command-hook #'beacon--record-vars)
-    (remove-hook 'pre-command-hook #'beacon--vanish)))
-
-(provide 'beacon)
-;;; beacon.el ends here
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
diff --git a/packages/beacon/example-beacon.gif 
b/packages/beacon/example-beacon.gif
deleted file mode 100644
index 4c01c77..0000000
Binary files a/packages/beacon/example-beacon.gif and /dev/null differ
diff --git a/packages/company-statistics/.dir-locals.el 
b/packages/company-statistics/.dir-locals.el
deleted file mode 100644
index 79d9a12..0000000
--- a/packages/company-statistics/.dir-locals.el
+++ /dev/null
@@ -1,4 +0,0 @@
-((nil . ((indent-tabs-mode . nil)
-         (fill-column . 80)
-         (sentence-end-double-space . t)
-         (emacs-lisp-docstring-fill-column . 75))))
diff --git a/packages/company-statistics/.gitignore 
b/packages/company-statistics/.gitignore
deleted file mode 100644
index 2ecd291..0000000
--- a/packages/company-statistics/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.elc
-ert.el
diff --git a/packages/company-statistics/README.org 
b/packages/company-statistics/README.org
deleted file mode 100644
index 012b63b..0000000
--- a/packages/company-statistics/README.org
+++ /dev/null
@@ -1,34 +0,0 @@
-* company-statistics
-** About
-Company-statistics is a global minor mode built on top of the in-buffer
-completion system [[http://company-mode.github.io/][company-mode]].  The idea 
is to keep a log of a certain number
-of completions you choose, along with some context information, and use that to
-rank candidates the next time you have to choose --- hopefully showing you
-likelier candidates at the top of the list.
-** Use It
-Using the package is simple.
-
-If you install it from the elpa.gnu.org repository with Emacs' package manager,
-you only need to enable the mode, e.g., in your =init.el= file:
-#+begin_src emacs-lisp
-(add-hook 'after-init-hook 'company-statistics-mode)
-#+end_src
-
-Alternatively, make sure =company-statistics.el= is in your =load-path=, and 
add
-to your =init.el= file
-#+begin_src emacs-lisp
-(require 'company-statistics)
-(company-statistics-mode)
-#+end_src
-to load the package manually and turn on the mode.
-
-See the (few but powerful) customizable options for details =M-x 
customize-group
-company-statistics=.
-** Design
-Company-statistics is an add-on for company-mode, but is only loosely coupled 
to
-it (it works by adding a sorting function to =company-transformers= as well as 
a
-handler to =company-completion-finished-hook=).  It is designed with some
-flexibility in mind as for the recorded context information and the way
-candidates are scored: the default pair of functions are only examples!  The
-stats are automatically persistent between sessions.
-** Have Fun!
diff --git a/packages/company-statistics/company-statistics-tests.el 
b/packages/company-statistics/company-statistics-tests.el
deleted file mode 100644
index 3fa336a..0000000
--- a/packages/company-statistics/company-statistics-tests.el
+++ /dev/null
@@ -1,330 +0,0 @@
-;;; company-statistics-tests.el --- company-statistics tests  -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2014-2015  Free Software Foundation, Inc.
-
-;; Author: Ingo Lohmar
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;; emacs -batch -L . -L ../company-mode/ -l ert -l company-statistics-tests.el 
 -f ert-run-tests-batch-and-exit
-
-;;; Code:
-
-(require 'ert)
-
-(require 'company-statistics)
-(setq company-statistics-auto-restore nil
-      company-statistics-auto-save nil)
-
-(company-statistics-mode)
-
-;;; Core
-
-(defun my/hash-compare (h1 h2 &optional pred)
-  "Check that hashes H1 and H2 use the same test, contain the same keys (as
-per that test), and that their stored values agree (as per PRED, which
-defaults to `equal')."
-  (let ((key-test (hash-table-test h1))
-        (pred (or pred 'equal)))
-    (and (eq key-test (hash-table-test h2))
-         (eq (hash-table-count h1) (hash-table-count h2))
-         (let ((keys nil))
-           (maphash (lambda (k v) (push k keys)) h1) ;get keys
-           (null                                     ;expect no mismatch
-            (catch 'mismatch
-              (while keys               ;if this finishes, it's nil
-                (let* ((k (car keys))
-                       (v1 (gethash k h1))
-                       (v2 (gethash k h2)))
-                  (setq keys (cdr keys))
-                  (unless (funcall pred v1 v2)
-                    (throw 'mismatch k))))))))))
-
-(defun my/vector-slice-compare (v1 i1 v2 i2 count &optional pred)
-  "Check that COUNT vector entries of V1 (starting at index I1) and
-V2 (starting at index I2) satisfy the binary predicate PRED, default
-`equal'.  Wraps around if index exceeds corresponding vector length."
-  (let ((pred (or pred 'equal)))
-    (null
-     (let ((l1 (length v1))
-           (l2 (length v2)))
-       (catch 'mismatch
-         (dolist (i (number-sequence 0 (1- count)))
-           (unless (funcall pred
-                            (aref v1 (mod (+ i1 i) l1))
-                            (aref v2 (mod (+ i2 i) l2)))
-             (throw 'mismatch t))))))))
-
-(defmacro cs-fixture (&rest body)
-  "Set up a completion history."
-  `(unwind-protect
-       ;; some setup to get a completion history
-       (let ((company-statistics-size 5))
-         (company-statistics--init)
-         (let ((major-mode 'foo-mode)
-               (company-statistics--context
-                '((:keyword "if")
-                  (:symbol "parent")
-                  (:file "foo-file"))))
-           (company-statistics--finished "foo"))
-         (let ((major-mode 'foo-mode)
-               (company-statistics--context
-                '((:symbol "statistics")
-                  (:file "bar-file"))))
-           (company-statistics--finished "bar"))
-         (let ((major-mode 'baz-mode)
-               (company-statistics--context
-                '((:keyword "unless")
-                  (:symbol "company"))))
-           (company-statistics--finished "baz"))
-         (let ((major-mode 'baz-mode)
-               (company-statistics--context
-                '((:keyword "when")
-                  (:file "quux-file"))))
-           (company-statistics--finished "quux"))
-         ,@body)
-     ;; tear down to clean slate
-     (company-statistics--init)))
-
-(defmacro cs-persistence-fixture (&rest body)
-  "Check and prepare for persistence, clean up."
-  `(let ((company-statistics-file "./cs-test-tmp"))
-     (when (and (file-exists-p company-statistics-file)
-                (file-writable-p company-statistics-file))
-       (unwind-protect
-           (progn ,@body)
-         ;; clean up file system
-         (when (file-exists-p company-statistics-file)
-           (delete-file company-statistics-file))))))
-
-;; tests themselves
-
-(ert-deftest c-s-history-resize ()
-  "Test history-resize for shrinking and enlarging."
-  (cs-fixture
-   ;; resize several times
-   (let ((cs-scores (copy-tree company-statistics--scores))
-         (cs-history (copy-tree company-statistics--log 'vecp)))
-     (company-statistics--log-resize 'dummy 10)
-     ;; scores unaffected?
-     (should (my/hash-compare company-statistics--scores cs-scores))
-     ;; find all 4 old entries
-     (should (my/vector-slice-compare company-statistics--log
-                                      (- company-statistics--index 4)
-                                      cs-history 0
-                                      4))
-     ;; index at "old-size"
-     (should (equal company-statistics--index 5))
-     (company-statistics--log-resize 'dummy 5)
-     (should (my/hash-compare company-statistics--scores cs-scores))
-     (should (my/vector-slice-compare company-statistics--log
-                                      (- company-statistics--index 4)
-                                      cs-history 0
-                                      4))
-     ;; after shrink: index at 0
-     (should (equal company-statistics--index 0))
-     ;; lose oldest entry "foo"
-     (company-statistics--log-resize 'dummy 3)
-     ;; score should be removed
-     (should-not (gethash "foo" company-statistics--scores))
-     ;; find *3* latest entries
-     (should (my/vector-slice-compare company-statistics--log
-                                      (- company-statistics--index 3)
-                                      cs-history 1
-                                      3))
-     (should (equal company-statistics--index 0)))))
-
-(ert-deftest c-s-persistence ()
-  "Test that all statistics are properly saved and restored."
-  (cs-persistence-fixture
-   (cs-fixture
-    (let ((cs-scores (copy-sequence company-statistics--scores))
-          (cs-history (copy-sequence company-statistics--log))
-          (cs-index company-statistics--index))
-      (company-statistics--save)
-      (company-statistics--init)        ;hence shallow copies suffice
-      (company-statistics--load)
-      ;; (should (equal company-statistics--scores cs-scores))
-      (should (my/hash-compare company-statistics--scores cs-scores))
-      (should (equal company-statistics--log cs-history))
-      (should (equal company-statistics--index cs-index))))))
-
-(ert-deftest c-s-score-change-light ()
-  "Test a few things about the default score updates."
-  (let ((major-mode 'foobar-mode))
-    (should (equal (company-statistics-score-change-light "dummy")
-                   '((nil . 1) (foobar-mode . 1))))))
-
-(ert-deftest c-s-score-calc-light ()
-  "Test score calculation default."
-  (cs-fixture
-   ;; FIXME assumes that light context is a subset of the heavy context?
-   (let ((major-mode 'foo-mode))
-     (should (eq (company-statistics-score-calc-light "foo") 2))
-     (should (eq (company-statistics-score-calc-light "bar") 2))
-     (should (eq (company-statistics-score-calc-light "baz") 1))
-     (should (eq (company-statistics-score-calc-light "quux") 1)))
-   (let ((major-mode 'baz-mode))
-     (should (eq (company-statistics-score-calc-light "foo") 1))
-     (should (eq (company-statistics-score-calc-light "bar") 1))
-     (should (eq (company-statistics-score-calc-light "baz") 2))
-     (should (eq (company-statistics-score-calc-light "quux") 2)))))
-
-(ert-deftest c-s-score-change-heavy ()
-  "Test a few things about the heavy score updates."
-  (let ((major-mode 'foobar-mode))
-    (should (equal (company-statistics-score-change-heavy "dummy")
-                   '((nil . 1) (foobar-mode . 1))))
-    (let ((company-statistics--context
-           '((:keyword "kwd")
-             nil                        ;deliberately omit parent symbol
-             (:file "test-file.XYZ"))))
-      (should (equal (company-statistics-score-change-heavy "dummy")
-                     '((nil . 1) (foobar-mode . 1)
-                       ((:keyword "kwd") . 1)
-                       ((:file "test-file.XYZ") . 1)))))))
-
-(ert-deftest c-s-score-calc-heavy ()
-  "Test heavy score calculation."
-  (cs-fixture
-   (let ((major-mode 'foo-mode)
-         (company-statistics--context
-          '((:symbol "company")
-            (:file "foo-file"))))
-     (should (eq (company-statistics-score-calc-heavy "dummy") 0))
-     (should (eq (company-statistics-score-calc-heavy "foo") 3))
-     (should (eq (company-statistics-score-calc-heavy "bar") 2))
-     (should (eq (company-statistics-score-calc-heavy "baz") 2))
-     (should (eq (company-statistics-score-calc-heavy "quux") 1)))
-   (let ((major-mode 'foo-mode)
-         (company-statistics--context
-          '((:keyword "unless")
-            (:symbol "parent")
-            (:file "quux-file"))))
-     (should (eq (company-statistics-score-calc-heavy "dummy") 0))
-     (should (eq (company-statistics-score-calc-heavy "foo") 3))
-     (should (eq (company-statistics-score-calc-heavy "bar") 2))
-     (should (eq (company-statistics-score-calc-heavy "baz") 2))
-     (should (eq (company-statistics-score-calc-heavy "quux") 2)))
-   (let ((major-mode 'baz-mode)
-         (company-statistics--context
-          '((:keyword "when")
-            (:file "baz-file"))))
-     (should (eq (company-statistics-score-calc-heavy "dummy") 0))
-     (should (eq (company-statistics-score-calc-heavy "foo") 1))
-     (should (eq (company-statistics-score-calc-heavy "bar") 1))
-     (should (eq (company-statistics-score-calc-heavy "baz") 2))
-     (should (eq (company-statistics-score-calc-heavy "quux") 3)))
-   (let ((major-mode 'baz-mode)
-         (company-statistics--context
-          '((:keyword "if")
-            (:symbol "statistics")
-            (:file "quux-file"))))
-     (should (eq (company-statistics-score-calc-heavy "dummy") 0))
-     (should (eq (company-statistics-score-calc-heavy "foo") 2))
-     (should (eq (company-statistics-score-calc-heavy "bar") 2))
-     (should (eq (company-statistics-score-calc-heavy "baz") 2))
-     (should (eq (company-statistics-score-calc-heavy "quux") 3)))))
-
-(ert-deftest c-s-alist-update ()
-  "Test central helper function for context/score alist update."
-  (let ((alist '((nil . 0) ("a" . 1) ("b" . 2) ("d" . some-symbol)))
-        (updates '(("a" . 1) ("c" . 3))))
-    (should (equal (company-statistics--alist-update alist updates '+)
-                   '((nil . 0) ("a" . 2) ("b" . 2) ("d" . some-symbol) ("c" . 
3)))))
-  ;; filter only checks on merged, so nil entry remains, and symbol should not 
pose a problem:
-  (let ((alist '((nil . 0) ("a" . 1) ("b" . 2) ("d" . some-symbol)))
-        (updates '(("a" . 1) ("c" . 3))))
-    (should (equal (company-statistics--alist-update alist updates '+ 'zerop)
-                   '((nil . 0) ("a" . 2) ("b" . 2) ("d" . some-symbol) ("c" . 
3)))))
-  (let ((alist '((nil . 0) ("a" . 1) ("b" . 2) ("d" . some-symbol)))
-        (updates '(("a" . 1) ("c" . 3))))
-    (should (equal (company-statistics--alist-update alist updates '-)
-                   '((nil . 0) ("a" . 0) ("b" . 2) ("d" . some-symbol) ("c" . 
3)))))
-  (let ((alist '((nil . 0) ("a" . 1) ("b" . 2) ("d" . some-symbol)))
-        (updates '(("a" . 1) ("c" . 3))))
-    (should (equal (company-statistics--alist-update alist updates '- 'zerop)
-                   '((nil . 0) ("b" . 2) ("d" . some-symbol) ("c" . 3))))))
-
-(ert-deftest c-s-scores-add ()
-  "Test adding scores."
-  (cs-fixture
-   ;; new entry
-   (company-statistics--scores-add "zufpah" '((nil . 27)))
-   (should (equal (gethash "zufpah" company-statistics--scores)
-                  '((nil . 27))))
-   ;; update existing entry
-   (company-statistics--scores-add "foo" '((nil . 2)))
-   (let ((h (gethash "foo" company-statistics--scores)))
-     (should (equal (assoc nil h) '(nil . 3)))
-     (should (equal (assoc 'foo-mode h) '(foo-mode . 1))))))
-
-(ert-deftest c-s-history-revert ()
-  "Test reverting a score update stored in history."
-  ;; deep copies throughout!
-  (cs-fixture
-   ;; pointing to nil, should not change anything
-   (let ((cs-scores (copy-tree company-statistics--scores))
-         (cs-history (copy-tree company-statistics--log 'vecp))
-         (cs-index company-statistics--index))
-     (company-statistics--log-revert)
-     (should (my/hash-compare company-statistics--scores cs-scores))
-     (should (equal company-statistics--log cs-history))
-     (should (equal company-statistics--index cs-index))))
-  (cs-fixture
-   ;; remove existing item 2: should vanish from scores
-   (let ((cs-scores (copy-tree company-statistics--scores))
-         (cs-history (copy-tree company-statistics--log 'vecp))
-         (cs-index company-statistics--index))
-     (company-statistics--log-revert 2)
-     (should-not (gethash "baz" company-statistics--scores))
-     (should (equal company-statistics--log cs-history))
-     (should (equal company-statistics--index cs-index))))
-  (cs-fixture
-   ;; remove just inserted item 3 (scores should be same)
-   (let ((cs-scores (copy-tree company-statistics--scores))
-         (cs-history (copy-tree company-statistics--log 'vecp))
-         (cs-index company-statistics--index))
-     (let ((major-mode 'extra-mode))
-       (company-statistics--finished "foo")) ;adds to scores, history, index
-     (company-statistics--log-revert 4) ;reverts scores only, so...
-     (aset cs-history 4 '("foo" (nil . 1) (extra-mode . 1)))
-     (setq cs-index (mod (1+ cs-index) company-statistics-size))
-     (should (my/hash-compare company-statistics--scores cs-scores))
-     (should (equal company-statistics--log cs-history))
-     (should (equal company-statistics--index cs-index)))))
-
-(ert-deftest c-s-history-store ()
-  "Test insert/overwrite of history item."
-  (cs-fixture
-   (let ((cs-history (copy-tree company-statistics--log 'vecp))
-         (cs-index company-statistics--index))
-     ;; only changes history and index
-     (company-statistics--log-store "foo" '((nil . 27)))
-     (aset cs-history cs-index '("foo" (nil . 27)))
-     (setq cs-index 0)                  ;wraps around
-     (should (equal company-statistics--log cs-history))
-     (should (equal company-statistics--index cs-index))
-     ;; now wrap around to overwrite an entry
-     (company-statistics--log-store "tagyok" '((bla . 42)))
-     (aset cs-history cs-index '("tagyok" (bla . 42)))
-     (setq cs-index 1)
-     (should (equal company-statistics--log cs-history))
-     (should (equal company-statistics--index cs-index)))))
-
-;; test finished and sort functions?  if the above is ok, they are trivial...
diff --git a/packages/company-statistics/company-statistics.el 
b/packages/company-statistics/company-statistics.el
deleted file mode 100644
index 7c6326a..0000000
--- a/packages/company-statistics/company-statistics.el
+++ /dev/null
@@ -1,375 +0,0 @@
-;;; company-statistics.el --- Sort candidates using completion history  -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2014-2017  Free Software Foundation, Inc.
-
-;; Author: Ingo Lohmar <i.lohmar@gmail.com>
-;; URL: https://github.com/company-mode/company-statistics
-;; Version: 0.2.3
-;; Keywords: abbrev, convenience, matching
-;; Package-Requires: ((emacs "24.3") (company "0.8.5"))
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; Package installed from elpa.gnu.org:
-;;
-;;   (add-hook 'after-init-hook #'company-statistics-mode)
-;;
-;; Manually installed: make sure that this file is in load-path, and
-;;
-;;   (require 'company-statistics)
-;;   (company-statistics-mode)
-;;
-;; Every time a candidate is chosen using company-mode, we keep track of this
-;; (for a limited amount of recent choices).  When presenting completion
-;; candidates next time, they are sorted according to the score thus acquired.
-;;
-;; The same candidate might occur in different modes, projects, files etc., and
-;; possibly has a different meaning each time.  Therefore along with the
-;; completion, we store some context information.  In the default (heavy)
-;; configuration, we track the overall frequency, the major-mode of the buffer,
-;; the last preceding keyword, the parent symbol, and the filename (if it
-;; applies), and the same criteria are used to score all possible candidates.
-
-;;; Code:
-
-(require 'company)
-
-(defgroup company-statistics nil
-  "Completion candidates ranking by historical statistics."
-  :group 'company)
-
-(defcustom company-statistics-size 400
-  "Number of completion choices that `company-statistics' keeps track of.
-As this is a global cache, making it too small defeats the purpose."
-  :type 'integer
-  :initialize #'custom-initialize-default
-  :set #'company-statistics--log-resize)
-
-(defcustom company-statistics-file
-  (concat user-emacs-directory "company-statistics-cache.el")
-  "File to save company-statistics state."
-  :type 'string)
-
-(defcustom company-statistics-auto-save t
-  "Whether to save the statistics when leaving emacs."
-  :type 'boolean)
-
-(defcustom company-statistics-auto-restore t
-  "Whether to restore statistics when company-statistics is enabled and has
-not been used before."
-  :type 'boolean)
-
-(defcustom company-statistics-capture-context 
#'company-statistics-capture-context-heavy
-  "Function called with single argument (t if completion started manually).
-This is the place to store any context information for a completion run."
-  :type 'function)
-
-(defcustom company-statistics-score-change 
#'company-statistics-score-change-heavy
-  "Function called with completion choice.  Using arbitrary other info,
-it should produce an alist, each entry labeling a context and the
-associated score update: ((ctx-a . 1) (\"str\" . 0.5) (nil . 1)).  Nil is
-the global context."
-  :type 'function)
-
-(defcustom company-statistics-score-calc #'company-statistics-score-calc-heavy
-  "Function called with completion candidate.  Using arbitrary other info,
-eg, on the current context, it should evaluate to the candidate's score (a
-number)."
-  :type 'function)
-
-;; internal vars, persistence
-
-(defvar company-statistics--scores nil
-  "Store selection frequency of candidates in given contexts.")
-
-(defvar company-statistics--log nil
-  "Ring keeping a log of statistics updates.")
-
-(defvar company-statistics--index nil
-  "Index into the log.")
-
-(defun company-statistics--init ()
-  "Initialize company-statistics."
-  (setq company-statistics--scores
-        (make-hash-table :test #'equal :size company-statistics-size))
-  (setq company-statistics--log (make-vector company-statistics-size nil)
-        company-statistics--index 0))
-
-(defun company-statistics--initialized-p ()
-  (hash-table-p company-statistics--scores))
-
-(defun company-statistics--log-resize (_option new-size)
-  (when (company-statistics--initialized-p)
-    ;; hash scoresheet auto-resizes, but log does not
-    (let ((new-hist (make-vector new-size nil))
-          ;; use actual length, to also work for freshly restored stats
-          (company-statistics-size (length company-statistics--log)))
-      ;; copy newest entries (possibly nil) to new-hist
-      (dolist (i (number-sequence 0 (1- (min new-size 
company-statistics-size))))
-        (let ((old-i (mod (+ (- company-statistics--index new-size) i)
-                          company-statistics-size)))
-          (aset new-hist i (aref company-statistics--log old-i))))
-      ;; remove discarded log entry (when shrinking) from scores
-      (when (< new-size company-statistics-size)
-        (dolist (i (number-sequence
-                    company-statistics--index
-                    (+ company-statistics-size
-                       company-statistics--index
-                       (1- new-size))))
-          (company-statistics--log-revert (mod i company-statistics-size))))
-      (setq company-statistics--log new-hist)
-      (setq company-statistics--index (if (<= new-size company-statistics-size)
-                                          0
-                                        company-statistics-size))))
-  (setq company-statistics-size new-size))
-
-(defun company-statistics--save ()
-  "Save statistics."
-  (with-temp-buffer
-    (set-buffer-multibyte nil)
-    (let (print-level print-length)
-      (encode-coding-string
-       (format
-        "%S"
-        `(setq
-          company-statistics--scores ,company-statistics--scores
-          company-statistics--log ,company-statistics--log
-          company-statistics--index ,company-statistics--index))
-       'utf-8 nil (current-buffer))
-      (let ((coding-system-for-write 'binary))
-        (write-region nil nil company-statistics-file)))))
-
-(defun company-statistics--maybe-save ()
-  (when (and (company-statistics--initialized-p)
-             company-statistics-auto-save)
-    (company-statistics--save)))
-
-(defun company-statistics--load ()
-  "Restore statistics."
-  (load company-statistics-file 'noerror nil 'nosuffix))
-
-;; score calculation for insert/retrieval --- can be changed on-the-fly
-
-(defun company-statistics-score-change-light (_cand)
-  "Count for global score and mode context."
-  (list (cons nil 1)
-        (cons major-mode 1)))           ;major-mode is never nil
-
-(defun company-statistics-score-calc-light (cand)
-  "Global score, and bonus for matching major mode."
-  (let ((scores (gethash cand company-statistics--scores)))
-    (if scores
-        ;; cand may be in scores and still have no global score left
-        (+ (or (cdr (assoc nil scores)) 0)
-           (or (cdr (assoc major-mode scores)) 0))
-      0)))
-
-(defvar company-statistics--context nil
-  "Current completion context, a list of entries searched using `assoc'.")
-
-(defun company-statistics--last-keyword ()
-  "Return last keyword, ie, text of region fontified with the
-font-lock-keyword-face up to point, or nil."
-  (let ((face-pos (point)))
-    (while (and (number-or-marker-p face-pos)
-                (< (point-min) face-pos)
-                (not (eq (get-text-property (1- face-pos) 'face)
-                         'font-lock-keyword-face)))
-      (setq face-pos
-            (previous-single-property-change face-pos 'face nil (point-min))))
-    (when (and (number-or-marker-p face-pos)
-               (eq (get-text-property (max (point-min) (1- face-pos)) 'face)
-                   'font-lock-keyword-face))
-      (list :keyword
-            (buffer-substring-no-properties
-             (previous-single-property-change face-pos 'face nil (point-min))
-             face-pos)))))
-
-(defun company-statistics--parent-symbol ()
-  "Return symbol immediately preceding current completion prefix, or nil.
-May be separated by punctuation, but not by whitespace."
-  ;; expects to be at start of company-prefix; little sense for lisps
-  (let ((preceding (save-excursion
-                     (unless (zerop (skip-syntax-backward "."))
-                       (substring-no-properties (symbol-name 
(symbol-at-point)))))))
-    (when preceding
-      (list :symbol preceding))))
-
-(defun company-statistics--file-name ()
-  "Return buffer file name, or nil."
-  (when buffer-file-name
-    (list :file buffer-file-name)))
-
-(defun company-statistics-capture-context-heavy (_manual)
-  "Calculate some context, once for the whole completion run."
-  (save-excursion
-    (backward-char (length company-prefix))
-    (setq company-statistics--context
-          (delq nil
-                (list (company-statistics--last-keyword)
-                      (company-statistics--parent-symbol)
-                      (company-statistics--file-name))))))
-
-(defun company-statistics-score-change-heavy (_cand)
-  "Count for global score, mode context, last keyword, parent symbol,
-buffer file name."
-  (let ((last-kwd (assoc :keyword company-statistics--context))
-        (parent-symbol (assoc :symbol company-statistics--context))
-        (file (assoc :file company-statistics--context)))
-    (nconc                                ;when's nil is removed
-     (list (cons nil 1)
-           (cons major-mode 1)) ;major-mode is never nil
-     ;; only add pieces of context if non-nil
-     (when last-kwd (list (cons last-kwd 1)))
-     (when parent-symbol (list (cons parent-symbol 1)))
-     (when file (list (cons file 1))))))
-
-(defun company-statistics-score-calc-heavy (cand)
-  "Global score, and bonus for matching major mode, last keyword, parent
-symbol, buffer file name."
-  (let ((scores (gethash cand company-statistics--scores))
-        (last-kwd (assoc :keyword company-statistics--context))
-        (parent-symbol (assoc :symbol company-statistics--context))
-        (file (assoc :file company-statistics--context)))
-    (if scores
-        ;; cand may be in scores and still have no global score left
-        (+ (or (cdr (assoc nil scores)) 0)
-           (or (cdr (assoc major-mode scores)) 0)
-           ;; some context may not apply, make sure to not get nil context
-           (or (cdr (when last-kwd (assoc last-kwd scores))) 0)
-           (or (cdr (when parent-symbol (assoc parent-symbol scores))) 0)
-           (or (cdr (when file (assoc file scores))) 0))
-      0)))
-
-;; score manipulation in one place --- know about hash value alist structure
-
-(defun company-statistics--alist-update (alist updates merger &optional filter)
-  "Return new alist with conses from ALIST.  Their cdrs are updated
-to (merger cdr update-cdr) if the UPDATES alist contains an entry with an
-equal-matching car.  If FILTER called with the result is non-nil, remove
-the cons from the result.  If no matching cons exists in ALIST, add the new
-one.  ALIST structure and cdrs may be changed!"
-  (let ((filter (or filter 'ignore))
-        (updated alist)
-        (new nil))
-    (mapc
-     (lambda (upd)
-       (let ((found (assoc (car upd) alist)))
-         (if found
-             (let ((result (funcall merger (cdr found) (cdr upd))))
-               (if (funcall filter result)
-                   (setq updated (delete found updated))
-                 (setcdr found result)))
-           (push upd new))))
-     updates)
-    (nconc updated new)))
-
-(defun company-statistics--scores-add (cand score-updates)
-  (puthash cand
-           (company-statistics--alist-update
-            (gethash cand company-statistics--scores)
-            score-updates
-            #'+)
-           company-statistics--scores))
-
-(defun company-statistics--log-revert (&optional index)
-  "Revert score updates for log entry.  INDEX defaults to
-`company-statistics--index'."
-  (let ((hist-entry
-         (aref company-statistics--log
-               (or index company-statistics--index))))
-    (when hist-entry                    ;ignore nil entry
-      (let* ((cand (car hist-entry))
-             (score-updates (cdr hist-entry))
-             (new-scores
-              (company-statistics--alist-update
-               (gethash cand company-statistics--scores)
-               score-updates
-               #'-
-               #'zerop)))
-        (if new-scores                    ;sth left
-            (puthash cand new-scores company-statistics--scores)
-          (remhash cand company-statistics--scores))))))
-
-(defun company-statistics--log-store (result score-updates)
-  "Insert/overwrite result and associated score updates."
-  (aset company-statistics--log company-statistics--index
-        (cons result score-updates))
-  (setq company-statistics--index
-        (mod (1+ company-statistics--index) company-statistics-size)))
-
-;; core functions: updater, actual sorting transformer, minor-mode
-
-(defun company-statistics--start (manual)
-  (funcall company-statistics-capture-context manual))
-
-(defun company-statistics--finished (result)
-  "After completion, update scores and log."
-  (let* ((score-updates (funcall company-statistics-score-change result))
-         (result (substring-no-properties result)))
-    (company-statistics--scores-add result score-updates)
-    (company-statistics--log-revert)
-    (company-statistics--log-store result score-updates)))
-
-(defun company-sort-by-statistics (candidates)
-  "Sort candidates by historical statistics.  Stable sort, so order is only
-changed for candidates distinguishable by score."
-  (setq candidates
-        (sort candidates
-              (lambda (cand1 cand2)
-                (>  (funcall company-statistics-score-calc cand1)
-                    (funcall company-statistics-score-calc cand2))))))
-
-;;;###autoload
-(define-minor-mode company-statistics-mode
-  "Statistical sorting for company-mode.  Ranks completion candidates by
-the frequency with which they have been chosen in recent (as given by
-`company-statistics-size') history.
-
-Turning this mode on and off preserves the statistics.  They are also
-preserved automatically between Emacs sessions in the default
-configuration.  You can customize this behavior with
-`company-statistics-auto-save', `company-statistics-auto-restore' and
-`company-statistics-file'."
-  nil nil nil
-  :global t
-  (if company-statistics-mode
-      (progn
-        (unless (company-statistics--initialized-p)
-          (if (and company-statistics-auto-restore
-                   (company-statistics--load))
-              ;; maybe of different size
-              (company-statistics--log-resize nil company-statistics-size)
-            (company-statistics--init)))
-        (add-to-list 'company-transformers
-                     'company-sort-by-statistics 'append)
-        (add-hook 'company-completion-started-hook
-                  'company-statistics--start)
-        (add-hook 'company-completion-finished-hook
-                  'company-statistics--finished))
-    (setq company-transformers
-          (delq 'company-sort-by-statistics company-transformers))
-    (remove-hook 'company-completion-started-hook
-                 'company-statistics--start)
-    (remove-hook 'company-completion-finished-hook
-                 'company-statistics--finished)))
-
-(add-hook 'kill-emacs-hook 'company-statistics--maybe-save)
-
-(provide 'company-statistics)
-;;; company-statistics.el ends here
diff --git a/packages/hook-helpers/.gitignore b/packages/hook-helpers/.gitignore
deleted file mode 100644
index bf6ec2f..0000000
--- a/packages/hook-helpers/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.elc
-hook-helpers.html
-hook-helpers.texi
\ No newline at end of file
diff --git a/packages/hook-helpers/.hgignore b/packages/hook-helpers/.hgignore
deleted file mode 100644
index c7d4bff..0000000
--- a/packages/hook-helpers/.hgignore
+++ /dev/null
@@ -1,5 +0,0 @@
-syntax: glob
-
-# Ignore compiled Emacs lisp files
-*.elc
-hook-helpers-autoloads.el
\ No newline at end of file
diff --git a/packages/hook-helpers/COPYING b/packages/hook-helpers/COPYING
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/hook-helpers/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 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.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  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, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public 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.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/hook-helpers/Makefile b/packages/hook-helpers/Makefile
deleted file mode 100644
index 9a91f34..0000000
--- a/packages/hook-helpers/Makefile
+++ /dev/null
@@ -1,58 +0,0 @@
-# This is part of Hook Helpers
-#
-#  Copyright (C) 2016 Ian Dunn
-#  Copyright (C) 2017 Free Software Foundation, Inc.
-#
-#  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/>.
-
-EMACS=emacs --batch
-ALLSRC=hook-helpers.el
-SOURCE=$(ALLSRC)
-TARGET=$(patsubst %.el,%.elc,$(SOURCE))
-
-all: $(TARGET)
-
-compile: $(TARGET)
-
-%.elc: %.el
-       @$(EMACS) \
-       -L "." \
-       -f batch-byte-compile $<
-
-autoloads: hook-helpers-autoloads.el
-
-hook-helpers-autoloads.el:
-       @$(EMACS) \
-       --eval "(require 'package)" \
-       --eval "(setq inhibit-message t)" \
-       --eval "(package-generate-autoloads \"hook-helpers\" \"$$(pwd)\")"
-
-clean:
-       -rm -f *.elc
-
-check: compile
-       @$(EMACS) \
-       -L "." \
-       --load "ert" \
-       --load "hook-helpers-tests.el" \
-       -f ert-run-tests-batch-and-exit
-
-help:
-       $(info )
-       $(info make all       - Default)
-       $(info make compile   - Compile Emacs Lisp Files)
-       $(info make autoloads - Generate Autoloads)
-       $(info make clean     - Remove generated .elc files)
-       $(info make check     - Run Tests)
-       @echo ""
diff --git a/packages/hook-helpers/hook-helpers-tests.el 
b/packages/hook-helpers/hook-helpers-tests.el
deleted file mode 100644
index 96f3940..0000000
--- a/packages/hook-helpers/hook-helpers-tests.el
+++ /dev/null
@@ -1,94 +0,0 @@
-;;; hook-helpers-tests.el --- Tests for hook helpers
-
-;; Copyright (C) 2016-2017 Free Software Foundation, Inc.
-
-;; Author: Ian Dunn <dunni@gnu.org>
-;; Keywords: development, hooks
-;; URL: https://savannah.nongnu.org/projects/hook-helpers-el/
-;; Version: 1.1
-
-;; 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:
-
-;;; Code:
-
-(require 'hook-helpers)
-(require 'ert)
-
-(ert-deftest hkhlp-normalize-hook-spec-test ()
-  (should (equal (hkhlp-normalize-hook-spec 'c++-mode-hook)
-                 '((c++-mode-hook))))
-  (should (equal (hkhlp-normalize-hook-spec '(c++-mode-hook . t))
-                 '((c++-mode-hook . t))))
-  (should (equal (hkhlp-normalize-hook-spec '(c++-mode-hook org-mode-hook))
-                 '((c++-mode-hook) (org-mode-hook))))
-  (should (equal (hkhlp-normalize-hook-spec '((c++-mode-hook . t) 
org-mode-hook))
-                 '((c++-mode-hook . t) (org-mode-hook))))
-  (should (equal (hkhlp-normalize-hook-spec '(c++-mode-hook (org-mode-hook . 
t)))
-                 '((c++-mode-hook) (org-mode-hook . t))))
-  (should (equal (hkhlp-normalize-hook-spec '((c++-mode-hook . t)
-                                              (org-mode-hook . t)))
-                 '((c++-mode-hook . t) (org-mode-hook . t))))
-  (should (equal (hkhlp-normalize-hook-spec '((c++-mode-hook . t)))
-                 '((c++-mode-hook . t)))))
-
-(ert-deftest hkhlp-create-hook-helper-test ()
-  (let ((test-hook nil))
-    (create-hook-helper test-helper ()
-      "Test Hook Helper"
-      :hooks (test-hook)
-      (message "This is a test"))
-    (should (equal test-hook (list
-                              (lambda () "Test Hook Helper" (message "This is 
a test")))))))
-
-(ert-deftest hkhlp-add-hook-helper ()
-  (let ((test-hook nil)
-        (test-2-hook nil))
-    (create-hook-helper test-helper ()
-      "Test Hook Helper"
-      :hooks (test-hook)
-      (message "This is a test"))
-    (should (equal test-hook (list
-                              (lambda () "Test Hook Helper" (message "This is 
a test")))))
-    (add-hook-helper 'test-helper '(test-2-hook))
-    (should (equal test-2-hook test-hook))))
-
-(ert-deftest hkhlp-remove-hook-helper ()
-  (let ((test-hook nil))
-    (create-hook-helper test-helper ()
-      "Test Hook Helper"
-      :hooks (test-hook)
-      (message "This is a test"))
-    (should (equal test-hook (list
-                              (lambda () "Test Hook Helper" (message "This is 
a test")))))
-    (remove-hook-helper 'test-helper 'test-hook)
-    (should (equal test-hook nil))))
-
-(ert-deftest hkhlp-update-hook-helper ()
-  (let ((test-hook nil)
-        (old-func (lambda () "Test Hook Helper" (message "This is a test")))
-        (new-func (lambda () "Test Hook Helper" (message "This is another 
test"))))
-    (create-hook-helper test-helper ()
-      "Test Hook Helper"
-      :hooks (test-hook)
-      (message "This is a test"))
-    (should (equal test-hook (list old-func)))
-    (create-hook-helper test-helper ()
-      "Test Hook Helper"
-      :hooks (test-hook)
-      (message "This is another test"))
-    (should (equal test-hook (list new-func)))))
-
-;;; hook-helpers-tests.el ends here
diff --git a/packages/hook-helpers/hook-helpers.el 
b/packages/hook-helpers/hook-helpers.el
deleted file mode 100644
index 00bce04..0000000
--- a/packages/hook-helpers/hook-helpers.el
+++ /dev/null
@@ -1,253 +0,0 @@
-;;; hook-helpers.el --- Anonymous, modifiable hook functions -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2016-2018 Free Software Foundation, Inc.
-
-;; Author: Ian Dunn <dunni@gnu.org>
-;; Maintainer: Ian Dunn <dunni@gnu.org>
-;; Keywords: development, hooks
-;; Package-Requires: ((emacs "25.1"))
-;; URL: https://savannah.nongnu.org/projects/hook-helpers-el/
-;; Version: 1.1.1
-;; Created: 06 May 2016
-;; Modified: 11 Feb 2018
-
-;; 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:
-
-;; Often times, I see people define a function to be used once in a hook.  If
-;; they don’t do this, then it will be an anonymous function.  If the anonymous
-;; function is modified, then the function can’t be removed.  With a function
-;; outside of the `add-hook' call, it looks messy.
-
-;; Hook Helpers are a solution to this.  A "hook helper" is an anonymous,
-;; modifiable function created for the sole purpose of being attached to a 
hook.
-;; This combines the two commonly used methods mentioned above.  The functions
-;; don't exist, so they don't get in the way of `describe-function', but they
-;; can be removed or modified as needed.
-
-;;; Code:
-
-(eval-when-compile (require 'subr-x))
-
-;; Compatibility for Emacs < 26.1
-(unless (fboundp 'when-let*)
-  (defalias 'when-let* 'when-let))
-
-(defvar hkhlp--helpers-map nil
-  "Map of IDs to helpers.")
-
-(cl-defstruct hook-helper
-  id function hooks source-file)
-
-(defun hkhlp-normalize-hook-spec (hook-spec &optional recursed)
-  "Turns HOOK-SPEC into a list of cons-cells, each one (HOOK . APPEND)
-
-HOOK is the name of the full variable to use
-APPEND is a Boolean"
-  (cond
-   ((symbolp hook-spec)
-    ;; HOOK
-    (list (cons hook-spec nil)))
-   ((and (consp hook-spec)
-         (symbolp (car hook-spec))
-         (booleanp (cdr hook-spec)))
-    ;; (HOOK . APPEND)
-    (list hook-spec))
-   ((and (listp hook-spec) (not recursed))
-    ;; List of specs
-    (mapcar (lambda (spec) (car (hkhlp-normalize-hook-spec spec t))) 
hook-spec))
-   (t
-    (warn "Unrecognized hook-spec %s" hook-spec))))
-
-(defun add-hook-helper (id hook-spec)
-  "Adds an existing helper ID to HOOK-SPEC."
-  (let ((normalized-spec (hkhlp-normalize-hook-spec hook-spec))
-        (helper (alist-get id hkhlp--helpers-map)))
-    (pcase-dolist (`(,hook . ,append) normalized-spec)
-      (add-hook hook (hook-helper-function helper) append)
-      (cl-pushnew hook (hook-helper-hooks helper) :test 'equal))))
-
-(defun remove-hook-helper (id hook-spec)
-  "Removes the helper ID from each element of HOOK-SPEC."
-  (let ((normalized-spec (hkhlp-normalize-hook-spec hook-spec))
-        (helper (alist-get id hkhlp--helpers-map)))
-    (pcase-dolist (`(,hook . _) normalized-spec)
-      (remove-hook hook (hook-helper-function helper))
-      (cl-delete hook (hook-helper-hooks helper) :test 'equal))))
-
-(cl-defmethod hkhlp-update-helper ((old hook-helper) (new hook-helper))
-  "Updates instances of OLD to NEW.
-
-For each hook HOOK in the original:
-
-  - If HOOK is not in NEW, remove OLD from it
-  - Else, update OLD to NEW
-"
-  (let* ((old-func (hook-helper-function old))
-         (new-func (hook-helper-function new))
-         (old-hooks (hook-helper-hooks old))
-         (new-hooks (hook-helper-hooks new)))
-    (dolist (hook old-hooks)
-      (let ((hook-val (and (boundp hook) (symbol-value hook))))
-        (cond
-         ((not hook-val) nil)
-         ((member hook new-hooks)
-          ;; Update the helper in hooks
-          (when-let* ((elt (cl-position old-func hook-val :test 'equal)))
-            (setf (nth elt hook-val) new-func)))
-         (t
-          ;; Delete the helper from the hooks
-          (cl-delete old-func (symbol-value hook) :test 'equal)))))))
-
-;;;###autoload
-(defmacro create-hook-helper (id args &optional docstring &rest body)
-  "Creates a new hook helper ID for the hooks in HOOKS.
-
-If a hook helper with id ID already exists, it's overridden.  All instances of
-the helper in its associated hooks are replaced.
-
-See `hkhlp-normalize-hook-spec' for an explanation of HOOKS.
-
-\(fn ID ARGS &optional DOCSTRING &keys HOOKS &rest BODY)"
-  (declare (indent defun) (doc-string 3))
-  (when (and docstring (not (stringp docstring)))
-    ;; Some trickiness, since what appears to be the docstring may really be
-    ;; the first element of the body.
-    (push docstring body)
-    (setq docstring nil))
-  ;; Process the key words
-  (let ((hook-spec nil))
-    (while (keywordp (car body))
-      (pcase (pop body)
-       (`:hooks (setq hook-spec (pop body)))
-       (_ (pop body))))
-    `(let* ((id-sym (quote ,id))
-            (func (lambda ,args ,docstring ,@body))
-            (normalized-hooks (hkhlp-normalize-hook-spec (quote ,hook-spec)))
-            (source-file ,(or load-file-name buffer-file-name))
-            (helper (make-hook-helper :id id-sym
-                                      :function func
-                                      :source-file source-file
-                                      :hooks (mapcar 'car normalized-hooks))))
-       ;; Update an old helper
-       (when-let* ((old-helper (alist-get id-sym hkhlp--helpers-map)))
-         (hkhlp-update-helper old-helper helper))
-       (setf (alist-get id-sym hkhlp--helpers-map) helper)
-       ;; Add to the new hook-spec
-       (add-hook-helper id-sym (quote ,hook-spec)))))
-
-;;;###autoload
-(defmacro define-hook-helper (hook args &optional docstring &rest body)
-  "Define a hook helper for the variable HOOK-hook with ARGS as the argument 
list.
-
-This helper consists of all the code in BODY.  HOOK should not be
-quoted.  The keywords are:
-
-:name    Specifies a name to use for the generated function.  As part
-         of this macro, a function called hook-helper--HOOK will be
-         created.  If NAME is given, then the function becomes
-         ‘hook-helper--HOOK/NAME’.
-
-:append  If non-nil, append the hook helper to the hook variable.
-
-:suffix  Allows a user to specify that the hook variable doesn't
-         end with ‘-hook’, but instead with another suffix, such as
-         ‘-function’.  SUFFIX should be a string, and defaults to ‘hook’
-         if not specified.  Note that SUFFIX is not assumed to start with
-         a hyphen."
-  (declare (indent defun) (doc-string 3))
-  ;; From `define-derived-mode'
-  (when (and docstring (not (stringp docstring)))
-    ;; Some trickiness, since what appears to be the docstring may really be
-    ;; the first element of the body.
-    (push docstring body)
-    (setq docstring nil))
-  ;; Process the key words
-  (let ((name nil)
-        (append nil)
-        (suffix "hook"))
-    (while (keywordp (car body))
-      (pcase (pop body)
-       (`:name (setq name (pop body)))
-       (`:append (setq append (pop body)))
-       (`:suffix (setq suffix (pop body)))
-       (_ (pop body))))
-    (let* ((suffix-string (if (stringp suffix) suffix (symbol-name suffix)))
-           (hook-name (concat (symbol-name hook) "-" suffix-string))
-           (func-sym (intern (format "%s%s" hook-name
-                                     (if name (concat "/" (symbol-name name)) 
""))))
-           (hook (intern hook-name)))
-      `(create-hook-helper ,func-sym ,args
-         ,docstring
-         :hooks (,hook . ,append)
-         ,@body))))
-
-;;;###autoload
-(defmacro define-hook-function (function args &optional docstring &rest body)
-  "Define FUNCTION to be a function, then add it to hooks.
-
-The hooks to add are specified by the :hooks keyword.  This is a
-simple list of hooks, unquoted, and the new function is added to
-each one."
-  (declare (indent defun)
-           (doc-string 3)
-           (obsolete create-hook-helper "1.1"))
-  `(create-hook-helper ,function ,args ,docstring ,@body))
-
-;; TODO Link to source file
-(cl-defmethod hkhlp--pp ((helper hook-helper) indent)
-  (let* ((func (hook-helper-function helper))
-         (pp-string (pp-to-string func))
-         (id (hook-helper-id helper))
-         (id-name (symbol-name id))
-         (indent (max (+ (length id-name) 1) indent))
-         (indent-first (- indent (length id-name)))
-         (pp-lines (split-string pp-string "\n" t)))
-    (concat (symbol-name id) (make-string indent-first ?\ ) (car pp-lines) "\n"
-            (mapconcat
-             (lambda (str)
-               (concat (make-string indent ?\ )
-                       str))
-             (cdr pp-lines)
-             "\n")
-            "\n\n")))
-
-(defun describe-hook-helpers ()
-  "Describe the currently defined hook helpers."
-  (interactive)
-  (let ((hook-alist nil))
-    (pcase-dolist (`(_ . ,helper) hkhlp--helpers-map)
-      (dolist (hook (hook-helper-hooks helper))
-        (push helper (alist-get hook hook-alist))))
-    (with-output-to-temp-buffer "*Hook Helpers*"
-      (pcase-dolist (`(,hook . ,helpers) hook-alist)
-        (princ (format "%s\n%s\n" hook (make-string 40 ?-)))
-        (dolist (helper helpers)
-          (princ (hkhlp--pp helper 16)))
-        (princ "\n")))))
-
-;; Add font lock for both macros.
-(font-lock-add-keywords
- 'emacs-lisp-mode
- '(("(\\(define-hook-helper\\)\\_>[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
-    (1 font-lock-keyword-face)
-    (2 font-lock-function-name-face nil t))
-   ("(\\(create-hook-helper\\)\\_>[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
-    (1 font-lock-keyword-face)
-    (2 font-lock-function-name-face nil t))))
-
-(provide 'hook-helpers)
-
-;;; hook-helpers.el ends here
diff --git a/packages/hook-helpers/hook-helpers.info 
b/packages/hook-helpers/hook-helpers.info
deleted file mode 100644
index 5cf10ce..0000000
--- a/packages/hook-helpers/hook-helpers.info
+++ /dev/null
@@ -1,283 +0,0 @@
-This is hook-helpers.info, produced by makeinfo version 6.5 from
-hook-helpers.texi.
-
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* Hook Helpers: (hook-helpers). Anonymous, modifiable hook functions.
-END-INFO-DIR-ENTRY
-
-
-File: hook-helpers.info,  Node: Top,  Next: Copying,  Up: (dir)
-
-Hook Helpers
-************
-
-* Menu:
-
-* Copying::
-* Introduction::
-* Installation::
-* Examples::
-* In-Depth Usage::
-* Changelog::
-
-— The Detailed Node Listing —
-
-In-Depth Usage
-
-* Adding and Removing Helpers::
-* Seeing all the Available Helpers::
-
-Changelog
-
-* 1.1.1: 111.
-* 1.1: 11.
-* 1.0: 10.
-
-
-
-File: hook-helpers.info,  Node: Copying,  Next: Introduction,  Prev: Top,  Up: 
Top
-
-Copying
-*******
-
-Copyright (C) 2016-2018 Free Software Foundation, Inc.
-
-     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/>.
-
-
-File: hook-helpers.info,  Node: Introduction,  Next: Installation,  Prev: 
Copying,  Up: Top
-
-Introduction
-************
-
-Savannah Project (https://savannah.nongnu.org/projects/hook-helpers-el/)
-
-   Often times, I see people define a function to be used once in a
-hook.  If they don’t do this, then it will be an anonymous function.  If
-the anonymous function is modified, then the function can’t be removed.
-With a function outside of the ‘add-hook’ call, it looks messy.
-
-   Hook Helpers are a solution to this.  A “hook helper” is an
-anonymous, modifiable function created for the sole purpose of being
-attached to a hook.  This combines the two commonly used methods
-mentioned above.  The functions don’t exist, so they don’t get in the
-way of ‘C-h f’, but they can be removed or modified as needed.
-
-
-File: hook-helpers.info,  Node: Installation,  Next: Examples,  Prev: 
Introduction,  Up: Top
-
-Installation
-************
-
-Hook Helpers requires Emacs 25.1 or later.
-
-   The easiest way to install hook helpers is using GNU ELPA:
-
-     M-x package-install RET hook-helpers RET
-
-   No more setup is required to start using hook helpers.
-
-   You can also clone from the git repo:
-
-     git clone https://git.savannah.gnu.org/git/hook-helpers-el hook-helpers
-     make -C hook-helpers compile autoloads
-
-   Then you’ll need to add the following to your .emacs file (or
-equivalent):
-
-     (add-to-list 'load-path "/path/to/hook-helpers")
-     (load "/path/to/hook-helpers/hook-helpers-autoloads.el")
-
-
-File: hook-helpers.info,  Node: Examples,  Next: In-Depth Usage,  Prev: 
Installation,  Up: Top
-
-Examples
-********
-
-Let’s look at some examples.
-
-   Without using a hook helper, one must do the following:
-
-     (defun my/after-init-hook ()
-       (set-scroll-bar-mode nil))
-     (add-hook 'after-init-hook 'my/after-init-hook)
-
-   If you forget the ‘add-hook’ call, then this doesn’t do any good.
-Alternatively, you can use a lambda function:
-
-     (add-hook 'after-init-hook (lambda () (set-scroll-bar-mode nil)))
-
-   But then if you want to modify the function, it’s permanently stuck
-on the after-init-hook variable, and you have to deal with it.  It’s not
-a problem for after-init-hook, which is used once, but would be a
-problem for a mode hook, like text-mode-hook.
-
-   With a hook helper, this is reduced to the following:
-
-     (define-hook-helper after-init ()
-       (set-scroll-bar-mode nil))
-
-   Which handles everything for you.
-
-
-File: hook-helpers.info,  Node: In-Depth Usage,  Next: Changelog,  Prev: 
Examples,  Up: Top
-
-In-Depth Usage
-**************
-
-There are two macros in hook helpers: ‘define-hook-helper’ and
-‘create-hook-helper’.
-
-   The former is a basic case; it creates and adds a helper for a single
-hook.  Most hooks have the -hook suffix, so we take advantage of that
-here for a little less typing.  In order to add a helper to a
-non-standard hook, use the ‘:suffix’ argument:
-
-     (define-hook-helper my ()
-       :suffix function
-       :append t
-       (message "Hello!"))
-
-   We also introduce the ‘:append’ keyword above, which does exactly
-what it sounds like.
-
-   There’s one more keyword for ‘define-hook-helper’: ‘:name’.  This
-specifies an additional name for the new helper.  Without this, its
-helper ID is just the name of the hook; with a ‘:name’, its ID is
-HOOK-NAME/NAME.
-
-   The work horse of hook helpers is ‘create-hook-helper’.  This is the
-generic case, capable of adding itself to any number of hooks:
-
-     (create-hook-helper new-helper ()
-       :hooks (hook-1-hook
-               (hook-2-hook . t)
-               hook-3-function)
-       (message "Look at all that we can do!"))
-
-   This creates a new hook helper called “new-helper”, and adds it to
-‘hook-1-hook’, ‘hook-2-hook’, and ‘hook-3-function’, appending to the
-latter.
-
-   The ‘:hooks’ keyword can have the following form:
-
-   • A single hook
-   • A cons cell (HOOK .  APPEND)
-   • A list containing a mixture of the above two forms
-
-   This is called a “hook spec”.
-
-* Menu:
-
-* Adding and Removing Helpers::
-* Seeing all the Available Helpers::
-
-
-File: hook-helpers.info,  Node: Adding and Removing Helpers,  Next: Seeing all 
the Available Helpers,  Up: In-Depth Usage
-
-Adding and Removing Helpers
-===========================
-
-To add or remove helpers, the functions add-hook-helper and
-remove-hook-helper are provided.
-
-     (add-hook-helper 'test-helper '(hook-the-first hook-the-second))
-     (remove-hook-helper 'test-helper 'hook-the-second)
-
-   As you can see, each of them takes the same arguments: a symbol
-denoting the helper to add or remove, and a quoted hook spec.
-
-   Any hook helper created using ‘define-hook-helper’ can be removed as
-well:
-
-     (define-hook-helper my ()
-       :name ours
-       (message "Hello!"))
-
-     (remove-hook-helper 'my-hook/ours 'my-hook)
-
-
-File: hook-helpers.info,  Node: Seeing all the Available Helpers,  Prev: 
Adding and Removing Helpers,  Up: In-Depth Usage
-
-Seeing all the Available Helpers
-================================
-
-Seeing lambda functions in your hooks can be confusing.  While we don’t
-have a solution for that, we do have ‘describe-hook-helpers’, an
-interactive function that creates a pretty buffer containing all the
-defined hook helpers, grouped by the hooks to which they are attached.
-
-
-File: hook-helpers.info,  Node: Changelog,  Prev: In-Depth Usage,  Up: Top
-
-Changelog
-*********
-
-* Menu:
-
-* 1.1.1: 111.
-* 1.1: 11.
-* 1.0: 10.
-
-
-File: hook-helpers.info,  Node: 111,  Next: 11,  Up: Changelog
-
-1.1.1
-=====
-
-   • Fixed some usage warnings
-   • Added more examples of removing hook helpers
-   • Added documentation about installing from GNU ELPA
-   • Added changelog section to the documentation
-
-
-File: hook-helpers.info,  Node: 11,  Next: 10,  Prev: 111,  Up: Changelog
-
-1.1
-===
-
-   • Updated to new design
-
-
-File: hook-helpers.info,  Node: 10,  Prev: 11,  Up: Changelog
-
-1.0
-===
-
-   • Initial release
-
-
-
-Tag Table:
-Node: Top219
-Node: Copying585
-Node: Introduction1411
-Node: Installation2236
-Node: Examples2934
-Node: In-Depth Usage3890
-Node: Adding and Removing Helpers5572
-Node: Seeing all the Available Helpers6315
-Node: Changelog6791
-Node: 1116936
-Node: 117211
-Node: 107327
-
-End Tag Table
-
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/packages/hook-helpers/hook-helpers.org 
b/packages/hook-helpers/hook-helpers.org
deleted file mode 100644
index ebeaeb2..0000000
--- a/packages/hook-helpers/hook-helpers.org
+++ /dev/null
@@ -1,188 +0,0 @@
-#+TITLE: Hook Helpers
-#+AUTHOR: Ian Dunn
-#+EMAIL: dunni@gnu.org
-#+DATE: {{{modification-time}}}
-
-#+STARTUP: overview
-#+STARTUP: indent
-#+TODO: FIXME | FIXED
-#+OPTIONS: toc:2 num:nil timestamp:nil \n:nil |:t ':t email:t
-#+OPTIONS: *:t <:t d:nil todo:nil pri:nil tags:not-in-toc -:nil
-
-#+TEXINFO_DIR_CATEGORY: Emacs
-#+TEXINFO_DIR_TITLE: Hook Helpers: (hook-helpers)
-#+TEXINFO_DIR_DESC: Anonymous, modifiable hook functions
-
-* Copying
-Copyright (C) 2016-2018 Free Software Foundation, Inc.
-
-#+BEGIN_QUOTE
-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/>.
-#+END_QUOTE
-* Introduction
-
-[[https://savannah.nongnu.org/projects/hook-helpers-el/][Savannah Project]]
-
-Often times, I see people define a function to be used once in a hook.  If
-they don’t do this, then it will be an anonymous function.  If the anonymous
-function is modified, then the function can’t be removed.  With a function
-outside of the ~add-hook~ call, it looks messy.
-
-Hook Helpers are a solution to this.  A "hook helper" is an anonymous,
-modifiable function created for the sole purpose of being attached to a hook.
-This combines the two commonly used methods mentioned above.  The functions
-don't exist, so they don't get in the way of ~C-h f~, but they can be removed 
or
-modified as needed.
-
-* Installation
-
-Hook Helpers requires Emacs 25.1 or later.
-
-The easiest way to install hook helpers is using GNU ELPA:
-
-#+begin_example
-M-x package-install RET hook-helpers RET
-#+end_example
-
-No more setup is required to start using hook helpers.
-
-You can also clone from the git repo:
-
-#+BEGIN_SRC shell
-git clone https://git.savannah.gnu.org/git/hook-helpers-el hook-helpers
-make -C hook-helpers compile autoloads
-#+END_SRC
-
-Then you'll need to add the following to your .emacs file (or equivalent):
-
-#+BEGIN_SRC emacs-lisp
-(add-to-list 'load-path "/path/to/hook-helpers")
-(load "/path/to/hook-helpers/hook-helpers-autoloads.el")
-#+END_SRC
-
-* Examples
-Let's look at some examples.
-
-Without using a hook helper, one must do the following:
-
-#+BEGIN_SRC emacs-lisp
-(defun my/after-init-hook ()
-  (set-scroll-bar-mode nil))
-(add-hook 'after-init-hook 'my/after-init-hook)
-#+END_SRC
-
-If you forget the ~add-hook~ call, then this doesn't do any good.  
Alternatively,
-you can use a lambda function:
-
-#+BEGIN_SRC emacs-lisp
-(add-hook 'after-init-hook (lambda () (set-scroll-bar-mode nil)))
-#+END_SRC
-
-But then if you want to modify the function, it's permanently stuck on the
-after-init-hook variable, and you have to deal with it.  It's not a problem for
-after-init-hook, which is used once, but would be a problem for a mode hook,
-like text-mode-hook.
-
-With a hook helper, this is reduced to the following:
-
-#+BEGIN_SRC emacs-lisp
-(define-hook-helper after-init ()
-  (set-scroll-bar-mode nil))
-#+END_SRC
-
-Which handles everything for you.
-
-* In-Depth Usage
-There are two macros in hook helpers: ~define-hook-helper~ and 
~create-hook-helper~.
-
-The former is a basic case; it creates and adds a helper for a single hook.
-Most hooks have the "-hook" suffix, so we take advantage of that here for a 
little
-less typing.  In order to add a helper to a non-standard hook, use the 
~:suffix~
-argument:
-
-#+BEGIN_SRC emacs-lisp
-(define-hook-helper my ()
-  :suffix function
-  :append t
-  (message "Hello!"))
-#+END_SRC
-
-We also introduce the ~:append~ keyword above, which does exactly what it 
sounds
-like.
-
-There's one more keyword for ~define-hook-helper~: ~:name~.  This specifies an
-additional name for the new helper.  Without this, its helper ID is just the
-name of the hook; with a ~:name~, its ID is HOOK-NAME/NAME.
-
-The work horse of hook helpers is ~create-hook-helper~.  This is the generic 
case,
-capable of adding itself to any number of hooks:
-
-#+BEGIN_SRC emacs-lisp
-(create-hook-helper new-helper ()
-  :hooks (hook-1-hook
-          (hook-2-hook . t)
-          hook-3-function)
-  (message "Look at all that we can do!"))
-#+END_SRC
-
-This creates a new hook helper called "new-helper", and adds it to 
~hook-1-hook~,
-~hook-2-hook~, and ~hook-3-function~, appending to the latter.
-
-The ~:hooks~ keyword can have the following form:
-
-- A single hook
-- A cons cell (HOOK . APPEND)
-- A list containing a mixture of the above two forms
-
-This is called a "hook spec".
-
-** Adding and Removing Helpers
-To add or remove helpers, the functions add-hook-helper and remove-hook-helper
-are provided.
-
-#+BEGIN_SRC emacs-lisp
-(add-hook-helper 'test-helper '(hook-the-first hook-the-second))
-(remove-hook-helper 'test-helper 'hook-the-second)
-#+END_SRC
-
-As you can see, each of them takes the same arguments: a symbol denoting the
-helper to add or remove, and a quoted hook spec.
-
-Any hook helper created using ~define-hook-helper~ can be removed as well:
-
-#+begin_src emacs-lisp
-(define-hook-helper my ()
-  :name ours
-  (message "Hello!"))
-
-(remove-hook-helper 'my-hook/ours 'my-hook)
-#+end_src
-
-** Seeing all the Available Helpers
-
-Seeing lambda functions in your hooks can be confusing.  While we don't have a
-solution for that, we do have ~describe-hook-helpers~, an interactive function
-that creates a pretty buffer containing all the defined hook helpers, grouped 
by
-the hooks to which they are attached.
-
-* Changelog
-** 1.1.1
-- Fixed some usage warnings
-- Added more examples of removing hook helpers
-- Added documentation about installing from GNU ELPA
-- Added changelog section to the documentation
-** 1.1
-- Updated to new design
-** 1.0
-- Initial release
diff --git a/packages/hydra/.dir-locals.el b/packages/hydra/.dir-locals.el
deleted file mode 100644
index eb08357..0000000
--- a/packages/hydra/.dir-locals.el
+++ /dev/null
@@ -1,6 +0,0 @@
-;;; Directory Local Variables
-;;; For more information see (info "(emacs) Directory Variables")
-
-((emacs-lisp-mode
-  (bug-reference-url-format . "https://github.com/abo-abo/hydra/issues/%s";)
-  (indent-tabs-mode . nil)))
diff --git a/packages/hydra/.elpaignore b/packages/hydra/.elpaignore
deleted file mode 100644
index a6b1577..0000000
--- a/packages/hydra/.elpaignore
+++ /dev/null
@@ -1,6 +0,0 @@
-targets/
-.travis.yml
-.dir-locals.el
-Makefile
-README.md
-hydra-test.el
diff --git a/packages/hydra/.travis.yml b/packages/hydra/.travis.yml
deleted file mode 100644
index e97acdb..0000000
--- a/packages/hydra/.travis.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-language: emacs-lisp
-env:
-  matrix:
-    - emacs=emacs24
-    - emacs=emacs-snapshot
-
-before_install:
-  - sudo add-apt-repository -y ppa:cassou/emacs
-  - sudo add-apt-repository -y ppa:ubuntu-elisp
-  - sudo apt-get update -qq
-  - sudo apt-get install -qq $emacs
-
-script:
-  - make test
diff --git a/packages/hydra/Makefile b/packages/hydra/Makefile
deleted file mode 100644
index 13fd618..0000000
--- a/packages/hydra/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-emacs ?= emacs
-# emacs = emacs-24.3
-
-LOAD = -l lv.el -l hydra.el -l hydra-test.el
-
-.PHONY: all test clean
-
-all: test
-
-test:
-       @echo "Using $(shell which $(emacs))..."
-       $(emacs) -batch $(LOAD) -f ert-run-tests-batch-and-exit
-
-run:
-       $(emacs) -q $(LOAD) -l targets/hydra-init.el
-       make clean
-
-compile:
-       $(emacs) -batch $(LOAD) -l targets/hydra-init.el
-
-clean:
-       rm -f *.elc
diff --git a/packages/hydra/README.md b/packages/hydra/README.md
deleted file mode 100644
index d2237d8..0000000
--- a/packages/hydra/README.md
+++ /dev/null
@@ -1,422 +0,0 @@
-[![Build 
Status](https://travis-ci.org/abo-abo/hydra.svg?branch=master)](https://travis-ci.org/abo-abo/hydra)
-
-This is a package for GNU Emacs that can be used to tie related commands into 
a family of short
-bindings with a common prefix - a Hydra.
-
-![hydra](http://oremacs.com/download/Hydra.jpg)
-
-## Description for Poets
-
-Once you summon the Hydra through the prefixed binding (the body + any one 
head), all heads can be
-called in succession with only a short extension.
-
-The Hydra is vanquished once Hercules, any binding that isn't the Hydra's 
head, arrives.  Note that
-Hercules, besides vanquishing the Hydra, will still serve his original 
purpose, calling his proper
-command.  This makes the Hydra very seamless, it's like a minor mode that 
disables itself
-auto-magically.
-
-## Description for Pragmatics
-
-Imagine that you have bound <kbd>C-c j</kbd> and <kbd>C-c k</kbd> in your
-config.  You want to call <kbd>C-c j</kbd> and <kbd>C-c k</kbd> in some
-(arbitrary) sequence. Hydra allows you to:
-
-- Bind your functions in a way that pressing <kbd>C-c jjkk3j5k</kbd> is
-equivalent to pressing <kbd>C-c j C-c j C-c k C-c k M-3 C-c j M-5 C-c
-k</kbd>. Any key other than <kbd>j</kbd> or <kbd>k</kbd> exits this state.
-
-- Assign a custom hint to this group of functions, so that you know immediately
-after pressing <kbd>C-c</kbd> that you can follow up with <kbd>j</kbd> or
-<kbd>k</kbd>.
-
-If you want to quickly understand the concept, see [the video 
demo](https://www.youtube.com/watch?v=_qZliI1BKzI).
-
-<!-- markdown-toc start - Don't edit this section. Run M-x 
markdown-toc/generate-toc again -->
-**Table of Contents**
-
-- [Sample Hydras](#sample-hydras)
-    - [The one with the least amount of 
code](#the-one-with-the-least-amount-of-code)
-    - [The impressive-looking one](#the-impressive-looking-one)
-- [Community wiki](#community-wiki)
-- [The Rules of Hydra-tics](#the-rules-of-hydra-tics)
-    - [`hydra-awesome`](#hydra-awesome)
-    - [`awesome-map` and `awesome-binding`](#awesome-map-and-awesome-binding)
-    - [`awesome-plist`](#awesome-plist)
-        - [`:pre` and `:post`](#pre-and-post)
-        - [`:exit`](#exit)
-        - [`:foreign-keys`](#foreign-keys)
-        - [`:color`](#color)
-        - [`:timeout`](#timeout)
-        - [`:hint`](#hint)
-        - [`:bind`](#bind)
-    - [`awesome-docstring`](#awesome-docstring)
-    - [`awesome-head-1`](#awesome-head-1)
-        - [`head-binding`](#head-binding)
-        - [`head-command`](#head-command)
-        - [`head-hint`](#head-hint)
-        - [`head-plist`](#head-plist)
-
-<!-- markdown-toc end -->
-
-# Sample Hydras
-
-## The one with the least amount of code
-
-```cl
-(defhydra hydra-zoom (global-map "<f2>")
-  "zoom"
-  ("g" text-scale-increase "in")
-  ("l" text-scale-decrease "out"))
-```
-
-With this simple code, you can:
-
-- Start zooming in with <kbd>&lt;f2&gt; g</kbd>.
-- Continue to zoom in with <kbd>g</kbd>.
-- Or zoom out with <kbd>l</kbd>.
-- Zoom in five times at once with <kbd>5g</kbd>.
-- Stop zooming with *any* key that isn't <kbd>g</kbd> or <kbd>l</kbd>.
-
-For any Hydra:
-
-- `digit-argument` can be called with <kbd>0</kbd>-<kbd>9</kbd>.
-- `negative-argument` can be called with <kbd>-</kbd>.
-- `universal-argument` can be called with <kbd>C-u</kbd>.
-
-## The impressive-looking one
-
-Here's the result of pressing <kbd>.</kbd> in the good-old Buffer menu:
-
-![hydra-buffer-menu](http://oremacs.com/download/hydra-buffer-menu.png)
-
-The code is large but very simple:
-
-```cl
-(defhydra hydra-buffer-menu (:color pink
-                             :hint nil)
-  "
-^Mark^             ^Unmark^           ^Actions^          ^Search
-^^^^^^^^-----------------------------------------------------------------
-_m_: mark          _u_: unmark        _x_: execute       _R_: re-isearch
-_s_: save          _U_: unmark up     _b_: bury          _I_: isearch
-_d_: delete        ^ ^                _g_: refresh       _O_: multi-occur
-_D_: delete up     ^ ^                _T_: files only: % 
-28`Buffer-menu-files-only
-_~_: modified
-"
-  ("m" Buffer-menu-mark)
-  ("u" Buffer-menu-unmark)
-  ("U" Buffer-menu-backup-unmark)
-  ("d" Buffer-menu-delete)
-  ("D" Buffer-menu-delete-backwards)
-  ("s" Buffer-menu-save)
-  ("~" Buffer-menu-not-modified)
-  ("x" Buffer-menu-execute)
-  ("b" Buffer-menu-bury)
-  ("g" revert-buffer)
-  ("T" Buffer-menu-toggle-files-only)
-  ("O" Buffer-menu-multi-occur :color blue)
-  ("I" Buffer-menu-isearch-buffers :color blue)
-  ("R" Buffer-menu-isearch-buffers-regexp :color blue)
-  ("c" nil "cancel")
-  ("v" Buffer-menu-select "select" :color blue)
-  ("o" Buffer-menu-other-window "other-window" :color blue)
-  ("q" quit-window "quit" :color blue))
-
-(define-key Buffer-menu-mode-map "." 'hydra-buffer-menu/body)
-```
-
-Looking at the code, you can see `hydra-buffer-menu` as sort of a namespace 
construct that wraps
-each function that it's given in code that shows that hint and makes it easy 
to call the related
-functions. One additional function is created and returned as the result of 
`defhydra` -
-`hydra-buffer-menu/body`.  This function does nothing except setting up the 
hint and the keymap, and
-is usually the entry point to complex hydras.
-
-To write your own hydras, you can:
-
-- Either modify an existing hydra to do what you want to do.
-- Or read [the rules](#the-rules-of-hydra-tics),
-  [the 
examples](https://github.com/abo-abo/hydra/blob/master/hydra-examples.el),
-  the docstrings and comments in the source.
-
-# Community wiki
-
-You can find some user created hydras and more documentation in the project's
-[community wiki](https://github.com/abo-abo/hydra/wiki/). Feel free to add your
-own or edit the existing ones.
-
-# The Rules of Hydra-tics
-
-Each hydra (take `awesome` as a prefix to make it more specific) looks like 
this:
-
-```
-(defhydra hydra-awesome (awesome-map awesome-binding awesome-plist)
-  awesome-docstring
-  awesome-head-1
-  awesome-head-2
-  awesome-head-3
-  ...)
-```
-
-## `hydra-awesome`
-
-Each hydra needs a name, and this one is named `hydra-awesome`. You can name 
your hydras as you wish,
-but I prefer to start each one with `hydra-`, because it acts as an additional 
namespace layer, for example:
-`hydra-zoom`, `hydra-helm`, `hydra-apropos` etc.
-
-If you name your hydra `hydra-awesome`, the return result of `defhydra` will 
be `hydra-awesome/body`.
-
-Here's what `hydra-zoom/body` looks like, if you're interested:
-
-```cl
-(defun hydra-zoom/body nil
-  "Create a hydra with a \"<f2>\" body and the heads:
-
-\"g\":    `text-scale-increase',
-\"l\":    `text-scale-decrease'
-
-The body can be accessed via `hydra-zoom/body'."
-  (interactive)
-  (hydra-default-pre)
-  (when hydra-is-helpful
-    (if hydra-lv
-        (lv-message
-         (eval hydra-zoom/hint))
-      (message
-       (eval hydra-zoom/hint))))
-  (hydra-set-transient-map
-   hydra-zoom/keymap
-   (lambda nil
-     (hydra-keyboard-quit)
-     nil)
-   nil)
-  (setq prefix-arg
-        current-prefix-arg))
-```
-
-## `awesome-map` and `awesome-binding`
-
-This can be any keymap, for instance, `global-map` or `isearch-mode-map`.
-
-For this example:
-
-```cl
-(defhydra hydra-zoom (global-map "<f2>")
-  "zoom"
-  ("g" text-scale-increase "in")
-  ("l" text-scale-decrease "out"))
-```
-
-- `awesome-map` is `global-map`
-- `awesome-binding` is `"<f2>"`
-
-And here's the relevant generated code:
-
-```cl
-(unless (keymapp (lookup-key global-map (kbd "<f2>")))
-  (define-key global-map (kbd "<f2>") nil))
-(define-key global-map [f2 103]
-  (function hydra-zoom/text-scale-increase))
-(define-key global-map [f2 108]
-  (function hydra-zoom/text-scale-decrease))
-```
-
-As you see, `"<f2>"` is used as a prefix for <kbd>g</kbd> (char value 103) and 
<kbd>l</kbd>
-(char value 108).
-
-If you don't want to use a map right now, you can skip it like this:
-
-```cl
-(defhydra hydra-zoom (nil nil)
-  "zoom"
-  ("g" text-scale-increase "in")
-  ("l" text-scale-decrease "out"))
-```
-
-Or even simpler:
-
-```cl
-(defhydra hydra-zoom ()
-  "zoom"
-  ("g" text-scale-increase "in")
-  ("l" text-scale-decrease "out"))
-```
-
-But then you would have to bind `hydra-zoom/text-scale-increase` and
-`hydra-zoom/text-scale-decrease` yourself.
-
-## `awesome-plist`
-
-You can read up on what a plist is in
-[the Elisp 
manual](https://www.gnu.org/software/emacs/manual/html_node/elisp/Property-Lists.html).
-
-You can use `awesome-plist` to modify the behavior of each head in some way.
-Below is a list of each key.
-
-### `:pre` and `:post`
-
-You can specify code that will be called before each head, and after the body. 
For example:
-
-```cl
-(defhydra hydra-vi (:pre (set-cursor-color "#40e0d0")
-                    :post (progn
-                            (set-cursor-color "#ffffff")
-                            (message
-                             "Thank you, come again.")))
-  "vi"
-  ("l" forward-char)
-  ("h" backward-char)
-  ("j" next-line)
-  ("k" previous-line)
-  ("q" nil "quit"))
-```
-
-Thanks to `:pre`, each time any head is called, the cursor color is changed.
-And when the hydra quits, the cursor color will be made black again with 
`:post`.
-
-### `:exit`
-
-The `:exit` key is inherited by every head (they can override it) and 
influences what will happen
-after executing head's command:
-
-- `:exit nil` (the default) means that the hydra state will continue - you'll 
still see the hint and be able to use short bindings.
-- `:exit t` means that the hydra state will stop.
-
-### `:foreign-keys`
-
-The `:foreign-keys` key belongs to the body and decides what to do when a key 
is pressed that doesn't
-belong to any head:
-
-- `:foreign-keys nil` (the default) means that the hydra state will stop and 
the foreign key will
-do whatever it was supposed to do if there was no hydra state.
-- `:foreign-keys warn` will not stop the hydra state, but instead will issue a 
warning without
-running the foreign key.
-- `:foreign-keys run` will not stop the hydra state, and try to run the 
foreign key.
-
-### `:color`
-
-The `:color` key is a shortcut. It aggregates `:exit` and `:foreign-keys` key 
in the following way:
-
-    | color    | toggle                     |
-    |----------+----------------------------|
-    | red      |                            |
-    | blue     | :exit t                    |
-    | amaranth | :foreign-keys warn         |
-    | teal     | :foreign-keys warn :exit t |
-    | pink     | :foreign-keys run          |
-
-It's also a trick to make you instantly aware of the current hydra keys that 
you're about to press:
-the keys will be highlighted with the appropriate color.
-
-### `:timeout`
-
-The `:timeout` key starts a timer for the corresponding amount of seconds that 
disables the hydra.
-Calling any head will refresh the timer.
-
-### `:hint`
-
-The `:hint` key will be inherited by each head. Each head is allowed to 
override it, of course.
-One value that makes sense is `:hint nil`. See below for an explanation of 
head hint.
-
-### `:bind`
-
-The `:bind` key provides a lambda to be used to bind each head.  This is quite 
advanced and rarely
-used, you're not likely to need it.  But if you would like to bind your heads 
with e.g. `bind-key`
-instead of `define-key` you can use this option.
-
-The `:bind` key can be overridden by each head. This is useful if you want to 
have a few heads that
-are not bound outside the hydra.
-
-## `awesome-docstring`
-
-This can be a simple string used to build the final hydra hint.  However, if 
you start it with a
-newline, the key-highlighting and Ruby-style string interpolation becomes 
enabled, as you can see in
-`hydra-buffer-menu` above.
-
-To highlight a key, just wrap it in underscores. Note that the key must belong 
to one of the heads.
-The key will be highlighted with the color that is appropriate to the behavior 
of the key, i.e.  if
-the key will make the hydra exit, the color will be blue.
-
-To insert an empty character, use `^`. The only use of this is to have your 
code aligned as
-nicely as the result.
-
-To insert a dynamic Elisp variable, use `%`&#96; followed by the variable. 
Each time the variable
-changes due to a head, the docstring will be updated. `format`-style width 
specifiers can be used.
-
-To insert a dynamic Elisp expression, use e.g. `%(length 
(dired-get-marked-files))`.  If a head will
-change the amount of marked files, for example, it will be appropriately 
updated.
-
-If the result of the Elisp expression is a string and you don't want to quote 
it, use this form:
-`%s(shell-command-to-string "du -hs")`.
-
-## `awesome-head-1`
-
-Each head looks like this:
-
-```cl
-(head-binding head-command head-hint head-plist)
-```
-
-For the head `("g" text-scale-increase "in")`:
-
-- `head-binding` is `"g"`.
-- `head-command` is `text-scale-increase`.
-- `head-hint` is `"in"`.
-- `head-plist` is `nil`.
-
-### `head-binding`
-
-The `head-binding` is a string that can be passed to `kbd`.
-
-### `head-command`
-
-The `head-command` can be:
-
-- command name, like `text-scale-increase`.
-- a lambda, like
-
-        ("g" (lambda ()
-               (interactive)
-               (let ((current-prefix-arg 4))
-                 (call-interactively #'magit-status)))
-             "git")
-
-- nil, which exits the hydra.
-- a single sexp, which will be wrapped in an interactive lambda.
-
-Here's an example of the last option:
-
-```cl
-(defhydra hydra-launcher (:color blue)
-   "Launch"
-   ("h" man "man")
-   ("r" (browse-url "http://www.reddit.com/r/emacs/";) "reddit")
-   ("w" (browse-url "http://www.emacswiki.org/";) "emacswiki")
-   ("s" shell "shell")
-   ("q" nil "cancel"))
-(global-set-key (kbd "C-c r") 'hydra-launcher/body)
-```
-
-### `head-hint`
-
-In case of a large body docstring, you usually don't want the head hint to 
show up, since
-you've already documented it the the body docstring.
-You can set the head hint to `nil` to do this.
-
-Example:
-
-```cl
-(defhydra hydra-zoom (global-map "<f2>")
-  "
-Press _g_ to zoom in.
-"
-  ("g" text-scale-increase nil)
-  ("l" text-scale-decrease "out"))
-```
-
-### `head-plist`
-
-Here's a list of body keys that can be overridden in each head:
-
-- `:exit`
-- `:color`
-- `:bind`
diff --git a/packages/hydra/hydra-examples.el b/packages/hydra/hydra-examples.el
deleted file mode 100644
index 70f75b0..0000000
--- a/packages/hydra/hydra-examples.el
+++ /dev/null
@@ -1,386 +0,0 @@
-;;; hydra-examples.el --- Some applications for Hydra
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; These are the sample Hydras.
-;;
-;; If you want to use them plainly, set `hydra-examples-verbatim' to t
-;; before requiring this file. But it's probably better to only look
-;; at them and use them as templates for building your own.
-
-;;; Code:
-
-(require 'hydra)
-
-;;* Examples
-;;** Example 1: text scale
-(when (bound-and-true-p hydra-examples-verbatim)
-  (defhydra hydra-zoom (global-map "<f2>")
-    "zoom"
-    ("g" text-scale-increase "in")
-    ("l" text-scale-decrease "out")))
-
-;; This example generates three commands:
-;;
-;;     `hydra-zoom/text-scale-increase'
-;;     `hydra-zoom/text-scale-decrease'
-;;     `hydra-zoom/body'
-;;
-;; In addition, two of them are bound like this:
-;;
-;;     (global-set-key (kbd "<f2> g") 'hydra-zoom/text-scale-increase)
-;;     (global-set-key (kbd "<f2> l") 'hydra-zoom/text-scale-decrease)
-;;
-;; Note that you can substitute `global-map' with e.g. `emacs-lisp-mode-map' 
if you need.
-;; The functions generated will be the same, except the binding code will 
change to:
-;;
-;;     (define-key emacs-lisp-mode-map [f2 103]
-;;       (function hydra-zoom/text-scale-increase))
-;;     (define-key emacs-lisp-mode-map [f2 108]
-;;       (function hydra-zoom/text-scale-decrease))
-
-;;** Example 2: move window splitter
-(when (bound-and-true-p hydra-examples-verbatim)
-  (defhydra hydra-splitter (global-map "C-M-s")
-    "splitter"
-    ("h" hydra-move-splitter-left)
-    ("j" hydra-move-splitter-down)
-    ("k" hydra-move-splitter-up)
-    ("l" hydra-move-splitter-right)))
-
-;;** Example 3: jump to error
-(when (bound-and-true-p hydra-examples-verbatim)
-  (defhydra hydra-error (global-map "M-g")
-    "goto-error"
-    ("h" first-error "first")
-    ("j" next-error "next")
-    ("k" previous-error "prev")
-    ("v" recenter-top-bottom "recenter")
-    ("q" nil "quit")))
-
-;; This example introduces only one new thing: since the command
-;; passed to the "q" head is nil, it will quit the Hydra without doing
-;; anything. Heads that quit the Hydra instead of continuing are
-;; referred to as having blue :color. All the other heads have red
-;; :color, unless other is specified.
-
-;;** Example 4: toggle rarely used modes
-(when (bound-and-true-p hydra-examples-verbatim)
-  (defvar whitespace-mode nil)
-  (global-set-key
-   (kbd "C-c C-v")
-   (defhydra hydra-toggle-simple (:color blue)
-     "toggle"
-     ("a" abbrev-mode "abbrev")
-     ("d" toggle-debug-on-error "debug")
-     ("f" auto-fill-mode "fill")
-     ("t" toggle-truncate-lines "truncate")
-     ("w" whitespace-mode "whitespace")
-     ("q" nil "cancel"))))
-
-;; Note that in this case, `defhydra' returns the `hydra-toggle-simple/body'
-;; symbol, which is then passed to `global-set-key'.
-;;
-;; Another new thing is that both the keymap and the body prefix are
-;; skipped.  This means that `defhydra' will bind nothing - that's why
-;; `global-set-key' is necessary.
-;;
-;; One more new thing is that you can assign a :color to the body. All
-;; heads will inherit this color. The code above is very much equivalent to:
-;;
-;;     (global-set-key (kbd "C-c C-v a") 'abbrev-mode)
-;;     (global-set-key (kbd "C-c C-v d") 'toggle-debug-on-error)
-;;
-;; The differences are:
-;;
-;; * You get a hint immediately after "C-c C-v"
-;; * You can cancel and call a command immediately, e.g. "C-c C-v C-n"
-;;   is equivalent to "C-n" with Hydra approach, while it will error
-;;   that "C-c C-v C-n" isn't bound with the usual approach.
-
-;;** Example 5: mini-vi
-(defun hydra-vi/pre ()
-  (set-cursor-color "#e52b50"))
-
-(defun hydra-vi/post ()
-  (set-cursor-color "#ffffff"))
-
-(when (bound-and-true-p hydra-examples-verbatim)
-  (global-set-key
-   (kbd "C-z")
-   (defhydra hydra-vi (:pre hydra-vi/pre :post hydra-vi/post :color amaranth)
-     "vi"
-     ("l" forward-char)
-     ("h" backward-char)
-     ("j" next-line)
-     ("k" previous-line)
-     ("m" set-mark-command "mark")
-     ("a" move-beginning-of-line "beg")
-     ("e" move-end-of-line "end")
-     ("d" delete-region "del" :color blue)
-     ("y" kill-ring-save "yank" :color blue)
-     ("q" nil "quit")))
-  (hydra-set-property 'hydra-vi :verbosity 1))
-
-;; This example introduces :color amaranth. It's similar to red,
-;; except while you can quit red with any binding which isn't a Hydra
-;; head, you can quit amaranth only with a blue head. So you can quit
-;; this mode only with "d", "y", "q" or "C-g".
-;;
-;; Another novelty are the :pre and :post handlers. :pre will be
-;; called before each command, while :post will be called when the
-;; Hydra quits. In this case, they're used to override the cursor
-;; color while Hydra is active.
-
-;;** Example 6: selective global bind
-(when (bound-and-true-p hydra-examples-verbatim)
-  (defhydra hydra-next-error (global-map "C-x")
-    "next-error"
-    ("`" next-error "next")
-    ("j" next-error "next" :bind nil)
-    ("k" previous-error "previous" :bind nil)))
-
-;; This example will bind "C-x `" in `global-map', but it will not
-;; bind "C-x j" and "C-x k".
-;; You can still "C-x `jjk" though.
-
-;;** Example 7: toggle with Ruby-style docstring
-(defvar whitespace-mode nil)
-(defhydra hydra-toggle (:color pink)
-  "
-_a_ abbrev-mode:       %`abbrev-mode
-_d_ debug-on-error:    %`debug-on-error
-_f_ auto-fill-mode:    %`auto-fill-function
-_t_ truncate-lines:    %`truncate-lines
-_w_ whitespace-mode:   %`whitespace-mode
-
-"
-  ("a" abbrev-mode nil)
-  ("d" toggle-debug-on-error nil)
-  ("f" auto-fill-mode nil)
-  ("t" toggle-truncate-lines nil)
-  ("w" whitespace-mode nil)
-  ("q" nil "quit"))
-;; Recommended binding:
-;; (global-set-key (kbd "C-c C-v") 'hydra-toggle/body)
-
-;; Here, using e.g. "_a_" translates to "a" with proper face.
-;; More interestingly:
-;;
-;;     "foobar %`abbrev-mode" means roughly (format "foobar %S" abbrev-mode)
-;;
-;; This means that you actually see the state of the mode that you're changing.
-
-;;** Example 8: the whole menu for `Buffer-menu-mode'
-(defhydra hydra-buffer-menu (:color pink
-                             :hint nil)
-  "
-^Mark^             ^Unmark^           ^Actions^          ^Search
-^^^^^^^^-----------------------------------------------------------------      
                  (__)
-_m_: mark          _u_: unmark        _x_: execute       _R_: re-isearch       
                  (oo)
-_s_: save          _U_: unmark up     _b_: bury          _I_: isearch          
            /------\\/
-_d_: delete        ^ ^                _g_: refresh       _O_: multi-occur      
           / |    ||
-_D_: delete up     ^ ^                _T_: files only: % 
-28`Buffer-menu-files-only^^    *  /\\---/\\
-_~_: modified      ^ ^                ^ ^                ^^                    
             ~~   ~~
-"
-  ("m" Buffer-menu-mark)
-  ("u" Buffer-menu-unmark)
-  ("U" Buffer-menu-backup-unmark)
-  ("d" Buffer-menu-delete)
-  ("D" Buffer-menu-delete-backwards)
-  ("s" Buffer-menu-save)
-  ("~" Buffer-menu-not-modified)
-  ("x" Buffer-menu-execute)
-  ("b" Buffer-menu-bury)
-  ("g" revert-buffer)
-  ("T" Buffer-menu-toggle-files-only)
-  ("O" Buffer-menu-multi-occur :color blue)
-  ("I" Buffer-menu-isearch-buffers :color blue)
-  ("R" Buffer-menu-isearch-buffers-regexp :color blue)
-  ("c" nil "cancel")
-  ("v" Buffer-menu-select "select" :color blue)
-  ("o" Buffer-menu-other-window "other-window" :color blue)
-  ("q" quit-window "quit" :color blue))
-;; Recommended binding:
-;; (define-key Buffer-menu-mode-map "." 'hydra-buffer-menu/body)
-
-;;** Example 9: s-expressions in the docstring
-;; You can inline s-expresssions into the docstring like this:
-(defvar dired-mode-map)
-(declare-function dired-mark "dired")
-(when (bound-and-true-p hydra-examples-verbatim)
-  (require 'dired)
-  (defhydra hydra-marked-items (dired-mode-map "")
-    "
-Number of marked items: %(length (dired-get-marked-files))
-"
-    ("m" dired-mark "mark")))
-
-;; This results in the following dynamic docstring:
-;;
-;;     (format "Number of marked items: %S\n"
-;;             (length (dired-get-marked-files)))
-;;
-;; You can use `format'-style width specs, e.g. % 10(length nil).
-
-;;** Example 10: apropos family
-(defhydra hydra-apropos (:color blue
-                         :hint nil)
-  "
-_a_propos        _c_ommand
-_d_ocumentation  _l_ibrary
-_v_ariable       _u_ser-option
-^ ^          valu_e_"
-  ("a" apropos)
-  ("d" apropos-documentation)
-  ("v" apropos-variable)
-  ("c" apropos-command)
-  ("l" apropos-library)
-  ("u" apropos-user-option)
-  ("e" apropos-value))
-;; Recommended binding:
-;; (global-set-key (kbd "C-c h") 'hydra-apropos/body)
-
-;;** Example 11: rectangle-mark-mode
-(require 'rect)
-(defhydra hydra-rectangle (:body-pre (rectangle-mark-mode 1)
-                           :color pink
-                           :post (deactivate-mark))
-  "
-  ^_k_^     _d_elete    _s_tring
-_h_   _l_   _o_k        _y_ank
-  ^_j_^     _n_ew-copy  _r_eset
-^^^^        _e_xchange  _u_ndo
-^^^^        ^ ^         _p_aste
-"
-  ("h" rectangle-backward-char nil)
-  ("l" rectangle-forward-char nil)
-  ("k" rectangle-previous-line nil)
-  ("j" rectangle-next-line nil)
-  ("e" hydra-ex-point-mark nil)
-  ("n" copy-rectangle-as-kill nil)
-  ("d" delete-rectangle nil)
-  ("r" (if (region-active-p)
-           (deactivate-mark)
-         (rectangle-mark-mode 1)) nil)
-  ("y" yank-rectangle nil)
-  ("u" undo nil)
-  ("s" string-rectangle nil)
-  ("p" kill-rectangle nil)
-  ("o" nil nil))
-
-;; Recommended binding:
-;; (global-set-key (kbd "C-x SPC") 'hydra-rectangle/body)
-
-;;** Example 12: org-agenda-view
-(defun org-agenda-cts ()
-  (and (eq major-mode 'org-agenda-mode)
-       (let ((args (get-text-property
-                    (min (1- (point-max)) (point))
-                    'org-last-args)))
-         (nth 2 args))))
-
-(defhydra hydra-org-agenda-view (:hint none)
-  "
-_d_: ?d? day        _g_: time grid=?g?  _a_: arch-trees
-_w_: ?w? week       _[_: inactive       _A_: arch-files
-_t_: ?t? fortnight  _f_: follow=?f?     _r_: clock report=?r?
-_m_: ?m? month      _e_: entry text=?e? _D_: include diary=?D?
-_y_: ?y? year       _q_: quit           _L__l__c_: log = ?l?"
-  ("SPC" org-agenda-reset-view)
-  ("d" org-agenda-day-view (if (eq 'day (org-agenda-cts)) "[x]" "[ ]"))
-  ("w" org-agenda-week-view (if (eq 'week (org-agenda-cts)) "[x]" "[ ]"))
-  ("t" org-agenda-fortnight-view (if (eq 'fortnight (org-agenda-cts)) "[x]" "[ 
]"))
-  ("m" org-agenda-month-view (if (eq 'month (org-agenda-cts)) "[x]" "[ ]"))
-  ("y" org-agenda-year-view (if (eq 'year (org-agenda-cts)) "[x]" "[ ]"))
-  ("l" org-agenda-log-mode (format "% -3S" org-agenda-show-log))
-  ("L" (org-agenda-log-mode '(4)))
-  ("c" (org-agenda-log-mode 'clockcheck))
-  ("f" org-agenda-follow-mode (format "% -3S" org-agenda-follow-mode))
-  ("a" org-agenda-archives-mode)
-  ("A" (org-agenda-archives-mode 'files))
-  ("r" org-agenda-clockreport-mode (format "% -3S" 
org-agenda-clockreport-mode))
-  ("e" org-agenda-entry-text-mode (format "% -3S" org-agenda-entry-text-mode))
-  ("g" org-agenda-toggle-time-grid (format "% -3S" org-agenda-use-time-grid))
-  ("D" org-agenda-toggle-diary (format "% -3S" org-agenda-include-diary))
-  ("!" org-agenda-toggle-deadlines)
-  ("[" (let ((org-agenda-include-inactive-timestamps t))
-         (org-agenda-check-type t 'timeline 'agenda)
-         (org-agenda-redo)
-         (message "Display now includes inactive timestamps as well")))
-  ("q" (message "Abort") :exit t)
-  ("v" nil))
-
-;; Recommended binding:
-;; (define-key org-agenda-mode-map "v" 'hydra-org-agenda-view/body)
-
-;;* Helpers
-(require 'windmove)
-
-(defun hydra-move-splitter-left (arg)
-  "Move window splitter left."
-  (interactive "p")
-  (if (let ((windmove-wrap-around))
-        (windmove-find-other-window 'right))
-      (shrink-window-horizontally arg)
-    (enlarge-window-horizontally arg)))
-
-(defun hydra-move-splitter-right (arg)
-  "Move window splitter right."
-  (interactive "p")
-  (if (let ((windmove-wrap-around))
-        (windmove-find-other-window 'right))
-      (enlarge-window-horizontally arg)
-    (shrink-window-horizontally arg)))
-
-(defun hydra-move-splitter-up (arg)
-  "Move window splitter up."
-  (interactive "p")
-  (if (let ((windmove-wrap-around))
-        (windmove-find-other-window 'up))
-      (enlarge-window arg)
-    (shrink-window arg)))
-
-(defun hydra-move-splitter-down (arg)
-  "Move window splitter down."
-  (interactive "p")
-  (if (let ((windmove-wrap-around))
-        (windmove-find-other-window 'up))
-      (shrink-window arg)
-    (enlarge-window arg)))
-
-(defvar rectangle-mark-mode)
-(defun hydra-ex-point-mark ()
-  "Exchange point and mark."
-  (interactive)
-  (if rectangle-mark-mode
-      (rectangle-exchange-point-and-mark)
-    (let ((mk (mark)))
-      (rectangle-mark-mode 1)
-      (goto-char mk))))
-
-(provide 'hydra-examples)
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-;;; hydra-examples.el ends here
diff --git a/packages/hydra/hydra-ox.el b/packages/hydra/hydra-ox.el
deleted file mode 100644
index a992efc..0000000
--- a/packages/hydra/hydra-ox.el
+++ /dev/null
@@ -1,127 +0,0 @@
-;;; hydra-ox.el --- Org mode export widget implemented in Hydra
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This shows how a complex dispatch menu can be built with Hydra.
-
-;;; Code:
-
-(require 'hydra)
-(require 'org)
-(declare-function org-html-export-as-html 'ox-html)
-(declare-function org-html-export-to-html 'ox-html)
-(declare-function org-latex-export-as-latex 'ox-latex)
-(declare-function org-latex-export-to-latex 'ox-latex)
-(declare-function org-latex-export-to-pdf 'ox-latex)
-(declare-function org-ascii-export-as-ascii 'ox-ascii)
-(declare-function org-ascii-export-to-ascii 'ox-ascii)
-
-(defhydradio hydra-ox ()
-  (body-only "Export only the body.")
-  (export-scope "Export scope." [buffer subtree])
-  (async-export "When non-nil, export async.")
-  (visible-only "When non-nil, export visible only")
-  (force-publishing "Toggle force publishing"))
-
-(defhydra hydra-ox-html (:color blue)
-  "ox-html"
-  ("H" (org-html-export-as-html
-        hydra-ox/async-export
-        (eq hydra-ox/export-scope 'subtree)
-        hydra-ox/visible-only
-        hydra-ox/body-only)
-       "As HTML buffer")
-  ("h" (org-html-export-to-html
-        hydra-ox/async-export
-        (eq hydra-ox/export-scope 'subtree)
-        hydra-ox/visible-only
-        hydra-ox/body-only) "As HTML file")
-  ("o" (org-open-file
-        (org-html-export-to-html
-         hydra-ox/async-export
-         (eq hydra-ox/export-scope 'subtree)
-         hydra-ox/visible-only
-         hydra-ox/body-only)) "As HTML file and open")
-  ("b" hydra-ox/body "back")
-  ("q" nil "quit"))
-
-(defhydra hydra-ox-latex (:color blue)
-  "ox-latex"
-  ("L" org-latex-export-as-latex "As LaTeX buffer")
-  ("l" org-latex-export-to-latex "As LaTeX file")
-  ("p" org-latex-export-to-pdf "As PDF file")
-  ("o" (org-open-file (org-latex-export-to-pdf)) "As PDF file and open")
-  ("b" hydra-ox/body "back")
-  ("q" nil "quit"))
-
-(defhydra hydra-ox-text (:color blue)
-  "ox-text"
-  ("A" (org-ascii-export-as-ascii
-        nil nil nil nil
-        '(:ascii-charset ascii))
-       "As ASCII buffer")
-
-  ("a" (org-ascii-export-to-ascii
-        nil nil nil nil
-        '(:ascii-charset ascii))
-       "As ASCII file")
-  ("L" (org-ascii-export-as-ascii
-        nil nil nil nil
-        '(:ascii-charset latin1))
-       "As Latin1 buffer")
-  ("l" (org-ascii-export-to-ascii
-        nil nil nil nil
-        '(:ascii-charset latin1))
-       "As Latin1 file")
-  ("U" (org-ascii-export-as-ascii
-        nil nil nil nil
-        '(:ascii-charset utf-8))
-       "As UTF-8 buffer")
-  ("u" (org-ascii-export-to-ascii
-        nil nil nil nil
-        '(:ascii-charset utf-8))
-       "As UTF-8 file")
-  ("b" hydra-ox/body "back")
-  ("q" nil "quit"))
-
-(defhydra hydra-ox ()
-  "
-_C-b_ Body only:    % -15`hydra-ox/body-only^^^ _C-v_ Visible only:     
%`hydra-ox/visible-only
-_C-s_ Export scope: % -15`hydra-ox/export-scope _C-f_ Force publishing: 
%`hydra-ox/force-publishing
-_C-a_ Async export: %`hydra-ox/async-export
-
-"
-  ("C-b" (hydra-ox/body-only) nil)
-  ("C-v" (hydra-ox/visible-only) nil)
-  ("C-s" (hydra-ox/export-scope) nil)
-  ("C-f" (hydra-ox/force-publishing) nil)
-  ("C-a" (hydra-ox/async-export) nil)
-  ("h" hydra-ox-html/body "Export to HTML" :exit t)
-  ("l" hydra-ox-latex/body "Export to LaTeX" :exit t)
-  ("t" hydra-ox-text/body "Export to Plain Text" :exit t)
-  ("q" nil "quit"))
-
-(define-key org-mode-map (kbd "C-c C-,") 'hydra-ox/body)
-
-(provide 'hydra-ox)
-
-;;; hydra-ox.el ends here
diff --git a/packages/hydra/hydra-test.el b/packages/hydra/hydra-test.el
deleted file mode 100644
index 4618d6b..0000000
--- a/packages/hydra/hydra-test.el
+++ /dev/null
@@ -1,1561 +0,0 @@
-;;; hydra-test.el --- Tests for Hydra
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'ert)
-(require 'hydra)
-(setq text-quoting-style 'grave)
-(message "Emacs version: %s" emacs-version)
-
-(ert-deftest hydra-red-error ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-error (global-map "M-g")
-       "error"
-       ("h" first-error "first")
-       ("j" next-error "next")
-       ("k" previous-error "prev")
-       ("SPC" hydra-repeat "rep" :bind nil)))
-    '(progn
-      (set
-       (defvar hydra-error/keymap nil
-         "Keymap for hydra-error.")
-       (quote
-        (keymap
-         (32 . hydra-repeat)
-         (107 . hydra-error/previous-error)
-         (106 . hydra-error/next-error)
-         (104 . hydra-error/first-error)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra--digit-argument)
-         (48 . hydra--digit-argument)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-error/heads nil
-         "Heads for hydra-error.")
-       (quote
-        (("h"
-          first-error
-          "first"
-          :exit nil)
-         ("j"
-          next-error
-          "next"
-          :exit nil)
-         ("k"
-          previous-error
-          "prev"
-          :exit nil)
-         ("SPC"
-          hydra-repeat
-          "rep"
-          :bind nil
-          :exit nil))))
-      (set
-       (defvar hydra-error/hint nil
-         "Dynamic hint for hydra-error.")
-       (quote
-        (format
-         #("error: [h]: first, [j]: next, [k]: prev, [SPC]: rep."
-           8 9 (face hydra-face-red)
-           20 21 (face hydra-face-red)
-           31 32 (face hydra-face-red)
-           42 45 (face hydra-face-red)))))
-      (defun hydra-error/first-error nil
-        "Create a hydra with a \"M-g\" body and the heads:
-
-\"h\":    `first-error',
-\"j\":    `next-error',
-\"k\":    `previous-error',
-\"SPC\":    `hydra-repeat'
-
-The body can be accessed via `hydra-error/body'.
-
-Call the head: `first-error'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote first-error))
-              (hydra--call-interactively-remap-maybe
-               (function first-error)))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-error/next-error nil
-        "Create a hydra with a \"M-g\" body and the heads:
-
-\"h\":    `first-error',
-\"j\":    `next-error',
-\"k\":    `previous-error',
-\"SPC\":    `hydra-repeat'
-
-The body can be accessed via `hydra-error/body'.
-
-Call the head: `next-error'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote next-error))
-              (hydra--call-interactively-remap-maybe
-               (function next-error)))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-error/previous-error nil
-        "Create a hydra with a \"M-g\" body and the heads:
-
-\"h\":    `first-error',
-\"j\":    `next-error',
-\"k\":    `previous-error',
-\"SPC\":    `hydra-repeat'
-
-The body can be accessed via `hydra-error/body'.
-
-Call the head: `previous-error'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote previous-error))
-              (hydra--call-interactively-remap-maybe
-               (function previous-error)))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil))
-      (unless (keymapp
-               (lookup-key
-                global-map
-                (kbd "M-g")))
-        (define-key global-map (kbd "M-g")
-          nil))
-      (define-key global-map [134217831 104]
-       (quote hydra-error/first-error))
-      (define-key global-map [134217831 106]
-       (quote hydra-error/next-error))
-      (define-key global-map [134217831 107]
-       (quote
-        hydra-error/previous-error))
-      (defun hydra-error/body nil
-        "Create a hydra with a \"M-g\" body and the heads:
-
-\"h\":    `first-error',
-\"j\":    `next-error',
-\"k\":    `previous-error',
-\"SPC\":    `hydra-repeat'
-
-The body can be accessed via `hydra-error/body'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
-
-(ert-deftest hydra-blue-toggle ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-toggle (:color blue)
-       "toggle"
-       ("t" toggle-truncate-lines "truncate")
-       ("f" auto-fill-mode "fill")
-       ("a" abbrev-mode "abbrev")
-       ("q" nil "cancel")))
-    '(progn
-      (set
-       (defvar hydra-toggle/keymap nil
-         "Keymap for hydra-toggle.")
-       (quote
-        (keymap
-         (113 . hydra-toggle/nil)
-         (97 . hydra-toggle/abbrev-mode-and-exit)
-         (102 . hydra-toggle/auto-fill-mode-and-exit)
-         (116 . hydra-toggle/toggle-truncate-lines-and-exit)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra--digit-argument)
-         (48 . hydra--digit-argument)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-toggle/heads nil
-         "Heads for hydra-toggle.")
-       (quote
-        (("t"
-          toggle-truncate-lines
-          "truncate"
-          :exit t)
-         ("f"
-          auto-fill-mode
-          "fill"
-          :exit t)
-         ("a"
-          abbrev-mode
-          "abbrev"
-          :exit t)
-         ("q" nil "cancel" :exit t))))
-      (set
-       (defvar hydra-toggle/hint nil
-         "Dynamic hint for hydra-toggle.")
-       (quote
-        (format
-         #("toggle: [t]: truncate, [f]: fill, [a]: abbrev, [q]: cancel."
-           9 10 (face hydra-face-blue)
-           24 25 (face hydra-face-blue)
-           35 36 (face hydra-face-blue)
-           48 49 (face hydra-face-blue)))))
-      (defun hydra-toggle/toggle-truncate-lines-and-exit nil
-        "Create a hydra with no body and the heads:
-
-\"t\":    `toggle-truncate-lines',
-\"f\":    `auto-fill-mode',
-\"a\":    `abbrev-mode',
-\"q\":    nil
-
-The body can be accessed via `hydra-toggle/body'.
-
-Call the head: `toggle-truncate-lines'."
-        (interactive)
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body))
-        (progn
-          (setq this-command
-                (quote toggle-truncate-lines))
-          (hydra--call-interactively-remap-maybe
-           (function
-            toggle-truncate-lines))))
-      (defun hydra-toggle/auto-fill-mode-and-exit nil
-        "Create a hydra with no body and the heads:
-
-\"t\":    `toggle-truncate-lines',
-\"f\":    `auto-fill-mode',
-\"a\":    `abbrev-mode',
-\"q\":    nil
-
-The body can be accessed via `hydra-toggle/body'.
-
-Call the head: `auto-fill-mode'."
-        (interactive)
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body))
-        (progn
-          (setq this-command
-                (quote auto-fill-mode))
-          (hydra--call-interactively-remap-maybe
-           (function auto-fill-mode))))
-      (defun hydra-toggle/abbrev-mode-and-exit nil
-        "Create a hydra with no body and the heads:
-
-\"t\":    `toggle-truncate-lines',
-\"f\":    `auto-fill-mode',
-\"a\":    `abbrev-mode',
-\"q\":    nil
-
-The body can be accessed via `hydra-toggle/body'.
-
-Call the head: `abbrev-mode'."
-        (interactive)
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body))
-        (progn
-          (setq this-command
-                (quote abbrev-mode))
-          (hydra--call-interactively-remap-maybe
-           (function abbrev-mode))))
-      (defun hydra-toggle/nil nil
-        "Create a hydra with no body and the heads:
-
-\"t\":    `toggle-truncate-lines',
-\"f\":    `auto-fill-mode',
-\"a\":    `abbrev-mode',
-\"q\":    nil
-
-The body can be accessed via `hydra-toggle/body'.
-
-Call the head: nil."
-        (interactive)
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body)))
-      (defun hydra-toggle/body nil
-        "Create a hydra with no body and the heads:
-
-\"t\":    `toggle-truncate-lines',
-\"f\":    `auto-fill-mode',
-\"a\":    `abbrev-mode',
-\"q\":    nil
-
-The body can be accessed via `hydra-toggle/body'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-toggle/body)))
-        (hydra-show-hint
-         hydra-toggle/hint
-         (quote hydra-toggle))
-        (hydra-set-transient-map
-         hydra-toggle/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
-
-(ert-deftest hydra-amaranth-vi ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-vi
-       (:pre
-        (set-cursor-color "#e52b50")
-        :post
-        (set-cursor-color "#ffffff")
-        :color amaranth)
-       "vi"
-       ("j" next-line)
-       ("k" previous-line)
-       ("q" nil "quit")))
-    '(progn
-      (set
-       (defvar hydra-vi/keymap nil
-         "Keymap for hydra-vi.")
-       (quote
-        (keymap
-         (113 . hydra-vi/nil)
-         (107 . hydra-vi/previous-line)
-         (106 . hydra-vi/next-line)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra--digit-argument)
-         (48 . hydra--digit-argument)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-vi/heads nil
-         "Heads for hydra-vi.")
-       (quote
-        (("j" next-line "" :exit nil)
-         ("k"
-          previous-line
-          ""
-          :exit nil)
-         ("q" nil "quit" :exit t))))
-      (set
-       (defvar hydra-vi/hint nil
-         "Dynamic hint for hydra-vi.")
-       (quote
-        (format
-         #("vi: j, k, [q]: quit."
-           4 5 (face hydra-face-amaranth)
-           7 8 (face hydra-face-amaranth)
-           11 12 (face hydra-face-teal)))))
-      (defun hydra-vi/next-line nil
-        "Create a hydra with no body and the heads:
-
-\"j\":    `next-line',
-\"k\":    `previous-line',
-\"q\":    nil
-
-The body can be accessed via `hydra-vi/body'.
-
-Call the head: `next-line'."
-        (interactive)
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-vi/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote next-line))
-              (hydra--call-interactively-remap-maybe
-               (function next-line)))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-vi/hint
-         (quote hydra-vi))
-        (hydra-set-transient-map
-         hydra-vi/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           (set-cursor-color "#ffffff"))
-         (quote warn)))
-      (defun hydra-vi/previous-line nil
-        "Create a hydra with no body and the heads:
-
-\"j\":    `next-line',
-\"k\":    `previous-line',
-\"q\":    nil
-
-The body can be accessed via `hydra-vi/body'.
-
-Call the head: `previous-line'."
-        (interactive)
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-vi/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote previous-line))
-              (hydra--call-interactively-remap-maybe
-               (function previous-line)))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-vi/hint
-         (quote hydra-vi))
-        (hydra-set-transient-map
-         hydra-vi/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           (set-cursor-color "#ffffff"))
-         (quote warn)))
-      (defun hydra-vi/nil nil
-        "Create a hydra with no body and the heads:
-
-\"j\":    `next-line',
-\"k\":    `previous-line',
-\"q\":    nil
-
-The body can be accessed via `hydra-vi/body'.
-
-Call the head: nil."
-        (interactive)
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-vi/body)))
-      (defun hydra-vi/body nil
-        "Create a hydra with no body and the heads:
-
-\"j\":    `next-line',
-\"k\":    `previous-line',
-\"q\":    nil
-
-The body can be accessed via `hydra-vi/body'."
-        (interactive)
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-vi/body)))
-        (hydra-show-hint
-         hydra-vi/hint
-         (quote hydra-vi))
-        (hydra-set-transient-map
-         hydra-vi/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           (set-cursor-color "#ffffff"))
-         (quote warn))
-        (setq prefix-arg
-              current-prefix-arg))))))
-
-(ert-deftest hydra-zoom-duplicate-1 ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-zoom ()
-       "zoom"
-       ("r" (text-scale-set 0) "reset")
-       ("0" (text-scale-set 0) :bind nil :exit t)
-       ("1" (text-scale-set 0) nil :bind nil :exit t)))
-    '(progn
-      (set
-       (defvar hydra-zoom/keymap nil
-         "Keymap for hydra-zoom.")
-       (quote
-        (keymap
-         (114 . hydra-zoom/lambda-r)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra-zoom/lambda-0-and-exit)
-         (48 . hydra-zoom/lambda-0-and-exit)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-zoom/heads nil
-         "Heads for hydra-zoom.")
-       (quote
-        (("r"
-          (text-scale-set 0)
-          "reset"
-          :exit nil)
-         ("0"
-          (text-scale-set 0)
-          ""
-          :bind nil
-          :exit t)
-         ("1"
-          (text-scale-set 0)
-          nil
-          :bind nil
-          :exit t))))
-      (set
-       (defvar hydra-zoom/hint nil
-         "Dynamic hint for hydra-zoom.")
-       (quote
-        (format
-         #("zoom: [r 0]: reset."
-           7 8 (face hydra-face-red)
-           9 10 (face hydra-face-blue)))))
-      (defun hydra-zoom/lambda-r nil
-        "Create a hydra with no body and the heads:
-
-\"r\":    `(text-scale-set 0)',
-\"0\":    `(text-scale-set 0)',
-\"1\":    `(text-scale-set 0)'
-
-The body can be accessed via `hydra-zoom/body'.
-
-Call the head: `(text-scale-set 0)'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (condition-case err
-            (hydra--call-interactively-remap-maybe
-             (function
-              (lambda nil
-               (interactive)
-               (text-scale-set 0))))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-zoom/lambda-0-and-exit nil
-        "Create a hydra with no body and the heads:
-
-\"r\":    `(text-scale-set 0)',
-\"0\":    `(text-scale-set 0)',
-\"1\":    `(text-scale-set 0)'
-
-The body can be accessed via `hydra-zoom/body'.
-
-Call the head: `(text-scale-set 0)'."
-        (interactive)
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-zoom/body))
-        (hydra--call-interactively-remap-maybe
-         (function
-          (lambda nil
-           (interactive)
-           (text-scale-set 0)))))
-      (defun hydra-zoom/body nil
-        "Create a hydra with no body and the heads:
-
-\"r\":    `(text-scale-set 0)',
-\"0\":    `(text-scale-set 0)',
-\"1\":    `(text-scale-set 0)'
-
-The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
-
-(ert-deftest hydra-zoom-duplicate-2 ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-zoom ()
-       "zoom"
-       ("r" (text-scale-set 0) "reset")
-       ("0" (text-scale-set 0) :bind nil :exit t)
-       ("1" (text-scale-set 0) nil :bind nil)))
-    '(progn
-      (set
-       (defvar hydra-zoom/keymap nil
-         "Keymap for hydra-zoom.")
-       (quote
-        (keymap
-         (114 . hydra-zoom/lambda-r)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra-zoom/lambda-r)
-         (48 . hydra-zoom/lambda-0-and-exit)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-zoom/heads nil
-         "Heads for hydra-zoom.")
-       (quote
-        (("r"
-          (text-scale-set 0)
-          "reset"
-          :exit nil)
-         ("0"
-          (text-scale-set 0)
-          ""
-          :bind nil
-          :exit t)
-         ("1"
-          (text-scale-set 0)
-          nil
-          :bind nil
-          :exit nil))))
-      (set
-       (defvar hydra-zoom/hint nil
-         "Dynamic hint for hydra-zoom.")
-       (quote
-        (format
-         #("zoom: [r 0]: reset."
-           7 8 (face hydra-face-red)
-           9 10 (face hydra-face-blue)))))
-      (defun hydra-zoom/lambda-r nil
-        "Create a hydra with no body and the heads:
-
-\"r\":    `(text-scale-set 0)',
-\"0\":    `(text-scale-set 0)',
-\"1\":    `(text-scale-set 0)'
-
-The body can be accessed via `hydra-zoom/body'.
-
-Call the head: `(text-scale-set 0)'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (condition-case err
-            (hydra--call-interactively-remap-maybe
-             (function
-              (lambda nil
-               (interactive)
-               (text-scale-set 0))))
-          ((quit error)
-           (message
-            (error-message-string err))
-           (unless hydra-lv (sit-for 0.8))))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-zoom/lambda-0-and-exit nil
-        "Create a hydra with no body and the heads:
-
-\"r\":    `(text-scale-set 0)',
-\"0\":    `(text-scale-set 0)',
-\"1\":    `(text-scale-set 0)'
-
-The body can be accessed via `hydra-zoom/body'.
-
-Call the head: `(text-scale-set 0)'."
-        (interactive)
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-zoom/body))
-        (hydra--call-interactively-remap-maybe
-         (function
-          (lambda nil
-           (interactive)
-           (text-scale-set 0)))))
-      (defun hydra-zoom/body nil
-        "Create a hydra with no body and the heads:
-
-\"r\":    `(text-scale-set 0)',
-\"0\":    `(text-scale-set 0)',
-\"1\":    `(text-scale-set 0)'
-
-The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
-           (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
-
-(ert-deftest defhydradio ()
-  (should (equal
-           (macroexpand
-            '(defhydradio hydra-test ()
-              (num "Num" [0 1 2 3 4 5 6 7 8 9 10])
-              (str "Str" ["foo" "bar" "baz"])))
-           '(progn
-             (defvar hydra-test/num 0
-               "Num")
-             (put 'hydra-test/num 'range [0 1 2 3 4 5 6 7 8 9 10])
-             (defun hydra-test/num ()
-               (hydra--cycle-radio 'hydra-test/num))
-             (defvar hydra-test/str "foo"
-               "Str")
-             (put 'hydra-test/str 'range ["foo" "bar" "baz"])
-             (defun hydra-test/str ()
-               (hydra--cycle-radio 'hydra-test/str))
-             (defvar hydra-test/names '(hydra-test/num hydra-test/str))))))
-
-(ert-deftest hydra-blue-compat ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-toggle (:color blue)
-       "toggle"
-       ("t" toggle-truncate-lines "truncate")
-       ("f" auto-fill-mode "fill")
-       ("a" abbrev-mode "abbrev")
-       ("q" nil "cancel")))
-    (macroexpand
-     '(defhydra hydra-toggle (:exit t)
-       "toggle"
-       ("t" toggle-truncate-lines "truncate")
-       ("f" auto-fill-mode "fill")
-       ("a" abbrev-mode "abbrev")
-       ("q" nil "cancel"))))))
-
-(ert-deftest hydra-amaranth-compat ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-vi
-       (:pre
-        (set-cursor-color "#e52b50")
-        :post
-        (set-cursor-color "#ffffff")
-        :color amaranth)
-       "vi"
-       ("j" next-line)
-       ("k" previous-line)
-       ("q" nil "quit")))
-    (macroexpand
-     '(defhydra hydra-vi
-       (:pre
-        (set-cursor-color "#e52b50")
-        :post
-        (set-cursor-color "#ffffff")
-        :foreign-keys warn)
-       "vi"
-       ("j" next-line)
-       ("k" previous-line)
-       ("q" nil "quit"))))))
-
-(ert-deftest hydra-pink-compat ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-zoom (global-map "<f2>"
-                            :color pink)
-       "zoom"
-       ("g" text-scale-increase "in")
-       ("l" text-scale-decrease "out")
-       ("q" nil "quit")))
-    (macroexpand
-     '(defhydra hydra-zoom (global-map "<f2>"
-                            :foreign-keys run)
-       "zoom"
-       ("g" text-scale-increase "in")
-       ("l" text-scale-decrease "out")
-       ("q" nil "quit"))))))
-
-(ert-deftest hydra-teal-compat ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-zoom (global-map "<f2>"
-                            :color teal)
-       "zoom"
-       ("g" text-scale-increase "in")
-       ("l" text-scale-decrease "out")
-       ("q" nil "quit")))
-    (macroexpand
-     '(defhydra hydra-zoom (global-map "<f2>"
-                            :foreign-keys warn
-                            :exit t)
-       "zoom"
-       ("g" text-scale-increase "in")
-       ("l" text-scale-decrease "out")
-       ("q" nil "quit"))))))
-
-(ert-deftest hydra-format-1 ()
-  (should (equal
-           (let ((hydra-fontify-head-function
-                  'hydra-fontify-head-greyscale))
-             (hydra--format
-              'hydra-toggle
-              nil
-              "
-_a_ abbrev-mode:       %`abbrev-mode
-_d_ debug-on-error:    %`debug-on-error
-_f_ auto-fill-mode:    %`auto-fill-function
-" '(("a" abbrev-mode nil)
-    ("d" toggle-debug-on-error nil)
-    ("f" auto-fill-mode nil)
-    ("g" golden-ratio-mode nil)
-    ("t" toggle-truncate-lines nil)
-    ("w" whitespace-mode nil)
-    ("q" nil "quit"))))
-           '(concat (format "%s abbrev-mode:       %S
-%s debug-on-error:    %S
-%s auto-fill-mode:    %S
-" "{a}" abbrev-mode "{d}" debug-on-error "{f}" auto-fill-function) "[{q}]: 
quit."))))
-
-(ert-deftest hydra-format-2 ()
-  (should (equal
-           (let ((hydra-fontify-head-function
-                  'hydra-fontify-head-greyscale))
-             (hydra--format
-              'bar
-              nil
-              "\n  bar %s`foo\n"
-              '(("a" (quote t) "" :cmd-name bar/lambda-a :exit nil)
-                ("q" nil "" :cmd-name bar/nil :exit t))))
-           '(concat (format "  bar %s\n" foo) "{a}, [q]."))))
-
-(ert-deftest hydra-format-3 ()
-  (should (equal
-           (let ((hydra-fontify-head-function
-                  'hydra-fontify-head-greyscale))
-             (hydra--format
-              'bar
-              nil
-              "\n_<SPC>_   ^^ace jump\n"
-              '(("<SPC>" ace-jump-char-mode nil :cmd-name 
bar/ace-jump-char-mode))))
-           '(concat (format "%s   ace jump\n" "{<SPC>}") ""))))
-
-(ert-deftest hydra-format-4 ()
-  (should
-   (equal (hydra--format
-           nil
-           '(nil nil :hint nil)
-           "\n_j_,_k_"
-           '(("j" nil nil :exit t) ("k" nil nil :exit t)))
-          '(concat (format "%s,%s"
-                    #("j" 0 1 (face hydra-face-blue))
-                    #("k" 0 1 (face hydra-face-blue))) ""))))
-
-(ert-deftest hydra-format-5 ()
-  (should
-   (equal (hydra--format
-           nil nil "\n_-_: mark          _u_: unmark\n"
-           '(("-" Buffer-menu-mark)
-             ("u" Buffer-menu-unmark)))
-          '(concat
-           (format
-            "%s: mark          %s: unmark\n"
-            #("-" 0 1 (face hydra-face-red))
-            #("u" 0 1 (face hydra-face-red)))
-            ""))))
-
-(ert-deftest hydra-format-6 ()
-  (should
-   (equal (hydra--format
-           nil nil "\n[_]_] forward [_[_] backward\n"
-           '(("]" forward-char)
-             ("[" backward-char)))
-          '(concat
-            (format
-             "[%s] forward [%s] backward\n"
-             #("]"
-               0 1 (face
-                    hydra-face-red))
-             #("["
-               0 1 (face
-                    hydra-face-red)))
-            ""))))
-
-(ert-deftest hydra-format-7 ()
-  (should
-   (equal
-    (hydra--format nil nil "test"
-                   '(("%" forward-char "" :exit nil)
-                     ("b" backward-char "" :exit nil)))
-    '(format
-      #("test: %%%%, b."
-        6 7 (face hydra-face-red)
-        7 8 (face hydra-face-red)
-        8 9 (face hydra-face-red)
-        9 10 (face hydra-face-red)
-        12 13 (face hydra-face-red)))))
-  (should
-   (equal
-    (hydra--format nil nil "\n_%_ forward\n"
-                   '(("%" forward-char nil :exit nil)))
-    '(concat
-      (format
-       "%s forward\n"
-       #("%%"
-         0 2 (face hydra-face-red)))
-      ""))))
-
-(ert-deftest hydra-format-8 ()
-  (should
-   (equal
-    (hydra--format nil '(nil nil :hint nil) "test"
-                   '(("f" forward-char nil :exit nil)
-                     ("b" backward-char "back" :exit nil)))
-    '(format
-      #("test: [b]: back."
-        7 8 (face hydra-face-red))))))
-
-(ert-deftest hydra-format-9 ()
-  (should
-   (equal
-    (hydra--format nil '(nil nil :hint nil) "\n_f_(foo)"
-                   '(("f" forward-char nil :exit nil)))
-    '(concat
-      (format
-       "%s(foo)"
-       #("f" 0 1 (face hydra-face-red)))
-      ""))))
-
-(ert-deftest hydra-format-with-sexp-1 ()
-  (should (equal
-           (let ((hydra-fontify-head-function
-                  'hydra-fontify-head-greyscale))
-             (hydra--format
-              'hydra-toggle nil
-              "\n_n_ narrow-or-widen-dwim %(progn (message 
\"checking\")(buffer-narrowed-p))asdf\n"
-              '(("n" narrow-to-region nil) ("q" nil "cancel" :exit t))))
-           '(concat (format "%s narrow-or-widen-dwim %Sasdf\n"
-                     "{n}"
-                     (progn
-                       (message "checking")
-                       (buffer-narrowed-p)))
-             "[[q]]: cancel."))))
-
-(ert-deftest hydra-format-with-sexp-2 ()
-  (should (equal
-           (let ((hydra-fontify-head-function
-                  'hydra-fontify-head-greyscale))
-             (hydra--format
-              'hydra-toggle nil
-              "\n_n_ narrow-or-widen-dwim %s(progn (message 
\"checking\")(buffer-narrowed-p))asdf\n"
-              '(("n" narrow-to-region nil) ("q" nil "cancel" :exit t))))
-           '(concat (format "%s narrow-or-widen-dwim %sasdf\n"
-                     "{n}"
-                     (progn
-                       (message "checking")
-                       (buffer-narrowed-p)))
-             "[[q]]: cancel."))))
-
-(ert-deftest hydra-compat-colors-2 ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-test (:color amaranth)
-       ("a" fun-a)
-       ("b" fun-b :color blue)
-       ("c" fun-c :color blue)
-       ("d" fun-d :color blue)
-       ("e" fun-e :color blue)
-       ("f" fun-f :color blue)))
-    (macroexpand
-     '(defhydra hydra-test (:color teal)
-       ("a" fun-a :color red)
-       ("b" fun-b)
-       ("c" fun-c)
-       ("d" fun-d)
-       ("e" fun-e)
-       ("f" fun-f))))))
-
-(ert-deftest hydra-compat-colors-3 ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-test ()
-       ("a" fun-a)
-       ("b" fun-b :color blue)
-       ("c" fun-c :color blue)
-       ("d" fun-d :color blue)
-       ("e" fun-e :color blue)
-       ("f" fun-f :color blue)))
-    (macroexpand
-     '(defhydra hydra-test (:color blue)
-       ("a" fun-a :color red)
-       ("b" fun-b)
-       ("c" fun-c)
-       ("d" fun-d)
-       ("e" fun-e)
-       ("f" fun-f))))))
-
-(ert-deftest hydra-compat-colors-4 ()
-  (should
-   (equal
-    (macroexpand
-     '(defhydra hydra-test ()
-       ("a" fun-a)
-       ("b" fun-b :exit t)
-       ("c" fun-c :exit t)
-       ("d" fun-d :exit t)
-       ("e" fun-e :exit t)
-       ("f" fun-f :exit t)))
-    (macroexpand
-     '(defhydra hydra-test (:exit t)
-       ("a" fun-a :exit nil)
-       ("b" fun-b)
-       ("c" fun-c)
-       ("d" fun-d)
-       ("e" fun-e)
-       ("f" fun-f))))))
-
-(ert-deftest hydra--pad ()
-  (should (equal (hydra--pad '(a b c) 3)
-                 '(a b c)))
-  (should (equal (hydra--pad '(a) 3)
-                 '(a nil nil))))
-
-(ert-deftest hydra--matrix ()
-  (should (equal (hydra--matrix '(a b c) 2 2)
-                 '((a b) (c nil))))
-  (should (equal (hydra--matrix '(a b c d e f g h i) 4 3)
-                 '((a b c d) (e f g h) (i nil nil nil)))))
-
-(ert-deftest hydra--cell ()
-  (should (equal (hydra--cell "% -75s %%`%s" '(hydra-lv hydra-verbose))
-                 "When non-nil, `lv-message' (not `message') will be used to 
display hints.   %`hydra-lv^^^^^
-When non-nil, hydra will issue some non essential style warnings.           
%`hydra-verbose")))
-
-(ert-deftest hydra--vconcat ()
-  (should (equal (hydra--vconcat '("abc\ndef" "012\n34" "def\nabc"))
-                 "abc012def\ndef34abc")))
-
-(defhydradio hydra-tng ()
-  (picard "_p_ Captain Jean Luc Picard:")
-  (riker "_r_ Commander William Riker:")
-  (data "_d_ Lieutenant Commander Data:")
-  (worf "_w_ Worf:")
-  (la-forge "_f_ Geordi La Forge:")
-  (troi "_t_ Deanna Troi:")
-  (dr-crusher "_c_ Doctor Beverly Crusher:")
-  (phaser "_h_ Set phasers to " [stun kill]))
-
-(ert-deftest hydra--table ()
-  (let ((hydra-cell-format "% -30s %% -8`%s"))
-    (should (equal (hydra--table hydra-tng/names 5 2)
-                   (substring "
-_p_ Captain Jean Luc Picard:   % -8`hydra-tng/picard^^    _t_ Deanna Troi:     
          % -8`hydra-tng/troi^^^^^^
-_r_ Commander William Riker:   % -8`hydra-tng/riker^^^    _c_ Doctor Beverly 
Crusher:    % -8`hydra-tng/dr-crusher
-_d_ Lieutenant Commander Data: % -8`hydra-tng/data^^^^    _h_ Set phasers to   
          % -8`hydra-tng/phaser^^^^
-_w_ Worf:                      % -8`hydra-tng/worf^^^^
-_f_ Geordi La Forge:           % -8`hydra-tng/la-forge" 1)))
-    (should (equal (hydra--table hydra-tng/names 4 3)
-                   (substring "
-_p_ Captain Jean Luc Picard:   % -8`hydra-tng/picard    _f_ Geordi La Forge:   
        % -8`hydra-tng/la-forge^^
-_r_ Commander William Riker:   % -8`hydra-tng/riker^    _t_ Deanna Troi:       
        % -8`hydra-tng/troi^^^^^^
-_d_ Lieutenant Commander Data: % -8`hydra-tng/data^^    _c_ Doctor Beverly 
Crusher:    % -8`hydra-tng/dr-crusher
-_w_ Worf:                      % -8`hydra-tng/worf^^    _h_ Set phasers to     
        % -8`hydra-tng/phaser^^^^" 1)))))
-
-(ert-deftest hydra--make-funcall ()
-  (should (equal (let ((body-pre 'foo))
-                   (hydra--make-funcall body-pre)
-                   body-pre)
-                 '(funcall (function foo)))))
-
-(defhydra hydra-simple-1 (global-map "C-c")
-  ("a" (insert "j"))
-  ("b" (insert "k"))
-  ("q" nil))
-
-(defhydra hydra-simple-2 (global-map "C-c" :color amaranth)
-  ("c" self-insert-command)
-  ("d" self-insert-command)
-  ("q" nil))
-
-(defhydra hydra-simple-3 (global-map "C-c")
-  ("g" goto-line)
-  ("1" find-file)
-  ("q" nil))
-
-(defun remapable-print ()
-  (interactive)
-  (insert "remapable print was called"))
-(defun remaped-print ()
-  (interactive)
-  (insert "*remaped* print was called"))
-(define-key global-map (kbd "C-=") 'remapable-print)
-(define-key global-map [remap remapable-print] 'remaped-print)
-
-(defhydra hydra-simple-with-remap (global-map "C-c")
-  ("r" remapable-print)
-  ("q" nil))
-
-(defmacro hydra-with (in &rest body)
-  `(let ((temp-buffer (generate-new-buffer " *temp*")))
-     (save-window-excursion
-       (unwind-protect
-            (progn
-              (switch-to-buffer temp-buffer)
-              (transient-mark-mode 1)
-              (insert ,in)
-              (goto-char (point-min))
-              (when (search-forward "~" nil t)
-                (backward-delete-char 1)
-                (set-mark (point)))
-              (goto-char (point-max))
-              (search-backward "|")
-              (delete-char 1)
-              (setq current-prefix-arg nil)
-              ,@body
-              (insert "|")
-              (when (region-active-p)
-                (exchange-point-and-mark)
-                (insert "~"))
-              (buffer-substring-no-properties
-               (point-min)
-               (point-max)))
-         (and (buffer-name temp-buffer)
-              (kill-buffer temp-buffer))))))
-
-(ert-deftest hydra-integration-1 ()
-  (should (string= (hydra-with "|"
-                               (execute-kbd-macro
-                                (kbd "C-c aabbaaqaabbaa")))
-                   "jjkkjjaabbaa|"))
-  (should (string= (hydra-with "|"
-                               (condition-case nil
-                                   (execute-kbd-macro
-                                    (kbd "C-c aabb C-g"))
-                                 (quit nil))
-                               (execute-kbd-macro "aaqaabbaa"))
-                   "jjkkaaqaabbaa|")))
-
-(ert-deftest hydra-integration-2 ()
-  (should (string= (hydra-with "|"
-                               (execute-kbd-macro
-                                (kbd "C-c c 1 c 2 d 4 c q")))
-                   "ccddcccc|"))
-  (should (string= (hydra-with "|"
-                               (execute-kbd-macro
-                                (kbd "C-c c 1 c C-u d C-u 10 c q")))
-                   "ccddddcccccccccc|")))
-
-(ert-deftest hydra-integration-3 ()
-  (should (string= (hydra-with "foo\nbar|"
-                               (execute-kbd-macro
-                                (kbd "C-c g 1 RET q")))
-                   "|foo\nbar")))
-
-(ert-deftest hydra-remap-lookup-1 ()
-  "try calling a remapped command while option is disabled "
-  (setq hydra-look-for-remap nil)
-  (should (string= (hydra-with "|"
-                               (execute-kbd-macro
-                                (kbd "C-c rq")))
-                   "remapable print was called|")))
-(ert-deftest hydra-remap-lookup-2 ()
-  "try calling a remapped command while option is enabled"
-  (setq hydra-look-for-remap t)
-  (should (string= (hydra-with "|"
-                               (execute-kbd-macro
-                                (kbd "C-c rq")))
-                   "*remaped* print was called|")))
-
-(ert-deftest hydra-columns-1 ()
-  (should (equal (eval
-                  (cadr
-                   (nth 2
-                        (nth 3
-                             (macroexpand
-                              '(defhydra hydra-info (:color blue
-                                                     :columns 3)
-                                "Info-mode"
-                                ("?" Info-summary "summary")
-                                ("]" Info-forward-node "forward")
-                                ("[" Info-backward-node "backward")
-                                ("<" Info-top-node "top node")
-                                (">" Info-final-node "final node")
-                                ("h" Info-help "help")
-                                ("d" Info-directory "info dir")
-                                ("f" Info-follow-reference "follow ref")
-                                ("g" Info-goto-node "goto node")
-                                ("l" Info-history-back "hist back")
-                                ("r" Info-history-forward "hist forward")
-                                ("i" Info-index "index")
-                                ("I" Info-virtual-index "virtual index")
-                                ("L" Info-history "hist")
-                                ("n" Info-next "next")
-                                ("p" Info-prev "previous")
-                                ("s" Info-search "search")
-                                ("S" Info-search-case-sensitively 
"case-search")
-                                ("T" Info-toc "TOC")
-                                ("u" Info-up "up")
-                                ("m" Info-menu "menu")
-                                ("t" hydra-info-to/body "info-to")))))))
-                 #("Info-mode:
-?: summary       ]: forward       [: backward
-<: top node      >: final node    h: help
-d: info dir      f: follow ref    g: goto node
-l: hist back     r: hist forward  i: index
-I: virtual index L: hist          n: next
-p: previous      s: search        S: case-search
-T: TOC           u: up            m: menu
-t: info-to"
-                   11 12 (face hydra-face-blue)
-                   28 29 (face hydra-face-blue)
-                   45 46 (face hydra-face-blue)
-                   57 58 (face hydra-face-blue)
-                   74 75 (face hydra-face-blue)
-                   91 92 (face hydra-face-blue)
-                   99 100 (face hydra-face-blue)
-                   116 117 (face hydra-face-blue)
-                   133 134 (face hydra-face-blue)
-                   146 147 (face hydra-face-blue)
-                   163 164 (face hydra-face-blue)
-                   180 181 (face hydra-face-blue)
-                   189 190 (face hydra-face-blue)
-                   206 207 (face hydra-face-blue)
-                   223 224 (face hydra-face-blue)
-                   231 232 (face hydra-face-blue)
-                   248 249 (face hydra-face-blue)
-                   265 266 (face hydra-face-blue)
-                   280 281 (face hydra-face-blue)
-                   297 298 (face hydra-face-blue)
-                   314 315 (face hydra-face-blue)
-                   322 323 (face hydra-face-blue)))))
-
-;; checked:
-;; basic rendering
-;; column compatibility with ruby style and no colum specified
-;; column declared several time
-;; nil column
-(ert-deftest hydra-column-basic ()
-  (should (equal (eval
-                  (cadr
-                   (nth 2
-                        (nth 3
-                             (macroexpand
-                              '(defhydra hydra-rectangle (:body-pre 
(rectangle-mark-mode 1)
-                                                                    :color pink
-                                                                    :post 
(deactivate-mark))
-                                 "
-  ^_k_^         ()()
-_h_   _l_       (O)(o)
-  ^_j_^         (  O )
-^^^^            (’’)(’’)
-^^^^
-"
-                                 ("h" backward-char nil)
-                                 ("l" forward-char nil)
-                                 ("k" previous-line nil)
-                                 ("j" next-line nil)
-                                 ("Of" 5x5 "outside of table 1")
-                                 ("e" exchange-point-and-mark "exchange" 
:column "firstcol")
-                                 ("n" copy-rectangle-as-kill "new-copy")
-                                 ("d" delete-rectangle "delete")
-                                 ("r" (if (region-active-p)
-                                          (deactivate-mark)
-                                        (rectangle-mark-mode 1)) "reset" 
:column "secondcol")
-                                 ("y" yank-rectangle "yank")
-                                 ("u" undo "undo")
-                                 ("s" string-rectangle "string")
-                                 ("p" kill-rectangle "paste")
-                                 ("o" nil "ok" :column "firstcol")
-                                 ("Os" 5x5-bol "outside of table 2" :column 
nil)
-                                 ("Ot" 5x5-eol "outside of table 3")))))))
-                 #("  k         ()()
-h   l       (O)(o)
-  j         (  O )
-            (’’)(’’)
-
-
-firstcol    | secondcol
------------ | ------------
-e: exchange | r: reset
-n: new-copy | y: yank
-d: delete   | u: undo
-o: ok       | s: string
-            | p: paste
-[Of]: outside of table 1, [Os]: outside of table 2, [Ot]: outside of table 3."
-                   2 3 (face hydra-face-pink)
-                   17 18 (face hydra-face-pink)
-                   21 22 (face hydra-face-pink)
-                   38 39 (face hydra-face-pink)
-                   129 130 (face hydra-face-pink)
-                   143 144 (face hydra-face-pink)
-                   152 153 (face hydra-face-pink)
-                   166 167 (face hydra-face-pink)
-                   174 175 (face hydra-face-pink)
-                   188 189 (face hydra-face-pink)
-                   196 197 (face hydra-face-blue)
-                   210 211 (face hydra-face-pink)
-                   234 235 (face hydra-face-pink)
-                   244 246 (face hydra-face-pink)
-                   270 272 (face hydra-face-pink)
-                   296 298 (face hydra-face-pink)))))
-
-;; check column order is the same as they appear in defhydra
-(ert-deftest hydra-column-order ()
-  (should (equal (eval
-                  (cadr
-                   (nth 2
-                        (nth 3
-                             (macroexpand
-                              '(defhydra hydra-window-order
-                                 (:color red :hint nil :timeout 4)
-                                 ("z" ace-window "ace" :color blue :column 
"Switch")
-                                 ("h" windmove-left "← window")
-                                 ("j" windmove-down "↓ window")
-                                 ("l" windmove-right "→ window")
-                                 ("s" split-window-below "split window" :color 
blue :column "Split Management")
-                                 ("v" split-window-right "split window 
vertically" :color blue)
-                                 ("d" delete-window "delete current window")
-                                 ("f" follow-mode "toogle follow mode")
-                                 ("u" winner-undo "undo window conf" :column 
"Undo/Redo")
-                                 ("r" winner-redo "redo window conf")
-                                 ("b" balance-windows "balance window height" 
:column "1-Sizing")
-                                 ("m" maximize-window "maximize current 
window")
-                                 ("k" windmove-up "↑ window" :column "Switch")
-                                 ("M" minimize-window "maximize current 
window" :column "1-Sizing")
-                                 ("q" nil "quit menu" :color blue :column 
nil)))))))
-                 #("hydra:
-Switch      | Split Management           | Undo/Redo           | 1-Sizing
------------ | -------------------------- | ------------------- | 
--------------------------
-z: ace      | s: split window            | u: undo window conf | b: balance 
window height
-h: ← window | v: split window vertically | r: redo window conf | m: maximize 
current window
-j: ↓ window | d: delete current window   |                     | M: maximize 
current window
-l: → window | f: toogle follow mode      |                     |
-k: ↑ window |                            |                     |
-[q]: quit menu."
-                   173 174 (face hydra-face-blue)
-                   187 188 (face hydra-face-blue)
-                   216 217 (face hydra-face-red)
-                   238 239 (face hydra-face-red)
-                   263 264 (face hydra-face-red)
-                   277 278 (face hydra-face-blue)
-                   306 307 (face hydra-face-red)
-                   328 329 (face hydra-face-red)
-                   355 356 (face hydra-face-red)
-                   369 370 (face hydra-face-red)
-                   420 421 (face hydra-face-red)
-                   447 448 (face hydra-face-red)
-                   461 462 (face hydra-face-red)
-                   512 513 (face hydra-face-red)
-                   578 579 (face hydra-face-blue)))))
-
-(provide 'hydra-test)
-
-;;; hydra-test.el ends here
diff --git a/packages/hydra/hydra.el b/packages/hydra/hydra.el
deleted file mode 100644
index c837e0f..0000000
--- a/packages/hydra/hydra.el
+++ /dev/null
@@ -1,1405 +0,0 @@
-;;; hydra.el --- Make bindings that stick around. -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel <ohwoeowho@gmail.com>
-;; Maintainer: Oleh Krehel <ohwoeowho@gmail.com>
-;; URL: https://github.com/abo-abo/hydra
-;; Version: 0.14.0
-;; Keywords: bindings
-;; Package-Requires: ((cl-lib "0.5"))
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This package can be used to tie related commands into a family of
-;; short bindings with a common prefix - a Hydra.
-;;
-;; Once you summon the Hydra (through the prefixed binding), all the
-;; heads can be called in succession with only a short extension.
-;; The Hydra is vanquished once Hercules, any binding that isn't the
-;; Hydra's head, arrives.  Note that Hercules, besides vanquishing the
-;; Hydra, will still serve his orignal purpose, calling his proper
-;; command.  This makes the Hydra very seamless, it's like a minor
-;; mode that disables itself automagically.
-;;
-;; Here's an example Hydra, bound in the global map (you can use any
-;; keymap in place of `global-map'):
-;;
-;;     (defhydra hydra-zoom (global-map "<f2>")
-;;       "zoom"
-;;       ("g" text-scale-increase "in")
-;;       ("l" text-scale-decrease "out"))
-;;
-;; It allows to start a command chain either like this:
-;; "<f2> gg4ll5g", or "<f2> lgllg".
-;;
-;; Here's another approach, when you just want a "callable keymap":
-;;
-;;     (defhydra hydra-toggle (:color blue)
-;;       "toggle"
-;;       ("a" abbrev-mode "abbrev")
-;;       ("d" toggle-debug-on-error "debug")
-;;       ("f" auto-fill-mode "fill")
-;;       ("t" toggle-truncate-lines "truncate")
-;;       ("w" whitespace-mode "whitespace")
-;;       ("q" nil "cancel"))
-;;
-;; This binds nothing so far, but if you follow up with:
-;;
-;;     (global-set-key (kbd "C-c C-v") 'hydra-toggle/body)
-;;
-;; you will have bound "C-c C-v a", "C-c C-v d" etc.
-;;
-;; Knowing that `defhydra' defines e.g. `hydra-toggle/body' command,
-;; you can nest Hydras if you wish, with `hydra-toggle/body' possibly
-;; becoming a blue head of another Hydra.
-;;
-;; If you want to learn all intricacies of using `defhydra' without
-;; having to figure it all out from this source code, check out the
-;; wiki: https://github.com/abo-abo/hydra/wiki. There's a wealth of
-;; information there. Everyone is welcome to bring the existing pages
-;; up to date and add new ones.
-;;
-;; Additionally, the file hydra-examples.el serves to demo most of the
-;; functionality.
-
-;;; Code:
-;;* Requires
-(require 'cl-lib)
-(require 'lv)
-(require 'ring)
-
-(defvar hydra-curr-map nil
-  "The keymap of the current Hydra called.")
-
-(defvar hydra-curr-on-exit nil
-  "The on-exit predicate for the current Hydra.")
-
-(defvar hydra-curr-foreign-keys nil
-  "The current :foreign-keys behavior.")
-
-(defvar hydra-curr-body-fn nil
-  "The current hydra-.../body function.")
-
-(defvar hydra-deactivate nil
-  "If a Hydra head sets this to t, exit the Hydra.
-This will be done even if the head wasn't designated for exiting.")
-
-(defvar hydra-amaranth-warn-message "An amaranth Hydra can only exit through a 
blue head"
-  "Amaranth Warning message.  Shown when the user tries to press an 
unbound/non-exit key while in an amaranth head.")
-
-(defun hydra-set-transient-map (keymap on-exit &optional foreign-keys)
-  "Set KEYMAP to the highest priority.
-
-Call ON-EXIT when the KEYMAP is deactivated.
-
-FOREIGN-KEYS determines the deactivation behavior, when a command
-that isn't in KEYMAP is called:
-
-nil: deactivate KEYMAP and run the command.
-run: keep KEYMAP and run the command.
-warn: keep KEYMAP and issue a warning instead of running the command."
-  (if hydra-deactivate
-      (hydra-keyboard-quit)
-    (setq hydra-curr-map keymap)
-    (setq hydra-curr-on-exit on-exit)
-    (setq hydra-curr-foreign-keys foreign-keys)
-    (add-hook 'pre-command-hook 'hydra--clearfun)
-    (internal-push-keymap keymap 'overriding-terminal-local-map)))
-
-(defun hydra--clearfun ()
-  "Disable the current Hydra unless `this-command' is a head."
-  (unless (eq this-command 'hydra-pause-resume)
-    (when (or
-           (memq this-command '(handle-switch-frame
-                                keyboard-quit))
-           (null overriding-terminal-local-map)
-           (not (or (eq this-command
-                        (lookup-key hydra-curr-map (this-single-command-keys)))
-                    (cl-case hydra-curr-foreign-keys
-                      (warn
-                       (setq this-command 'hydra-amaranth-warn))
-                      (run
-                       t)
-                      (t nil)))))
-      (hydra-disable))))
-
-(defvar hydra--ignore nil
-  "When non-nil, don't call `hydra-curr-on-exit'.")
-
-(defvar hydra--input-method-function nil
-  "Store overridden `input-method-function' here.")
-
-(defun hydra-disable ()
-  "Disable the current Hydra."
-  (setq hydra-deactivate nil)
-  (remove-hook 'pre-command-hook 'hydra--clearfun)
-  (unless hydra--ignore
-    (if (fboundp 'remove-function)
-        (remove-function input-method-function #'hydra--imf)
-      (when hydra--input-method-function
-        (setq input-method-function hydra--input-method-function)
-        (setq hydra--input-method-function nil))))
-  (dolist (frame (frame-list))
-    (with-selected-frame frame
-      (when overriding-terminal-local-map
-        (internal-pop-keymap hydra-curr-map 'overriding-terminal-local-map))))
-  (unless hydra--ignore
-    (when hydra-curr-on-exit
-      (let ((on-exit hydra-curr-on-exit))
-        (setq hydra-curr-on-exit nil)
-        (funcall on-exit)))))
-
-(unless (fboundp 'internal-push-keymap)
-  (defun internal-push-keymap (keymap symbol)
-    (let ((map (symbol-value symbol)))
-      (unless (memq keymap map)
-        (unless (memq 'add-keymap-witness (symbol-value symbol))
-          (setq map (make-composed-keymap nil (symbol-value symbol)))
-          (push 'add-keymap-witness (cdr map))
-          (set symbol map))
-        (push keymap (cdr map))))))
-
-(unless (fboundp 'internal-pop-keymap)
-  (defun internal-pop-keymap (keymap symbol)
-    (let ((map (symbol-value symbol)))
-      (when (memq keymap map)
-        (setf (cdr map) (delq keymap (cdr map))))
-      (let ((tail (cddr map)))
-        (and (or (null tail) (keymapp tail))
-             (eq 'add-keymap-witness (nth 1 map))
-             (set symbol tail))))))
-
-(defun hydra-amaranth-warn ()
-  "Issue a warning that the current input was ignored."
-  (interactive)
-  (message hydra-amaranth-warn-message))
-
-;;* Customize
-(defgroup hydra nil
-  "Make bindings that stick around."
-  :group 'bindings
-  :prefix "hydra-")
-
-(defcustom hydra-is-helpful t
-  "When t, display a hint with possible bindings in the echo area."
-  :type 'boolean
-  :group 'hydra)
-
-(defcustom hydra-default-hint ""
-  "Default :hint property to use for heads when not specified in
-the body or the head."
-  :type 'sexp
-  :group 'hydra)
-
-(defcustom hydra-lv t
-  "When non-nil, `lv-message' (not `message') will be used to display hints."
-  :type 'boolean)
-
-(defcustom hydra-verbose nil
-  "When non-nil, hydra will issue some non essential style warnings."
-  :type 'boolean)
-
-(defcustom hydra-key-format-spec "%s"
-  "Default `format'-style specifier for _a_  syntax in docstrings.
-When nil, you can specify your own at each location like this: _ 5a_."
-  :type 'string)
-
-(defcustom hydra-doc-format-spec "%s"
-  "Default `format'-style specifier for ?a?  syntax in docstrings."
-  :type 'string)
-
-(defcustom hydra-look-for-remap nil
-  "When non-nil, hydra binding behaves as keymap binding with [remap].
-When calling a head with a simple command, hydra will lookup for a potential
-remap command according to the current active keymap and call it instead if
-found"
-  :type 'boolean)
-
-(make-obsolete-variable
- 'hydra-key-format-spec
- "Since the docstrings are aligned by hand anyway, this isn't very useful."
- "0.13.1")
-
-(defface hydra-face-red
-  '((t (:foreground "#FF0000" :bold t)))
-  "Red Hydra heads don't exit the Hydra.
-Every other command exits the Hydra."
-  :group 'hydra)
-
-(defface hydra-face-blue
-  '((((class color) (background light))
-     :foreground "#0000FF" :bold t)
-    (((class color) (background dark))
-     :foreground "#8ac6f2" :bold t))
-  "Blue Hydra heads exit the Hydra.
-Every other command exits as well.")
-
-(defface hydra-face-amaranth
-  '((t (:foreground "#E52B50" :bold t)))
-  "Amaranth body has red heads and warns on intercepting non-heads.
-Exitable only through a blue head.")
-
-(defface hydra-face-pink
-  '((t (:foreground "#FF6EB4" :bold t)))
-  "Pink body has red heads and runs intercepted non-heads.
-Exitable only through a blue head.")
-
-(defface hydra-face-teal
-  '((t (:foreground "#367588" :bold t)))
-  "Teal body has blue heads and warns on intercepting non-heads.
-Exitable only through a blue head.")
-
-;;* Fontification
-(defun hydra-add-font-lock ()
-  "Fontify `defhydra' statements."
-  (font-lock-add-keywords
-   'emacs-lisp-mode
-   '(("(\\(defhydra\\)\\_> +\\(.*?\\)\\_>"
-      (1 font-lock-keyword-face)
-      (2 font-lock-type-face))
-     ("(\\(defhydradio\\)\\_> +\\(.*?\\)\\_>"
-      (1 font-lock-keyword-face)
-      (2 font-lock-type-face)))))
-
-;;* Find Function
-(eval-after-load 'find-func
-  '(defadvice find-function-search-for-symbol
-    (around hydra-around-find-function-search-for-symbol-advice
-     (symbol type library) activate)
-    "Navigate to hydras with `find-function-search-for-symbol'."
-    ad-do-it
-    ;; The orignial function returns (cons (current-buffer) (point))
-    ;; if it found the point.
-    (unless (cdr ad-return-value)
-      (with-current-buffer (find-file-noselect library)
-        (let ((sn (symbol-name symbol)))
-          (when (and (null type)
-                     (string-match "\\`\\(hydra-[a-z-A-Z0-9]+\\)/\\(.*\\)\\'" 
sn)
-                     (re-search-forward (concat "(defhydra " (match-string 1 
sn))
-                                        nil t))
-            (goto-char (match-beginning 0)))
-          (cons (current-buffer) (point)))))))
-
-;;* Universal Argument
-(defvar hydra-base-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [?\C-u] 'hydra--universal-argument)
-    (define-key map [?-] 'hydra--negative-argument)
-    (define-key map [?0] 'hydra--digit-argument)
-    (define-key map [?1] 'hydra--digit-argument)
-    (define-key map [?2] 'hydra--digit-argument)
-    (define-key map [?3] 'hydra--digit-argument)
-    (define-key map [?4] 'hydra--digit-argument)
-    (define-key map [?5] 'hydra--digit-argument)
-    (define-key map [?6] 'hydra--digit-argument)
-    (define-key map [?7] 'hydra--digit-argument)
-    (define-key map [?8] 'hydra--digit-argument)
-    (define-key map [?9] 'hydra--digit-argument)
-    (define-key map [kp-0] 'hydra--digit-argument)
-    (define-key map [kp-1] 'hydra--digit-argument)
-    (define-key map [kp-2] 'hydra--digit-argument)
-    (define-key map [kp-3] 'hydra--digit-argument)
-    (define-key map [kp-4] 'hydra--digit-argument)
-    (define-key map [kp-5] 'hydra--digit-argument)
-    (define-key map [kp-6] 'hydra--digit-argument)
-    (define-key map [kp-7] 'hydra--digit-argument)
-    (define-key map [kp-8] 'hydra--digit-argument)
-    (define-key map [kp-9] 'hydra--digit-argument)
-    (define-key map [kp-subtract] 'hydra--negative-argument)
-    map)
-  "Keymap that all Hydras inherit.  See `universal-argument-map'.")
-
-(defun hydra--universal-argument (arg)
-  "Forward to (`universal-argument' ARG)."
-  (interactive "P")
-  (setq prefix-arg (if (consp arg)
-                       (list (* 4 (car arg)))
-                     (if (eq arg '-)
-                         (list -4)
-                       '(4)))))
-
-(defun hydra--digit-argument (arg)
-  "Forward to (`digit-argument' ARG)."
-  (interactive "P")
-  (let* ((char (if (integerp last-command-event)
-                   last-command-event
-                 (get last-command-event 'ascii-character)))
-         (digit (- (logand char ?\177) ?0)))
-    (setq prefix-arg (cond ((integerp arg)
-                            (+ (* arg 10)
-                               (if (< arg 0)
-                                   (- digit)
-                                 digit)))
-                           ((eq arg '-)
-                            (if (zerop digit)
-                                '-
-                              (- digit)))
-                           (t
-                            digit)))))
-
-(defun hydra--negative-argument (arg)
-  "Forward to (`negative-argument' ARG)."
-  (interactive "P")
-  (setq prefix-arg (cond ((integerp arg) (- arg))
-                         ((eq arg '-) nil)
-                         (t '-))))
-
-;;* Repeat
-(defvar hydra-repeat--prefix-arg nil
-  "Prefix arg to use with `hydra-repeat'.")
-
-(defvar hydra-repeat--command nil
-  "Command to use with `hydra-repeat'.")
-
-(defun hydra-repeat (&optional arg)
-  "Repeat last command with last prefix arg.
-When ARG is non-nil, use that instead."
-  (interactive "p")
-  (if (eq arg 1)
-      (unless (string-match "hydra-repeat$" (symbol-name last-command))
-        (setq hydra-repeat--command last-command)
-        (setq hydra-repeat--prefix-arg last-prefix-arg))
-    (setq hydra-repeat--prefix-arg arg))
-  (setq current-prefix-arg hydra-repeat--prefix-arg)
-  (funcall hydra-repeat--command))
-
-;;* Misc internals
-(defun hydra--callablep (x)
-  "Test if X is callable."
-  (or (functionp x)
-      (and (consp x)
-           (memq (car x) '(function quote)))))
-
-(defun hydra--make-callable (x)
-  "Generate a callable symbol from X.
-If X is a function symbol or a lambda, return it.  Otherwise, it
-should be a single statement.  Wrap it in an interactive lambda."
-  (cond ((or (symbolp x) (functionp x))
-         x)
-        ((and (consp x) (eq (car x) 'function))
-         (cadr x))
-        (t
-         `(lambda ()
-            (interactive)
-            ,x))))
-
-(defun hydra-plist-get-default (plist prop default)
-  "Extract a value from a property list.
-PLIST is a property list, which is a list of the form
-\(PROP1 VALUE1 PROP2 VALUE2...).
-
-Return the value corresponding to PROP, or DEFAULT if PROP is not
-one of the properties on the list."
-  (if (memq prop plist)
-      (plist-get plist prop)
-    default))
-
-(defun hydra--head-property (h prop &optional default)
-  "Return for Hydra head H the value of property PROP.
-Return DEFAULT if PROP is not in H."
-  (hydra-plist-get-default (cl-cdddr h) prop default))
-
-(defun hydra--head-set-property (h prop value)
-  "In hydra Head H, set a property PROP to the value VALUE."
-  (cons (car h) (plist-put (cdr h) prop value)))
-
-(defun hydra--head-has-property (h prop)
-  "Return non nil if heads H has the property PROP."
-  (plist-member (cdr h) prop))
-
-(defun hydra--body-foreign-keys (body)
-  "Return what BODY does with a non-head binding."
-  (or
-   (plist-get (cddr body) :foreign-keys)
-   (let ((color (plist-get (cddr body) :color)))
-     (cl-case color
-       ((amaranth teal) 'warn)
-       (pink 'run)))))
-
-(defun hydra--body-exit (body)
-  "Return the exit behavior of BODY."
-  (or
-   (plist-get (cddr body) :exit)
-   (let ((color (plist-get (cddr body) :color)))
-     (cl-case color
-       ((blue teal) t)
-       (t nil)))))
-
-(defalias 'hydra--imf #'list)
-
-(defun hydra-default-pre ()
-  "Default setup that happens in each head before :pre."
-  (when (eq input-method-function 'key-chord-input-method)
-    (if (fboundp 'add-function)
-        (add-function :override input-method-function #'hydra--imf)
-      (unless hydra--input-method-function
-        (setq hydra--input-method-function input-method-function)
-        (setq input-method-function nil)))))
-
-(defvar hydra-timeout-timer (timer-create)
-  "Timer for `hydra-timeout'.")
-
-(defvar hydra-message-timer (timer-create)
-  "Timer for the hint.")
-
-(defvar hydra--work-around-dedicated t
-  "When non-nil, assume there's no bug in `pop-to-buffer'.
-`pop-to-buffer' should not select a dedicated window.")
-
-(defun hydra-keyboard-quit ()
-  "Quitting function similar to `keyboard-quit'."
-  (interactive)
-  (hydra-disable)
-  (cancel-timer hydra-timeout-timer)
-  (cancel-timer hydra-message-timer)
-  (setq hydra-curr-map nil)
-  (unless (and hydra--ignore
-               (null hydra--work-around-dedicated))
-    (if hydra-lv
-        (lv-delete-window)
-      (message "")))
-  nil)
-
-(defvar hydra-head-format "[%s]: "
-  "The formatter for each head of a plain docstring.")
-
-(defvar hydra-key-doc-function 'hydra-key-doc-function-default
-  "The function for formatting key-doc pairs.")
-
-(defun hydra-key-doc-function-default (key key-width doc doc-width)
-  "Doc"
-  (cond
-   ((equal key " ") (format (format "%%-%ds" (+ 3 key-width doc-width)) doc))
-   (t (format (format "%%%ds: %%%ds" key-width (- -1 doc-width)) key doc))))
-
-(defun hydra--to-string (x)
-  (if (stringp x)
-      x
-    (eval x)))
-
-(defun hydra--hint-heads-wocol (body heads)
-  "Generate a hint for the echo area.
-BODY, and HEADS are parameters to `defhydra'.
-Works for heads without a property :column."
-  (let (alist)
-    (dolist (h heads)
-      (let ((val (assoc (cadr h) alist))
-            (pstr (hydra-fontify-head h body)))
-        (unless (null (cl-caddr h))
-          (if val
-              (setf (cadr val)
-                    (concat (cadr val) " " pstr))
-            (push
-             (cons (cadr h)
-                   (cons pstr (cl-caddr h)))
-             alist)))))
-    (let ((keys (nreverse (mapcar #'cdr alist)))
-          (n-cols (plist-get (cddr body) :columns))
-          res)
-      (setq res
-            (if n-cols
-                (let ((n-rows (1+ (/ (length keys) n-cols)))
-                      (max-key-len (apply #'max (mapcar (lambda (x) (length 
(car x))) keys)))
-                      (max-doc-len (apply #'max (mapcar (lambda (x)
-                                                          (length 
(hydra--to-string (cdr x)))) keys))))
-                  `(concat
-                    "\n"
-                    (mapconcat #'identity
-                               (mapcar
-                                (lambda (x)
-                                  (mapconcat
-                                   (lambda (y)
-                                     (and y
-                                          (funcall hydra-key-doc-function
-                                                   (car y)
-                                                   ,max-key-len
-                                                   (hydra--to-string (cdr y))
-                                                   ,max-doc-len))) x ""))
-                                ',(hydra--matrix keys n-cols n-rows))
-                               "\n")))
-
-
-              `(concat
-                (mapconcat
-                 (lambda (x)
-                   (let ((str (hydra--to-string (cdr x))))
-                     (format
-                      (if (> (length str) 0)
-                          (concat hydra-head-format str)
-                        "%s")
-                      (car x))))
-                 ',keys
-                 ", ")
-                ,(if keys "." ""))))
-      (if (cl-every #'stringp
-                    (mapcar 'cddr alist))
-          (eval res)
-        res))))
-
-(defun hydra--hint (body heads)
-  "Generate a hint for the echo area.
-BODY, and HEADS are parameters to `defhydra'."
-  (let* ((sorted-heads (hydra--sort-heads (hydra--normalize-heads heads)))
-         (heads-w-col (cl-remove-if-not (lambda (heads) (hydra--head-property 
(nth 0 heads) :column)) sorted-heads))
-         (heads-wo-col (cl-remove-if (lambda (heads) (hydra--head-property 
(nth 0 heads) :column)) sorted-heads)))
-    (concat (when heads-w-col
-              (concat "\n" (hydra--hint-from-matrix body 
(hydra--generate-matrix heads-w-col))))
-            (when heads-wo-col
-              (hydra--hint-heads-wocol body (car heads-wo-col))))))
-
-(defvar hydra-fontify-head-function nil
-  "Possible replacement for `hydra-fontify-head-default'.")
-
-(defun hydra-fontify-head-default (head body)
-  "Produce a pretty string from HEAD and BODY.
-HEAD's binding is returned as a string with a colored face."
-  (let* ((foreign-keys (hydra--body-foreign-keys body))
-         (head-exit (hydra--head-property head :exit))
-         (head-color
-          (if head-exit
-              (if (eq foreign-keys 'warn)
-                  'teal
-                'blue)
-            (cl-case foreign-keys
-              (warn 'amaranth)
-              (run 'pink)
-              (t 'red)))))
-    (when (and (null (cadr head))
-               (not head-exit))
-      (hydra--complain "nil cmd can only be blue"))
-    (propertize
-     (replace-regexp-in-string "%" "%%" (car head))
-     'face
-     (or (hydra--head-property head :face)
-         (cl-case head-color
-           (blue 'hydra-face-blue)
-           (red 'hydra-face-red)
-           (amaranth 'hydra-face-amaranth)
-           (pink 'hydra-face-pink)
-           (teal 'hydra-face-teal)
-           (t (error "Unknown color for %S" head)))))))
-
-(defun hydra-fontify-head-greyscale (head _body)
-  "Produce a pretty string from HEAD and BODY.
-HEAD's binding is returned as a string wrapped with [] or {}."
-  (format
-   (if (hydra--head-property head :exit)
-       "[%s]"
-     "{%s}") (car head)))
-
-(defun hydra-fontify-head (head body)
-  "Produce a pretty string from HEAD and BODY."
-  (funcall (or hydra-fontify-head-function 'hydra-fontify-head-default)
-           head body))
-
-(defun hydra--strip-align-markers (str)
-  "Remove ^ from STR, unless they're escaped: \\^."
-  (let ((start 0))
-    (while (setq start (string-match "\\\\?\\^" str start))
-      (if (eq (- (match-end 0) (match-beginning 0)) 2)
-          (progn
-            (setq str (replace-match "^" nil nil str))
-            (cl-incf start))
-        (setq str (replace-match "" nil nil str))))
-    str))
-
-(defvar hydra-docstring-keys-translate-alist
-  '(("↑" . "<up>")
-    ("↓" . "<down>")
-    ("→" . "<right>")
-    ("←" . "<left>")
-    ("⌫" . "DEL")
-    ("⌦" . "<deletechar>")
-    ("⏎" . "RET")))
-
-(defconst hydra-width-spec-regex " ?-?[0-9]*?"
-  "Regex for the width spec in keys and %` quoted sexps.")
-
-(defvar hydra-key-regex "\\[\\|]\\|[-[:alnum:] 
~.,;:/|?<>={}*+#%@!&^↑↓←→⌫⌦⏎'`()\"$]+?"
-  "Regex for the key quoted in the docstring.")
-
-(defun hydra--format (_name body docstring heads)
-  "Generate a `format' statement from STR.
-\"%`...\" expressions are extracted into \"%S\".
-_NAME, BODY, DOCSTRING and HEADS are parameters of `defhydra'.
-The expressions can be auto-expanded according to NAME."
-  (setq docstring (hydra--strip-align-markers docstring))
-  (setq docstring (replace-regexp-in-string "___" "_β_" docstring))
-  (let ((rest (if (eq (plist-get (cddr body) :hint) 'none)
-                  ""
-                (hydra--hint body heads)))
-        (start 0)
-        varlist
-        offset)
-    (while (setq start
-                 (string-match
-                  (format
-                   "\\(?:%%\\( 
?-?[0-9]*s?\\)\\(`[a-z-A-Z/0-9]+\\|(\\)\\)\\|\\(?:[_?]\\(%s\\)\\(%s\\)[_?]\\)"
-                   hydra-width-spec-regex
-                   hydra-key-regex)
-                  docstring start))
-      (cond ((eq ?? (aref (match-string 0 docstring) 0))
-             (let* ((key (match-string 4 docstring))
-                    (head (assoc key heads)))
-               (if head
-                   (progn
-                     (push (nth 2 head) varlist)
-                     (setq docstring
-                           (replace-match
-                            (or
-                             hydra-doc-format-spec
-                             (concat "%" (match-string 3 docstring) "s"))
-                            t nil docstring)))
-                 (setq start (match-end 0))
-                 (warn "Unrecognized key: ?%s?" key))))
-            ((eq ?_ (aref (match-string 0 docstring) 0))
-             (let* ((key (match-string 4 docstring))
-                    (key (if (equal key "β") "_" key))
-                    normal-key
-                    (head (or (assoc key heads)
-                              (when (setq normal-key
-                                          (cdr (assoc
-                                                key 
hydra-docstring-keys-translate-alist)))
-                                (assoc normal-key heads)))))
-               (if head
-                   (progn
-                     (push (hydra-fontify-head (if normal-key
-                                                   (cons key (cdr head))
-                                                 head)
-                                               body)
-                           varlist)
-                     (let ((replacement
-                            (or
-                             hydra-key-format-spec
-                             (concat "%" (match-string 3 docstring) "s"))))
-                       (setq docstring
-                             (replace-match replacement t nil docstring))
-                       (setq start (+ start (length replacement)))))
-                 (setq start (match-end 0))
-                 (warn "Unrecognized key: _%s_" key))))
-
-            (t
-             (let* ((varp (if (eq ?` (aref (match-string 2 docstring) 0)) 1 0))
-                    (spec (match-string 1 docstring))
-                    (lspec (length spec)))
-               (setq offset
-                     (with-temp-buffer
-                       (insert (substring docstring (+ 1 start varp
-                                                       (length spec))))
-                       (goto-char (point-min))
-                       (push (read (current-buffer)) varlist)
-                       (- (point) (point-min))))
-               (when (or (zerop lspec)
-                         (/= (aref spec (1- (length spec))) ?s))
-                 (setq spec (concat spec "S")))
-               (setq docstring
-                     (concat
-                      (substring docstring 0 start)
-                      "%" spec
-                      (substring docstring (+ start offset 1 lspec varp))))))))
-    (if (eq ?\n (aref docstring 0))
-        `(concat (format ,(substring docstring 1) ,@(nreverse varlist))
-                 ,rest)
-      (let ((r `(replace-regexp-in-string
-                 " +$" ""
-                 (concat ,docstring ": "
-                         (replace-regexp-in-string
-                          "\\(%\\)" "\\1\\1" ,rest)))))
-        (if (stringp rest)
-            `(format ,(eval r))
-          `(format ,r))))))
-
-(defun hydra--complain (format-string &rest args)
-  "Forward to (`message' FORMAT-STRING ARGS) unless `hydra-verbose' is nil."
-  (if hydra-verbose
-      (apply #'error format-string args)
-    (apply #'message format-string args)))
-
-(defun hydra--doc (body-key body-name heads)
-  "Generate a part of Hydra docstring.
-BODY-KEY is the body key binding.
-BODY-NAME is the symbol that identifies the Hydra.
-HEADS is a list of heads."
-  (format
-   "Create a hydra with %s body and the heads:\n\n%s\n\n%s"
-   (if body-key
-       (format "a \"%s\"" body-key)
-     "no")
-   (mapconcat
-    (lambda (x)
-      (format "\"%s\":    `%S'" (car x) (cadr x)))
-    heads ",\n")
-   (format "The body can be accessed via `%S'." body-name)))
-
-(defun hydra--call-interactively-remap-maybe (cmd)
-  "`call-interactively' the given CMD or its remapped equivalent.
-Only when `hydra-look-for-remap' is non nil."
-  (let ((remapped-cmd (if hydra-look-for-remap
-                          (command-remapping `,cmd)
-                        nil)))
-    (if remapped-cmd
-        (call-interactively `,remapped-cmd)
-      (call-interactively `,cmd))))
-
-(defun hydra--call-interactively (cmd name)
-  "Generate a `call-interactively' statement for CMD.
-Set `this-command' to NAME."
-  (if (and (symbolp name)
-           (not (memq name '(nil body))))
-      `(progn
-         (setq this-command ',name)
-         (hydra--call-interactively-remap-maybe #',cmd))
-    `(hydra--call-interactively-remap-maybe #',cmd)))
-
-(defun hydra--make-defun (name body doc head
-                          keymap body-pre body-before-exit
-                          &optional body-after-exit)
-  "Make a defun wrapper, using NAME, BODY, DOC, HEAD, and KEYMAP.
-NAME and BODY are the arguments to `defhydra'.
-DOC was generated with `hydra--doc'.
-HEAD is one of the HEADS passed to `defhydra'.
-BODY-PRE is added to the start of the wrapper.
-BODY-BEFORE-EXIT will be called before the hydra quits.
-BODY-AFTER-EXIT is added to the end of the wrapper."
-  (let ((cmd-name (hydra--head-name head name))
-        (cmd (when (car head)
-               (hydra--make-callable
-                (cadr head))))
-        (doc (if (car head)
-                 (format "%s\n\nCall the head: `%S'." doc (cadr head))
-               doc))
-        (hint (intern (format "%S/hint" name)))
-        (body-foreign-keys (hydra--body-foreign-keys body))
-        (body-timeout (plist-get body :timeout))
-        (body-idle (plist-get body :idle)))
-    `(defun ,cmd-name ()
-       ,doc
-       (interactive)
-       (hydra-default-pre)
-       ,@(when body-pre (list body-pre))
-       ,@(if (hydra--head-property head :exit)
-             `((hydra-keyboard-quit)
-               (setq hydra-curr-body-fn ',(intern (format "%S/body" name)))
-               ,@(if body-after-exit
-                     `((unwind-protect
-                            ,(when cmd
-                               (hydra--call-interactively cmd (cadr head)))
-                         ,body-after-exit))
-                   (when cmd
-                     `(,(hydra--call-interactively cmd (cadr head))))))
-           (delq
-            nil
-            `((let ((hydra--ignore ,(not (eq (cadr head) 'body))))
-                (hydra-keyboard-quit)
-                (setq hydra-curr-body-fn ',(intern (format "%S/body" name))))
-              ,(when cmd
-                 `(condition-case err
-                      ,(hydra--call-interactively cmd (cadr head))
-                    ((quit error)
-                     (message (error-message-string err))
-                     (unless hydra-lv
-                       (sit-for 0.8)))))
-              ,(if (and body-idle (eq (cadr head) 'body))
-                   `(hydra-idle-message ,body-idle ,hint ',name)
-                 `(hydra-show-hint ,hint ',name))
-              (hydra-set-transient-map
-               ,keymap
-               (lambda () (hydra-keyboard-quit) ,body-before-exit)
-               ,(when body-foreign-keys
-                  (list 'quote body-foreign-keys)))
-              ,body-after-exit
-              ,(when body-timeout
-                 `(hydra-timeout ,body-timeout))))))))
-
-(defvar hydra-props-alist nil)
-
-(defun hydra-set-property (name key val)
-  "Set hydra property.
-NAME is the symbolic name of the hydra.
-KEY and VAL are forwarded to `plist-put'."
-  (let ((entry (assoc name hydra-props-alist))
-        plist)
-    (when (null entry)
-      (add-to-list 'hydra-props-alist (list name))
-      (setq entry (assoc name hydra-props-alist)))
-    (setq plist (cdr entry))
-    (setcdr entry (plist-put plist key val))))
-
-(defun hydra-get-property (name key)
-  "Get hydra property.
-NAME is the symbolic name of the hydra.
-KEY is forwarded to `plist-get'."
-  (let ((entry (assoc name hydra-props-alist)))
-    (when entry
-      (plist-get (cdr entry) key))))
-
-(defun hydra-show-hint (hint caller)
-  (let ((verbosity (plist-get (cdr (assoc caller hydra-props-alist))
-                              :verbosity)))
-    (cond ((eq verbosity 0))
-          ((eq verbosity 1)
-           (message (eval hint)))
-          (t
-           (when hydra-is-helpful
-             (if hydra-lv
-                 (lv-message (eval hint))
-               (message (eval hint))))))))
-
-(defmacro hydra--make-funcall (sym)
-  "Transform SYM into a `funcall' to call it."
-  `(when (and ,sym (symbolp ,sym))
-     (setq ,sym `(funcall #',,sym))))
-
-(defun hydra--head-name (h name)
-  "Return the symbol for head H of hydra with NAME."
-  (let ((str (format "%S/%s" name
-                     (cond ((symbolp (cadr h))
-                            (cadr h))
-                           ((and (consp (cadr h))
-                                 (eq (cl-caadr h) 'function))
-                            (cadr (cadr h)))
-                           (t
-                            (concat "lambda-" (car h)))))))
-    (when (and (hydra--head-property h :exit)
-               (not (memq (cadr h) '(body nil))))
-      (setq str (concat str "-and-exit")))
-    (intern str)))
-
-(defun hydra--delete-duplicates (heads)
-  "Return HEADS without entries that have the same CMD part.
-In duplicate HEADS, :cmd-name is modified to whatever they duplicate."
-  (let ((ali '(((hydra-repeat . nil) . hydra-repeat)))
-        res entry)
-    (dolist (h heads)
-      (if (setq entry (assoc (cons (cadr h)
-                                   (hydra--head-property h :exit))
-                             ali))
-          (setf (cl-cdddr h) (plist-put (cl-cdddr h) :cmd-name (cdr entry)))
-        (push (cons (cons (cadr h)
-                          (hydra--head-property h :exit))
-                    (plist-get (cl-cdddr h) :cmd-name))
-              ali)
-        (push h res)))
-    (nreverse res)))
-
-(defun hydra--pad (lst n)
-  "Pad LST with nil until length N."
-  (let ((len (length lst)))
-    (if (= len n)
-        lst
-      (append lst (make-list (- n len) nil)))))
-
-(defmacro hydra-multipop (lst n)
-  "Return LST's first N elements while removing them."
-  `(if (<= (length ,lst) ,n)
-       (prog1 ,lst
-         (setq ,lst nil))
-     (prog1 ,lst
-       (setcdr
-        (nthcdr (1- ,n) (prog1 ,lst (setq ,lst (nthcdr ,n ,lst))))
-        nil))))
-
-(defun hydra--matrix (lst rows cols)
-  "Create a matrix from elements of LST.
-The matrix size is ROWS times COLS."
-  (let ((ls (copy-sequence lst))
-        res)
-    (dotimes (_c cols)
-      (push (hydra--pad (hydra-multipop ls rows) rows) res))
-    (nreverse res)))
-
-(defun hydra--cell (fstr names)
-  "Format a rectangular cell based on FSTR and NAMES.
-FSTR is a format-style string with two string inputs: one for the
-doc and one for the symbol name.
-NAMES is a list of variables."
-  (let ((len (cl-reduce
-              (lambda (acc it) (max (length (symbol-name it)) acc))
-              names
-              :initial-value 0)))
-    (mapconcat
-     (lambda (sym)
-       (if sym
-           (format fstr
-                   (documentation-property sym 'variable-documentation)
-                   (let ((name (symbol-name sym)))
-                     (concat name (make-string (- len (length name)) ?^)))
-                   sym)
-         ""))
-     names
-     "\n")))
-
-(defun hydra--vconcat (strs &optional joiner)
-  "Glue STRS vertically.  They must be the same height.
-JOINER is a function similar to `concat'."
-  (setq joiner (or joiner #'concat))
-  (mapconcat
-   (lambda (s)
-     (if (string-match " +$" s)
-         (replace-match "" nil nil s)
-       s))
-   (apply #'cl-mapcar joiner
-          (mapcar
-           (lambda (s) (split-string s "\n"))
-           strs))
-   "\n"))
-
-(defvar hydra-cell-format "% -20s %% -8`%s"
-  "The default format for docstring cells.")
-
-(defun hydra--table (names rows cols &optional cell-formats)
-  "Format a `format'-style table from variables in NAMES.
-The size of the table is ROWS times COLS.
-CELL-FORMATS are `format' strings for each column.
-If CELL-FORMATS is a string, it's used for all columns.
-If CELL-FORMATS is nil, `hydra-cell-format' is used for all columns."
-  (setq cell-formats
-        (cond ((null cell-formats)
-               (make-list cols hydra-cell-format))
-              ((stringp cell-formats)
-               (make-list cols cell-formats))
-              (t
-               cell-formats)))
-  (hydra--vconcat
-   (cl-mapcar
-    #'hydra--cell
-    cell-formats
-    (hydra--matrix names rows cols))
-   (lambda (&rest x)
-     (mapconcat #'identity x "    "))))
-
-(defun hydra-reset-radios (names)
-  "Set varibles NAMES to their defaults.
-NAMES should be defined by `defhydradio' or similar."
-  (dolist (n names)
-    (set n (aref (get n 'range) 0))))
-
-;; Following functions deal with automatic docstring table generation from 
:column head property
-(defun hydra--normalize-heads (heads)
-  "Ensure each head from HEADS have a property :column.
-Set it to the same value as preceding head or nil if no previous value
-was defined."
-  (let ((current-col nil))
-    (mapcar (lambda (head)
-              (if (hydra--head-has-property head :column)
-                  (setq current-col (hydra--head-property head :column)))
-              (hydra--head-set-property head :column current-col))
-            heads)))
-
-(defun hydra--sort-heads (normalized-heads)
-  "Return a list of heads with non-nil doc grouped by column property.
-Each head of NORMALIZED-HEADS must have a column property."
-  (let* ((heads-wo-nil-doc (cl-remove-if-not (lambda (head) (nth 2 head)) 
normalized-heads))
-         (columns-list (delete-dups (mapcar (lambda (head) 
(hydra--head-property head :column))
-                                            normalized-heads)))
-         (get-col-index-fun (lambda (head) (cl-position (hydra--head-property 
head :column)
-                                                        columns-list
-                                                        :test 'equal)))
-         (heads-sorted (cl-sort heads-wo-nil-doc (lambda (it other)
-                                                   (< (funcall 
get-col-index-fun it)
-                                                      (funcall 
get-col-index-fun other))))))
-    ;; this operation partition the sorted head list into lists of heads with 
same column property
-    (cl-loop for head in heads-sorted
-       for column-name = (hydra--head-property head :column)
-       with prev-column-name = (hydra--head-property (nth 0 heads-sorted) 
:column)
-       unless (equal prev-column-name column-name) collect heads-one-column 
into heads-all-columns
-       and do (setq heads-one-column nil)
-       collect head into heads-one-column
-       do (setq prev-column-name column-name)
-       finally return (append heads-all-columns (list heads-one-column)))))
-
-(defun hydra--pad-heads (heads-groups padding-head)
-  "Return a copy of HEADS-GROUPS padded where applicable with PADDING-HEAD."
-  (cl-loop for heads-group in heads-groups
-     for this-head-group-length = (length heads-group)
-     with head-group-max-length = (apply #'max (mapcar (lambda (heads) (length 
heads)) heads-groups))
-     if (<= this-head-group-length head-group-max-length)
-     collect (append heads-group (make-list (- head-group-max-length 
this-head-group-length) padding-head))
-     into balanced-heads-groups
-     else collect heads-group into balanced-heads-groups
-     finally return balanced-heads-groups))
-
-(defun hydra--generate-matrix (heads-groups)
-  "Return a copy of HEADS-GROUPS decorated with table formating information.
-Details of modification:
-2 virtual heads acting as table header were added to each heads-group.
-Each head is decorated with 2 new properties max-doc-len and max-key-len
-representing the maximum dimension of their owning group.
- Every heads-group have equal length by adding padding heads where applicable."
-  (when heads-groups
-    (cl-loop for heads-group in (hydra--pad-heads heads-groups '(" " nil " " 
:exit t))
-             for column-name = (hydra--head-property (nth 0 heads-group) 
:column)
-             for max-key-len = (apply #'max (mapcar (lambda (x) (length (car 
x))) heads-group))
-             for max-doc-len = (apply #'max
-                                      (length column-name)
-                                      (mapcar (lambda (x) (length 
(hydra--to-string (nth 2 x)))) heads-group))
-             for header-virtual-head = `(" " nil ,column-name :column 
,column-name :exit t)
-             for separator-virtual-head = `(" " nil ,(make-string (+ 2 
max-doc-len max-key-len) ?-) :column ,column-name :exit t)
-             for decorated-heads = (copy-tree (apply 'list header-virtual-head 
separator-virtual-head heads-group))
-             collect (mapcar (lambda (it)
-                               (hydra--head-set-property it :max-key-len 
max-key-len)
-                               (hydra--head-set-property it :max-doc-len 
max-doc-len))
-                             decorated-heads)
-             into decorated-heads-matrix
-             finally return decorated-heads-matrix)))
-
-(defun hydra--hint-from-matrix (body heads-matrix)
-  "Generate a formated table-style docstring according to BODY and 
HEADS-MATRIX.
-HEADS-MATRIX is expected to be a list of heads with following features:
-Each heads must have the same length
-Each head must have a property max-key-len and max-doc-len."
-  (when heads-matrix
-    (cl-loop with first-heads-col = (nth 0 heads-matrix)
-             with last-row-index = (- (length first-heads-col) 1)
-             for row-index from 0 to last-row-index
-             for heads-in-row = (mapcar (lambda (heads) (nth row-index heads)) 
heads-matrix)
-             concat (concat
-                     (replace-regexp-in-string "\s+$" ""
-                                               (mapconcat (lambda (head)
-                                                            (funcall 
hydra-key-doc-function
-                                                                     
(hydra-fontify-head head body) ;; key
-                                                                     
(hydra--head-property head :max-key-len)
-                                                                     (nth 2 
head) ;; doc
-                                                                     
(hydra--head-property head :max-doc-len)))
-                                                          heads-in-row "| ")) 
"\n")
-             into matrix-image
-             finally return matrix-image)))
-;; previous functions dealt with automatic docstring table generation from 
:column head property
-
-(defun hydra-idle-message (secs hint name)
-  "In SECS seconds display HINT."
-  (cancel-timer hydra-message-timer)
-  (setq hydra-message-timer (timer-create))
-  (timer-set-time hydra-message-timer
-                  (timer-relative-time (current-time) secs))
-  (timer-set-function
-   hydra-message-timer
-   (lambda ()
-     (hydra-show-hint hint name)
-     (cancel-timer hydra-message-timer)))
-  (timer-activate hydra-message-timer))
-
-(defun hydra-timeout (secs &optional function)
-  "In SECS seconds call FUNCTION, then function `hydra-keyboard-quit'.
-Cancel the previous `hydra-timeout'."
-  (cancel-timer hydra-timeout-timer)
-  (setq hydra-timeout-timer (timer-create))
-  (timer-set-time hydra-timeout-timer
-                  (timer-relative-time (current-time) secs))
-  (timer-set-function
-   hydra-timeout-timer
-   `(lambda ()
-      ,(when function
-         `(funcall ,function))
-      (hydra-keyboard-quit)))
-  (timer-activate hydra-timeout-timer))
-
-;;* Macros
-;;;###autoload
-(defmacro defhydra (name body &optional docstring &rest heads)
-  "Create a Hydra - a family of functions with prefix NAME.
-
-NAME should be a symbol, it will be the prefix of all functions
-defined here.
-
-BODY has the format:
-
-    (BODY-MAP BODY-KEY &rest BODY-PLIST)
-
-DOCSTRING will be displayed in the echo area to identify the
-Hydra.  When DOCSTRING starts with a newline, special Ruby-style
-substitution will be performed by `hydra--format'.
-
-Functions are created on basis of HEADS, each of which has the
-format:
-
-    (KEY CMD &optional HINT &rest PLIST)
-
-BODY-MAP is a keymap; `global-map' is used quite often.  Each
-function generated from HEADS will be bound in BODY-MAP to
-BODY-KEY + KEY (both are strings passed to `kbd'), and will set
-the transient map so that all following heads can be called
-though KEY only.  BODY-KEY can be an empty string.
-
-CMD is a callable expression: either an interactive function
-name, or an interactive lambda, or a single sexp (it will be
-wrapped in an interactive lambda).
-
-HINT is a short string that identifies its head.  It will be
-printed beside KEY in the echo erea if `hydra-is-helpful' is not
-nil.  If you don't even want the KEY to be printed, set HINT
-explicitly to nil.
-
-The heads inherit their PLIST from BODY-PLIST and are allowed to
-override some keys.  The keys recognized are :exit and :bind.
-:exit can be:
-
-- nil (default): this head will continue the Hydra state.
-- t: this head will stop the Hydra state.
-
-:bind can be:
-- nil: this head will not be bound in BODY-MAP.
-- a lambda taking KEY and CMD used to bind a head.
-
-It is possible to omit both BODY-MAP and BODY-KEY if you don't
-want to bind anything.  In that case, typically you will bind the
-generated NAME/body command.  This command is also the return
-result of `defhydra'."
-  (declare (indent defun))
-  (setq heads (copy-tree heads))
-  (cond ((stringp docstring))
-        ((and (consp docstring)
-              (memq (car docstring) '(hydra--table concat format)))
-         (setq docstring (concat "\n" (eval docstring))))
-        (t
-         (setq heads (cons docstring heads))
-         (setq docstring "hydra")))
-  (when (keywordp (car body))
-    (setq body (cons nil (cons nil body))))
-  (condition-case-unless-debug err
-      (let* ((keymap (copy-keymap hydra-base-map))
-             (keymap-name (intern (format "%S/keymap" name)))
-             (body-name (intern (format "%S/body" name)))
-             (body-key (cadr body))
-             (body-plist (cddr body))
-             (body-map (or (car body)
-                           (plist-get body-plist :bind)))
-             (body-pre (plist-get body-plist :pre))
-             (body-body-pre (plist-get body-plist :body-pre))
-             (body-before-exit (or (plist-get body-plist :post)
-                                   (plist-get body-plist :before-exit)))
-             (body-after-exit (plist-get body-plist :after-exit))
-             (body-inherit (plist-get body-plist :inherit))
-             (body-foreign-keys (hydra--body-foreign-keys body))
-             (body-exit (hydra--body-exit body)))
-        (dolist (base body-inherit)
-          (setq heads (append heads (copy-sequence (eval base)))))
-        (dolist (h heads)
-          (let ((len (length h)))
-            (cond ((< len 2)
-                   (error "Each head should have at least two items: %S" h))
-                  ((= len 2)
-                   (setcdr (cdr h)
-                           (list
-                            (hydra-plist-get-default
-                             body-plist :hint hydra-default-hint)))
-                   (setcdr (nthcdr 2 h) (list :exit body-exit)))
-                  (t
-                   (let ((hint (cl-caddr h)))
-                     (unless (or (null hint)
-                                 (stringp hint)
-                                 (consp hint))
-                       (let ((inherited-hint
-                              (hydra-plist-get-default
-                               body-plist :hint hydra-default-hint)))
-                         (setcdr (cdr h) (cons
-                                          (if (eq 'none inherited-hint)
-                                              nil
-                                            inherited-hint)
-                                          (cddr h))))))
-                   (let ((hint-and-plist (cddr h)))
-                     (if (null (cdr hint-and-plist))
-                         (setcdr hint-and-plist (list :exit body-exit))
-                       (let* ((plist (cl-cdddr h))
-                              (h-color (plist-get plist :color)))
-                         (if h-color
-                             (progn
-                               (plist-put plist :exit
-                                          (cl-case h-color
-                                            ((blue teal) t)
-                                            (t nil)))
-                               (cl-remf (cl-cdddr h) :color))
-                           (let ((h-exit (hydra-plist-get-default plist :exit 
'default)))
-                             (plist-put plist :exit
-                                        (if (eq h-exit 'default)
-                                            body-exit
-                                          h-exit))))))))))
-          (plist-put (cl-cdddr h) :cmd-name (hydra--head-name h name))
-          (when (null (cadr h)) (plist-put (cl-cdddr h) :exit t)))
-        (let ((doc (hydra--doc body-key body-name heads))
-              (heads-nodup (hydra--delete-duplicates heads)))
-          (mapc
-           (lambda (x)
-             (define-key keymap (kbd (car x))
-               (plist-get (cl-cdddr x) :cmd-name)))
-           heads)
-          (hydra--make-funcall body-pre)
-          (hydra--make-funcall body-body-pre)
-          (hydra--make-funcall body-before-exit)
-          (hydra--make-funcall body-after-exit)
-          (when (memq body-foreign-keys '(run warn))
-            (unless (cl-some
-                     (lambda (h)
-                       (hydra--head-property h :exit))
-                     heads)
-              (error
-               "An %S Hydra must have at least one blue head in order to exit"
-               body-foreign-keys)))
-          `(progn
-             ;; create keymap
-             (set (defvar ,keymap-name
-                    nil
-                    ,(format "Keymap for %S." name))
-                  ',keymap)
-             ;; declare heads
-             (set (defvar ,(intern (format "%S/heads" name))
-                    nil
-                    ,(format "Heads for %S." name))
-                  ',(mapcar (lambda (h)
-                              (let ((j (copy-sequence h)))
-                                (cl-remf (cl-cdddr j) :cmd-name)
-                                j))
-                            heads))
-             (set
-              (defvar ,(intern (format "%S/hint" name)) nil
-                ,(format "Dynamic hint for %S." name))
-              ',(hydra--format name body docstring heads))
-             ;; create defuns
-             ,@(mapcar
-                (lambda (head)
-                  (hydra--make-defun name body doc head keymap-name
-                                     body-pre
-                                     body-before-exit
-                                     body-after-exit))
-                heads-nodup)
-             ;; free up keymap prefix
-             ,@(unless (or (null body-key)
-                           (null body-map)
-                           (hydra--callablep body-map))
-                 `((unless (keymapp (lookup-key ,body-map (kbd ,body-key)))
-                     (define-key ,body-map (kbd ,body-key) nil))))
-             ;; bind keys
-             ,@(delq nil
-                     (mapcar
-                      (lambda (head)
-                        (let ((name (hydra--head-property head :cmd-name)))
-                          (when (and (cadr head)
-                                     (or body-key body-map))
-                            (let ((bind (hydra--head-property head :bind 
body-map))
-                                  (final-key
-                                   (if body-key
-                                       (vconcat (kbd body-key) (kbd (car 
head)))
-                                     (kbd (car head)))))
-                              (cond ((null bind) nil)
-                                    ((hydra--callablep bind)
-                                     `(funcall ,bind ,final-key (function 
,name)))
-                                    ((and (symbolp bind)
-                                          (if (boundp bind)
-                                              (keymapp (symbol-value bind))
-                                            t))
-                                     `(define-key ,bind ,final-key (quote 
,name)))
-                                    (t
-                                     (error "Invalid :bind property `%S' for 
head %S" bind head)))))))
-                      heads))
-             ,(hydra--make-defun
-               name body doc '(nil body)
-               keymap-name
-               (or body-body-pre body-pre) body-before-exit
-               '(setq prefix-arg current-prefix-arg)))))
-    (error
-     (hydra--complain "Error in defhydra %S: %s" name (cdr err))
-     nil)))
-
-(defmacro defhydradio (name _body &rest heads)
-  "Create radios with prefix NAME.
-_BODY specifies the options; there are none currently.
-HEADS have the format:
-
-    (TOGGLE-NAME &optional VALUE DOC)
-
-TOGGLE-NAME will be used along with NAME to generate a variable
-name and a function that cycles it with the same name.  VALUE
-should be an array.  The first element of VALUE will be used to
-inialize the variable.
-VALUE defaults to [nil t].
-DOC defaults to TOGGLE-NAME split and capitalized."
-  (declare (indent defun))
-  `(progn
-     ,@(apply #'append
-              (mapcar (lambda (h)
-                        (hydra--radio name h))
-                      heads))
-     (defvar ,(intern (format "%S/names" name))
-       ',(mapcar (lambda (h) (intern (format "%S/%S" name (car h))))
-                 heads))))
-
-(defun hydra--radio (parent head)
-  "Generate a hydradio with PARENT from HEAD."
-  (let* ((name (car head))
-         (full-name (intern (format "%S/%S" parent name)))
-         (doc (cadr head))
-         (val (or (cl-caddr head) [nil t])))
-    `((defvar ,full-name ,(hydra--quote-maybe (aref val 0)) ,doc)
-      (put ',full-name 'range ,val)
-      (defun ,full-name ()
-        (hydra--cycle-radio ',full-name)))))
-
-(defun hydra--quote-maybe (x)
-  "Quote X if it's a symbol."
-  (cond ((null x)
-         nil)
-        ((symbolp x)
-         (list 'quote x))
-        (t
-         x)))
-
-(defun hydra--cycle-radio (sym)
-  "Set SYM to the next value in its range."
-  (let* ((val (symbol-value sym))
-         (range (get sym 'range))
-         (i 0)
-         (l (length range)))
-    (setq i (catch 'done
-              (while (< i l)
-                (if (equal (aref range i) val)
-                    (throw 'done (1+ i))
-                  (cl-incf i)))
-              (error "Val not in range for %S" sym)))
-    (set sym
-         (aref range
-               (if (>= i l)
-                   0
-                 i)))))
-
-(require 'ring)
-
-(defvar hydra-pause-ring (make-ring 10)
-  "Ring for paused hydras.")
-
-(defun hydra-pause-resume ()
-  "Quit the current hydra and save it to the stack.
-If there's no active hydra, pop one from the stack and call its body.
-If the stack is empty, call the last hydra's body."
-  (interactive)
-  (cond (hydra-curr-map
-         (ring-insert hydra-pause-ring hydra-curr-body-fn)
-         (hydra-keyboard-quit))
-        ((zerop (ring-length hydra-pause-ring))
-         (funcall hydra-curr-body-fn))
-        (t
-         (funcall (ring-remove hydra-pause-ring 0)))))
-
-;; Local Variables:
-;; outline-regexp: ";;\\([;*]+ [^\s\t\n]\\|###autoload\\)\\|("
-;; indent-tabs-mode: nil
-;; End:
-
-(provide 'hydra)
-
-;;; hydra.el ends here
diff --git a/packages/hydra/lv.el b/packages/hydra/lv.el
deleted file mode 100644
index 87f7e5e..0000000
--- a/packages/hydra/lv.el
+++ /dev/null
@@ -1,117 +0,0 @@
-;;; lv.el --- Other echo area
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This package provides `lv-message' intended to be used in place of
-;; `message' when semi-permanent hints are needed, in order to not
-;; interfere with Echo Area.
-;;
-;;    "Я тихо-тихо пiдглядаю,
-;;     І тiшуся собi, як бачу то,
-;;     Шо страшить i не пiдпускає,
-;;     А iншi п’ють тебе, як воду пiсок."
-;;     --  Андрій Кузьменко, L.V.
-
-;;; Code:
-
-(defgroup lv nil
-  "The other echo area."
-  :group 'minibuffer
-  :group 'hydra)
-
-(defcustom lv-use-separator nil
-  "Whether to draw a line between the LV window and the Echo Area."
-  :group 'lv
-  :type 'boolean)
-
-(defface lv-separator
-  '((((class color) (background light)) :background "grey80")
-    (((class color) (background  dark)) :background "grey30"))
-  "Face used to draw line between the lv window and the echo area.
-This is only used if option `lv-use-separator' is non-nil.
-Only the background color is significant."
-  :group 'lv)
-
-(defvar lv-wnd nil
-  "Holds the current LV window.")
-
-(defun lv-window ()
-  "Ensure that LV window is live and return it."
-  (if (window-live-p lv-wnd)
-      lv-wnd
-    (let ((ori (selected-window))
-          buf)
-      (prog1 (setq lv-wnd
-                   (select-window
-                    (let ((ignore-window-parameters t))
-                      (split-window
-                       (frame-root-window) -1 'below))))
-        (if (setq buf (get-buffer " *LV*"))
-            (switch-to-buffer buf)
-          (switch-to-buffer " *LV*")
-          (set-window-hscroll lv-wnd 0)
-          (setq window-size-fixed t)
-          (setq mode-line-format nil)
-          (setq cursor-type nil)
-          (set-window-dedicated-p lv-wnd t)
-          (set-window-parameter lv-wnd 'no-other-window t))
-        (select-window ori)))))
-
-(defvar golden-ratio-mode)
-
-(defvar lv-force-update nil
-  "When non-nil, `lv-message' will refresh even for the same string.")
-
-(defun lv-message (format-string &rest args)
-  "Set LV window contents to (`format' FORMAT-STRING ARGS)."
-  (let* ((str (apply #'format format-string args))
-         (n-lines (cl-count ?\n str))
-         deactivate-mark
-         golden-ratio-mode)
-    (with-selected-window (lv-window)
-      (unless (and (string= (buffer-string) str)
-                   (null lv-force-update))
-        (delete-region (point-min) (point-max))
-        (insert str)
-        (when (and (window-system) lv-use-separator)
-          (unless (looking-back "\n" nil)
-            (insert "\n"))
-          (insert
-           (propertize "__" 'face 'lv-separator 'display '(space :height (1)))
-           (propertize "\n" 'face 'lv-separator 'line-height t)))
-        (set (make-local-variable 'window-min-height) n-lines)
-        (setq truncate-lines (> n-lines 1))
-        (let ((window-resize-pixelwise t)
-              (window-size-fixed nil))
-          (fit-window-to-buffer nil nil 1)))
-      (goto-char (point-min)))))
-
-(defun lv-delete-window ()
-  "Delete LV window and kill its buffer."
-  (when (window-live-p lv-wnd)
-    (let ((buf (window-buffer lv-wnd)))
-      (delete-window lv-wnd)
-      (kill-buffer buf))))
-
-(provide 'lv)
-
-;;; lv.el ends here
diff --git a/packages/hydra/targets/hydra-init.el 
b/packages/hydra/targets/hydra-init.el
deleted file mode 100644
index 881ceb6..0000000
--- a/packages/hydra/targets/hydra-init.el
+++ /dev/null
@@ -1,27 +0,0 @@
-;;; hydra-test.el --- bare hydra init
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-(add-to-list 'load-path default-directory)
-(require 'hydra)
-(setq hydra-examples-verbatim t)
-(require 'hydra-examples)
-(require 'hydra-test)
-(mapc #'byte-compile-file '("hydra.el" "hydra-examples.el" "hydra-ox.el" 
"hydra-test.el" "lv.el"))
diff --git a/packages/load-relative/.gitignore 
b/packages/load-relative/.gitignore
deleted file mode 100644
index 98b3aa5..0000000
--- a/packages/load-relative/.gitignore
+++ /dev/null
@@ -1,17 +0,0 @@
-/*.elc
-/*~
-/Makefile
-/Makefile.in
-/README
-/aclocal.m4
-/autom4te.cache
-/config.log
-/config.status
-/configure
-/configure.lineno
-/elc-stamp
-/elc-temp
-/elpa
-/emacs-load-relative-*.tar.gz
-/install-sh
-/missing
diff --git a/packages/load-relative/.travis.yml 
b/packages/load-relative/.travis.yml
deleted file mode 100644
index 56d6285..0000000
--- a/packages/load-relative/.travis.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-language: emacs-lisp
-
-
-install:
-  - if [ "$EMACS" = 'emacs24' ]; then
-        sudo add-apt-repository -y ppa:cassou/emacs &&
-        sudo apt-get -qq update &&
-        sudo apt-get -qq -f install &&
-        sudo apt-get -qq install emacs24 emacs24-el;
-    fi
-
-env:
-  - EMACS=emacs24
-
-# run the tests
-script:
-  - /bin/bash ./autogen.sh && cd test && make check
diff --git a/packages/load-relative/AUTHORS b/packages/load-relative/AUTHORS
deleted file mode 100644
index fee42c0..0000000
--- a/packages/load-relative/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-Rocky Bernstein (rocky@gnu.org)
diff --git a/packages/load-relative/COPYING b/packages/load-relative/COPYING
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/load-relative/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 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.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  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, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public 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.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/load-relative/ChangeLog b/packages/load-relative/ChangeLog
deleted file mode 100644
index ff5aa1a..0000000
--- a/packages/load-relative/ChangeLog
+++ /dev/null
@@ -1,233 +0,0 @@
-2015-04-26  Stefan Monnier  <monnier@iro.umontreal.ca>
-
-       * load-relative.el (__FILE__): Mention the bytecomp-filename problem.
-       Fix other details mentioned by `checkdoc-current-buffer'.
-
-2010-09-30  rocky <rocky@gnu.org>
-
-       * .gitignore: git Administrivia.
-
-2010-09-30  rocky <rocky@gnu.org>
-
-       Merge branch 'master' of github.com:rocky/emacs-load-relative
-       Conflicts:      .gitignore
-
-2010-09-30  rocky <rocky@gnu.org>
-
-       * .gitignore, COPYING, Makefile.am, README, configure.ac:
-       Administrivia. Add COPYING, update README and .gitignore, bump
-       version number.
-
-2010-08-17  R. Bernstein <rocky@gnu.org>
-
-       * INSTALL: Customize more for emacs.
-
-2010-08-13  R. Bernstein <rocky@gnu.org>
-
-       * .gitignore, INSTALL: Make INSTALL less generic and more specific
-       to Emacs
-
-2010-07-25  rocky <rocky@gnu.org>
-
-       * AUTHORS, Makefile.am, configure.ac, load-relative.el: Add Emacs
-       Lisp Code Archive (ELCA) meta-comments.
-
-2010-03-08  rocky <rocky@gnu.org>
-
-       Merge branch 'master' of
-       git@github.com:rocky/emacs-load-relative
-
-2010-03-08  rocky <rocky@gnu.org>
-
-       * .gitignore: elisp-comp is now in the repository
-
-2009-12-18  rocky <rocky@gnu.org>
-
-       * .gitignore, autogen.sh, elisp-comp: Don't overwrigte elisp-comp.
-
-2009-12-18  rocky <rocky@gnu.org>
-
-       * autogen.sh: Add --enable-maintainer-mode to configure when running
-       autogen.sh
-
-2009-12-14  rocky <rocky@gnu.org>
-
-       Merge branch 'master' of
-       git@github.com:rocky/emacs-load-relative
-
-2009-12-13  rocky <rocky@gnu.org>
-
-       * test/behave.el, test/test-load.el, test/test-require-list.el: 
-       Remove local behave.el in favor of new installed package test-unit.
-
-
-2009-12-13  rocky <rocky@gnu.org>
-
-       * .gitignore, ChangeLog, Makefile.am, configure.ac: Administrivia.
-
-2009-12-13  rocky <rocky@gnu.org>
-
-       Merge branch 'master' of
-       git@github.com:rocky/emacs-load-relative
-
-2009-12-13  rocky <rocky@gnu.org>
-
-       * configure.ac: Fix package name typo.
-
-2009-12-13  rocky <rocky@gnu.org>
-
-       * Makefile.am: Include textile README in distribution tarball
-
-2009-12-12  rocky <rocky@gnu.org>
-
-       * README.textile: Reformat without line breaks
-
-2009-12-12  rocky <rocky@gnu.org>
-
-       * README.md, README.textile: Try textile for readme
-
-2009-12-12  rocky <rocky@gnu.org>
-
-       * README.md, README.redcloth: Try using .md extension for doc.
-
-2009-11-29  rocky <rocky@gnu.org>
-
-       * test/behave.el: Add assert-raises.
-
-2009-11-25  rocky <rocky@gnu.org>
-
-       * test/behave.el: behave.el: fix incorrect initialization on
-       *behave-total-assertions*.
-
-2009-11-24  rocky <rocky@gnu.org>
-
-       * test/behave.el: Show number of assertions run.
-
-2009-11-22  rocky <rocky@gnu.org>
-
-       * load-relative.el: Add provision for getting __FILE__ when we are
-       byte compiling.
-
-2009-11-22  rocky <rocky@gnu.org>
-
-       * load-relative.el, test/require-file2.el, test/require-file3.el,
-       test/test-load.el: Add optional prefix to require-relative,
-       require-relative and provide-me which will add that prefix to the
-       feature name.
-
-2009-11-22  rocky <rocky@gnu.org>
-
-       * test/test-load.el: Minimal test of provide-me.
-
-2009-11-22  rocky <rocky@gnu.org>
-
-       * load-relative.el: Doc string fix.
-
-2009-11-21  rocky <rocky@gnu.org>
-
-       * Makefile.am, README, README.redcloth: Turn README back into text.
-       Add special redcloth version.
-
-2009-11-21  rocky <rocky@gnu.org>
-
-       * README, README.markup: Nope changing the name made things worse.
-
-2009-11-21  rocky <rocky@gnu.org>
-
-       * README, README.markup: See if changing the name from README to
-       README.markup gives github a clue
-
-2009-11-21  rocky <rocky@gnu.org>
-
-       * README, load-relative.el: load-relative.el: Add provide-me and
-       make GPL v3. README: expand and turn into red-cloth markup.
-
-2009-11-19  R. Bernstein <rocky@gnu.org>
-
-       * test/test-load.el: Another test of (__FILE__). Make test-load more
-       eval-current'able.
-
-2009-11-19  R. Bernstein <rocky@gnu.org>
-
-       * test/test-load.el: Add first __FILE__ test.
-
-2009-11-17  R. Bernstein <rocky@gnu.org>
-
-       * load-relative.el: Bug: was not require-relative when not at
-       compile time.
-
-2009-11-15  rocky <rocky@gnu.org>
-
-       * load-relative.el: Working towards a more perfect __FILE__. Perhaps
-       I am flailing here. Need much better tests.
-
-2009-11-15  rocky <rocky@gnu.org>
-
-       * Makefile.am, load-relative.el, test/test-require-list.el: Add
-       macro to handle relative requires using a list. And use this list
-       eval-when-compile to remove the undefined function messages in
-       byte-compilation.
-
-2009-11-13  rocky <rocky@gnu.org>
-
-       * load-relative.el: Go over __FILE__ test ordering and more comments
-       to as to why we do what we do.
-
-2009-11-13  rocky <rocky@gnu.org>
-
-       * load-relative.el: Update __FILE__ docstring comment.
-
-2009-11-13  rocky <rocky@gnu.org>
-
-       * load-relative.el: Also try #$ - "the name of this file as a
-       string". Thanks due to grischka for the suggestion.
-
-2009-11-13  rocky <rocky@gnu.org>
-
-       * test/require-file1.el: Used in testing require-relative
-
-2009-11-13  rocky <rocky@gnu.org>
-
-       * load-relative.el, test/load-file2.el, test/test-load.el: 
-       load-relative.el: Use current-load-list to get loaded/eval'd file
-       name. It is perhaps is the most reliable but also the most low-level
-       and it is an undocumented API. Update doc strings to record what we
-       now understand. Allow an optional symbol -- just in case. Update
-       tests.
-
-2009-11-12  rocky <rocky@ubuntu-vm.(none)>
-
-       * test/behave.el, test/test-load.el: test-load.el: add a
-       require-relative test behave.el: sync up with emacs-dbgr - one bug
-       removed.
-
-2009-11-12  rocky <rocky@gnu.org>
-
-       * load-relative.el: Add require-relative.
-
-2009-11-12  rocky <rocky@gnu.org>
-
-       Merge branch 'master' of
-       git@github.com:rocky/emacs-load-relative  Conflicts:
-       load-relative.el
-
-2009-11-12  rocky <rocky@gnu.org>
-
-       * load-relative.el, test/test-load.el: Add require-relative.
-
-2009-11-10  R. Bernstein <rocky@gnu.org>
-
-       * load-relative.el, test/behave.el, test/test-load.el: test-load.el:
-       I think we need to expand the filename before calling load.
-       behave.el: reduce dependency on spec part.
-
-2009-11-09  rocky <rocky@gnu.org>
-
-       * load-relative.el, test/load-file1.el, test/test-load.el: Allow
-       load-relative to accept a list of strings of files to load.
-
-2009-11-09  rocky <rocky@gnu.org>
-
-       * Relative loads for Emacs Lisp files. Adds functions __FILE__ and
-       load-relative.
-
diff --git a/packages/load-relative/INSTALL b/packages/load-relative/INSTALL
deleted file mode 100644
index aaa3bf8..0000000
--- a/packages/load-relative/INSTALL
+++ /dev/null
@@ -1,246 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
-
-   Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.  This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
-   Briefly, the shell commands `./configure && make' should configure,
-and build this package.  If that succeeds `make install' will install
-the package. However on some systems you may need root privileges, you 
-may have use `sudo make install' or perhaps `su root' beforehand.
-
-Generic Information
-===================
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It also creates a shell script `config.status' that you can run in
-the future to recreate the current configuration, and a file
-`config.log' containing compiler output (useful mainly for debugging
-`configure').
-
-   The configure script can also use an optional file (typically
-called `config.cache' and enabled with `--cache-file=config.cache' or
-simply `-C') that saves the results of its tests to speed up
-reconfiguring.  Caching is disabled by default to prevent problems
-with accidental use of stale cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' is used to create `configure' by a program
-called `autoconf'.  You need `configure.ac' if you want to change it
-or regenerate `configure' using a newer version of `autoconf'.
-
-   The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package, generally using the just-built uninstalled binaries.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.  When installing into a prefix owned by root, it is
-     recommended that the package be configured and built as a regular
-     user, and only the `make install' phase executed with root
-     privileges.
-
-  5. You can remove the compiled Emacs Lisp files and other derived
-     files from the source code directory by typing `make clean'.  To
-     also remove the files that `configure' created (so you can
-     compile the package for a different kind of computer), type `make
-     distclean'.  There is also a `make maintainer-clean' target, but
-     that is intended mainly for the package's developers.  If you use
-     it, you may have to get all sorts of other programs in order to
-     regenerate files that came with the distribution.
-
-  6. You can also type `make uninstall' to remove the installed files
-     again.  
-
-  7. We don't provide `make distcheck' right now, but perhaps someday
-     we will. This is by used by developers to test that all other
-     targets like `make install' and `make uninstall' work correctly.
-     This target is generally not run by end users.
-
-Options
-=====================
-
-   Run `./configure --help' for details on the pertinent
-environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 EMACS=/usr/bin/emacs23-x
-
-   *Note Defining Variables::, for more details.
-
-Installation Names
-==================
-
-   By default, `make install' installs the package's emacs files under
-`/usr/local/share/emacs/site-lisp', You can specify an installation
-prefix other than `/usr/local/emacs/site-lisp' by giving `configure'
-the option `--with-site-lisp=PREFIX', where PREFIX must be an absolute
-file name.
-
-   The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
-having to reconfigure or recompile.
-
-   The first method involves providing an override variable for each
-affected directory.  For example, `make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-`${prefix}'.  Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated.  The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
-   The second method involves providing the `DESTDIR' variable.  For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names.  The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters.  On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
-
-Optional Features
-=================
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-   Some packages offer the ability to configure how verbose the
-execution of `make' will be.  For these packages, running `./configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
-
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure EMACS=/usr/bin/emacs23-x
-
-causes the specified `/usr/bin/emacs23-x' to be used as the Emacs program
-to use.
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
-
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
-
-`--help=short'
-`--help=recursive'
-     Print a summary of the options unique to this package's
-     `configure', and exit.  The `short' variant lists options used
-     only in the top level, while the `recursive' variant lists options
-     also present in any nested packages.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--prefix=DIR'
-     Use DIR as the installation prefix.  *note Installation Names::
-     for more details, including other options available for fine-tuning
-     the installation locations.
-
-`--no-create'
-`-n'
-     Run the configure checks, but stop before creating any output
-     files.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff --git a/packages/load-relative/Makefile.am 
b/packages/load-relative/Makefile.am
deleted file mode 100644
index 5706b3b..0000000
--- a/packages/load-relative/Makefile.am
+++ /dev/null
@@ -1,55 +0,0 @@
-lisp_files := $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-
-PHONY=check check-short clean dist distclean test
-
-EXTRA_DIST = $(lisp_files) $(test_files) README.md
-GIT2CL ?= git2cl
-
-#: Run all tests
-check: $(test-files)
-       $(MAKE) -C test check
-
-#: Run all tests with minimum verbosity
-check-short:
-       $(MAKE) -C test check 2>&1  | ruby test/make-check-filter.rb
-
-
-#: same as check
-test: check
-
-#: same as check-short
-test-short: check-short
-
-#: Read this first.
-README: README.md
-       ln -s README.md README
-
-if MAINTAINER_MODE
-
-CL = ChangeLog
-#: Create a log file from the individual commits via git2cl
-ChangeLog:
-       git log --pretty --numstat --summary | $(GIT2CL) > $@
-
-ACLOCAL_AMFLAGS=-I .
-
-endif
-
-CR_EXCEPTIONS=copyright_exceptions
-#: Check for GNU Copyrights.
-check_copyrights:
-       @echo "Compute exceptions >$(CR_EXCEPTIONS)~"
-       @export LANG=C;                                                 \
-       find . -name '.git' -prune -o -name '*.el' -print0 |            \
-           xargs -0 grep -L 'Free Software Foundation, Inc' |          \
-           grep -v '\(\.dir-locals\|.-\(pkg\|autoloads\)\)\.el$$';     \
-       find . -name '.git' -prune -o -name '*.el' -print |             \
-           while read f; do                                            \
-               fquoted="$$(echo $$f|tr '|' '_')";                      \
-               sed -n -e '/[Cc]opyright.*, *[1-9][-0-9]*,\?$$/N'       \
-                   -e '/Free Software Foundation/d'                    \
-                   -e "s|^\\(.*[Cc]opyright\\)|$$fquoted:\\1|p"        \
-                  "$$f";                                               \
-           done | sort >$(CR_EXCEPTIONS)~
-       diff -u "$(CR_EXCEPTIONS)" "$(CR_EXCEPTIONS)~"
diff --git a/packages/load-relative/NEWS b/packages/load-relative/NEWS
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/load-relative/README.md b/packages/load-relative/README.md
deleted file mode 100644
index 36afb3b..0000000
--- a/packages/load-relative/README.md
+++ /dev/null
@@ -1,133 +0,0 @@
-# Emacs multi-file develop/run-from-of-source routines
-
-The rational behind module is to be able to write small Emacs
-functions or modules in a larger multi-file Emacs package and
-facilitate running from the source tree without having to "install"
-the code or fiddle with evil *load-path*'s. See my [NYC Lisp 
talk](https://github.com/rocky/emacs-load-relative/wiki/NYC-Lisp-talk) for more 
background on this.
-
-
-## Contents ##
-
-* [\__FILE__](https://github.com/rocky/emacs-load-relative#file)
-* [load-relative](https://github.com/rocky/emacs-load-relative#load-relative)
-* 
[require-relative](https://github.com/rocky/emacs-load-relative#require-relative-require-relative-list)
-* [provide-me](https://github.com/rocky/emacs-load-relative#provide-me)
-
-The latest version is at http://github.com/rocky/emacs-load-relative
-
-## \__FILE__
-
-\__FILE__ returns the file name that that the calling program is
-running.  If you are *eval*'ing a buffer then the file name of that
-buffer is used. The name was selected to be analogous to the name used
-in C, Perl, and Ruby.
-
-For an common example of using this, see [How to Insert Demo Code into an 
Emacs Lisp 
Module](https://github.com/rocky/emacs-load-relative/wiki/How-to-Insert-Demo-Code-into-an-Emacs-Lisp-Module).
-
-## load-relative
-
-*load-relative* loads an Emacs Lisp file relative to another
- (presumably currently running) Emacs Lisp file. For example suppose
- you have Emacs Lisp files `foo.el` and `bar.el` in the same directory.
- To load Emacs Lisp file `bar.el` from inside Emacs lisp file `foo.el`:
-
-```lisp
-    (require 'load-relative)
-    (load-relative "baz")
-```
-
-That *load-relative* line could above have also been written as:
-
-```lisp
-   (load-relative "./baz")
-```
-
-or:
-
-```lisp
-   (load-relative "baz.el")  # if you want to exclude any byte-compiled files
-```
-
-## require-relative, require-relative-list
-
-Use *require-relative* if you want to *require* the file instead of
-*load*'ing it:
-
-```lisp
-   (require-relative "baz")
-```
-
-or:
-
-```lisp
-   (require-relative "./baz")
-```
-
-The above not only does a *require* on `'baz`, but makes sure you get
-that from the same file as you would have if you had issued
-*load_relative*.
-
-Use *require-relative-list* when you have a list of files you want to
-*require*. To *require-relative* them in one shot:
-
-```lisp
-   (require-relative-list '("dbgr-init" "dbgr-fringe"))
-```
-
-## provide-me
-
-The macro *provide-me* saves you the trouble of adding a symbol
-after *provide*, by using the file basename (without directory or file
-extension) as the name of the thing you want to provide. Using this
-forces the *provide* names to be the same as the filename, but I
-consider that a good thing.
-
-*provide-me* also takes an optional string which will be prepended to the 
provide name. This is useful if you have a multi-file package and want the 
files to be prefaced with the name of the package.
-
-Assume your package *foo* and contains simply file `foo.el`. Then
-adding:
-
-```lisp
-   (provide-me)
-```
-
-inside that file is the same thing as writing:
-
-```lisp
-   (provide 'foo)
-```
-
-Now suppose `foo.el` is part of a larger package called *bar*. Then if
-you write:
-
-```lisp
-   (provide-me "bar-")
-```
-
-this is the same as writing:
-
-```lisp
-   (provide 'bar-foo)
-```
-
-
-## find-file-noselect-relative
-
-The function *find-file-noselect-relative* provides a way of accessing
-resources which are located relative to the currently running Emacs lisp file.
-This is probably most useful when running Emacs as a scripting engine for
-batch processing or with tests cases.
-
-```lisp
-   (find-file-noselect-relative "README.md")
-```
-
-## with-relative-file
-
-The macro *with-relative-file* runs in a buffer with the contents of the given
-relative file.
-
-```lisp
-   (with-relative-file "README.md"
-     (buffer-substring))
-```
diff --git a/packages/load-relative/THANKS b/packages/load-relative/THANKS
deleted file mode 100644
index 60303e8..0000000
--- a/packages/load-relative/THANKS
+++ /dev/null
@@ -1,3 +0,0 @@
-Phil Lord - Contribute find-file-noselect-relative, and with-relative-file
-Lars Anderson - Melapa packaging, among other things
-Stefan Monnier <monnier@iro.umontreal.ca> - Elisp guidance
diff --git a/packages/load-relative/autogen.sh 
b/packages/load-relative/autogen.sh
deleted file mode 100755
index fce38da..0000000
--- a/packages/load-relative/autogen.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# An autoconf setup script.
-# From inside emacs, make sure test-simple is installed and then
-# Press C-x C-e at the end of the next line run this script
-# (test-simple-run "EMACSLOADPATH=%s ./autogen.sh"  (mapconcat 'identity 
load-path ":"))
-ln -fs README.md README
-touch common.mk
-autoreconf -vi && \
-autoconf && {
-  echo "Running configure with --enable-maintainer-mode $@"
-  ./configure --enable-maintainer-mode $@
-}
diff --git a/packages/load-relative/common.mk b/packages/load-relative/common.mk
deleted file mode 100644
index 26b6325..0000000
--- a/packages/load-relative/common.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-short:
-       $(MAKE) 2>&1 >/dev/null | ruby $(top_srcdir)/make-check-filter.rb
-
-%.short:
-       $(MAKE) $(@:.short=) 2>&1 >/dev/null
diff --git a/packages/load-relative/configure.ac 
b/packages/load-relative/configure.ac
deleted file mode 100644
index 489f120..0000000
--- a/packages/load-relative/configure.ac
+++ /dev/null
@@ -1,30 +0,0 @@
-AC_INIT(emacs-load-relative, 1.3.1,)
-AC_CONFIG_SRCDIR(load-relative.el)
-AM_INIT_AUTOMAKE([foreign])
-AM_MAINTAINER_MODE
-AM_MISSING_PROG(GIT2CL, git2cl, $missing_dir)
-
-AC_PATH_PROG(EMACS, emacs, no)
-AC_ARG_WITH(emacs, AC_HELP_STRING([--with-emacs],
-                  [location of emacs program]), EMACS=$withval)
-if test x$EMACS != xno ; then
-  $EMACS -batch -q -no-site-file -eval \
-  '(if (< emacs-major-version 23)
-     (progn
-       (error "You need GNU Emacs 23 or better for this package.")
-       (kill-emacs 1)
-     ))'
-  if test $? -ne 0 ; then
-    EMACS=no
-  fi
-fi
-
-
-##
-## Find out where to install the debugger emacs lisp files
-##
-AM_PATH_LISPDIR
-AM_CONDITIONAL(INSTALL_EMACS_LISP, test "x$lispdir" != "x")
-
-AC_CONFIG_FILES([Makefile test/Makefile])
-AC_OUTPUT
diff --git a/packages/load-relative/copyright_exceptions 
b/packages/load-relative/copyright_exceptions
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/load-relative/elisp-comp 
b/packages/load-relative/elisp-comp
deleted file mode 100755
index 263a26d..0000000
--- a/packages/load-relative/elisp-comp
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1995, 2000, 2003, 2004, 2005  Free Software Foundation, Inc.
-
-scriptversion=2009-11-26.09
-
-# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 
USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-case $1 in
-  '')
-     echo "$0: No files.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: elisp-comp [--help] [--version] FILES...
-
-This script byte-compiles all `.el' files listed as FILES using GNU
-Emacs, and put the resulting `.elc' files into the current directory,
-so disregarding the original directories used in `.el' arguments.
-
-This script manages in such a way that all Emacs LISP files to
-be compiled are made visible between themselves, in the event
-they require or load-library one another.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "elisp-comp $scriptversion"
-    exit $?
-    ;;
-esac
-
-if test -z "$EMACS" || test "$EMACS" = "t"; then
-  # Value of "t" means we are running in a shell under Emacs.
-  # Just assume Emacs is called "emacs".
-  EMACS=emacs
-fi
-
-tempdir=.
-
-# Cleanup the temporary directory on exit.
-# trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0
-trap 'ret=$?; rm -rf "./script" && exit $ret' 0
-trap '(exit $?); exit' 1 2 13 15
-
-(
-  cd $tempdir
-  echo "(setq load-path (cons nil load-path))" > script
-  $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $?
-  # mv *.elc ..
-) || exit $?
-
-(exit 0); exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/packages/load-relative/install-from-git.sh 
b/packages/load-relative/install-from-git.sh
deleted file mode 100755
index f36afa4..0000000
--- a/packages/load-relative/install-from-git.sh
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/bash
-
-# This installs all realgud and its prerequisites. If you are lucky
-# you can just run this:
-#
-#   bash ./install-from-git.sh
-#
-# However we do provide for some customization...
-#
-# 1. GIT PROTOCOL
-# ===============
-#
-# If your "git clone" can't handle the "http" protocol, you might be
-# able to use the "git" protocol. To do this set the GIT_PROTOCOL
-# variable like this:
-#
-#     GIT_PROTOCOL=git sh ./install-from-git.sh
-#
-# 2. configure options (e.g --prefix)
-# ====================================
-
-# If you want to customize configuration parameters, for example,
-# choose where to install, you can pass configure options to this
-# script. For example:# can pass configure options.
-#
-#     sh ./install-from-git.sh --prefix=/tmp
-#
-# 3. TO "sudo" or not to "sudo"?
-# ==============================
-# If you are running as root on a *Nix-like box, then there's no problem.
-#
-# If you are not running as root, "sudo" might be invoked to install
-# code.  On systems that don't have a "sudo" command but need
-# filesystem permission, then you get by with setting SUDO_CMD to "su root-c"
-# For example:
-#
-#    SUDO_CMD='su root -c' sh ./install-from-git.sh
-#
-# If you have sufficient filesystem permission (which is often the
-# case on Windows or cygwin) then you might not need or want sudo. So
-# here, set SUDO_CMD to a blank:
-#
-#      SUDO_CMD=' ' sh ./install-from-git.sh
-#
-#
-# To finish here is an invocation using all 3 above options:
-#   GIT_PROTOCOL='git' SUDO_CMD=' ' sh ./install-from-git.sh --prefix=/tmp
-
-GIT_PROTOCOL=${GIT_PROTOCOL:-http}
-
-# Run and echo a command
-run_cmd() {
-    echo "--- Running command: $@"
-    $@
-    rc=$?
-    echo "--- $@ exit status is $?"
-    return $rc
-}
-
-# environment variable SUDO_CMD could be "sudo" or "su root -c" or " "
-# for don't need sudo
-
-if (( $(id -u) != 0)) ; then
-    if [[ -z "$SUDO_CMD" ]] ; then
-       need_sudo='sudo'
-       if which $need_sudo >/dev/null 2>&1 ; then
-           try_cmd=''
-       else
-           need_sudo='su root -c'
-           try_cmd='su'
-       fi
-    else
-       need_sudo="$SUDO_CMD"
-    fi
-else
-    need_sudo=''
-    try_cmd=''
-fi
-
-for program in git make $need_sudo ; do
-    if ! which $program >/dev/null 2>&1 ; then
-       echo "Cant find program $program in $PATH"
-       exit 1
-    fi
-done
-
-for pkg in emacs-{test-simple,load-relative} ; do
-    echo '******************************************'
-    echo Trying to install ${pkg}...
-    echo '******************************************'
-    run_cmd git clone ${GIT_PROTOCOL}://github.com/rocky/${pkg}.git
-    (cd $pkg && \
-        run_cmd $SHELL ./autogen.sh && \
-       run_cmd ./configure $@ && \
-       run_cmd make && \
-       run_cmd make check && \
-        run_cmd $need_sudo make install
-    )
-done
diff --git a/packages/load-relative/load-relative.el 
b/packages/load-relative/load-relative.el
deleted file mode 100644
index e1a7bfe..0000000
--- a/packages/load-relative/load-relative.el
+++ /dev/null
@@ -1,310 +0,0 @@
-;;; load-relative.el --- Relative file load (within a multi-file Emacs 
package) -*- lexical-binding: t -*-
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-;; Version: 1.3.1
-;; Keywords: internal
-;; URL: http://github.com/rocky/emacs-load-relative
-;; Compatibility: GNU Emacs 23.x
-
-;; Copyright (C) 2015-2019 Free Software Foundation, Inc
-
-;; 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:
-
-;; Here we provide functions which facilitate writing multi-file Emacs
-;; packages and facilitate running from the source tree without having
-;; to "install" code or fiddle with evil `load-path'.  See
-;; https://github.com/rocky/emacs-load-relative/wiki/NYC-Lisp-talk for
-;; the the rationale behind this.
-;;
-;; The functions we add are relative versions of `load', `require' and
-;; `find-file-no-select' and versions which take list arguments.  We also add a
-;; `__FILE__' function and a `provide-me' macro.
-
-;; The latest version of this code is at:
-;;     http://github.com/rocky/emacs-load-relative/
-
-;; `__FILE__' returns the file name that that the calling program is
-;; running.  If you are `eval''ing a buffer then the file name of that
-;; buffer is used.  The name was selected to be analogous to the name
-;; used in C, Perl, Python, and Ruby.
-
-;; `load-relative' loads an Emacs Lisp file relative to another
-;; (presumably currently running) Emacs Lisp file.  For example suppose
-;; you have Emacs Lisp files "foo.el" and "bar.el" in the same
-;; directory.  To load "bar.el" from inside Emacs Lisp file "foo.el":
-;;
-;;     (require 'load-relative)
-;;     (load-relative "baz")
-;;
-;; The above `load-relative' line could above have also been written as:
-;;
-;;     (load-relative "./baz")
-;; or:
-;;     (load-relative "baz.el")  # if you want to exclude any byte-compiled 
files
-;;
-;; Use `require-relative' if you want to `require' the file instead of
-;; `load'ing it:
-;;
-;;    (require-relative "baz")
-;;
-;; or:
-;;
-;;    (require-relative "./baz")
-;;
-;; The above not only does a `require' on 'baz', but makes sure you
-;; get that from the same file as you would have if you had issued
-;; `load_relative'.
-;;
-;; Use `require-relative-list' when you have a list of files you want
-;; to `require'.  To `require-relative' them all in one shot:
-;;
-;;     (require-relative-list '("dbgr-init" "dbgr-fringe"))
-;;
-;; The macro `provide-me' saves you the trouble of adding a
-;; symbol after `provide' using the file basename (without directory
-;; or file extension) as the name of the thing you want to
-;; provide.
-;;
-;; Using this constrains the `provide' name to be the same as
-;; the filename, but I consider that a good thing.
-;;
-;; The function `find-file-noselect-relative' provides a way of accessing
-;; resources which are located relative to the currently running Emacs Lisp
-;; file.  This is probably most useful when running Emacs as a scripting engine
-;; for batch processing or with tests cases.  For example, this form will find
-;; the README file for this package.
-;;
-;;     (find-file-noselect-relative "README.md")
-;;
-;; `find-file-noselect-relative' also takes wildcards, as does it's
-;; non-relative namesake.
-;;
-;; The macro `with-relative-file' runs in a buffer with the contents of the
-;; given relative file.
-;;
-;;    (with-relative-file "README.md"
-;;      (buffer-substring))
-;;
-;; This is easier if you care about the contents of the file, rather than
-;; a buffer.
-
-;;; Code:
-
-;; Press C-x C-e at the end of the next line configure the program in GNU emacs
-;; for building via "make" to get set up.
-;; (compile (format "EMACSLOADPATH=:%s ./autogen.sh" "."))
-;; After that you can run:
-;; (compile "make check")
-
-;;;###autoload
-(defun __FILE__ (&optional symbol)
-  "Return the string name of file/buffer that is currently begin executed.
-
-The first approach for getting this information is perhaps the
-most pervasive and reliable.  But it the most low-level and not
-part of a public API, so it might change in future
-implementations.  This method uses the name that is recorded by
-readevalloop of `lread.c' as the car of variable
-`current-load-list'.
-
-Failing that, we use `load-file-name' which should work in some
-subset of the same places that the first method works.  However
-`load-file-name' will be nil for code that is eval'd.  To cover
-those cases, we try function `buffer-file-name' which is initially
-correct, for eval'd code, but will change and may be wrong if the
-code sets or switches buffers after the initial execution.
-
-As a last resort, you can pass in SYMBOL which should be some
-symbol that has been previously defined if none of the above
-methods work we will use the file-name value find via
-`symbol-file'."
-  ;; Not used right now:
-  ;; Failing the above the next approach we try is to use the value of
-  ;; $# - 'the name of this file as a string'. Although it doesn't
-  ;; work for eval-like things, it has the advantage that this value
-  ;; persists after loading or evaluating a file. So it would be
-  ;; suitable if __FILE__ were called from inside a function.
-
-  (cond
-
-   ;; lread.c's readevalloop sets (car current-load-list)
-   ;; via macro LOADHIST_ATTACH of lisp.h. At least in Emacs
-   ;; 23.0.91 and this code goes back to '93.
-   ((stringp (car-safe current-load-list)) (car current-load-list))
-
-   ;; load-like things. 'relative-file-expand' tests in
-   ;; test/test-load.el indicates we should put this ahead of
-   ;; $#.
-   (load-file-name)
-
-   ;; Pick up "name of this file as a string" which is set on
-   ;; reading and persists. In contrast, load-file-name is set only
-   ;; inside eval. As such, it won't work when not in the middle of
-   ;; loading.
-   ;; (#$)
-
-   ;; eval-like things
-   ((buffer-file-name))
-
-   ;; When byte compiling. FIXME: use a more thorough precondition like
-   ;; byte-compile-file is somehwere in the backtrace or that
-   ;; bytecomp-filename comes from that routine?
-   ;; FIXME: `bytecomp-filename' doesn't exist any more (since Emacs-24.1).
-   ((boundp 'bytecomp-filename) bytecomp-filename)
-
-   (t (symbol-file symbol) ;; last resort
-      )))
-
-(defun autoload-relative (function-or-list
-                          file &optional docstring interactive type
-                          symbol)
-  ;; FIXME: Docstring talks of FUNCTION but argname is `function-or-list'.
-  "Autoload an Emacs Lisp file relative to Emacs Lisp code that is in the 
process
-of being loaded or eval'd.
-
-
-Define FUNCTION to autoload from FILE.  FUNCTION is a symbol.
-
-FILE is a string to pass to `load'.
-
-DOCSTRING is documentation for the function.
-
-INTERACTIVE if non-nil says function can be called
-interactively.
-
-TYPE indicates the type of the object: nil or omitted says
-function is a function, `keymap' says function is really a
-keymap, and `macro' or t says function is really a macro.  Third
-through fifth args give info about the real definition.  They
-default to nil.  If function is already defined other than as an
-autoload, this does nothing and returns nil.
-
-SYMBOL is the location of of the file of where that was
-defined (as given by `symbol-file' is used if other methods of
-finding __FILE__ don't work."
-
-  (if (listp function-or-list)
-      ;; FIXME: This looks broken:
-      ;; - Shouldn't it iterate on `function-or-list' instead of `file'?
-      ;; - Shouldn't the `autoload' take `function' rather than
-      ;;   `function-or-list' as argument?
-      (mapc (lambda(_function)
-              (autoload function-or-list
-                (relative-expand-file-name file symbol)
-                docstring interactive type))
-              file)
-    (autoload function-or-list (relative-expand-file-name file symbol)
-      docstring interactive type))
-  )
-
-;;;###autoload
-(defun find-file-noselect-relative (filename &optional nowarn rawfile 
wildcards)
-  "Read relative FILENAME into a buffer and return the buffer.
-If a buffer exists visiting FILENAME, return that one, but
-verify that the file has not changed since visited or saved.
-The buffer is not selected, just returned to the caller.
-Optional second arg NOWARN non-nil means suppress any warning messages.
-Optional third arg RAWFILE non-nil means the file is read literally.
-Optional fourth arg WILDCARDS non-nil means do wildcard processing
-and visit all the matching files.  When wildcards are actually
-used and expanded, return a list of buffers that are visiting
-the various files."
-  (find-file-noselect (relative-expand-file-name filename)
-                      nowarn rawfile wildcards))
-
-;;;###autoload
-(defmacro with-relative-file (file &rest body)
-  "Read the relative FILE into a temporary buffer and evaluate BODY
-in this buffer."
-  (declare (indent 1) (debug t))
-  `(with-temp-buffer
-     (insert-file-contents
-      (relative-expand-file-name
-       ,file))
-     ,@body))
-
-;;;###autoload
-(defun load-relative (file-or-list &optional symbol)
-  "Load an Emacs Lisp file relative to Emacs Lisp code that is in
-the process of being loaded or eval'd.
-
-FILE-OR-LIST is either a string or a list of strings containing
-files that you want to loaded.  If SYMBOL is given, the location of
-of the file of where that was defined (as given by `symbol-file' is used
-if other methods of finding __FILE__ don't work."
-
-  (if (listp file-or-list)
-      (mapcar (lambda(relative-file)
-                (load (relative-expand-file-name relative-file symbol)))
-              file-or-list)
-    (load (relative-expand-file-name file-or-list symbol)))
-  )
-
-(defun relative-expand-file-name(relative-file &optional opt-file)
-  "Expand RELATIVE-FILE relative to the Emacs Lisp code that is in
-the process of being loaded or eval'd.
-
-WARNING: it is best to run this function before any
-buffer-setting or buffer changing operations."
-  (let ((file (or opt-file (__FILE__) default-directory))
-        (prefix))
-    (unless file
-      ;; FIXME: Since default-directory should basically never be nil, this
-      ;; should basically never trigger!
-      (error "Can't expand __FILE__ here and no file name given"))
-    (setq prefix (file-name-directory file))
-    (expand-file-name (concat prefix relative-file))))
-
-;;;###autoload
-(defun require-relative (relative-file &optional opt-file opt-prefix)
-  "Run `require' on an Emacs Lisp file relative to the Emacs Lisp code
-that is in the process of being loaded or eval'd.  The symbol used in require
-is the base file name (without directory or file extension) treated as a
-symbol.
-
-WARNING: it is best to to run this function before any
-buffer-setting or buffer changing operations."
-  (let ((require-string-name
-         (concat opt-prefix (file-name-sans-extension
-                             (file-name-nondirectory relative-file)))))
-    (require (intern require-string-name)
-             (relative-expand-file-name relative-file opt-file))))
-
-;;;###autoload
-(defmacro require-relative-list (list &optional opt-prefix)
-  "Run `require-relative' on each name in LIST which should be a list of
-strings, each string being the relative name of file you want to run."
-  `(eval-and-compile
-     (dolist (rel-file ,list)
-       (require-relative rel-file (__FILE__) ,opt-prefix))))
-
-;;;###autoload
-(defmacro provide-me ( &optional prefix )
-  "Call `provide' with the feature's symbol name made from
-source-code's file basename sans extension.  For example if you
-write (provide-me) inside file ~/lisp/foo.el, this is the same as
-writing: (provide \\='foo).
-
-With a prefix, that prefix is prepended to the `provide' So in
-the previous example, if you write (provide-me \"bar-\") this is the
-same as writing (provide \\='bar-foo)."
-  `(provide (intern (concat ,prefix (file-name-sans-extension
-                                     (file-name-nondirectory (__FILE__)))))))
-
-(provide-me)
-
-;;; load-relative.el ends here
diff --git a/packages/load-relative/test/.gitignore 
b/packages/load-relative/test/.gitignore
deleted file mode 100644
index ddeeca7..0000000
--- a/packages/load-relative/test/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/*~
-/Makefile
-/Makefile.in
diff --git a/packages/load-relative/test/Makefile.am 
b/packages/load-relative/test/Makefile.am
deleted file mode 100644
index 867723c..0000000
--- a/packages/load-relative/test/Makefile.am
+++ /dev/null
@@ -1,68 +0,0 @@
-include $(top_srcdir)/common.mk
-
-PHONY=check test all check-elget test-elget help
-
-#: same thing as check
-all: check
-
-#: overall help on running the make targets
-help:
-       @echo "The main function of this Makefile is to facilitate running 
tests."
-       @echo
-       @echo "To run all of the tests, use targets \"test\", \"check\" or 
\"check-short\"."
-       @echo "For example:"
-       @echo
-       @echo "    make check"
-       @echo "or:"
-       @echo "    make check-short"
-       @echo
-       @echo "The -short target uses a filter written in Ruby to remove 
extreanous output."
-       @echo
-       @echo "To run a specific test like test-srcbuf.el, change \".el\" to"
-       @echo "\".run\". For example:"
-       @echo
-       @echo "    make test-srcbuf.run"
-       @echo
-       @echo "Tests can also be run via the Emacs el-get package and this 
loads dependent emacs "
-       @echo "package, like load-relative. To do this, use targets, 
\"check-elget\","
-       @echo "\"test-elget\", or \"check-short-elget\"."
-       @echo
-       @echo  "To run a specific test like test-srcbuf.el via el-get change 
\".el\""
-       @echo "to \".elrun\" For example:"
-       @echo
-       @echo "    make test-srcbuf.elrun"
-
-#: same thing as "check"
-test: check
-
-test_files := $(wildcard test-*.el)
-
-CHECK_FILES = $(notdir $(test_files:.el=.run))
-EL_GET_CHECK_FILES = $(notdir $(test_files:.el=.elrun))
-
-#: Run all tests
-check: $(CHECK_FILES)
-
-#: Run all tests via el-get
-check-elget:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load ./install-pkgs.el --load test-load.el)
-
-#: Run all tests with minimum verbosity
-check-short:
-       $(MAKE) check 2>&1  | ruby ./make-check-filter.rb
-
-#: Run all tests with minimum verbosity via el-get
-check-short-elget:
-       $(MAKE) check-elget 2>&1  | ruby ./make-check-filter.rb
-
-test-%.run:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load $(@:.run=.el))
-
-#: Run tests getting external Lisp dependencies
-test-%.elrun:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load ../el-get-install.el --load $(@:.elrun=.el))
-
-# Whatever it is you want to do, it should be forwarded to the
-# to top-level directories
-# %:
-#      $(MAKE) -C .. $@
diff --git a/packages/load-relative/test/load-file1.el 
b/packages/load-relative/test/load-file1.el
deleted file mode 100644
index 00930a5..0000000
--- a/packages/load-relative/test/load-file1.el
+++ /dev/null
@@ -1,18 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(setq loaded-file "load-file1")
-(setq loaded-file1 't)
diff --git a/packages/load-relative/test/load-file2.el 
b/packages/load-relative/test/load-file2.el
deleted file mode 100644
index 835a4be..0000000
--- a/packages/load-relative/test/load-file2.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(load-relative "load-file3")
diff --git a/packages/load-relative/test/load-file3.el 
b/packages/load-relative/test/load-file3.el
deleted file mode 100644
index f788421..0000000
--- a/packages/load-relative/test/load-file3.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(setq loaded-file "load-file3")
diff --git a/packages/load-relative/test/make-check-filter.rb 
b/packages/load-relative/test/make-check-filter.rb
deleted file mode 100644
index 329bdf1..0000000
--- a/packages/load-relative/test/make-check-filter.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env ruby
-# Use this to cut out the crud from make check.
-# Use like this:
-#   make check 2>&1  | ruby ../make-check-filter.rb
-# See Makefile.am
-pats = ["^(?:Loading",
-        '(re)?make\[',
-        "Making check in",
-        "^Wrote",
-        '\(cd \.\.',
-        "make -C",
-        "Test-Unit",
-        "Fontifying",
-        '\s*$',
-        '##[<>]+$'
-       ].join('|') + ')'
-# puts pats
-skip_re = /#{pats}/
-
-while gets()
-  next if $_ =~ skip_re
-  puts $_
-end
diff --git a/packages/load-relative/test/require-file1.el 
b/packages/load-relative/test/require-file1.el
deleted file mode 100644
index 8524f53..0000000
--- a/packages/load-relative/test/require-file1.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(provide 'require-file1)
diff --git a/packages/load-relative/test/require-file2.el 
b/packages/load-relative/test/require-file2.el
deleted file mode 100644
index c84b014..0000000
--- a/packages/load-relative/test/require-file2.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(provide-me "my-")
diff --git a/packages/load-relative/test/require-file3.el 
b/packages/load-relative/test/require-file3.el
deleted file mode 100644
index 2271059..0000000
--- a/packages/load-relative/test/require-file3.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(provide 'require-file3)
diff --git a/packages/load-relative/test/simple-test.el 
b/packages/load-relative/test/simple-test.el
deleted file mode 100644
index 408be8e..0000000
--- a/packages/load-relative/test/simple-test.el
+++ /dev/null
@@ -1,386 +0,0 @@
-;;; test-simple.el --- Simple Unit Test Framework for Emacs Lisp -*- 
lexical-binding: t -*-
-;; Rewritten from Phil Hagelberg's behave.el by rocky
-
-;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-;; URL: http://github.com/rocky/emacs-test-simple
-;; Keywords: unit-test
-;; Package-Requires: ((cl-lib "0"))
-;; Version: 1.2.0
-
-;; 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:
-
-;; test-simple.el is:
-;;
-;; * Simple.  No need for
-;;   - context macros,
-;;   - enclosing specifications,
-;;   - required test tags.
-;;
-;;   But if you want, you still can enclose tests in a local scope,
-;;   add customized assert failure messages, or add summary messages
-;;   before a group of tests.
-;;
-;; * Accommodates both interactive and non-interactive use.
-;;    - For interactive use, one can use `eval-last-sexp', `eval-region',
-;;      and `eval-buffer'.  One can `edebug' the code.
-;;    -  For non-interactive use, run:
-;;        emacs --batch --no-site-file --no-splash --load <test-lisp-code.el>
-;;
-;; Here is an example using gcd.el found in the examples directory.
-;;
-;;   (require 'test-simple)
-;;   (test-simple-start) ;; Zero counters and start the stop watch.
-;;
-;;   ;; Use (load-file) below because we want to always to read the source.
-;;   ;; Also, we don't want no stinking compiled source.
-;;   (assert-t (load-file "./gcd.el")
-;;           "Can't load gcd.el - are you in the right directory?" )
-;;
-;;   (note "degenerate cases")
-;;
-;;   (assert-nil (gcd 5 -1) "using positive numbers")
-;;   (assert-nil (gcd -4 1) "using positive numbers, switched order")
-;;   (assert-raises error (gcd "a" 32)
-;;                  "Passing a string value should raise an error")
-;;
-;;   (note "GCD computations")
-;;   (assert-equal 1 (gcd 3 5) "gcd(3,5)")
-;;   (assert-equal 8 (gcd 8 32) "gcd(8,32)")
-;;   (end-tests) ;; Stop the clock and print a summary
-;;
-;; Edit (with Emacs of course) gcd-tests.el and run M-x eval-current-buffer
-;;
-;; You should see in buffer *test-simple*:
-;;
-;;    gcd-tests.el
-;;    ......
-;;    0 failures in 6 assertions (0.002646 seconds)
-;;
-;; Now let us try from a command line:
-;;
-;;    $ emacs --batch --no-site-file --no-splash --load gcd-tests.el
-;;    Loading /src/external-vcs/emacs-test-simple/example/gcd.el (source)...
-;;    *scratch*
-;;    ......
-;;    0 failures in 6 assertions (0.000723 seconds)
-
-;;; To do:
-
-;; FIXME: Namespace is all messed up!
-;; Main issues: more expect predicates
-
-(require 'time-date)
-
-;;; Code:
-
-(eval-when-compile
-  (byte-compile-disable-warning 'cl-functions)
-  ;; Somehow disabling cl-functions causes the erroneous message:
-  ;;   Warning: the function `reduce' might not be defined at runtime.
-  ;; FIXME: isolate, fix and/or report back to Emacs developers a bug
-  ;; (byte-compile-disable-warning 'unresolved)
-  (require 'cl)
-  )
-(require 'cl)
-
-(defgroup test-simple nil
-  "Simple Unit Test Framework for Emacs Lisp"
-  :group 'lisp)
-
-(defcustom test-simple-runner-interface (if (fboundp 'bpr-spawn)
-                                            'bpr-spawn
-                                          'compile)
-  "Function with one string argument when running tests non-interactively.
-Command line started with `emacs --batch' is passed as the argument.
-
-`bpr-spawn', which is in bpr package, is preferable because of no window popup.
-If bpr is not installed, fall back to `compile'."
-  :type 'function
-  :group 'test-simple)
-
-(defcustom test-simple-runner-key "C-x C-z"
-  "Key to run non-interactive test after defining command line by 
`test-simple-run'."
-  :type 'string
-  :group 'test-simple)
-
-(defvar test-simple-debug-on-error nil
-  "If non-nil raise an error on the first failure.")
-
-(defvar test-simple-verbosity 0
-  "The greater the number the more verbose output.")
-
-(defstruct test-info
-  description                 ;; description of last group of tests
-  (assert-count 0)            ;; total number of assertions run
-  (failure-count 0)           ;; total number of failures seen
-  (start-time (current-time)) ;; Time run started
-  )
-
-(defvar test-simple-info (make-test-info)
-  "Variable to store testing information for a buffer.")
-
-(defun note (description &optional test-info)
-  "Add a name to a group of tests."
-  (if (getenv "USE_TAP")
-    (test-simple-msg (format "# %s" description) 't)
-    (if (> test-simple-verbosity 0)
-       (test-simple-msg (concat "\n" description) 't))
-    (unless test-info
-      (setq test-info test-simple-info))
-    (setf (test-info-description test-info) description)
-    ))
-
-;;;###autoload
-(defmacro test-simple-start (&optional test-start-msg)
-  `(test-simple-clear nil
-                     (or ,test-start-msg
-                         (if (and (functionp '__FILE__) (__FILE__))
-                             (file-name-nondirectory (__FILE__))
-                           (buffer-name)))
-                     ))
-
-;;;###autoload
-(defun test-simple-clear (&optional test-info test-start-msg)
-  "Initialize and reset everything to run tests.
-You should run this before running any assertions.  Running more than once
-clears out information from the previous run."
-
-  (interactive)
-
-  (unless test-info
-    (unless test-simple-info
-      (make-variable-buffer-local (defvar test-simple-info (make-test-info))))
-    (setq test-info test-simple-info))
-
-  (setf (test-info-description test-info) "none set")
-  (setf (test-info-start-time test-info) (current-time))
-  (setf (test-info-assert-count test-info) 0)
-  (setf (test-info-failure-count test-info) 0)
-
-  (with-current-buffer (get-buffer-create "*test-simple*")
-    (let ((old-read-only inhibit-read-only))
-      (setq inhibit-read-only 't)
-      (delete-region (point-min) (point-max))
-      (if test-start-msg (insert (format "%s\n" test-start-msg)))
-      (setq inhibit-read-only old-read-only)))
-  (unless noninteractive
-    (message "Test-Simple: test information cleared")))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Assertion tests
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defmacro assert-raises (error-condition body &optional fail-message)
-  (let ((fail-message (or fail-message
-                         (format "assert-raises did not get expected %s"
-                                 error-condition))))
-    (list 'condition-case nil
-         (list 'progn body
-               (list 'assert-t nil fail-message))
-         (list error-condition '(assert-t t)))))
-
-(defun assert-op (op expected actual &optional fail-message test-info)
-  "Expectation is that ACTUAL should be equal to EXPECTED."
-  (unless test-info (setq test-info test-simple-info))
-  (cl-incf (test-info-assert-count test-info))
-  (if (not (funcall op actual expected))
-      (let* ((fail-message
-             (if fail-message
-                 (format "Message: %s" fail-message)
-               ""))
-            (expect-message
-             (format "\n  Expected: %S\n  Got: %S" expected actual))
-            (test-info-mess
-             (if (boundp 'test-info)
-                 (test-info-description test-info)
-               "unset")))
-       (test-simple--add-failure (format "assert-%s" op) test-info-mess
-                                  (concat fail-message expect-message)))
-    (test-simple--ok-msg fail-message)))
-
-(defun assert-equal (expected actual &optional fail-message test-info)
-  "Expectation is that ACTUAL should be equal to EXPECTED."
-  (assert-op 'equal expected actual fail-message test-info))
-
-(defun assert-eq (expected actual &optional fail-message test-info)
-  "Expectation is that ACTUAL should be EQ to EXPECTED."
-  (assert-op 'eql expected actual fail-message test-info))
-
-(defun assert-eql (expected actual &optional fail-message test-info)
-  "Expectation is that ACTUAL should be EQL to EXPECTED."
-  (assert-op 'eql expected actual fail-message test-info))
-
-(defun assert-matches (expected-regexp actual &optional fail-message test-info)
-  "Expectation is that ACTUAL should match EXPECTED-REGEXP."
-  (unless test-info (setq test-info test-simple-info))
-  (cl-incf (test-info-assert-count test-info))
-  (if (not (string-match expected-regexp actual))
-      (let* ((fail-message
-             (if fail-message
-                 (format "\n\tMessage: %s" fail-message)
-               ""))
-            (expect-message
-             (format "\tExpected Regexp: %s\n\tGot:      %s"
-                     expected-regexp actual))
-            (test-info-mess
-             (if (boundp 'test-info)
-                 (test-info-description test-info)
-               "unset")))
-       (test-simple--add-failure "assert-equal" test-info-mess
-                                  (concat expect-message fail-message)))
-    (progn (test-simple-msg ".") t)))
-
-(defun assert-t (actual &optional fail-message test-info)
-  "expectation is that ACTUAL is not nil."
-  (assert-nil (not actual) fail-message test-info))
-
-(defun assert-nil (actual &optional fail-message test-info)
-  "expectation is that ACTUAL is nil. FAIL-MESSAGE is an optional
-additional message to be displayed."
-  (unless test-info (setq test-info test-simple-info))
-  (cl-incf (test-info-assert-count test-info))
-  (if actual
-      (let* ((fail-message
-             (if fail-message
-                 (format "\n\tMessage: %s" fail-message)
-               ""))
-            (test-info-mess
-             (if (boundp 'test-simple-info)
-                 (test-info-description test-simple-info)
-               "unset")))
-       (test-simple--add-failure "assert-nil" test-info-mess
-                                  fail-message test-info))
-    (test-simple--ok-msg fail-message)))
-
-(defun test-simple--add-failure (type test-info-msg fail-msg
-                                      &optional test-info)
-  (unless test-info (setq test-info test-simple-info))
-  (cl-incf (test-info-failure-count test-info))
-  (let ((failure-msg
-        (format "\nDescription: %s, type %s\n%s" test-info-msg type fail-msg))
-       )
-    (save-excursion
-      (test-simple--not-ok-msg fail-msg)
-      (test-simple-msg failure-msg 't)
-      (unless noninteractive
-       (if test-simple-debug-on-error
-           (signal 'test-simple-assert-failed failure-msg)
-         ;;(message failure-msg)
-         )))))
-
-(defun end-tests (&optional test-info)
-  "Give a tally of the tests run."
-  (interactive)
-  (unless test-info (setq test-info test-simple-info))
-  (test-simple-describe-failures test-info)
-  (if noninteractive
-      (progn
-       (switch-to-buffer "*test-simple*")
-       (message "%s" (buffer-substring (point-min) (point-max)))
-       )
-    (switch-to-buffer-other-window "*test-simple*")
-    ))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Reporting
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun test-simple-msg(msg &optional newline)
-  (switch-to-buffer "*test-simple*")
-  (let ((inhibit-read-only t))
-    (insert msg)
-    (if newline (insert "\n"))
-    (switch-to-buffer nil)
-  ))
-
-(defun test-simple--ok-msg (fail-message &optional test-info)
-  (unless test-info (setq test-info test-simple-info))
-  (let ((msg (if (getenv "USE_TAP")
-                (if (equal fail-message "")
-                    (format "ok %d\n" (test-info-assert-count test-info))
-                  (format "ok %d - %s\n"
-                          (test-info-assert-count test-info)
-                          fail-message))
-              ".")))
-      (test-simple-msg msg))
-  't)
-
-(defun test-simple--not-ok-msg (_fail-message &optional test-info)
-  (unless test-info (setq test-info test-simple-info))
-  (let ((msg (if (getenv "USE_TAP")
-                (format "not ok %d\n" (test-info-assert-count test-info))
-              "F")))
-      (test-simple-msg msg))
-  nil)
-
-(defun test-simple-summary-line(info)
-  (let*
-      ((failures (test-info-failure-count info))
-       (asserts (test-info-assert-count info))
-       (problems (concat (number-to-string failures) " failure"
-                        (unless (= 1 failures) "s")))
-       (tests (concat (number-to-string asserts) " assertion"
-                     (unless (= 1 asserts) "s")))
-       (elapsed-time (time-since (test-info-start-time info)))
-       )
-    (if (getenv "USE_TAP")
-       (format "1..%d" asserts)
-      (format "\n%s in %s (%g seconds)" problems tests
-             (float-time elapsed-time))
-  )))
-
-(defun test-simple-describe-failures(&optional test-info)
-  (unless test-info (setq test-info test-simple-info))
-  (goto-char (point-max))
-  (test-simple-msg (test-simple-summary-line test-info)))
-
-;;;###autoload
-(defun test-simple-run (&rest command-line-formats)
-  "Register command line to run tests non-interactively and bind key to run 
test.
-After calling this function, you can run test by key specified by 
`test-simple-runner-key'.
-
-It is preferable to write at the first line of test files as a comment, e.g,
-;;;; (test-simple-run \"emacs -batch -L %s -l %s\" (file-name-directory 
(locate-library \"test-simple.elc\")) buffer-file-name)
-
-Calling this function interactively, COMMAND-LINE-FORMATS is set above."
-  (interactive)
-  (setq command-line-formats
-        (or command-line-formats
-            (list "emacs -batch -L %s -l %s"
-                  (file-name-directory (locate-library "test-simple.elc"))
-                  buffer-file-name)))
-  (let ((func (lambda ()
-                (interactive)
-                (funcall test-simple-runner-interface
-                         (apply 'format command-line-formats)))))
-    (global-set-key (kbd test-simple-runner-key) func)
-    (funcall func)))
-
-(defun test-simple-noninteractive-kill-emacs-hook ()
-  "Emacs exits abnormally when noninteractive test fails."
-  (when (and noninteractive test-simple-info
-             (<= 1 (test-info-failure-count test-simple-info)))
-    (let (kill-emacs-hook)
-     (kill-emacs 1))))
-(when noninteractive
-  (add-hook 'kill-emacs-hook 'test-simple-noninteractive-kill-emacs-hook))
-
-
-(provide 'test-simple)
-;;; test-simple.el ends here
diff --git a/packages/load-relative/test/simple.txt 
b/packages/load-relative/test/simple.txt
deleted file mode 100644
index ab23474..0000000
--- a/packages/load-relative/test/simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-simple
diff --git a/packages/load-relative/test/subdir/.gitignore 
b/packages/load-relative/test/subdir/.gitignore
deleted file mode 100644
index aeaec0f..0000000
--- a/packages/load-relative/test/subdir/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/*~
diff --git a/packages/load-relative/test/subdir/Makefile 
b/packages/load-relative/test/subdir/Makefile
deleted file mode 100644
index bc80236..0000000
--- a/packages/load-relative/test/subdir/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-# Whatever it is you want to do, it should be forwarded to the 
-# to top-level irectories
-PHONY=check all
-all: check
-
-%: 
-       $(MAKE) -C .. $@
diff --git 
a/packages/load-relative/test/subdir/test-require-list-from-subdir.el 
b/packages/load-relative/test/subdir/test-require-list-from-subdir.el
deleted file mode 100644
index cf4a91f..0000000
--- a/packages/load-relative/test/subdir/test-require-list-from-subdir.el
+++ /dev/null
@@ -1,36 +0,0 @@
-;; Can't find the "test-unit" package, so: -*- no-byte-compile:t -*-
-
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(require 'cl)
-(require 'test-unit)
-(load-file "../../load-relative.el")
-
-(test-unit-clear-contexts)
-
-(context "load-relative-list-from-subdir"
-        (tag load-relative-list-from-subdir)
-        (if (featurep 'require-file1)
-            (unload-feature 'require-file1))
-        (specify "relative-relative-list"
-                 (require-relative-list '("../require-file1"))
-                 (assert-t (featurep 'require-file1))
-                 )
-
-)
-
-(test-unit "load-relative-list-from-subdir")
diff --git a/packages/load-relative/test/test-file.el 
b/packages/load-relative/test/test-file.el
deleted file mode 100644
index db3db8c..0000000
--- a/packages/load-relative/test/test-file.el
+++ /dev/null
@@ -1,62 +0,0 @@
-;;; test-file.el --- Simple test for load-relative
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(load-file "../load-relative.el")
-
-(require 'ert)
-
-
-(ert-deftest test-name ()
-  (should
-   ;; not sure how I can test the full path here because, well, I need to
-   ;; resolve a relative path to do so...
-   (equal
-    "simple.txt"
-    (let ((bf
-           (find-file-noselect-relative "simple.txt")))
-      (kill-buffer bf)
-      (file-name-nondirectory
-       (buffer-file-name bf))))))
-
-(ert-deftest test-contents ()
-  (should
-   (equal
-    "simple\n"
-    (let* ((bf
-            (find-file-noselect-relative "simple.txt"))
-           (ct
-            (with-current-buffer
-                bf
-              (buffer-string))))
-      (kill-buffer bf)
-      ct))))
-
-(ert-deftest test-contents-with-relative-file ()
-  (should
-   (equal
-    "simple\n"
-    (with-relative-file
-        "simple.txt"
-      (buffer-string)))))
-
-(provide 'test-file)
-
-;;; test-file.el ends here
diff --git a/packages/load-relative/test/test-load.el 
b/packages/load-relative/test/test-load.el
deleted file mode 100644
index 1002996..0000000
--- a/packages/load-relative/test/test-load.el
+++ /dev/null
@@ -1,97 +0,0 @@
-;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(require 'cl)
-(load-file "./simple-test.el")
-(load-file "../load-relative.el")
-
-(test-simple-start)
-
-;; (setq tempbuf (generate-new-buffer "*cmdbuf-test*"))
-;; (assert-nil
-;;  (with-current-buffer tempbuf
-;;    (insert "(__FILE__)\n")
-;;    (eval-current-buffer))
-;;  (kill-buffer tempbuf) "(__FILE__) on temporary buffer")
-
-(assert-equal "test-load"
-             (file-name-sans-extension
-              (file-name-nondirectory (__FILE__)))
-             "(__FILE__) on this running program"
-             )
-
-(dolist (file-name
-        '("load-file1.el" "./load-file1.el" "../test/load-file1.el"))
-  (assert-equal
-   (expand-file-name file-name)
-   (relative-expand-file-name file-name))
-  "relative-expand-filename"
-)
-
-(note "Basic load-relative")
-(setq loaded-file nil)
-(assert-equal t (load-relative "load-file2"))
-(assert-equal "load-file3" loaded-file)
-
-(setq loaded-file nil)
-(setq loaded-file1 nil)
-(assert-equal '(t t)
-             (load-relative '("load-file1" "load-file2")
-                            ))
-(assert-equal 't loaded-file1)
-(assert-equal "load-file3" loaded-file)
-
-
-(dolist (file-name
-        '("load-file1.el" "./load-file1.el" "../test/load-file1.el"))
-  (setq loaded-file nil)
-  (assert-equal t (load-relative file-name)
-               (format "load-relative with list file %s" loaded-file))
-  (assert-equal "load-file1" loaded-file
-               (format "load-relative value with list file %s" loaded-file)
-  ))
-
-(if (featurep 'require-file1 t)
-    (unload-feature 'require-file1))
-
-(require-relative "require-file1")
-(assert-t (featurep 'require-file1) "require-relative")
-
-(if (featurep 'require-file1 t)
-            (unload-feature 'require-file1))
-
-(require-relative-list '("require-file1" "require-file3"))
-(assert-t (and (featurep 'require-file1)
-              (featurep 'require-file3)) "require-relative-list")
-
-(if (featurep 'my-require-file2 t)
-    (unload-feature 'my-require-file2))
-
-(require-relative-list '("require-file2") "my-")
-(assert-t (featurep 'my-require-file2) "require-relative-list with prefix")
-
-
-(if (featurep 'test-load t)
-    (unload-feature 'test-load) "provide-me - no prefix")
-(provide-me)
-(assert-t (featurep 'test-load))
-
-(if (featurep 'my-test-load t)
-    (unload-feature 'my-test-load))
-(provide-me "my-")
-(assert-t (featurep 'my-test-load) "provide-me - prefix")
-
-(end-tests)
diff --git a/packages/load-relative/test/test-require-list.el 
b/packages/load-relative/test/test-require-list.el
deleted file mode 100644
index a64c346..0000000
--- a/packages/load-relative/test/test-require-list.el
+++ /dev/null
@@ -1,28 +0,0 @@
-;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-(require 'cl)
-(load-file "./simple-test.el")
-(load-file "../load-relative.el")
-
-(test-simple-start)
-
-(if (featurep 'require-file1)
-    (unload-feature 'require-file1))
-(require-relative-list '("./require-file1"))
-(assert-t (featurep 'require-file1) "relative-relative-list")
-
-(end-tests)
diff --git a/packages/loc-changes/.gitignore b/packages/loc-changes/.gitignore
deleted file mode 100644
index eadfb92..0000000
--- a/packages/loc-changes/.gitignore
+++ /dev/null
@@ -1,14 +0,0 @@
-/*.elc
-/*~
-/ChangeLog
-/aclocal.m4
-/autom4te.cache
-/config.log
-/config.status
-/configure
-/elc-stamp
-/install-sh
-/missing
-/script
-Makefile
-Makefile.in
diff --git a/packages/loc-changes/.travis.yml b/packages/loc-changes/.travis.yml
deleted file mode 100644
index 93ff22f..0000000
--- a/packages/loc-changes/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-language: emacs-lisp
-
-env:
-  - EMACS=emacs24
-
-before_install:
-  - if [ "$EMACS" = 'emacs24' ]; then
-      sudo add-apt-repository -y ppa:cassou/emacs &&
-      sudo apt-get update -qq &&
-      sudo apt-get install -qq
-          emacs24 emacs24-el emacs24-common-non-dfsg;
-    fi
-
-  - sudo apt-get install -qq $EMACS
-
-# run the tests
-script:
-  - NO_CHECK_EMACS_PACKAGES=1 /bin/bash ./autogen.sh && cd test && make 
check-elget
diff --git a/packages/loc-changes/AUTHORS b/packages/loc-changes/AUTHORS
deleted file mode 100644
index 60fc84e..0000000
--- a/packages/loc-changes/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-rocky@gnu.org
diff --git a/packages/loc-changes/COPYING b/packages/loc-changes/COPYING
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/loc-changes/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 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.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  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, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public 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.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/loc-changes/INSTALL b/packages/loc-changes/INSTALL
deleted file mode 100644
index 2099840..0000000
--- a/packages/loc-changes/INSTALL
+++ /dev/null
@@ -1,370 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
-Inc.
-
-   Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.  This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
-   Briefly, the shell command `./configure && make && make install'
-should configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.  Some packages provide this
-`INSTALL' file but do not implement all of the features documented
-below.  The lack of an optional feature in a given package is not
-necessarily a bug.  More recommendations for GNU packages can be found
-in *note Makefile Conventions: (standards)Makefile Conventions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-   The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package, generally using the just-built uninstalled binaries.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.  When installing into a prefix owned by root, it is
-     recommended that the package be configured and built as a regular
-     user, and only the `make install' phase executed with root
-     privileges.
-
-  5. Optionally, type `make installcheck' to repeat any self-tests, but
-     this time using the binaries in their final installed location.
-     This target does not install anything.  Running this target as a
-     regular user, particularly if the prior `make install' required
-     root privileges, verifies that the installation completed
-     correctly.
-
-  6. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  7. Often, you can also type `make uninstall' to remove the installed
-     files again.  In practice, not all packages have tested that
-     uninstallation works correctly, even though it is required by the
-     GNU Coding Standards.
-
-  8. Some packages, particularly those that use Automake, provide `make
-     distcheck', which can by used by developers to test that all other
-     targets like `make install' and `make uninstall' work correctly.
-     This target is generally not run by end users.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  Run `./configure --help'
-for details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.  This
-is known as a "VPATH" build.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-   On MacOS X 10.5 and later systems, you can create libraries and
-executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple `-arch' options to the
-compiler but only a single `-arch' option to the preprocessor.  Like
-this:
-
-     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CPP="gcc -E" CXXCPP="g++ -E"
-
-   This is not guaranteed to produce working output in all cases, you
-may have to build one architecture at a time and combine the results
-using the `lipo' tool if you have problems.
-
-Installation Names
-==================
-
-   By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX', where PREFIX must be an
-absolute file name.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.  In general, the
-default for these options is expressed in terms of `${prefix}', so that
-specifying just `--prefix' will affect all of the other directory
-specifications that were not explicitly provided.
-
-   The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
-having to reconfigure or recompile.
-
-   The first method involves providing an override variable for each
-affected directory.  For example, `make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-`${prefix}'.  Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated.  The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
-   The second method involves providing the `DESTDIR' variable.  For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names.  The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters.  On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
-
-Optional Features
-=================
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-   Some packages offer the ability to configure how verbose the
-execution of `make' will be.  For these packages, running `./configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
-
-Particular systems
-==================
-
-   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
-CC is not installed, it is recommended to use the following options in
-order to use an ANSI C compiler:
-
-     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
-
-and if that doesn't work, install pre-built binaries of GCC for HP-UX.
-
-   HP-UX `make' updates targets which have the same time stamps as
-their prerequisites, which makes it generally unusable when shipped
-generated files such as `configure' are involved.  Use GNU `make'
-instead.
-
-   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
-a workaround.  If GNU CC is not installed, it is therefore recommended
-to try
-
-     ./configure CC="cc"
-
-and if that doesn't work, try
-
-     ./configure CC="cc -nodtk"
-
-   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
-directory contains several dysfunctional programs; working variants of
-these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
-in your `PATH', put it _after_ `/usr/bin'.
-
-   On Haiku, software installed for all users goes in `/boot/common',
-not `/usr/local'.  It is recommended to use the following options:
-
-     ./configure --prefix=/boot/common
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on.  Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS
-     KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf limitation.  Until the limitation is lifted, you can use
-this workaround:
-
-     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
-
-`--help=short'
-`--help=recursive'
-     Print a summary of the options unique to this package's
-     `configure', and exit.  The `short' variant lists options used
-     only in the top level, while the `recursive' variant lists options
-     also present in any nested packages.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--prefix=DIR'
-     Use DIR as the installation prefix.  *note Installation Names::
-     for more details, including other options available for fine-tuning
-     the installation locations.
-
-`--no-create'
-`-n'
-     Run the configure checks, but stop before creating any output
-     files.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
diff --git a/packages/loc-changes/Makefile.am b/packages/loc-changes/Makefile.am
deleted file mode 100644
index 0b381fc..0000000
--- a/packages/loc-changes/Makefile.am
+++ /dev/null
@@ -1,48 +0,0 @@
-lispdir = @lispdir@
-
-lisp_files := $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-
-include common.mk
-
-EXTRA_DIST = $(lisp_files) $(test_files) README.md THANKS
-
-test_files := $(wildcard test/test-*.el)
-
-if MAINTAINER_MODE
-
-CL = ChangeLog
-ChangeLog:
-       git log --pretty --numstat --summary | $(GIT2CL) > $@
-
-ACLOCAL_AMFLAGS=-I .
-
-endif
-
-#: Run all tests
-test: check
-
-#: Run all tests without bloated output
-check-short:
-       $(MAKE) check 2>&1  | ruby test/make-check-filter.rb
-
-check:
-       $(MAKE) -C test $@
-
-CR_EXCEPTIONS=copyright_exceptions
-#: Check for GNU Copyrights.
-check_copyrights:
-       @echo "Compute exceptions >$(CR_EXCEPTIONS)~"
-       @export LANG=C;                                                 \
-       find . -name '.git' -prune -o -name '*.el' -print0 |            \
-           xargs -0 grep -L 'Free Software Foundation, Inc' |          \
-           grep -v '\(\.dir-locals\|.-\(pkg\|autoloads\)\)\.el$$';     \
-       find . -name '.git' -prune -o -name '*.el' -print |             \
-           while read f; do                                            \
-               fquoted="$$(echo $$f|tr '|' '_')";                      \
-               sed -n -e '/[Cc]opyright.*, *[1-9][-0-9]*,\?$$/N'       \
-                   -e '/Free Software Foundation/d'                    \
-                   -e "s|^\\(.*[Cc]opyright\\)|$$fquoted:\\1|p"        \
-                  "$$f";                                               \
-           done | sort >$(CR_EXCEPTIONS)~
-       diff -u "$(CR_EXCEPTIONS)" "$(CR_EXCEPTIONS)~"
diff --git a/packages/loc-changes/NEWS b/packages/loc-changes/NEWS
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/loc-changes/README b/packages/loc-changes/README
deleted file mode 120000
index 42061c0..0000000
--- a/packages/loc-changes/README
+++ /dev/null
@@ -1 +0,0 @@
-README.md
\ No newline at end of file
diff --git a/packages/loc-changes/README.md b/packages/loc-changes/README.md
deleted file mode 100644
index b0fe3a9..0000000
--- a/packages/loc-changes/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-[![Build 
Status](https://travis-ci.org/rocky/emacs-loc-changes.png)](https://travis-ci.org/rocky/emacs-loc-changes)
-
-Keeps track of important buffer positions after buffer changes.
-
-Sometimes it is useful to make note of certain locations in program
-code. For example these might be error locations reported in a
-compilation. Or you could be inside a debugger and change the source
-code but want to continue debugging.
-
-Without this, the positions that a compilation error report or that a
-debugger refers to may be a little off from the modified source.
-
-This package tries to ameliorate that by allowing a user or program
-(e.g. a debugger front-end) to set marks to track the original
-locations.
diff --git a/packages/loc-changes/THANKS b/packages/loc-changes/THANKS
deleted file mode 100644
index e336992..0000000
--- a/packages/loc-changes/THANKS
+++ /dev/null
@@ -1 +0,0 @@
-Lars Anderson - Melpa packaging, among other things
diff --git a/packages/loc-changes/autogen.sh b/packages/loc-changes/autogen.sh
deleted file mode 100755
index 8a72837..0000000
--- a/packages/loc-changes/autogen.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-autoreconf -vi && \
-autoconf && {
-  echo "Running configure with --enable-maintainer-mode $@"
-  ./configure --enable-maintainer-mode $@
-}
diff --git a/packages/loc-changes/common.mk b/packages/loc-changes/common.mk
deleted file mode 100644
index 26b6325..0000000
--- a/packages/loc-changes/common.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-short:
-       $(MAKE) 2>&1 >/dev/null | ruby $(top_srcdir)/make-check-filter.rb
-
-%.short:
-       $(MAKE) $(@:.short=) 2>&1 >/dev/null
diff --git a/packages/loc-changes/configure.ac 
b/packages/loc-changes/configure.ac
deleted file mode 100644
index 439ceff..0000000
--- a/packages/loc-changes/configure.ac
+++ /dev/null
@@ -1,13 +0,0 @@
-AC_INIT(emacs-loc-changes, 1.1)
-AC_CONFIG_SRCDIR(loc-changes.el)
-AM_INIT_AUTOMAKE
-AM_MAINTAINER_MODE
-
-##
-## Find out where to install the debugger emacs lisp files
-##
-AM_PATH_LISPDIR
-AM_CONDITIONAL(INSTALL_EMACS_LISP, test "x$lispdir" != "x")
-
-AC_CONFIG_FILES([Makefile test/Makefile])
-AC_OUTPUT
diff --git a/packages/loc-changes/copyright_exceptions 
b/packages/loc-changes/copyright_exceptions
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/loc-changes/elisp-comp b/packages/loc-changes/elisp-comp
deleted file mode 100755
index 73a5eda..0000000
--- a/packages/loc-changes/elisp-comp
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1995-2012 Free Software Foundation, Inc.
-
-scriptversion=2013-03-27.22
-
-# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-case $1 in
-  '')
-     echo "$0: No files.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: elisp-comp [--help] [--version] FILES...
-
-This script byte-compiles all '.el' files listed as FILES using GNU
-Emacs, and put the resulting '.elc' files into the current directory,
-so disregarding the original directories used in '.el' arguments.
-
-This script manages in such a way that all Emacs LISP files to
-be compiled are made visible between themselves, in the event
-they require or load-library one another.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "elisp-comp $scriptversion"
-    exit $?
-    ;;
-esac
-
-if test -z "$EMACS" || test "$EMACS" = "t"; then
-  # Value of "t" means we are running in a shell under Emacs.
-  # Just assume Emacs is called "emacs".
-  EMACS=emacs
-fi
-
-tempdir=elc.$$
-
-# Cleanup the temporary directory on exit.
-trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0
-do_exit='(exit $ret); exit $ret'
-trap "ret=129; $do_exit" 1
-trap "ret=130; $do_exit" 2
-trap "ret=141; $do_exit" 13
-trap "ret=143; $do_exit" 15
-
-# mkdir $tempdir
-# cp "$@" $tempdir
-
-(
-  # cd $tempdir
-  echo "(setq load-path (cons nil (cons \"$abs_srcdir\" load-path)))" > script
-  $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $?
-  # mv *.elc ..
-) || exit $?
-
-(exit 0); exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/packages/loc-changes/loc-changes.el 
b/packages/loc-changes/loc-changes.el
deleted file mode 100644
index 4e3660b..0000000
--- a/packages/loc-changes/loc-changes.el
+++ /dev/null
@@ -1,259 +0,0 @@
-;;; loc-changes.el --- keep track of positions even after buffer changes
-
-;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-;; Version: 1.2
-;; URL: http://github.com/rocky/emacs-loc-changes
-;; Compatibility: GNU Emacs 24.x
-
-;; 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:
-
-;; This package lets users or programs set marks in a buffer prior to
-;; changes so that we can track the original positions after the
-;; change.
-
-;; One common use is say when debugging a program.  The debugger has its static
-;; notion of the file and positions inside that.  However it may be convenient
-;; for a programmer to edit the program but not restart execution of the 
program.
-
-;; Another use might be in a compilation buffer for errors and
-;; warnings which refer to file and line positions.
-
-;;; Code:
-
-(eval-when-compile (require 'cl))
-
-(make-variable-buffer-local 'loc-changes-alist)
-(defvar loc-changes-alist '()
-  "A buffer-local association-list (alist) of line numbers and
-their corresponding markers in the buffer. The key is the line
-number; the a list of value the marker and the initial 10
-characters after that mark" )
-
-(defun loc-changes:follow-mark(event)
-  (interactive "e")
-  (let* ((pos (posn-point (event-end event)))
-        (mark (car (get-text-property pos 'mark))))
-    (switch-to-buffer-other-window  (marker-buffer mark))
-    (goto-char (marker-position mark))
-    ))
-
-
-(defun loc-changes:alist-describe (&optional opt-buffer)
-  "Display buffer-local variable loc-changes-alist. If BUFFER is
-not given, the current buffer is used. Information is put in an
-internal buffer called *Describe*."
-  (interactive "")
-  (let ((buffer (or opt-buffer (current-buffer)))
-       (alist))
-    (with-current-buffer buffer
-         (setq alist loc-changes-alist)
-         (unless (listp alist) (error "expecting loc-changes-alist to be a 
list"))
-         )
-    (switch-to-buffer (get-buffer-create "*Describe*"))
-    (setq buffer-read-only 'nil)
-    (delete-region (point-min) (point-max))
-    (dolist (assoc alist)
-         (put-text-property
-          (insert-text-button
-           (format "line %d: %s" (car assoc) (cadr assoc))
-           'action 'loc-changes:follow-mark
-           'help-echo "mouse-2: go to this location")
-          (point)
-          'mark (cdr assoc)
-           )
-         (insert (format ":\t%s\n" (cl-caddr assoc)))
-         )
-    (setq buffer-read-only 't)
-    ))
-
-(defun loc-changes-goto-line (line-number &optional column-number)
-  "Position `point' at LINE-NUMBER of the current buffer. If
-COLUMN-NUMBER is given, position `point' at that column just
-before that column number within the line. Note that the beginning of
-the line starts at column 0, so the column number display will be one less
-than COLUMN-NUMBER. For example COLUMN-NUMBER 1 will set before the first
-column on the line and show 0.
-
-The Emacs `goto-line' docstring says it is wrong to use that
-function in a Lisp program. So here is something that I proclaim
-is okay to use in a Lisp program."
-  (interactive
-   (if (and current-prefix-arg (not (consp current-prefix-arg)))
-       (list (prefix-numeric-value current-prefix-arg))
-     ;; Look for a default, a number in the buffer at point.
-     (let* ((default
-             (save-excursion
-               (skip-chars-backward "0-9")
-               (if (looking-at "[0-9]")
-                   (string-to-number
-                    (buffer-substring-no-properties
-                     (point)
-                     (progn (skip-chars-forward "0-9")
-                            (point)))))))
-           ;; Decide if we're switching buffers.
-           (buffer
-            (if (consp current-prefix-arg)
-                (other-buffer (current-buffer) t)))
-           (buffer-prompt
-            (if buffer
-                (concat " in " (buffer-name buffer))
-              "")))
-       ;; Read the argument, offering that number (if any) as default.
-       (list (read-number (format "Goto line%s: " buffer-prompt)
-                          (list default (line-number-at-pos)))
-            buffer))))
-  (unless (wholenump line-number)
-    (error "Expecting line-number parameter `%s' to be a whole number"
-          line-number))
-  (unless (> line-number 0)
-    (error "Expecting line-number parameter `%d' to be greater than 0"
-          line-number))
-  (let ((last-line (line-number-at-pos (point-max))))
-    (unless (<= line-number last-line)
-      (error
-       "Line number %d should not exceed %d, the number of lines in the buffer"
-       line-number last-line))
-    (goto-char (point-min))
-    (forward-line (1- line-number))
-    (if column-number
-       (let ((last-column
-              (save-excursion
-                (move-end-of-line 1)
-                (current-column))))
-         (cond ((not (wholenump column-number))
-                (message
-                 "Column ignored. Expecting column-number parameter `%s' to be 
a whole number"
-                         column-number))
-               ((<= column-number 0)
-                (message
-                 "Column ignored. Expecting column-number parameter `%d' to be 
a greater than 1"
-                         column-number))
-               ((>= column-number last-column)
-                (message
-                 "Column ignored. Expecting column-number parameter `%d' to be 
a less than %d"
-                  column-number last-column))
-               (t (forward-char (1- column-number)))))
-      )
-    (redisplay)
-    )
-  )
-
-(defun loc-changes-add-elt (pos)
-  "Add an element `loc-changes-alist'. The car will be POS and a
-marker for it will be created at the point."
-  (setq loc-changes-alist
-       (cons (cons pos (list (point-marker) (buffer-substring (point) 
(point-at-eol))))
-                   loc-changes-alist)))
-
-(defun loc-changes-add-and-goto (line-number &optional opt-buffer)
-  "Add a marker at LINE-NUMBER and record LINE-NUMBER and its
-marker association in `loc-changes-alist'."
-  (interactive
-   (if (and current-prefix-arg (not (consp current-prefix-arg)))
-       (list (prefix-numeric-value current-prefix-arg))
-     ;; Look for a default, a number in the buffer at point.
-     (let* ((default
-             (save-excursion
-               (skip-chars-backward "0-9")
-               (if (looking-at "[0-9]")
-                   (string-to-number
-                    (buffer-substring-no-properties
-                     (point)
-                     (progn (skip-chars-forward "0-9")
-                            (point)))))))
-           ;; Decide if we're switching buffers.
-           (buffer
-            (if (consp current-prefix-arg)
-                (other-buffer (current-buffer) t)))
-           (buffer-prompt
-            (if buffer
-                (concat " in " (buffer-name buffer))
-              "")))
-       ;; Read the argument, offering that number (if any) as default.
-       (list (read-number (format "Goto line%s: " buffer-prompt)
-                          (list default (line-number-at-pos)))
-            buffer))))
-
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (with-current-buffer buffer
-      (loc-changes-goto-line line-number)
-      (loc-changes-add-elt line-number)
-      ))
-  )
-
-(defun loc-changes-clear-buffer (&optional opt-buffer)
-  "Remove all location-tracking associations in BUFFER."
-  (interactive "bbuffer: ")
-  (let ((buffer (or opt-buffer (current-buffer)))
-       )
-    (with-current-buffer buffer
-      (setq loc-changes-alist '())
-      ))
-  )
-
-(defun loc-changes-reset-position (&optional opt-buffer no-insert)
-  "Update `loc-changes-alist' so that the line number of point is
-used to when aline number is requested.
-
-Updates any existing line numbers referred to in marks at this
-position.
-
-This may be useful for example in debugging if you save the
-buffer and then cause the debugger to reread/reevaluate the file
-so that its positions are will be reflected."
-  (interactive "")
-  (let* ((line-number (line-number-at-pos (point)))
-        (elt (assq line-number loc-changes-alist)))
-    (let ((buffer (or opt-buffer (current-buffer)))
-         )
-      (with-current-buffer buffer
-       (if elt
-           (setcdr elt
-                   (list (point-marker) (buffer-substring (point) 
(point-at-eol))))
-         (unless no-insert
-           (loc-changes-add-elt line-number)
-           )
-         ))
-      )
-    ))
-
-
-(defun loc-changes-goto (line-number &optional opt-buffer no-update)
-  "Go to the LINE-NUMBER inside OPT-BUFFER taking into account the
-previous line-number marks. Normally if the line-number hasn't been
-seen before, we will add a new mark for this line-number. However if
-NO-UPDATE is set, no mark is added."
-  ;;; FIXME: opt-buffer is not used
-  (unless (wholenump line-number)
-    (error "Expecting line-number parameter `%s' to be a whole number"
-          line-number))
-  (let ((elt (assq line-number loc-changes-alist)))
-    (if elt
-       (let ((marker (cadr elt)))
-         (unless (markerp marker)
-           (error "Internal error: loc-changes-alist is not a marker"))
-         (goto-char (marker-position marker)))
-      (if no-update
-         (loc-changes-goto-line line-number)
-       (loc-changes-add-and-goto line-number))
-      )
-    )
-  )
-
-(provide 'loc-changes)
-;;; loc-changes.el ends here
diff --git a/packages/loc-changes/test/Makefile.am 
b/packages/loc-changes/test/Makefile.am
deleted file mode 100644
index 2d6a227..0000000
--- a/packages/loc-changes/test/Makefile.am
+++ /dev/null
@@ -1,72 +0,0 @@
-include $(top_srcdir)/common.mk
-
-PHONY=check test all check-elget test-elget help
-
-all: check
-
-#: same thing as "check"
-test: check
-
-#: overall help on running the make targets
-help:
-       @echo "The main function of this Makefile is to facilitate running 
tests."
-       @echo
-       @echo "To run all of the tests, use targets \"test\", \"check\" or 
\"check-short\"."
-       @echo "For example:"
-       @echo
-       @echo "    make check"
-       @echo "or:"
-       @echo "    make check-short"
-       @echo
-       @echo "The -short target uses a filter written in Ruby to remove 
extreanous output."
-       @echo
-       @echo "To run a specific test like test-srcbuf.el, change \".el\" to"
-       @echo "\".run\". For example:"
-       @echo
-       @echo "    make test-srcbuf.run"
-       @echo
-       @echo "Tests can also be run via the Emacs el-get package and this 
loads dependent emacs "
-       @echo "package, like load-relative. To do this, use targets, 
\"check-elget\","
-       @echo "\"test-elget\", or \"check-short-elget\"."
-       @echo
-       @echo  "To run a specific test like test-srcbuf.el via el-get change 
\".el\""
-       @echo "to \".elrun\" For example:"
-       @echo
-       @echo "    make test-srcbuf.elrun"
-
-EXTRA_DIST=sample.txt
-
-#: same thing as "check-elget"
-test-elget: check-elget
-
-test_files := $(wildcard test-*.el)
-
-CHECK_FILES = $(notdir $(test_files:.el=.run))
-EL_GET_CHECK_FILES = $(notdir $(test_files:.el=.elrun))
-
-#: Run all tests
-check: $(CHECK_FILES)
-
-#: Run all tests via el-get
-check-elget:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load ../el-get-install.el --load test-basic.el)
-
-#: Run all tests with minimum verbosity
-check-short:
-       $(MAKE) check 2>&1  | ruby ../make-check-filter.rb
-
-#: Run all tests with minimum verbosity via el-get
-check-short-elget:
-       $(MAKE) check-elget 2>&1  | ruby ./make-check-filter.rb
-
-test-%.run:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load $(@:.run=.el))
-
-#: Run tests using el-get to specify external Lisp dependencies
-test-%.elrun:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load ../el-get-install.el --load $(@:.elrun=.el))
-
-# Whatever it is you want to do, it should be forwarded to the
-# to top-level directories
-# %:
-#      $(MAKE) -C .. $@
diff --git a/packages/loc-changes/test/make-check-filter.rb 
b/packages/loc-changes/test/make-check-filter.rb
deleted file mode 100644
index 88cad14..0000000
--- a/packages/loc-changes/test/make-check-filter.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env ruby
-# Use this to cut out the crud from make check.
-# Use like this:
-#   make check 2>&1  | ruby ../make-check-filter.rb
-# See Makefile.am
-pats = ["^(?:Loading",
-        '(re)?make\[',
-        "Making check in",
-        '\(cd \.\.',
-        "Column ignored",
-        "buffer \\*scratch\\*",
-        "\\*scratch\\*",
-        "make -C",
-        "Test-Unit",
-        "Fontifying",
-        '\s*$',
-        '##[<>]+$'
-       ].join('|') + ')'
-# puts pats
-skip_re = /#{pats}/
-
-while gets()
-  next if $_ =~ skip_re
-  puts $_
-end
diff --git a/packages/loc-changes/test/sample.txt 
b/packages/loc-changes/test/sample.txt
deleted file mode 100644
index 7f07c10..0000000
--- a/packages/loc-changes/test/sample.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-This is line 1
-This is line 2
-This is line 3
-This is line 4
-This is line 5
-This is line 6
-This is line 7
-This is line 8
-This is line 9
-This is line 10
-This is line 11
-This is line 12
-This is line 13
-This is line 14
diff --git a/packages/loc-changes/test/test-basic.el 
b/packages/loc-changes/test/test-basic.el
deleted file mode 100644
index 190d1dd..0000000
--- a/packages/loc-changes/test/test-basic.el
+++ /dev/null
@@ -1,107 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <rocky@gnu.org>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 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/>.
-
-(require 'cl)
-(require 'test-simple)
-(load-file "../loc-changes.el")
-
-(test-simple-start)
-
-(setq sample-buffer (find-file-noselect "./sample.txt"))
-
-(note "loc-changes-goto-line error conditions")
-(assert-raises error (loc-changes-goto-line "foo"))
-(message "buffer %s" (current-buffer))
-(assert-raises error (loc-changes-goto-line "0"))
-(assert-raises error (loc-changes-goto-line 0))
-(assert-raises error (loc-changes-goto-line 10000))
-
-(note "loc-changes-goto-line")
-(save-excursion
-  (set-buffer sample-buffer)
-  (loc-changes-goto-line 5)
-  (assert-equal 5 (line-number-at-pos (point))))
-
-(note "loc-changes-goto-line-with-column")
-(with-current-buffer sample-buffer
-  (set-buffer sample-buffer)
-  (loc-changes-goto-line 1 3)
-  (assert-equal 1 (line-number-at-pos (point)))
-  ;; FIXME:
-  ;; (assert-equal 2 (current-column))
-  )
-
-(note "loc-changes-goto-line-invalid-column")
-(save-excursion
-  (set-buffer sample-buffer)
-  (loc-changes-goto-line 1 300)
-  (assert-equal 1 (line-number-at-pos (point)))
-  ;; FIXME
-  ;; (assert-equal 0 (current-column))
-  (assert-t (or
-            (not (current-message))
-            (string-match "^Column ignored." (current-message))))
-  ;; FIXME:
-  ;; (loc-changes-goto-line 2 -5)
-  ;; (assert-equal 2 (line-number-at-pos (point)))
-  ;; (assert-equal 0 (current-column))
-  ;; (assert-t (or
-  ;;        (not (current-message))
-  ;;        (string-match "^Column ignored." (current-message))))
-  )
-
-(note "loc-changes-clear-buffer null")
-(loc-changes-clear-buffer)
-(assert-equal '() loc-changes-alist)
-
-(note "loc-changes-add-and-goto - update")
-(save-excursion
-  (set-buffer sample-buffer)
-  (loc-changes-add-and-goto 10)
-  (assert-equal 10 (line-number-at-pos)
-               "point should be at line 10")
-  ;; FIXME:
-  ;; (assert-t (assq 10 loc-changes-alist)
-  ;;       "Should find 10 in loc-changes-alist")
-  ;; (assert-t (markerp (cdr (assq 10 loc-changes-alist)))
-  ;;       "10 in loc-changes-alist should be a marker")
-  )
-
-(note "loc-changes-goto - update")
-(save-excursion
-  (set-buffer sample-buffer)
-  (loc-changes-goto 11)
-  (assert-equal 11 (line-number-at-pos)
-               "point should be at line 11")
-  ;; FIXME:
-  ;; (assert-t (assq 11 loc-changes-alist)
-  ;;       "Should find 11 in loc-changes-alist")
-  ;; (assert-t (markerp (cdr (assq 11 loc-changes-alist)))
-  ;;       "11 in loc-changes-alist should be a marker")
-  )
-
-(note "loc-changes-goto - no update")
-(save-excursion
-  (set-buffer sample-buffer)
-  (loc-changes-goto 12 nil 't)
-  (assert-equal 12 (line-number-at-pos)
-               "point should be at line 12")
-  (assert-nil (assq 12 loc-changes-alist)
-             "Should not find 12 in loc-changes-alist")
-  )
-
-(end-tests)
diff --git a/packages/loccur/README.md b/packages/loccur/README.md
deleted file mode 100644
index bfb9acd..0000000
--- a/packages/loccur/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Loccur
-## Introduction
-**Loccur** is an amazing tool to quickly navigate in a file. It is a minor 
mode for Emacs acting like **occur** but w/o creating a new window. It just 
hides all the text excepting lines containing matches.
-## Installation
-Add to your `.emacs` or `.emacs.d/init.el` following lines:
-
-```scheme
-(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/";)
-                         ("melpa" . "http://melpa.milkbox.net/packages/";)))
-```
-                         
-Press `M-x` in GNU Emacs and write `list-packages`. Find the `loccur` in the 
list of packages and press `i` to select this package, `x` to install the 
package.
-
-
-## Screenshots
-Better to see it once:
-
-![loccur_gui](https://github.com/fourier/loccur/raw/screenshots/gui_emacs_with_loccur.gif
 "GUI Emacs with loccur")
-![loccur_term](https://github.com/fourier/loccur/raw/screenshots/emacs_with_loccur.gif
 "Emacs in terminal with loccur")
-
-
-## Usage
-
-To use it, add the following to your .emacs file:
-
-```scheme
-(require 'loccur)
-;; defines shortcut for loccur of the current word
-(define-key global-map [(control o)] 'loccur-current)
-;; defines shortcut for the interactive loccur command
-(define-key global-map [(control meta o)] 'loccur)
-;; defines shortcut for the loccur of the previously found word
-(define-key global-map [(control shift o)] 'loccur-previous-match)
-```
-
-Now you can point the cursor to the word and press `Ctrl+o` to hide all lines 
except those containing this word. Moving cursor to the required line and 
pressing `Ctrl+o` again will shows all the text. The good thing about this mode 
is what you can navigate through the buffer easily. `Ctrl+Shift+o` will repeat 
last search.
-
-### Available commands
-Below is the list of interactive commands available for user:
-
-* `loccur` interactively asks user for regexp to search or toggle search off 
(if `loccur-mode` is already enabled)
-* `loccur-current` searches for the current word under the cursor
-* `loccur-previous-match` repeat previous `loccur` command
-* `loccur-no-highlight` is the same as `loccur` but not highlighting matches
-* `loccur-toggle-highlight` toggles highlighting of matches
-
-### Customization
-* `loccur-jump-beginning-of-line` variable specifies if move the cursor to the 
beginning of the matching line. Default `nil`
-* `loccur-highlight-matching-regexp` variable whenever `loccur` should 
highlight matching words. Default `t`.
-* `loccur-face` face to be used while highlighting. Default points to 
`isearch` face.
-
-### Tips and tricks
-To combine **Loccur** and **isearch** functionality (narrowing-search) one can 
use the following hooks:
-```lisp
-(add-hook 'isearch-update-post-hook
-          (lambda ()
-            (let ((loccur-mode nil))
-              (loccur (regexp-quote isearch-string)))))
-
-(add-hook 'isearch-mode-end-hook
-          (lambda ()
-            (loccur nil)))
-```
diff --git a/packages/loccur/loccur.el b/packages/loccur/loccur.el
deleted file mode 100644
index b184eb2..0000000
--- a/packages/loccur/loccur.el
+++ /dev/null
@@ -1,358 +0,0 @@
-;;; loccur.el --- Perform an occur-like folding in current buffer -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2009-2019 Free Software Foundation, Inc
-;;
-;; Author: Alexey Veretennikov <alexey.veretennikov@gmail.com>
-;;
-;; Created: 2009-09-08
-;; Version: 1.2.4
-;; Package-Requires: ((emacs "24.3"))
-;; Keywords: matching
-;; URL: https://github.com/fourier/loccur
-;; Compatibility: GNU Emacs 24.3
-;;
-;; This file is part of GNU Emacs.
-;;
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; Add the following to your .emacs file:
-;;
-;;     ;; defines shortcut for loccur of the current word
-;;     (define-key global-map [(control o)] 'loccur-current)
-;;     ;; defines shortcut for the interactive loccur command
-;;     (define-key global-map [(control meta o)] 'loccur)
-;;     ;; defines shortcut for the loccur of the previously found word
-;;     (define-key global-map [(control shift o)] 'loccur-previous-match)
-;;
-;;; Issues:
-;; Using with smooth-scrolling.el sometimes
-;; gives unexpected jumps in loccur mode
-;;
-;;; TODO:
-;;
-;;; Change Log:
-;;
-;; 2019-10-22 (1.2.4)
-;;    + Added fix for the issue when the actions to perform
-;;      then the loccur-mode was disactivated were incomplete.
-;;    + Then loccur or loccur-no-highlight are called with universal prefix,
-;;      i.e. with C-u before the command, the currently selected value is
-;;      ignored.
-;;      Then people want this behavior by default, it is better wrap the call
-;;      to loccur with universal prefix, i.e. by implementing a helper
-;;      function like this:
-;;
-;;      (defun loccur-no-selection ()
-;;        (interactive)
-;;          (let ((current-prefix-arg 1))
-;;              (call-interactively
-;;                   'loccur)))
-;;
-;;      And then just call this function instead of loccur.
-;;
-;; 2016-12-26 (1.2.3)
-;;    + Removed empty line in the beginning of the buffer.
-;;    + Added 'Tips and tricks' session to the README.md file
-;; 2015-12-27 (1.2.2)
-;;    + Preparation for GNU ELPA submission. Removed contributions
-;;    without signed papers
-;;    + added loccur-face - face to highlight text, by default isearch
-;;
-;; 2013-10-22 (1.2.1)
-;;    + Added custom option loccur-jump-beginning-of-line; removed some
-;;    of cl dependencies
-;;
-;; 2010-03-07 (1.1.1)
-;;    + Default value is taken from prompt instead of an edit area
-;;    (thanks to Nathaniel Flath)
-;;
-;; 2009-10-05 (1.1.0)
-;;    + Added highlighting of the matched strings
-;;    + Now inserts selected region to the prompt
-;;    + Added defun for applying last found regexp(loccur-previous-match)
-;;    + Added intangible property together with invisibility
-;;
-;; 2009-09-08 (1.0.0)
-;;    Initial Release.
-;;
-;;; Code:
-
-(require 'cl-lib)
-
-(defgroup loccur nil
-  "Perform an occur-like folding in current buffer."
-  :group 'tools)
-
-;; should be defined before define-minor-mode
-(defvar loccur-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "RET") '(lambda () (interactive) (loccur nil)))
-    ;; redefine Ctrl+Up/Down to Up/Down, since it looks like some problem
-    ;; with backward-paragraph and forward-paragraph with invisible overlays
-    (define-key map (kbd "<C-up>") 'previous-line)
-    (define-key map (kbd "<C-down>") 'next-line)
-    map)
-  "Keymap for the variable `loccur-mode'.")
-
-(define-minor-mode loccur-mode
-  "Minor mode for navigating through the file.
-Hides all lines without matches like `occur' does, but without opening
-a new window."
-  :lighter " loccur"
-  (if loccur-mode
-      (loccur-1 loccur-current-search)
-    ;; remove current search and turn off loccur mode
-    ;; to allow to call `loccur' multiple times
-    (setf loccur-current-search nil)
-    (loccur-remove-overlays)
-    (recenter)))
-
-(defface loccur-face
-  '((t (:inherit isearch)))
-  "Loccur face")
-
-
-(defconst loccur-overlay-invisible-property-name 'loccur-invisible-overlay
-  "Property name of the overlay for all invisible text.")
-
-(defconst loccur-overlay-visible-property-name 'loccur-visible-overlay
-  "Property name of the overlay for all visible text.")
-
-(defcustom loccur-jump-beginning-of-line nil
-  "Set cursor to the beginning of the line when the loccur function is called.
-Default: nil"
-  :type '(boolean)
-  :group 'loccur)
-
-(defcustom loccur-highlight-matching-regexp t
-  "If set to nil, do not highlight matching words.
-Default: t"
-  :type '(boolean)
-  :group 'loccur)
-
-(defvar loccur-history nil
-  "History of previously searched expressions for the prompt.")
-
-(defvar-local loccur-last-match nil
-  "Last match found.")
-
-(defvar-local loccur-overlay-list nil
-  "A list of currently active overlays.")
-
-(defvar-local loccur-current-search nil
-  "The expression to search in the current active mode.")
-
-;;;###autoload
-(defun loccur-current ()
-  "Call `loccur' for the current word."
-  (interactive)
-  (loccur (current-word)))
-
-
-(defun loccur-previous-match ()
-  "Call `loccur' for the previously found word."
-  (interactive)
-  (loccur loccur-last-match))
-
-(defun loccur-no-highlight (regex)
-  "Perform search like loccur, but temporary removing match highlight.
-REGEX is regexp to search"
-  (interactive
-   (if loccur-mode
-       nil
-     (list (read-string "Loccur: " (loccur-prompt) 'loccur-history))))
-  (let ((loccur-highlight-matching-regexp nil))
-    (loccur regex)))
-
-(defun loccur-toggle-highlight ()
-  "Toggle the highlighting of the match."
-  (interactive)
-  (setq loccur-highlight-matching-regexp (not 
loccur-highlight-matching-regexp))
-  (when loccur-mode
-    (dolist (ovl loccur-overlay-list)
-      (when (overlay-get ovl loccur-overlay-visible-property-name)
-        (overlay-put ovl 'face (if loccur-highlight-matching-regexp 
'loccur-face nil))))))
-
-;;;###autoload
-(defun loccur (regex)
-  "Perform a simple grep in current buffer.
-
-This command hides all lines from the current buffer except those
-containing the regular expression REGEX.  A second call of the function
-unhides lines again.
-
-When called interactively, either prompts the user for REGEXP or,
-when called with an active region, uses the content of the
-region, unless called with the universal prefix (C-u)"
-  (interactive
-   (cond ((region-active-p)
-          (list (buffer-substring (mark) (point))))
-         (loccur-mode
-          (list nil))
-         (t
-          (list (read-string "Loccur: "
-                             (loccur-prompt)
-                             'loccur-history)))))
-  (when (region-active-p) (deactivate-mark))
-  (if (or loccur-mode
-          (= (length regex) 0))
-      (loccur-mode 0)
-    ;; otherwise do as usual
-    ;; if the regex argument is not equal to previous search
-    (when (not (string-equal regex loccur-current-search))
-      (cl-pushnew regex loccur-history)
-      (setf loccur-current-search regex)
-      (loccur-mode)
-      (when loccur-jump-beginning-of-line
-        (beginning-of-line))))) ; optionally jump to the beginning of line
-
-
-(defun loccur-prompt ()
-  "Return the default value of the prompt.
-
-Default value for prompt is a current word or active region(selection),
-if its size is 1 line.
-When the universal prefix is used, i.e. loccur called
-with C-u prefix, returns empty string"
-  (if current-prefix-arg
-      ""
-    (let ((prompt
-           (if (and transient-mark-mode
-                    mark-active)
-               (let ((pos1 (region-beginning))
-                     (pos2 (region-end)))
-                 ;; Check if the start and the end of an active region is on
-                 ;; the same line
-                 (when (save-excursion
-                         (goto-char pos1)
-                         (<= pos2 (line-end-position)))
-                   (buffer-substring-no-properties pos1 pos2)))
-             (current-word))))
-      prompt)))
-
-
-(defun loccur-1 (regex)
-  "Implementation of the `loccur' functionality.
-
-REGEX is an argument to `loccur'."
-  (let* ((buffer-matches (loccur-find-matches regex))
-         (ovl-bounds (loccur-create-overlay-bounds-btw-lines buffer-matches)))
-    (setq loccur-overlay-list
-          (loccur-create-invisible-overlays ovl-bounds))
-
-    (setq loccur-overlay-list
-          (append loccur-overlay-list
-                  (loccur-create-highlighted-overlays buffer-matches)))
-    (setq loccur-last-match regex)
-    (recenter)))
-
-(defun loccur-create-highlighted-overlays (buffer-matches)
-  "Create the list of overlays for BUFFER-MATCHES."
-  (let ((overlays
-         (mapcar (lambda (match)
-                   (make-overlay
-                    (nth 1 match)
-                    (nth 2 match)
-                    (current-buffer) t nil))
-                 buffer-matches)))
-    (mapc (lambda (ovl)
-            (overlay-put ovl loccur-overlay-visible-property-name t)
-            (when loccur-highlight-matching-regexp
-              (overlay-put ovl 'face 'loccur-face)))
-          overlays)))
-
-
-(defun loccur-create-invisible-overlays (ovl-bounds)
-  "Create a list of invisible overlays by given OVL-BOUNDS."
-  (let ((overlays
-         (mapcar (lambda (bnd)
-                   (make-overlay
-                    (car bnd)
-                    (cadr bnd)
-                    (current-buffer) t nil))
-                 ovl-bounds)))
-    (mapc (lambda (ovl)
-            (overlay-put ovl loccur-overlay-invisible-property-name t)
-            (overlay-put ovl 'invisible t)
-            ;; force intangible property if invisible property
-            ;; does not automatically set it
-            (overlay-put ovl 'intangible t))
-          overlays)))
-
-
-(defun loccur-remove-overlays ()
-  "Remove all overlays."
-  (remove-overlays (point-min) (point-max) 
loccur-overlay-visible-property-name t)
-  (remove-overlays (point-min) (point-max) 
loccur-overlay-invisible-property-name t)
-  (setq loccur-overlay-list nil))
-
-
-(defun loccur-create-overlay-bounds-btw-lines (buffer-matches)
-  "Create a list of overlays between matched lines BUFFER-MATCHES."
-  (let ((prev-end (point-min))
-        (overlays (list)))
-    (when buffer-matches
-      (push (list 1 (caar buffer-matches)) overlays)
-      (mapc (lambda (line)
-              (let ((beginning (car line)))
-                (unless ( = (- beginning prev-end) 1)
-                  (let ((ovl-end  (1- beginning)))
-                    (push (list prev-end ovl-end) overlays)))
-                (setq prev-end (nth 3 line))))
-            buffer-matches)
-      (push (list (1+ prev-end) (point-max)) overlays)
-      (setq overlays (nreverse overlays)))))
-
-
-(defun loccur-find-matches (regex)
-  "Find all occurences in the current buffer for given REGEX.
-
-Returns a list of 4-number tuples, specifying begnning of the line,
-1st match begin of a line, 1st match end of a line, end of a line
-containing match"
-  (save-excursion
-    ;; Go to the beginnig of buffer
-    (goto-char (point-min))
-    ;; Set initial values for variables
-    (let ((endpoint nil)
-          (lines (list)))
-      ;; Search loop
-      (while (not (eobp))
-        ;; if something found
-        (when (setq endpoint (re-search-forward regex nil t))
-          (save-excursion
-            (let ((found-begin (match-beginning 0))
-                  (found-end (match-end 0)))
-              ;; Get the start and the and of the matching line
-              ;; and store it to the overlays array
-              (goto-char found-begin)
-              (setq endpoint (line-end-position))
-              (push (list (line-beginning-position)
-                          found-begin
-                          found-end
-                          endpoint) lines)))
-          ;; maybe add some code to highlight matches like in occur-mode?
-          ;; goto the end of line for any case
-          (goto-char endpoint))
-        (forward-line 1))
-      (setq lines (nreverse lines)))))
-
-
-
-
-
-(provide 'loccur)
-;;; loccur.el ends here
diff --git a/packages/mines/.travis.yml b/packages/mines/.travis.yml
deleted file mode 100644
index 1401cb1..0000000
--- a/packages/mines/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: emacs-lisp
-
-notifications:
-  email:
-    on_success: never
-    on_failure: always
-
-env:
-  # - EVM_EMACS=emacs-24.3-travis # cookie1 needed.
-  - EVM_EMACS=emacs-24.4-travis
-  - EVM_EMACS=emacs-24.5-travis
-  - EVM_EMACS=emacs-git-snapshot-travis
-
-before_install:
-  - git clone https://github.com/rejeep/evm.git $HOME/.evm
-  - export PATH=$HOME/.evm/bin:$PATH
-
-  - evm config path /tmp
-  - evm install $EVM_EMACS --use --skip
-
-script:
-  - make test
diff --git a/packages/mines/LICENSE b/packages/mines/LICENSE
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/mines/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 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.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  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, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public 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.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/mines/Makefile b/packages/mines/Makefile
deleted file mode 100644
index 97718b7..0000000
--- a/packages/mines/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-emacs ?= emacs
-
-LOAD = -l mines.el
-
-all: test
-
-test:
-       $(emacs) -batch $(LOAD) -l mines-tests.el -f 
ert-run-tests-batch-and-exit
-
-compile:
-       $(emacs) -batch --eval "(progn (add-to-list 'load-path 
default-directory) (byte-compile-file \"mines.el\"))"
-
-clean:
-       rm -f *.elc
-
-.PHONY: all compile clean test
diff --git a/packages/mines/README.md b/packages/mines/README.md
deleted file mode 100644
index 2cf3aed..0000000
--- a/packages/mines/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Minesweeper
-Play minesweeper in Emacs
-
-[![Build 
Status](https://api.travis-ci.org/calancha/Minesweeper.svg?branch=master)](https://travis-ci.org/calancha/Minesweeper)
-
-This is an elisp implementation of the classical minesweeper game.
-The target is localize all hidden mines (bombs) in a rectangular board
-without detonating them.  You reveal the content of a cell with the
-command **mines-dig**.
-
-1. Cells with a bomb contain the character **x**; if you call **mines-dig**
-   in these cells then you lost the game.
-
-2. Cells without bomb at distance 1 from any cell with a mine
-   contain a number: the number of bombs at distance 1 from this cell.
-   If you reveal the content of this cell, then this number is shown.
-
-3. Cells without a bomb at distance > 1 from any bomb contain **@**.
-   If you reveal the content of this cell, then **@** is shown and
-   all adjacent cells are recursively revealed.
-
-
-If you think that an uncovered cell has a mine, you might flag it
-with **mines-flag-cell**: the character **!** is shown in that cell.
-If you call this command again in the same cell then unflags it.  This is
-useful to visualize your progress in the game.
-
-The game is completed once all mine-free cells are revealed, that is,
-when the only uncovered cells equals the number of hidden mines.
-
-### Screenshots
-
-minesweeper screenshot:
-![ScreenShot](/screenshots/screenshot-minesweeper.png)
-
-Game over screenshot:
-![ScreenShot](/screenshots/screenshot-minesweeper-gameover.png)
diff --git a/packages/mines/mines-tests.el b/packages/mines/mines-tests.el
deleted file mode 100644
index c5deca1..0000000
--- a/packages/mines/mines-tests.el
+++ /dev/null
@@ -1,251 +0,0 @@
-;;; mines-tests.el --- Tests for mines.el  -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017 Free Software Foundation, Inc.
-
-;; Author: Tino Calancha <tino.calancha@gmail.com>,
-;; Keywords:
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; code:
-
-(require 'ert)
-(require 'mines)
-(require 'cl-lib)
-
-(ert-deftest mines-test-gameover ()
-  (mines)
-  (let ((buf (get-buffer "*Mines*"))
-        (grid-orig (copy-sequence mines-grid))
-        (idx-bomb (cl-position t mines-grid))
-        idx-ok grid-new)
-    (with-current-buffer buf
-      (mines-goto idx-bomb) ; Go to first mine.
-      (setq idx-ok (cl-position-if-not (lambda (x) (eq t x)) mines-grid))
-      (should (mines-first-move-p))
-      (should-not (mines-dig)) ; Not gameover in first trial.
-      (setq grid-new (copy-sequence mines-grid))
-      ;; Adjacent cells to bombs must be updated as well.
-      (should-not (equal grid-orig
-                         (cl-rotatef (aref grid-new idx-bomb)
-                                     (aref grid-new idx-ok))))
-      (mines-goto (cl-position t mines-grid))
-      (should-not (mines-first-move-p))
-      ;; 2nd trial might end the game.
-      (cl-letf (((symbol-function 'yes-or-no-p)
-                 (lambda (&rest _) (error "Fail"))))
-        (should-error (mines-dig))))
-    (when (buffer-live-p buf) (kill-buffer buf))))
-
-(ert-deftest mines-test-find-pos ()
-  (mines)
-  (let* ((buf (get-buffer "*Mines*"))
-         (empty-pos (mines--find-pos nil mines-grid))
-         (non-empty-pos (cl-set-difference
-                         (number-sequence 0 (1- mines-number-cells))
-                         empty-pos)))
-    (with-current-buffer buf
-      (dolist (idx empty-pos)
-        (should-not (aref mines-grid idx)))
-      (dolist (idx non-empty-pos)
-        (should (aref mines-grid idx))))
-    (when (buffer-live-p buf) (kill-buffer buf))))
-
-(ert-deftest mines-test-game-completed ()
-  (mines)
-  (let ((buf (get-buffer "*Mines*"))
-        (empty-pos (mines--find-pos nil mines-grid))
-        uncover-pos)
-    (with-current-buffer buf
-      (should (mines-mines-mode-p))
-      ;; Uncover all empty cells.
-      (dolist (idx empty-pos)
-        (mines-goto idx)
-        (mines-dig))
-      (setq uncover-pos (mines--find-pos nil mines-state))
-      ;; Exclude mines from `uncover-pos'.
-      (dolist (idx mines-mine-positions)
-        (setq uncover-pos (delete idx uncover-pos)))
-      ;; Uncover all but the first element in `uncover-pos'.
-      (dolist (idx (cdr uncover-pos))
-        (mines-goto idx)
-        (mines-dig))
-      (should-not (mines-end-p))
-      (mines-goto (car uncover-pos))
-      (mines-dig) ; Uncover the last one.
-      (should (mines-end-p)) ; Game completed.
-      (when (buffer-live-p buf) (kill-buffer buf)))))
-
-(ert-deftest mines-test-indices ()
-  (should (= 0 (mines-matrix-2-index 0 0)))
-  (should (= 1 (mines-matrix-2-index 0 1)))
-  (should (= (1- mines-number-cols)
-             (mines-matrix-2-index 0 (1- mines-number-cols))))
-  (should (= (* mines-number-cols (1- mines-number-rows))
-             (mines-matrix-2-index (1- mines-number-rows) 0)))
-  (should (= (1- mines-number-cells)
-             (mines-matrix-2-index (1- mines-number-rows)
-                                   (1- mines-number-cols))))
-  ;; `mines-matrix-2-index' consistent with `mines-index-2-matrix'.
-  (dolist (idx (list 0 1 (1- mines-number-cols)
-                     (* mines-number-cols (1- mines-number-rows))
-                     (1- mines-number-cells)))
-    (should (= idx (apply #'mines-matrix-2-index (mines-index-2-matrix 
idx))))))
-
-(ert-deftest mines-test-neighbours ()
-  (cl-flet ((set-equalp (x y)
-                        (and (null (cl-set-difference x y))
-                             (= (length x) (length y)))))
-    (set-equalp (list 1 mines-number-cols (1+ mines-number-cols))
-                (mines-get-neighbours 0))
-    (set-equalp (list 0 2 mines-number-cols (1+ mines-number-cols) (+ 2 
mines-number-cols))
-                (mines-get-neighbours 1))
-    (set-equalp (list 1 2 3 mines-number-cols (1+ mines-number-cols) (+ 3 
mines-number-cols)
-                      (+ 2 (* 2 mines-number-cols)) (1+ (* 2 
mines-number-cols)) (+ 3 (* 2 mines-number-cols)))
-                (mines-get-neighbours (+ 2 mines-number-cols)))
-    (set-equalp (list (- mines-number-cells 2)
-                      (1- (* (1- mines-number-rows) mines-number-cols))
-                      (- (* (1- mines-number-rows) mines-number-cols) 2))
-                (mines-get-neighbours (1-  mines-number-cells)))))
-
-(ert-deftest mines-test-neighbours ()
-  (mines)
-  (let ((buf (get-buffer "*Mines*")))
-    (with-current-buffer buf
-      (mines-goto (1- mines-number-cols))
-      (should (eq (following-char) mines-uncover-cell-char))
-      (mines-flag-cell) ; First time flag cell.
-      (should (eq (following-char) mines-flagged-cell-char))
-      (mines-flag-cell) ; Second time unflag.
-      (should (eq (following-char) mines-uncover-cell-char))
-      (when (buffer-live-p buf) (kill-buffer buf)))))
-
-(ert-deftest mines-test-goto ()
-  (mines)
-  (let ((buf (get-buffer "*Mines*")))
-    (with-current-buffer buf
-      (dolist (idx (list 0 1 (1- mines-number-cols) (1- mines-number-rows)
-                         (1- mines-number-cells)))
-        (mines-goto idx)
-        (should (= idx (mines-current-pos))))
-      (let ((idx (+ 100 mines-number-cells)))
-        (mines-goto idx) ; No error
-        (should-not (= idx (mines-current-pos))))
-      ;; Test right. left, up, down movements.
-      (dotimes (idx mines-number-cells)
-        (mines-goto idx)
-        (let* ((row (car (mines-index-2-matrix idx)))
-               (col (cadr (mines-index-2-matrix idx)))
-               (idx-right (if (= col (1- mines-number-cols))
-                              (mines-matrix-2-index row 0)
-                            (mines-matrix-2-index row (1+ col))))
-               (idx-left (if (zerop col)
-                             (mines-matrix-2-index row (1- mines-number-cols))
-                           (mines-matrix-2-index row (1- col))))
-               (idx-up (if (zerop row)
-                           (mines-matrix-2-index (1- mines-number-rows) col)
-                         (mines-matrix-2-index (1- row) col)))
-               (idx-down (if (= row (1- mines-number-rows))
-                             (mines-matrix-2-index 0 col)
-                           (mines-matrix-2-index (1+ row) col))))
-          (save-excursion ; Right
-            (mines-go-right)
-            (should (= idx-right (mines-current-pos))))
-          (save-excursion ; Left
-            (mines-go-left)
-            (should (= idx-left (mines-current-pos))))
-          (save-excursion ; Up
-            (mines-go-up)
-            (should (= idx-up (mines-current-pos))))
-          (save-excursion ; Down
-            (mines-go-down)
-            (should (= idx-down (mines-current-pos)))))))
-    (when (buffer-live-p buf) (kill-buffer buf))))
-
-;; `mines--near-bombs' is used when `mines-grid' just contains nil or t.
-(ert-deftest mines-test-near-bombs ()
-  (mines)
-  (let ((buf (get-buffer "*Mines*"))
-        (grid (make-vector mines-number-cells nil)))
-    (dolist (idx mines-mine-positions)
-      (aset grid idx t))
-    (with-current-buffer buf
-      (let ((mines-grid grid))
-        (dotimes (idx mines-number-cells)
-          (unless (aref grid idx)
-            (let ((row (car (mines-index-2-matrix idx)))
-                  (col (cadr (mines-index-2-matrix idx)))
-                  (numb 0))
-              (mines-goto idx)
-              ;; Right
-              (when (< col (1- mines-number-cols))
-                (when (aref grid (mines-matrix-2-index row (1+ col)))
-                  (cl-incf numb)))
-              ;; Left
-              (unless (zerop col)
-                (when (aref grid (mines-matrix-2-index row (1- col)))
-                  (cl-incf numb)))
-              ;; Up
-              (unless (zerop row)
-                (when (aref grid (mines-matrix-2-index (1- row) col))
-                  (cl-incf numb)))
-              ;; Up-Right
-              (when (and (not (zerop row)) (< col (1- mines-number-cols)))
-                (when (aref grid (mines-matrix-2-index (1- row) (1+ col)))
-                  (cl-incf numb)))
-              ;; Up-Left
-              (when (and (not (zerop row)) (not (zerop col)))
-                (when (aref grid (mines-matrix-2-index (1- row) (1- col)))
-                  (cl-incf numb)))
-              ;; Down
-              (unless (= row (1- mines-number-rows))
-                (when (aref grid (mines-matrix-2-index (1+ row) col))
-                  (cl-incf numb)))
-              ;; Down-Right
-              (when (and (not (= row (1- mines-number-rows))) (< col (1- 
mines-number-cols)))
-                (when (aref grid (mines-matrix-2-index (1+ row) (1+ col)))
-                  (cl-incf numb)))
-              ;; Down-Left
-              (when (and (not (= row (1- mines-number-rows))) (not (zerop 
col)))
-                (when (aref grid (mines-matrix-2-index (1+ row) (1- col)))
-                  (cl-incf numb)))
-              (should (= numb (mines--near-bombs row col))))))))
-    (when (buffer-live-p buf) (kill-buffer buf))))
-
-(ert-deftest mines-test-read-multiple-choice ()
-  (if (> emacs-major-version 25)
-      (dolist (char '(?e ?m ?h ??))
-        (cl-letf* (((symbol-function #'read-char) (lambda () char))
-                   (str (cdr (assoc char '((?e . "Easy") (?m . "Medium") (?h . 
"Hard") (?? . "Help"))))))
-          (should (equal (list char str)
-                         (read-multiple-choice "Choose level "
-                                               '((?e "Easy") (?m "Medium") (?h 
"Hard") (?? "Help")))))))
-    (cl-block :help
-      ;; When char is ? `mines--read-multiple-choice' enter a loop until char
-      ;; is a different character.  Exit the loop.
-      (dolist (char '(?e ?m ?h ??))
-        (cl-letf (((symbol-function #'read-char)
-                   (lambda (&rest _) (if (eq char ??) (cl-return-from :help 
nil) char))))
-          (should (mines--read-multiple-choice)))))))
-
-
-(provide 'mines-tests)
-;;; mines-tests.el ends here
-
diff --git a/packages/mines/mines.el b/packages/mines/mines.el
deleted file mode 100644
index 9562e09..0000000
--- a/packages/mines/mines.el
+++ /dev/null
@@ -1,709 +0,0 @@
-;;; mines.el --- Minesweeper game -*- lexical-binding: t -*-
-
-;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
-
-;; Author: Tino Calancha <tino.calancha@gmail.com>
-;; Created: 2017-10-28
-;; Keywords: games
-;; Version: 1.6
-;; Package-Requires: ((emacs "24.4") (cl-lib "0.5"))
-;; url: https://github.com/calancha/Minesweeper
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This is an elisp implementation of the classical minesweeper game.
-;; The target is localize all hidden mines (bombs) in a rectangular board
-;; without detonating them.  You reveal the content of a cell with the
-;; command `mines-dig'.
-;;
-;; 1. Cells with a bomb contain the character 'x'; if you call `mines-dig'
-;;    in these cells then you lost the game.
-
-;; 2. Cells without bomb at distance 1 from any cell with a mine
-;;    contain a number: the number of bombs at distance 1 from this cell.
-;;    If you reveal the content of this cell, then this number is shown.
-;;
-;; 3. Cells without a bomb at distance > 1 from any bomb contain ' '.
-;;    If you reveal the content of this cell, then ' ' is shown and
-;;    all adjacent cells are recursively revealed.
-;;
-;;
-;; If you think that an uncovered cell has a mine, you might flag it
-;; with `mines-flag-cell'; if you call this command again in the same
-;; cell the cell is unflagged.  This is useful to visualize your
-;; progress in the game.
-;;
-;; The game is completed once all mine-free cells are revealed, that is,
-;; when the only uncovered cells equals the number of hidden mines.
-;;
-
-;;; Code:
-
-;; TODO:
-;; - Arrange for the remaining number of mines to be displayed in the
-;;   modeline.
-;; - Center the board in the window (when smaller than the window).
-;; - Add colors to the numbers
-
-(require 'gamegrid)
-(require 'cl-lib)
-(require 'cookie1) ; For `cookie-shuffle-vector'.
-
-
-;;; Internal variables.
-(defgroup mines nil
-  "Play minessweeper."
-  :group 'games
-  :prefix "mines-")
-
-(defcustom mines-protect-first-move t
-  "If non-nil, make sure first move reveals an empty cell."
-  :type 'boolean
-  :version "27.1")
-
-(defcustom mines-mode-hook nil
-  "Hook run by mines mode."
-  :type 'hook
-  :version "27.1")
-
-(defcustom mines-auto-flag t
-  "Auto-add flags when they're obvious."
-  :type 'boolean)
-
-(defvar mines-uncover-cell-char ?.
-  ;; FIXME: "uncover" means to remove the cover, so this is counter-intuitive,
-  ;; because I think of this "." as covering the cell and `mines-dig' as
-  ;; uncovering them.  Similarly the use of "uncovered" in the Commentary
-  ;; is confusing.
-  "Char to display uncover cells.")
-
-(defvar mines-flagged-cell-char ?!
-  "Char to display flagged cells as maybe having a mine.")
-
-(defvar mines-empty-cell-char ?\s
-  "Char to display a cell without mine nor numbers.")
-
-(defvar mines-empty-cell-mine ?x ;FIXME: Use ?💣 when a glyph is available!
-  "Char to display a cell with a mine.")
-
-(defvar mines-buffer nil "Buffer where play minesweeper.")
-(defvar mines-start-pos 2 "Initial prompt position.")
-(defvar mines-number-mines 10 "Number of mines.")
-(defvar mines-number-rows 8 "Nmber of rows.")
-(defvar mines-number-cols 8 "Number of columns.")
-(defvar mines-number-cells (* mines-number-rows mines-number-cols)
-  "Number of cells.")
-
-(defcustom mines-difficulty-level 'easy
-  "Level of difficulty.
-If `easy' we have 8 columns x 8 columns and 10 mines.
-If `medium' we have 16 columns x 16 columns and 40 mines.
-If `hard' we have 30 columns x 16 columns and 99 mines.
-If `custom' then ask user for these numbers."
-  :type '(choice (const :tag "Easy" easy)
-                 (const :tag "Medium" medium)
-                 (const :tag "Hard" hard)
-                 (const :tag "Custom" custom))
-  :group 'games
-  :set (lambda (sym val)
-         (if (not (eq val 'custom))
-             (set sym val)
-           (setq mines-number-cols (read-number "Number of columns: ")
-                 mines-number-rows (read-number "Number of rows: ")
-                 mines-number-mines (read-number "Number of mines: "))
-           (set sym val)))
-  :version "27.1")
-
-(defvar mines-grid nil
-  "Game configuration.
-Each cell can hold either:
-- `bomb' to mean there's a bomb at that position.
-- nil if there's no bomb here nor in any neighbor.
-- an integer indicating the number of neighbors with bombs.")
-
-(defvar mines-state nil
-  "Game state.
-Each cell can be either:
-- t to mean it's covered
-- nil to mean it's been uncovered
-- `flag' to mean that it's covered and flag'd.")
-
-(defvar mines-gap-positions nil "Empty cell positions.")
-(defvar mines-init-time nil "Initial time of the game.")
-(defvar mines-end-time nil "End time of the game.")
-(defvar mines-undone-neighbours nil
-  "List of uncovered neighbours for the current cell.")
-
-(defvar-local mines-game-over nil
-  "Non-nil if the game in current buffer has ended.")
-
-(defmacro mines-init (cond1 cond2 cond3 cond4 &rest body)
-  (declare (debug (form form form form &rest body)))
-  `(progn
-     (cond (,cond1
-            (setq mines-number-cols 8
-                  mines-number-rows 8
-                  mines-number-mines 10
-                  mines-difficulty-level 'easy))
-           (,cond2
-            (setq mines-number-cols 16
-                  mines-number-rows 16
-                  mines-number-mines 40
-                  mines-difficulty-level 'medium))
-           (,cond3
-            (setq mines-number-cols 30
-                  mines-number-rows 16
-                  mines-number-mines 99
-                  mines-difficulty-level 'hard))
-           (,cond4 (setq mines-difficulty-level 'custom) ,@body))
-     (setq mines-number-cells (* mines-number-rows mines-number-cols))))
-
-
-;;; Moving.
-(defun mines-index-2-matrix (idx)
-  "Translate 1-D array index into 2-D matrix indices."
-  (let* ((col (% idx mines-number-cols))
-         (row (/ idx mines-number-cols)))
-    (list row col)))
-
-(defun mines-matrix-2-index (row col)
-  "Translate 2-D matrix indices into 1-D array index."
-  (+ col (* row mines-number-cols)))
-
-(defun mines-get-neighbours (idx)
-  "Return cell neighbour indices for cell at IDX."
-  (let* ((row-col (mines-index-2-matrix idx))
-         (row (car row-col))
-         (col (cadr row-col))
-         res)
-    (cl-flet ((add-fn (to-row)
-                      (or (= row to-row) (push (list to-row col) res))
-                      (and (< col (1- mines-number-cols))
-                           (push (list to-row (1+ col)) res))
-                      (or (zerop col) (push (list to-row (1- col)) res))))
-      (progn
-        (add-fn row) ; Horizontal neighburs.
-        (unless (zerop row) (add-fn (1- row))) ; Up neighbours.
-        (when (< row (1- mines-number-rows)) ; Below neighbours.
-          (add-fn (1+ row)))))
-    (mapcar (lambda (x) (mines-matrix-2-index (car x) (cadr x))) res)))
-
-(defun mines-goto (idx)
-  "Move to cell at IDX."
-  (goto-char (point-min))
-  (let ((cidx (mines-current-pos)))
-    (ignore-errors ;;FIXME: Why?
-      (while (not (= cidx idx))
-        (goto-char (next-single-property-change (point) 'idx))
-        (setq cidx (mines-current-pos)))
-      (goto-char (1+ (point))))))
-
-(defun mines-go-right ()
-  "Move 1 cell to the right."
-  (interactive)
-  (if (= (point) (point-max))
-      (progn
-        (forward-line -1)
-        (goto-char (1+ (point))))
-    (let* ((idx (mines-current-pos))
-           (row-col (mines-index-2-matrix idx))
-           (row (car row-col))
-           (col (cadr row-col)))
-      (if (= col (1- mines-number-cols))
-          (mines-goto (apply #'mines-matrix-2-index (list row 0)))
-        (mines-goto (1+ (mines-current-pos)))))))
-
-(defun mines-go-left ()
-  "Move 1 cell to the left."
-  (interactive)
-  (if (eobp)
-      (goto-char (1- (point)))
-    (let* ((idx (mines-current-pos))
-           (row-col (mines-index-2-matrix idx))
-           (row (car row-col))
-           (col (cadr row-col)))
-      (if (zerop col)
-          (mines-goto (apply #'mines-matrix-2-index
-                             (list row (1- mines-number-cols))))
-        (mines-goto (1- (mines-current-pos)))))))
-
-(defun mines-go-down ()
-  "Move to the cell under the current one."
-  (interactive)
-  (if (= (point) (point-max))
-      (goto-char mines-start-pos)
-    (let* ((idx (mines-current-pos))
-           (row-col (mines-index-2-matrix idx))
-           (row (car row-col))
-           (col (cadr row-col)))
-      (if (= row (1- mines-number-rows))
-          (mines-goto (apply #'mines-matrix-2-index (list 0 col)))
-        (mines-goto (apply #'mines-matrix-2-index (list (1+ row) col)))))))
-
-(defun mines-go-up ()
-  "Move to the cell over the current one."
-  (interactive)
-  (if (= (point) (point-max))
-      (progn
-        (forward-line -1)
-        (goto-char (1+ (point))))
-    (let* ((idx (mines-current-pos))
-           (row-col (mines-index-2-matrix idx))
-           (row (car row-col))
-           (col (cadr row-col)))
-      (if (zerop row)
-          (mines-goto (apply #'mines-matrix-2-index (list (1- 
mines-number-rows) col)))
-        (mines-goto (apply #'mines-matrix-2-index (list (1- row) col)))))))
-
-
-;;; Main Functions.
-
-(defun mines--count-covered ()
-  (let ((count 0))
-  (dotimes (idx mines-number-cells)
-    (when (aref mines-state idx) (cl-incf count)))
-  count))
-
-(defun mines-start ()
-  "Set mine positions for a new game."
-  ;; Erase vector.
-  (setq mines-grid (make-vector mines-number-cells nil))
-  (setq mines-state (make-vector mines-number-cells t))
-  (let ((numbers (append
-                  (cookie-shuffle-vector
-                   (vconcat (number-sequence 0 (1- mines-number-cells))))
-                  nil)))
-    (dotimes (_ mines-number-mines)
-      (aset mines-grid (pop numbers) 'bomb))))
-
-(defun mines--near-bombs (idx)
-  (let ((n 0))
-    (dolist (nidx (mines-get-neighbours idx))
-      (when (eq 'bomb (aref mines-grid nidx))
-        (cl-incf n)))
-    n))
-
-(defun mines-set-numbers ()
-  "Set numbers for cells adjacent to cells with bombs."
-  (dotimes (i mines-number-rows)
-    (dotimes (j mines-number-cols)
-      (let ((idx (mines-matrix-2-index i j)))
-        (unless (eq 'bomb (aref mines-grid idx))
-          (let ((n (mines--near-bombs idx)))
-            (setf (aref mines-grid idx) (unless (zerop n) n))))))))
-
-(defun mines-list-game-conditions ()
-  "Return number of rows, columns and mines for current game."
-  (interactive)
-  (let ((rows mines-number-rows)
-        (cols mines-number-cols)
-        (mines mines-number-mines))
-    (message "%d rows x %d columns with %d mines"
-             rows cols mines)
-    (list rows cols mines)))
-
-(defun mines--insert (elt idx)
-  (let* ((face nil)
-         (char (cond ((null elt)
-                     mines-empty-cell-char)
-                    ((eq elt t)
-                     mines-uncover-cell-char)
-                    ((eq elt 'flag)
-                     (setq face 'warning)
-                     mines-flagged-cell-char)
-                    ((integerp elt)
-                     ;; FIXME: Set face here so each number gets
-                     ;; a different color.
-                     (+ ?0 elt))
-                    (t
-                     (cl-assert (eq elt 'bomb))
-                     (setq face 'error)
-                     mines-empty-cell-mine)))
-         (pos (point))
-         (inhibit-read-only t))
-    (insert (format " %c " char))
-    (add-text-properties pos (point) `(mouse-face ,(list 'highlight)))
-    (when (= (cadr (mines-index-2-matrix idx)) (1- mines-number-cols))
-      (backward-delete-char 1)
-      (insert "\n"))
-    (add-text-properties pos (point) `(idx ,idx font-lock-face ,face))
-    (goto-char (1+ (point)))))
-
-(defun mines-show ()
-  "Display the board for a new game."
-  (with-current-buffer (or (and (buffer-live-p mines-buffer) mines-buffer)
-                           (setq mines-buffer (get-buffer-create "*Mines*")))
-    (read-only-mode 1)
-    (setq mines-game-over nil)
-    (let ((inhibit-read-only t))
-      (erase-buffer)
-      (unless (derived-mode-p 'mines-mode)
-        (mines-mode))
-      (dotimes (i mines-number-rows)
-        (dotimes (j mines-number-cols)
-          (let* ((idx (+ (* i mines-number-cols) j))
-                 (elt (aref mines-state idx)))
-            (mines--insert (or elt (aref mines-grid idx)) idx))))))
-  (display-buffer mines-buffer '(display-buffer-same-window))
-  (set-window-point (get-buffer-window mines-buffer) mines-start-pos))
-
-(defun mines-current-pos ()
-  "Return the index of the cell at point."
-  (or (get-text-property (point) 'idx) (user-error "Wrong position!")))
-
-(defun mines--show-all ()
-  "Show all mines after game over."
-  (let ((mines-auto-flag nil))
-    (dotimes (idx mines-number-cells)
-      (when (and (eq 'bomb (aref mines-grid idx))
-                 (aref mines-state idx))
-        (mines--update-cell idx nil)))))
-
-(defun mines-game-over ()
-  "Offer play a new game after uncover a bomb."
-  (let ((inhibit-read-only t))
-    (setq mines-game-over t)
-    (put-text-property (point) (1+ (point)) 'face 'error)
-    (mines--show-all)
-    (if (yes-or-no-p "Game over! Play again? ")
-        (mines))))
-
-;; Extracted from `gamegrid-add-score-with-update-game-score'.
-(defun mines--score-file (file)
-  "Return full filename of score file."
-  (let ((gamegrid-shared-game-dir
-            (not (zerop (logand (or (file-modes
-                                                 (expand-file-name 
"update-game-score"
-                                                                           
exec-directory))
-                                                0)
-                                        #o6000)))))
-    (cond ((file-name-absolute-p file) file)
-             ((and gamegrid-shared-game-dir
-                       (file-exists-p (expand-file-name file 
shared-game-score-directory)))
-           (expand-file-name file shared-game-score-directory))
-             ;; Else: Use a score file in the user's home directory.
-             (t
-              (unless (file-exists-p
-                           (directory-file-name 
gamegrid-user-score-file-directory))
-                (make-directory gamegrid-user-score-file-directory t))
-           (expand-file-name file gamegrid-user-score-file-directory)))))
-
-(defun mines--number-of-records (file)
-  "Return number of records in FILE."
-  (if (file-exists-p file)
-      (with-temp-buffer
-        (insert-file-contents file)
-        (count-lines (point-min) (point-max)))
-    0))
-
-(defun mines--worst-score (file)
-  "Return worst score in FILE."
-  (when (file-exists-p file)
-    (with-temp-buffer
-      (insert-file-contents file)
-      (when (/= (point-min) (point-max))
-        (goto-char (point-max))
-        (while (and (looking-at "^$") (/= (point) (point-min)))
-          (forward-line -1))
-        (unless (looking-at "^$")
-          (read (current-buffer)))))))
-
-(defun mines--sort-score-file (file &optional limit)
-  "Sort FILE lexicographically using the score column.
-Keep LIMIT number of records in the file; default to
-`gamegrid-score-file-length'.
-
-Note that `gamegrid-add-score' assumes that the score file is a
-high-score-file, i.e., getting a higher score means a better result.
-
-Instead, in this file the score is the number of seconds to complete
-the game, i.e., getting a shorter score means a better result.
-After sorting, games completed with shorter times appear first."
-  (when (file-exists-p file)
-    (let ((buf (get-file-buffer file)))
-      (with-temp-file file
-        (insert
-         (with-temp-buffer
-           (insert-file-contents file) (buffer-string)))
-        (sort-fields 1 (point-min) (point-max))
-        (goto-char (point-min))
-        (forward-line (or limit gamegrid-score-file-length))
-        (delete-region (point) (point-max)))
-      ;; If there is a buffer visiting FILE, then revert it.
-      (when buf
-        (with-current-buffer buf
-          (revert-buffer nil 'noconfirm)
-          (read-only-mode 1))))))
-
-(defun mines-game-completed ()
-  (setq mines-end-time (current-time))
-  (let* ((score (time-to-seconds
-                 (time-subtract mines-end-time mines-init-time)))
-         (elapsed-time (format-seconds "%Y, %D, %H, %M, %z%S"
-                                       score))
-         (score-file (mines--score-file
-                      (format "mines-rows-%d-cols-%d-mines-%d-scores"
-                              mines-number-rows
-                              mines-number-cols
-                              mines-number-mines)))
-         (worst-score (mines--worst-score score-file)))
-    ;; Do not save RECORD if we already have `gamegrid-score-file-length'
-    ;; records and RECORD > than the largest one.
-    (when (or (/= gamegrid-score-file-length
-                  (mines--number-of-records score-file))
-              (not worst-score)
-              (<= score worst-score))
-      ;; Sort `score-file' and prepare space for a new record.
-      (mines--sort-score-file score-file (1- gamegrid-score-file-length))
-      ;; save score
-      (gamegrid-add-score score-file score)
-      ;; Sort `score-file' again and update the buffer visiting it.
-      (mines--sort-score-file score-file))
-    (message (format "Well done %s, you have completed it in %s!"
-                     user-login-name elapsed-time))))
-
-(defun mines-flag-cell (&optional event)
-  "Flag current cell as having a mine.
-If called again then unflag it."
-  (interactive (list last-nonmenu-event))
-  (if event (posn-set-point (event-end event)))
-  (let* ((idx (mines-current-pos))
-         (state (aref mines-state idx)))
-    (if (null state)
-        (message "Can't flag once it's uncovered")
-      ;; Toggle the flag state.
-      (mines--update-cell idx (if (eq state t) 'flag t)))))
-
-(defun mines--update-cell (idx newstate)
-  (cl-assert (aref mines-state idx))    ;Once uncovered, can't change it!
-  (cl-assert (not (eql newstate (aref mines-state idx)))) ;Actual change!
-  (mines-goto idx)
-  (let* ((from (or (previous-single-property-change (point) 'idx) (point-min)))
-         (to (or (next-single-property-change (point) 'idx) (point-max)))
-         (inhibit-read-only t)
-         (elt (or newstate (aref mines-grid idx))))
-    (setf (aref mines-state idx) newstate)
-    (when (null elt)
-      ;; Uncovered an empty cell: uncover neighbors.
-      (dolist (nidx (mines-get-neighbours idx))
-        (when (aref mines-state nidx)   ;Still covered.
-          (cl-pushnew nidx mines-undone-neighbours))))
-    (delete-region from to)
-    (mines--insert elt idx)
-    (when (and mines-auto-flag (eq newstate nil))
-      (dolist (nidx (cons idx (mines-get-neighbours idx)))
-        (when (null (aref mines-state nidx))
-          (let ((nc 0)                  ;Number of neighbors still covered.
-                (nb (aref mines-grid nidx))) ;Number of bomb in neighbors.
-            (when (integerp nb)
-              (dolist (nidx (mines-get-neighbours nidx))
-                (unless (null (aref mines-state nidx))
-                  (cl-incf nc)))
-              (when (eql nc nb)
-                (dolist (nidx (mines-get-neighbours nidx))
-                  (when (eq t (aref mines-state nidx))
-                    (mines--update-cell nidx 'flag)))))))))
-    (mines-goto idx)))
-
-(defun mines--clear-first-move (idx)
-  "Make sure IDX has no bomb and zero neighbors with bombs."
-  ;; Getting a bomb on the first move is just annoying.
-  ;; And getting a cell with a number is frustrating because it still
-  ;; doesn't let you use reasoning rather than luck to make progress.
-  ;; So let's make sure that the first move actually uncovers a pristine
-  ;; area so the user doesn't need luck to get started.
-  (let ((val (aref mines-grid idx)))
-    (cl-assert val)
-    (let ((cells (mines-get-neighbours idx))
-          (bombs (if (integerp val) val (1+ (mines--near-bombs idx)))))
-      (push idx cells)
-      (while (> bombs 0)
-        (let (nidx)
-          (while (progn (setq nidx (random mines-number-cells))
-                        (or (eq 'bomb (aref mines-grid nidx))
-                            (memql nidx cells))))
-          (setf (aref mines-grid nidx) 'bomb) ;Add bomb elsewhere.
-          (cl-decf bombs)))
-      (dolist (cell cells)
-        (setf (aref mines-grid cell) nil)) ;Remove nearby bombs.
-      ;; Update the numbers on neighbour cells.
-      (mines-set-numbers))))
-
-(defun mines-dig (&optional event)
-  "Reveal the content of the cell at point."
-  (interactive (list last-nonmenu-event))
-  (if event (posn-set-point (event-end event)))
-  (if mines-game-over
-      (user-error "Current game is over.  Try `%s' to start a new one"
-                  (substitute-command-keys "\\[mines]"))
-    (mines-goto (mines-current-pos))    ; Set point in the center of the cell.
-    (cl-flet ((uncover-fn
-               ()
-               (let* ((idx (mines-current-pos))
-                      (inhibit-read-only t)
-                      (state (aref mines-state idx)))
-                 (cond ((null state)
-                        (message "Nothing new here")) ; Already updated.
-                       ((and (eq 'flag state)
-                             ;; If the cell is flagged ask for confirmation.
-                             ;; FIXME: I personally find this prompt annoying.
-                             (not (yes-or-no-p "This cell is flagged as having 
a bomb.  Uncover it? ")))
-                        (message "OK, canceled"))
-                       (t
-                        (let ((elt (aref mines-grid idx)))
-                          ;; Don't end the game in the first trial when
-                          ;; `mines-protect-first-move' is non-nil.
-                          (when (and mines-protect-first-move
-                                     (mines-first-move-p)
-                                     elt)
-                            (mines--clear-first-move idx)
-                            (setq elt nil))
-                          (mines--update-cell idx nil)
-                          ;; Check for end of game.
-                          (cond ((eq elt 'bomb) (mines-game-over))
-                                ((mines-end-p) (mines-game-completed)))))))))
-      (uncover-fn)
-      (when mines-undone-neighbours
-        (while mines-undone-neighbours
-          (let ((to (pop mines-undone-neighbours)))
-            (save-excursion
-              (mines-goto to)
-              (uncover-fn))))))))
-
-;; `read-multiple-choice' requires Emacs > 25.
-(defun mines--read-multiple-choice ()
-  (let ((choices
-         '((?e "Easy" "8 columns x 8 rows and 10 mines")
-           (?m "Medium" "16 columns x 16 rows and 40 mines")
-           (?h "Hard" "30 columns x 16 rows and 99 mines")
-           (?c "Custom" "C columns x R rows and M mines"))))
-    (if (fboundp 'read-multiple-choice)
-        (read-multiple-choice "Choose difficulty level: " choices)
-      (let* ((help-msg "Choose difficulty level:\s
-
-e: [e] Easy              m: Medium                h: [h] Hard              c: 
[c] Custom
-8 columns x 8 rows       16 columns x 16 rows     30 columns x 16 rows     C 
columns x R rows
-and 10 mines             and 40 mines             and 99 mines             and 
M mines
-")                                                                           
-             (prompt "Choose difficulty level:  ([e] Easy, [m] Medium, [h] 
Hard, [c] Custom, [?]): ")
-             (answer (read-char prompt)))
-        (cl-flet ((show-help ()
-                     (when (eq answer ??)
-                       (let ((help-buf (get-buffer-create
-                                        "*Multiple Choice Help*")))
-                         (setq answer nil)
-                         (with-current-buffer help-buf
-                           (and (zerop (buffer-size)) (insert help-msg))
-                           (display-buffer help-buf))))))
-          (while (not (assq answer choices))
-            (if (eq answer ??) (show-help) (ding))
-            (setq answer (read-char prompt)))
-          (assq answer choices))))))
-
-;;;###autoload
-(defun mines (&optional arg)
-  "Play the minesweeper game.
-Called with a prefix prompt for the difficulty level."
-  (interactive
-   (let* ((prefix current-prefix-arg)
-          (choice (and prefix (mines--read-multiple-choice))))
-     (when choice
-       (mines-init (eq ?e (car choice))
-                   (eq ?m (car choice))
-                   (eq ?h (car choice))
-                   (eq ?c (car choice))
-                   (setq mines-number-cols (read-number "Number of columns: ")
-                         mines-number-rows (read-number "Number of rows: ")
-                         mines-number-mines (read-number "Number of mines: 
"))))
-     (list prefix)))
-  (unless arg
-    (mines-init (eq mines-difficulty-level 'easy)
-                (eq mines-difficulty-level 'medium)
-                (eq mines-difficulty-level 'hard)
-                t))
-  (setq mines-init-time (current-time))
-  (mines-start)
-  (mines-set-numbers)
-  (mines-show))
-
-(defvar mines-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [right] 'mines-go-right)
-    (define-key map "f" 'mines-go-right)
-    (define-key map "l" 'mines-go-right)
-    (define-key map [left] 'mines-go-left)
-    (define-key map "b" 'mines-go-left)
-    (define-key map "h" 'mines-go-left)
-    (define-key map "p" 'mines-go-up)
-    (define-key map "k" 'mines-go-up)
-    (define-key map [up] 'mines-go-up)
-    (define-key map [down] 'mines-go-down)
-    (define-key map "n" 'mines-go-down)
-    (define-key map "j" 'mines-go-down)
-    (define-key map "x" 'mines-dig)
-    ;; FIXME: I think SPC would be a natural binding for `mines-dig'.
-    (define-key map "c" 'mines-dig)
-    (define-key map [mouse-1] 'mines-dig)
-    (define-key map [mouse-3] 'mines-flag-cell)
-    ;; (define-key map "a" 'mines-flag-cell)
-    (define-key map "1" 'mines-flag-cell)
-    (define-key map "m" 'mines-flag-cell)
-    (define-key map "r" 'mines)
-    map))
-
-(define-derived-mode mines-mode special-mode "mines"
-  "Major mode for playing Minesweeper.
-
-The target of the game is discover which cells contain mines.
-You reveal the content of the mine at point with \\[mines-dig].
-1. If you look at one cell containing a mine you lost.
-
-2. A cell without a mine with N neighbour cells containing mines
-   shows N when you look at it.
-
-3. A cell without a mine and without neighbour cells having mines
-   shows the character ` ' when you look at it; all adjacent cells
-   are recursively revealed.
-
-For instance, following is a possible configuration:
-
-    1 2 2 1
-    1 x x 1
-    1 2 2 1
-
-You can move between cells using the arrow keys, or using vi
-or Emacs keystrokes (↑↓→←) = (kjlh) = (pnfb).
-
-You can flag a cell as having a mine with \\[mines-flag-cell]; if you
-call this command again, the cell is unflagged."
-  )
-
-
-;;; Predicates
-
-(defun mines-end-p ()
-  "Return non-nil when the game is completed."
-  (= mines-number-mines (mines--count-covered)))
-
-(defun mines-first-move-p ()
-  "Return non-nil if any cell has been revealed yet."
-  (cl-every #'identity mines-state))
-
-
-(provide 'mines)
-;;; mines.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]