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

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

[elpa] master f5fd862: * externals-list: Move more :subtrees to :externa


From: Stefan Monnier
Subject: [elpa] master f5fd862: * externals-list: Move more :subtrees to :external.
Date: Fri, 27 Nov 2020 19:19:21 -0500 (EST)

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

    * externals-list: Move more :subtrees to :external.
    
    The affected subtrees are:
    
        aggressive-indent coffee-mode compact-docstrings company
        context-coloring diffview diff-hl dts-mode eldoc-eval
        f90-interface-browser ioccur js2-mode math-symbol-lists
        names on-screen vcl-mode web-server websocket
---
 externals-list                                     |    36 +-
 packages/aggressive-indent/README.md               |    65 -
 packages/aggressive-indent/aggressive-indent.el    |   451 -
 packages/aggressive-indent/c-example.gif           |   Bin 88739 -> 0 bytes
 packages/aggressive-indent/lisp-example.gif        |   Bin 493302 -> 0 bytes
 packages/coffee-mode/README.md                     |   284 -
 packages/coffee-mode/coffee-mode.el                |   640 -
 packages/coffee-mode/examples/basic.coffee         |   118 -
 packages/coffee-mode/examples/edge.coffee          |    16 -
 packages/coffee-mode/examples/imenu.coffee         |    33 -
 packages/compact-docstrings/.gitignore             |     1 -
 packages/compact-docstrings/Cask                   |     6 -
 packages/compact-docstrings/Makefile               |     6 -
 packages/compact-docstrings/README.rst             |    23 -
 packages/compact-docstrings/compact-docstrings.el  |    90 -
 packages/compact-docstrings/etc/after.py           |    14 -
 packages/compact-docstrings/etc/before.py          |    14 -
 .../etc/compact-docstrings-screenshot.el           |    99 -
 .../compact-docstrings/etc/compact-docstrings.png  |   Bin 25863 -> 0 bytes
 packages/company/.dir-locals.el                    |     4 -
 packages/company/.elpaignore                       |     5 -
 packages/company/.gitignore                        |     2 -
 packages/company/.travis.yml                       |    23 -
 packages/company/Makefile                          |    31 -
 packages/company/NEWS.md                           |   520 -
 packages/company/README.md                         |     4 -
 packages/company/company-abbrev.el                 |    50 -
 packages/company/company-bbdb.el                   |    63 -
 packages/company/company-capf.el                   |   208 -
 packages/company/company-clang.el                  |   389 -
 packages/company/company-cmake.el                  |   206 -
 packages/company/company-css.el                    |   446 -
 packages/company/company-dabbrev-code.el           |   104 -
 packages/company/company-dabbrev.el                |   206 -
 packages/company/company-eclim.el                  |   186 -
 packages/company/company-elisp.el                  |   226 -
 packages/company/company-etags.el                  |   108 -
 packages/company/company-files.el                  |   151 -
 packages/company/company-gtags.el                  |   119 -
 packages/company/company-ispell.el                 |    82 -
 packages/company/company-keywords.el               |   314 -
 packages/company/company-nxml.el                   |   143 -
 packages/company/company-oddmuse.el                |    57 -
 packages/company/company-semantic.el               |   168 -
 packages/company/company-template.el               |   272 -
 packages/company/company-tempo.el                  |    71 -
 packages/company/company-tests.el                  |    39 -
 packages/company/company-tng.el                    |   197 -
 packages/company/company-xcode.el                  |   123 -
 packages/company/company-yasnippet.el              |   176 -
 packages/company/company.el                        |  3247 -----
 packages/company/test/all.el                       |    30 -
 packages/company/test/async-tests.el               |   221 -
 packages/company/test/bbdb-tests.el                |    46 -
 packages/company/test/capf-tests.el                |   148 -
 packages/company/test/clang-tests.el               |    51 -
 packages/company/test/cmake-tests.el               |    44 -
 packages/company/test/core-tests.el                |   593 -
 packages/company/test/elisp-tests.el               |   190 -
 packages/company/test/files-tests.el               |    48 -
 packages/company/test/frontends-tests.el           |   393 -
 packages/company/test/keywords-tests.el            |    32 -
 packages/company/test/template-tests.el            |   170 -
 packages/company/test/transformers-tests.el        |    58 -
 packages/context-coloring/.elpaignore              |    10 -
 packages/context-coloring/.gitignore               |     6 -
 packages/context-coloring/.travis.yml              |    24 -
 packages/context-coloring/Cask                     |     7 -
 packages/context-coloring/LICENSE                  |   674 -
 packages/context-coloring/Makefile                 |    50 -
 packages/context-coloring/README.md                |    68 -
 .../context-coloring/context-coloring-benchmark.el |   165 -
 .../context-coloring/context-coloring-coverage.el  |   155 -
 .../context-coloring-emacs-lisp.el                 |   773 --
 .../context-coloring-javascript.el                 |   239 -
 packages/context-coloring/context-coloring-test.el |   931 --
 packages/context-coloring/context-coloring.el      |   494 -
 packages/context-coloring/fixtures/.nosearch       |     0
 .../fixtures/benchmark/.dir-locals.el              |     1 -
 .../fixtures/benchmark/async-0.9.0.js              |  1123 --
 .../context-coloring/fixtures/benchmark/faces.el   |  2764 ----
 .../fixtures/benchmark/jquery-2.1.1.js             |  9190 -------------
 .../context-coloring/fixtures/benchmark/lisp.el    |   930 --
 .../fixtures/benchmark/lodash-2.4.1.js             |  6785 ----------
 .../fixtures/benchmark/mkdirp-0.5.0.js             |    97 -
 .../context-coloring/fixtures/benchmark/simple.el  |  7901 ------------
 .../context-coloring/fixtures/benchmark/subr.el    |  4800 -------
 packages/context-coloring/fixtures/test/README     |     4 -
 .../context-coloring/fixtures/test/block-scopes.js |     7 -
 packages/context-coloring/fixtures/test/catch.js   |     8 -
 packages/context-coloring/fixtures/test/changed.el |     5 -
 packages/context-coloring/fixtures/test/comment.el |     3 -
 .../fixtures/test/comments-and-strings.js          |     4 -
 packages/context-coloring/fixtures/test/cond.el    |     8 -
 .../fixtures/test/condition-case.el                |    10 -
 .../context-coloring/fixtures/test/defadvice.el    |     3 -
 packages/context-coloring/fixtures/test/defun.el   |     8 -
 packages/context-coloring/fixtures/test/dolist.el  |     3 -
 packages/context-coloring/fixtures/test/empty      |     0
 .../fixtures/test/empty-varlist.el                 |     6 -
 .../fixtures/test/function-scopes.js               |     5 -
 packages/context-coloring/fixtures/test/global.js  |     3 -
 packages/context-coloring/fixtures/test/ignored.el |     2 -
 .../fixtures/test/initial-level.js                 |     2 -
 .../context-coloring/fixtures/test/iteration.el    |     2 -
 .../context-coloring/fixtures/test/key-names.js    |     6 -
 .../context-coloring/fixtures/test/key-values.js   |     8 -
 packages/context-coloring/fixtures/test/lambda.el  |     3 -
 .../context-coloring/fixtures/test/let-star.el     |    11 -
 packages/context-coloring/fixtures/test/let.el     |    13 -
 .../fixtures/test/macroexp-let2.el                 |     6 -
 .../fixtures/test/narrow-to-region.js              |     3 -
 .../fixtures/test/prettify-symbols.el              |     1 -
 .../fixtures/test/property-lookup.js               |     5 -
 packages/context-coloring/fixtures/test/quote.el   |    15 -
 packages/context-coloring/fixtures/test/sexp.el    |     4 -
 packages/context-coloring/fixtures/test/splice.el  |     2 -
 packages/context-coloring/fixtures/test/string.el  |     2 -
 .../fixtures/test/unbalanced-parenthesis.el        |     2 -
 .../fixtures/test/unterminated-comment.js          |     6 -
 .../fixtures/test/varlist-spacing.el               |     8 -
 packages/context-coloring/screenshot.png           |   Bin 22006 -> 0 bytes
 packages/diff-hl/.elpaignore                       |     2 -
 packages/diff-hl/LICENSE                           |   674 -
 packages/diff-hl/README.md                         |   118 -
 packages/diff-hl/diff-hl-amend.el                  |    68 -
 packages/diff-hl/diff-hl-dired.el                  |   184 -
 packages/diff-hl/diff-hl-flydiff.el                |   176 -
 packages/diff-hl/diff-hl-margin.el                 |   153 -
 packages/diff-hl/diff-hl.el                        |   643 -
 packages/diff-hl/screenshot-dired.png              |   Bin 57595 -> 0 bytes
 packages/diff-hl/screenshot-margin.png             |   Bin 96375 -> 0 bytes
 packages/diff-hl/screenshot.png                    |   Bin 58512 -> 0 bytes
 packages/diffview/Makefile                         |    13 -
 packages/diffview/README.md                        |    59 -
 packages/diffview/diffview.el                      |   200 -
 packages/diffview/screenshots/diffview-after.png   |   Bin 199810 -> 0 bytes
 packages/diffview/screenshots/diffview-before.png  |   Bin 184048 -> 0 bytes
 packages/dts-mode/README.mkd                       |    12 -
 packages/dts-mode/dts-mode.el                      |   177 -
 packages/eldoc-eval/README.md                      |    42 -
 packages/eldoc-eval/eldoc-eval.el                  |   225 -
 packages/f90-interface-browser/README.org          |    82 -
 .../f90-interface-browser/f90-interface-browser.el |  1032 --
 packages/f90-interface-browser/f90-tests.el        |   120 -
 packages/ioccur/ioccur.el                          |  1116 --
 packages/js2-mode/.dir-locals.el                   |     1 -
 packages/js2-mode/.elpaignore                      |     4 -
 packages/js2-mode/.gitignore                       |     1 -
 packages/js2-mode/.travis.yml                      |    24 -
 packages/js2-mode/LICENSE                          |   674 -
 packages/js2-mode/Makefile                         |    23 -
 packages/js2-mode/NEWS.md                          |   265 -
 packages/js2-mode/README.md                        |    58 -
 packages/js2-mode/js2-imenu-extras.el              |   349 -
 packages/js2-mode/js2-mode.el                      | 12852 -------------------
 packages/js2-mode/js2-old-indent.el                |   712 -
 packages/js2-mode/tests/consume.el                 |    84 -
 packages/js2-mode/tests/externs.el                 |   126 -
 packages/js2-mode/tests/indent.el                  |   291 -
 packages/js2-mode/tests/jsdoc.el                   |   113 -
 packages/js2-mode/tests/json-path.el               |    64 -
 packages/js2-mode/tests/navigation.el              |   110 -
 packages/js2-mode/tests/parser.el                  |  1429 ---
 packages/math-symbol-lists/.dir-locals.el          |     3 -
 packages/math-symbol-lists/.gitignore              |     5 -
 packages/math-symbol-lists/math-symbol-lists.el    |  3700 ------
 packages/math-symbol-lists/msl-build.el            |   168 -
 packages/math-symbol-lists/readme.md               |    15 -
 packages/names/Other-Packages.org                  |    25 -
 packages/names/Readme.org                          |   123 -
 packages/names/TheNittyGritty.org                  |   197 -
 packages/names/Todo.org                            |    38 -
 packages/names/UsageExample.org                    |   219 -
 packages/names/names-dev.el                        |   254 -
 packages/names/names.el                            |  1322 --
 packages/names/package-example.png                 |   Bin 83634 -> 0 bytes
 packages/on-screen/.gitignore                      |     1 -
 packages/on-screen/on-screen.el                    |   667 -
 packages/vcl-mode/vcl-mode.el                      |   423 -
 packages/web-server/.elpaignore                    |    14 -
 packages/web-server/.github/workflows/test.yml     |    20 -
 packages/web-server/.gitignore                     |     4 -
 packages/web-server/COPYING                        |   674 -
 packages/web-server/Makefile                       |    47 -
 packages/web-server/NOTES                          |   325 -
 packages/web-server/README                         |    43 -
 packages/web-server/doc/.gitignore                 |     5 -
 packages/web-server/doc/Makefile                   |    14 -
 packages/web-server/doc/doclicense.texi            |   508 -
 packages/web-server/doc/gpl.texi                   |   717 --
 packages/web-server/doc/web-server.texi            |   601 -
 packages/web-server/examples/000-hello-world.el    |     9 -
 .../web-server/examples/001-hello-world-utf8.el    |    22 -
 .../web-server/examples/002-hello-world-html.el    |    16 -
 packages/web-server/examples/003-file-server.el    |    15 -
 packages/web-server/examples/004-url-param-echo.el |    18 -
 packages/web-server/examples/005-post-echo.el      |    20 -
 .../examples/006-basic-authentication.el           |    14 -
 .../examples/007-org-mode-file-server.el           |    45 -
 packages/web-server/examples/008-file-upload.el    |    13 -
 packages/web-server/examples/009-web-socket.el     |    57 -
 packages/web-server/examples/010-current-buffer.el |    15 -
 packages/web-server/examples/011-org-agenda.el     |    18 -
 packages/web-server/examples/012-search-bbdb.el    |    23 -
 .../web-server/examples/013-org-export-service.el  |    46 -
 packages/web-server/examples/014-org-json.el       |    26 -
 .../web-server/examples/015-auto-mode-server.el    |    30 -
 .../examples/016-content-encoding-gzip.el          |    26 -
 .../examples/017-transfer-encoding-chunked.el      |    31 -
 packages/web-server/examples/018-web-shell.el      |    74 -
 packages/web-server/examples/018-web-shell.html    |    15 -
 packages/web-server/examples/018-web-shell.js      |    22 -
 packages/web-server/web-server-status-codes.el     |   106 -
 packages/web-server/web-server-test.el             |   348 -
 packages/web-server/web-server.el                  |   744 --
 packages/websocket/COPYING                         |   339 -
 packages/websocket/README.org                      |    35 -
 packages/websocket/testserver.py                   |    34 -
 packages/websocket/websocket-functional-test.el    |   163 -
 packages/websocket/websocket.el                    |  1065 --
 221 files changed, 18 insertions(+), 85004 deletions(-)

diff --git a/externals-list b/externals-list
index 5c21e60..dfe6402 100644
--- a/externals-list
+++ b/externals-list
@@ -33,7 +33,7 @@
 ;; diverged).
 
 (("ack"                        :external "https://github.com/leoliu/ack-el";)
- ("aggressive-indent"  :subtree 
"https://github.com/Malabarba/aggressive-indent-mode";)
+ ("aggressive-indent"  :external 
"https://github.com/Malabarba/aggressive-indent-mode";)
  ("async"              :external "https://github.com/jwiegley/emacs-async";)
  ("auctex"             :external "git://git.sv.gnu.org/auctex.git")
  ("bbdb"               :external "git://git.savannah.nongnu.org/bbdb.git")
@@ -62,35 +62,35 @@
  ;; ("cobol-mode"          :subtree 
"https://gist.github.com/Edward-H/6768e7dc53ea3dd2adca";)
  ("cl-print"           :core "lisp/emacs-lisp/cl-print.el")
  ("clipboard-collector" :external 
"https://github.com/clemera/clipboard-collector";)
- ("coffee-mode"                :subtree 
"https://github.com/defunkt/coffee-mode";)
- ("compact-docstrings"  :subtree 
"https://github.com/cpitclaudel/compact-docstrings";)
- ("company"            :subtree 
"https://github.com/company-mode/company-mode.git";)
+ ("coffee-mode"                :external 
"https://github.com/defunkt/coffee-mode";)
+ ("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";)
- ("context-coloring"   :subtree 
"https://github.com/jacksonrayhamilton/context-coloring.git";)
+ ("context-coloring"   :external 
"https://github.com/jacksonrayhamilton/context-coloring.git";)
  ("cpio-mode"          :external "https://github.com/dlewan/cpio-mode";)
  ("darkroom"            :external 
"https://github.com/capitaomorte/darkroom.git";)
  ("dash"                :external "https://github.com/magnars/dash.el.git";)
  ("dbus-codegen"       :subtree "https://github.com/ueno/dbus-codegen-el.git";)
  ("delight"            :external "https://git.savannah.gnu.org/r/delight.git";)
- ("diffview"            :subtree "https://github.com/mgalgs/diffview-mode.git";)
- ("diff-hl"            :subtree "https://github.com/dgutov/diff-hl.git";)
+ ("diffview"            :external 
"https://github.com/mgalgs/diffview-mode.git";)
+ ("diff-hl"            :external "https://github.com/dgutov/diff-hl.git";)
  ("dired-git-info"     :external "https://github.com/clemera/dired-git-info";)
  ("disk-usage"         :external 
"https://gitlab.com/ambrevar/emacs-disk-usage";)
  ("dismal"             :external nil)
- ("dts-mode"           :subtree "https://github.com/bgamari/dts-mode.git";)
+ ("dts-mode"           :external "https://github.com/bgamari/dts-mode.git";)
  ("easy-kill"          :external "https://github.com/leoliu/easy-kill";)
  ("ebdb"                :external "https://github.com/girzel/ebdb.git";)
  ("eev"                        :external "https://github.com/edrx/eev.git";) 
;branch UTF-8
  ("eglot"               :external "https://github.com/joaotavora/eglot.git";)
  ("eldoc"              :core "lisp/emacs-lisp/eldoc.el")
- ("eldoc-eval"         :subtree 
"https://github.com/thierryvolpiatto/eldoc-eval.git";)
+ ("eldoc-eval"         :external 
"https://github.com/thierryvolpiatto/eldoc-eval.git";)
  ("elisp-benchmarks"   :external nil)
  ("emms"               :external "https://git.savannah.gnu.org/git/emms.git";)
  ("enwc"               :subtree 
"bzr::bzr://bzr.savannah.nongnu.org/enwc/trunk")
  ("ergoemacs-mode"     :external 
"https://github.com/ergoemacs/ergoemacs-mode.git";)
  ("expand-region"      :external "https://github.com/magnars/expand-region.el";)
  ("exwm"               :external "https://github.com/ch11ng/exwm.git";)
- ("f90-interface-browser" :subtree "https://github.com/wence-/f90-iface";)
+ ("f90-interface-browser" :external "https://github.com/wence-/f90-iface";)
  ("flymake"            :core "lisp/progmodes/flymake.el")
  ("frog-menu"          :external "https://github.com/clemera/frog-menu";)
  ("gcmh"               :external "https://gitlab.com/koral/gcmh";)
@@ -103,27 +103,27 @@
  ("guess-language"     :external 
"https://github.com/tmalsburg/guess-language.el";)
  ("highlight-escape-sequences" :external 
"https://github.com/dgutov/highlight-escape-sequences/";)
  ("hyperbole"           :external 
"http://git.savannah.gnu.org/r/hyperbole.git";)
- ("ioccur"             :subtree 
"https://github.com/thierryvolpiatto/ioccur.git";)
+ ("ioccur"             :external 
"https://github.com/thierryvolpiatto/ioccur.git";)
  ("ivy-explorer"        :external "https://github.com/clemera/ivy-explorer";)
  ("ivy-posframe"        :external "https://github.com/tumashu/ivy-posframe";)
- ("js2-mode"           :subtree "https://github.com/mooz/js2-mode.git";)
+ ("js2-mode"           :external "https://github.com/mooz/js2-mode.git";)
  ("jsonrpc"            :core "lisp/jsonrpc.el")
  ("leaf"               :external "https://github.com/conao3/leaf.el";)
  ("let-alist"          :core "lisp/emacs-lisp/let-alist.el")
  ("map"                 :core "lisp/emacs-lisp/map.el")
- ("math-symbol-lists"  :subtree 
"https://github.com/vspinu/math-symbol-lists.git";)
+ ("math-symbol-lists"  :external 
"https://github.com/vspinu/math-symbol-lists.git";)
  ("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";)
  ("muse"               :subtree "https://github.com/alexott/muse";)
  ("nameless"           :external "https://github.com/Malabarba/Nameless";)
- ("names"              :subtree "http://github.com/Malabarba/names";)
+ ("names"              :external "http://github.com/Malabarba/names";)
  ("objed"              :external "https://github.com/clemera/objed";)
  ("omn-mode"            :external nil)
  ("orgalist"            :external nil)
  ("org-edna"           :external 
"https://savannah.nongnu.org/projects/org-edna-el";) ;URL?
  ("ntlm"               :core "lisp/net/ntlm.el")
- ("on-screen"           :subtree 
"https://github.com/michael-heerdegen/on-screen.el.git";)
+ ("on-screen"           :external 
"https://github.com/michael-heerdegen/on-screen.el.git";)
  ("pabbrev"             :external "https://github.com/phillord/pabbrev.git";)
  ("parsec"              :external 
"https://github.com/cute-jumper/parsec.el.git";)
  ("peg"                        :external) ;Was in 
"https://github.com/ellerh/peg.el";
@@ -170,15 +170,15 @@
  ("temp-buffer-browse"  :external 
"https://github.com/leoliu/temp-buffer-browse";)
  ("test-simple"         :external "https://github.com/rocky/emacs-test-simple";)
  ("vdiff"               :external "https://github.com/justbur/emacs-vdiff";)
- ("vcl-mode"           :subtree "git://git.gnu.org.ua/vcl-mode")
+ ("vcl-mode"           :external "git://git.gnu.org.ua/vcl-mode")
  ("tramp"              :external 
"https://git.savannah.gnu.org/cgit/tramp.git/?h=elpa";)
  ("transient"          :external "https://github.com/magit/transient";)
  ;;FIXME:("vlf"                :subtree ??)
  ("verilog-mode"        :core "lisp/progmodes/verilog-mode.el")
  ("wcheck-mode"                :external 
"https://github.com/tlikonen/wcheck-mode";)
- ("web-server"         :subtree 
"https://github.com/eschulte/emacs-web-server.git";)
+ ("web-server"         :external 
"https://github.com/eschulte/emacs-web-server.git";)
  ("webfeeder"          :external 
"https://gitlab.com/ambrevar/emacs-webfeeder.git";)
- ("websocket"          :subtree 
"https://github.com/ahyatt/emacs-websocket.git";)
+ ("websocket"          :external 
"https://github.com/ahyatt/emacs-websocket.git";)
  ("windower"           :external "https://gitlab.com/ambrevar/emacs-windower";)
  ("wisitoken-grammar-mode" :external nil)
  ("which-key"           :external "https://github.com/justbur/emacs-which-key";)
diff --git a/packages/aggressive-indent/README.md 
b/packages/aggressive-indent/README.md
deleted file mode 100644
index 68e07ad..0000000
--- a/packages/aggressive-indent/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-aggressive-indent-mode 
[![Melpa](http://melpa.org/packages/aggressive-indent-badge.svg)](http://melpa.org/#/aggressive-indent)
 
[![Melpa-Stable](http://stable.melpa.org/packages/aggressive-indent-badge.svg)](http://stable.melpa.org/#/aggressive-indent)
-======================
-
-`electric-indent-mode` is enough to keep your code nicely aligned when
-all you do is type. However, once you start shifting blocks around,
-transposing lines, or slurping and barfing sexps, indentation is bound
-to go wrong.
-
-**`aggressive-indent-mode`** is a minor mode that keeps your code **always**
-indented. It reindents after every change, making it more reliable
-than `electric-indent-mode`.
-
-### Demonstration ###
-
-- An example of Lisp mode (Emacs Lisp):
-![Lisp Code Example](lisp-example.gif)
-
-- An example of non-Lisp mode (C):
-![C Code Example](c-example.gif)
-
-### Instructions ###
-
-This package is available fom Melpa, you may install it by calling
-
-    M-x package-install RET aggressive-indent
-
-Then activate it with
-
-    (add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
-    (add-hook 'css-mode-hook #'aggressive-indent-mode)
-
-You can use this hook on any mode you want, `aggressive-indent` is not
-exclusive to emacs-lisp code. In fact, if you want to turn it on for
-every programming mode, you can do something like:
-
-    (global-aggressive-indent-mode 1)
-    (add-to-list 'aggressive-indent-excluded-modes 'html-mode)
-
-#### Manual Installation ####
-
-If you don't want to install from Melpa, you can download it manually,
-place it in your `load-path` along with its dependency `cl-lib` (which
-you should already have if your `emacs-version` is at least 24.3).
-
-Then require it with:
-
-    (require 'aggressive-indent)
-
-### Customization ###
-
-The variable `aggressive-indent-dont-indent-if` lets you customize
-when you **don't** want indentation to happen.
-For instance, if you think it's annoying that lines jump around in
-`c++-mode` because you haven't typed the `;` yet, you could add the
-following clause:
-
-    (add-to-list
-     'aggressive-indent-dont-indent-if
-     '(and (derived-mode-p 'c++-mode)
-           (null (string-match "\\([;{}]\\|\\b\\(if\\|for\\|while\\)\\b\\)"
-                               (thing-at-point 'line)))))
-
-## Contribute ##
-
-[![Gratipay](https://cdn.rawgit.com/gratipay/gratipay-badge/2.1.3/dist/gratipay.png)](https://gratipay.com/Malabarba)
 
diff --git a/packages/aggressive-indent/aggressive-indent.el 
b/packages/aggressive-indent/aggressive-indent.el
deleted file mode 100644
index a066c58..0000000
--- a/packages/aggressive-indent/aggressive-indent.el
+++ /dev/null
@@ -1,451 +0,0 @@
-;;; aggressive-indent.el --- Minor mode to aggressively keep your code always 
indented  -*- lexical-binding:t -*-
-
-;; Copyright (C) 2014, 2015, 2016 Free Software Foundation, Inc
-
-;; Author: Artur Malabarba <emacs@endlessparentheses.com>
-;; URL: https://github.com/Malabarba/aggressive-indent-mode
-;; Version: 1.8.3
-;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
-;; Keywords: indent lisp maint tools
-;; Prefix: aggressive-indent
-;; Separator: -
-
-;;; Commentary:
-;;
-;; `electric-indent-mode' is enough to keep your code nicely aligned when
-;; all you do is type.  However, once you start shifting blocks around,
-;; transposing lines, or slurping and barfing sexps, indentation is bound
-;; to go wrong.
-;;
-;; `aggressive-indent-mode' is a minor mode that keeps your code always
-;; indented.  It reindents after every change, making it more reliable
-;; than `electric-indent-mode'.
-;;
-;; ### Instructions ###
-;;
-;; This package is available fom Melpa, you may install it by calling
-;;
-;;     M-x package-install RET aggressive-indent
-;;
-;; Then activate it with
-;;
-;;     (add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
-;;     (add-hook 'css-mode-hook #'aggressive-indent-mode)
-;;
-;; You can use this hook on any mode you want, `aggressive-indent' is not
-;; exclusive to emacs-lisp code.  In fact, if you want to turn it on for
-;; every programming mode, you can do something like:
-;;
-;;     (global-aggressive-indent-mode 1)
-;;     (add-to-list 'aggressive-indent-excluded-modes 'html-mode)
-;;
-;; ### Manual Installation ###
-;;
-;; If you don't want to install from Melpa, you can download it manually,
-;; place it in your `load-path' and require it with
-;;
-;;     (require 'aggressive-indent)
-
-;;; Instructions:
-;;
-;; INSTALLATION
-;;
-;; This package is available fom Melpa, you may install it by calling
-;; M-x package-install RET aggressive-indent.
-;;
-;; Then activate it with
-;;     (add-hook 'emacs-lisp-mode-hook #'aggressive-indent-mode)
-;;
-;; You can also use an equivalent hook for another mode,
-;; `aggressive-indent' is not exclusive to emacs-lisp code.
-;;
-;; Alternatively, you can download it manually, place it in your
-;; `load-path' and require it with
-;;
-;;     (require 'aggressive-indent)
-
-;;; License:
-;;
-;; This file is NOT part of GNU Emacs.
-;;
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License
-;; as published by the Free Software Foundation; either version 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.
-;;
-
-;;; Code:
-
-(require 'cl-lib)
-
-(defgroup aggressive-indent nil
-  "Customization group for aggressive-indent."
-  :prefix "aggressive-indent-"
-  :group 'electricity
-  :group 'indent)
-
-(defun aggressive-indent-bug-report ()
-  "Opens github issues page in a web browser.  Please send any bugs you find.
-Please include your Emacs and `aggressive-indent' versions."
-  (interactive)
-  (message "Your `aggressive-indent-version' is: %s, and your emacs version 
is: %s.
-Please include this in your report!"
-           (eval-when-compile
-             (ignore-errors
-               (require 'lisp-mnt)
-               (lm-version)))
-           emacs-version)
-  (browse-url 
"https://github.com/Malabarba/aggressive-indent-mode/issues/new";))
-
-(defvar aggressive-indent-mode)
-
-;;; Configuring indentarion
-(defcustom aggressive-indent-dont-electric-modes nil
-  "List of major-modes where `electric-indent' should be disabled."
-  :type '(choice
-          (const :tag "Never use `electric-indent-mode'." t)
-          (repeat :tag "List of major-modes to avoid `electric-indent-mode'." 
symbol))
-  :package-version '(aggressive-indent . "0.3.1"))
-
-(defcustom aggressive-indent-excluded-modes
-  '(
-    bibtex-mode
-    cider-repl-mode
-    coffee-mode
-    comint-mode
-    conf-mode
-    Custom-mode
-    diff-mode
-    doc-view-mode
-    dos-mode
-    erc-mode
-    feature-mode
-    fortran-mode
-    f90-mode
-    jabber-chat-mode
-    haml-mode
-    haskell-mode
-    haskell-interactive-mode
-    image-mode
-    inf-ruby-mode
-    makefile-mode
-    makefile-gmake-mode
-    minibuffer-inactive-mode
-    netcmd-mode
-    python-mode
-    sass-mode
-    scala-mode
-    slim-mode
-    special-mode
-    shell-mode
-    snippet-mode
-    eshell-mode
-    tabulated-list-mode
-    term-mode
-    TeX-output-mode
-    text-mode
-    yaml-mode
-    )
-  "Modes in which `aggressive-indent-mode' should not be activated.
-This variable is only used if `global-aggressive-indent-mode' is
-active.  If the minor mode is turned on with the local command,
-`aggressive-indent-mode', this variable is ignored."
-  :type '(repeat symbol)
-  :package-version '(aggressive-indent . "0.3.1"))
-
-(defcustom aggressive-indent-protected-commands '(undo undo-tree-undo 
undo-tree-redo whitespace-cleanup)
-  "Commands after which indentation will NOT be performed.
-Aggressive indentation could break things like `undo' by locking
-the user in a loop, so this variable is used to control which
-commands will NOT be followed by a re-indent."
-  :type '(repeat symbol)
-  :package-version '(aggressive-indent . "0.1"))
-
-(defcustom aggressive-indent-comments-too nil
-  "If non-nil, aggressively indent in comments as well."
-  :type 'boolean
-  :package-version '(aggressive-indent . "0.3"))
-
-(defcustom aggressive-indent-modes-to-prefer-defun
-  '(emacs-lisp-mode lisp-mode scheme-mode clojure-mode)
-  "List of major-modes in which indenting defun is preferred.
-Add here any major modes with very good definitions of
-`end-of-defun' and `beginning-of-defun', or modes which bug out
-if you have `after-change-functions' (such as paredit).
-
-If current major mode is derived from one of these,
-`aggressive-indent' will call `aggressive-indent-indent-defun'
-after every command.  Otherwise, it will call
-`aggressive-indent-indent-region-and-on' after every buffer
-change."
-  :type '(repeat symbol)
-  :package-version '(aggressive-indent . "0.3"))
-
-;;; Preventing indentation
-(defconst aggressive-indent--internal-dont-indent-if
-  '((memq this-command aggressive-indent-protected-commands)
-    (region-active-p)
-    buffer-read-only
-    undo-in-progress
-    (null (buffer-modified-p))
-    (and (boundp 'smerge-mode) smerge-mode)
-    (let ((line (thing-at-point 'line)))
-      (and (stringp line)
-           ;; If the user is starting to type a comment.
-           (stringp comment-start)
-           (string-match (concat "\\`[[:blank:]]*"
-                                 (substring comment-start 0 1)
-                                 "[[:blank:]]*$")
-                         line)))
-    (let ((sp (syntax-ppss)))
-      ;; Comments.
-      (or (and (not aggressive-indent-comments-too) (elt sp 4))
-          ;; Strings.
-          (elt sp 3))))
-  "List of forms which prevent indentation when they evaluate to non-nil.
-This is for internal use only.  For user customization, use
-`aggressive-indent-dont-indent-if' instead.")
-
-(eval-after-load 'yasnippet
-  '(when (boundp 'yas--active-field-overlay)
-     (add-to-list 'aggressive-indent--internal-dont-indent-if
-                  '(and
-                    (overlayp yas--active-field-overlay)
-                    (overlay-end yas--active-field-overlay))
-                  'append)))
-(eval-after-load 'company
-  '(when (boundp 'company-candidates)
-     (add-to-list 'aggressive-indent--internal-dont-indent-if
-                  'company-candidates)))
-(eval-after-load 'auto-complete
-  '(when (boundp 'ac-completing)
-     (add-to-list 'aggressive-indent--internal-dont-indent-if
-                  'ac-completing)))
-(eval-after-load 'multiple-cursors-core
-  '(when (boundp 'multiple-cursors-mode)
-     (add-to-list 'aggressive-indent--internal-dont-indent-if
-                  'multiple-cursors-mode)))
-(eval-after-load 'iedit
-  '(when (boundp 'iedit-mode)
-     (add-to-list 'aggressive-indent--internal-dont-indent-if
-                  'iedit-mode)))
-(eval-after-load 'evil
-  '(when (boundp 'iedit-mode)
-     (add-to-list 'aggressive-indent--internal-dont-indent-if
-                  'iedit-mode)))
-(eval-after-load 'coq
-  '(add-to-list 'aggressive-indent--internal-dont-indent-if
-                '(and (derived-mode-p 'coq-mode)
-                      (not (string-match "\\.[[:space:]]*$"
-                                         (thing-at-point 'line))))))
-(eval-after-load 'ruby-mode
-  '(add-to-list 'aggressive-indent--internal-dont-indent-if
-                '(when (derived-mode-p 'ruby-mode)
-                   (let ((line (thing-at-point 'line)))
-                     (and (stringp line)
-                          (string-match "\\b\\(if\\|case\\|do\\|begin\\) *$" 
line))))))
-
-(defcustom aggressive-indent-dont-indent-if '()
-  "List of variables and functions to prevent aggressive indenting.
-This variable is a list where each element is a Lisp form.
-As long as any one of these forms returns non-nil,
-aggressive-indent will not perform any indentation.
-
-See `aggressive-indent--internal-dont-indent-if' for usage examples."
-  :type '(repeat sexp)
-  :package-version '(aggressive-indent . "0.2"))
-
-(defvar aggressive-indent--error-message "One of the forms in 
`aggressive-indent-dont-indent-if' had the following error, I've disabled it 
until you fix it: %S"
-  "Error message thrown by `aggressive-indent-dont-indent-if'.")
-
-(defvar aggressive-indent--has-errored nil
-  "Keep track of whether `aggressive-indent-dont-indent-if' is throwing.
-This is used to prevent an infinite error loop on the user.")
-
-(defun aggressive-indent--run-user-hooks ()
-  "Safely run forms in `aggressive-indent-dont-indent-if'.
-If any of them errors out, we only report it once until it stops
-erroring again."
-  (and aggressive-indent-dont-indent-if
-       (condition-case er
-           (prog1 (eval (cons 'or aggressive-indent-dont-indent-if))
-             (setq aggressive-indent--has-errored nil))
-         (error (unless aggressive-indent--has-errored
-                  (setq aggressive-indent--has-errored t)
-                  (message aggressive-indent--error-message er))))))
-
-;;; Indenting defun
-;;;###autoload
-(defun aggressive-indent-indent-defun (&optional l r)
-  "Indent current defun.
-Throw an error if parentheses are unbalanced.
-If L and R are provided, use them for finding the start and end of defun."
-  (interactive)
-  (let ((p (point-marker)))
-    (set-marker-insertion-type p t)
-    (indent-region
-     (save-excursion
-       (when l (goto-char l))
-       (beginning-of-defun 1) (point))
-     (save-excursion
-       (when r (goto-char r))
-       (end-of-defun 1) (point)))
-    (goto-char p)))
-
-(defun aggressive-indent--softly-indent-defun (&optional l r)
-  "Indent current defun unobstrusively.
-Like `aggressive-indent-indent-defun', but without errors or
-messages.  L and R passed to `aggressive-indent-indent-defun'."
-  (cl-letf (((symbol-function 'message) #'ignore))
-    (ignore-errors (aggressive-indent-indent-defun l r))))
-
-;;; Indenting region
-;;;###autoload
-(defun aggressive-indent-indent-region-and-on (l r)
-  "Indent region between L and R, and then some.
-Call `indent-region' between L and R, and then keep indenting
-until nothing more happens."
-  (interactive "r")
-  (let ((p (point-marker)))
-    (set-marker-insertion-type p t)
-    (unwind-protect
-        (progn
-          (unless (= l r)
-            (when (= (char-before r) ?\n)
-              (cl-decf r)))
-          ;; If L is at the end of a line, skip that line.
-          (unless (= l r)
-            (when (= (char-after l) ?\n)
-              (cl-incf l)))
-          ;; Indent the affected region.
-          (goto-char r)
-          (unless (= l r) (indent-region l r))
-          ;; And then we indent each following line until nothing happens.
-          (forward-line 1)
-          (skip-chars-forward "[:blank:]\n\r\xc")
-          (let* ((eod (ignore-errors
-                        (save-excursion (end-of-defun)
-                                        (point-marker))))
-                 (point-limit (if (and eod (< (point) eod))
-                                  eod (point-max-marker))))
-            (while (and (null (eobp))
-                        (let ((op (point))
-                              (np (progn (indent-according-to-mode)
-                                         (point))))
-                          ;; As long as we're indenting things to the
-                          ;; left, keep indenting.
-                          (or (< np op)
-                              ;; If we're indenting to the right, or
-                              ;; not at all, stop at the limit.
-                              (< (point) point-limit))))
-              (forward-line 1)
-              (skip-chars-forward "[:blank:]\n\r\f"))))
-      (goto-char p))))
-
-(defun aggressive-indent--softly-indent-region-and-on (l r &rest _)
-  "Indent region between L and R, and a bit more.
-Like `aggressive-indent-indent-region-and-on', but without errors
-or messages."
-  (cl-letf (((symbol-function 'message) #'ignore))
-    (ignore-errors (aggressive-indent-indent-region-and-on l r))))
-
-;;; Tracking changes
-(defvar aggressive-indent--changed-list nil
-  "List of (left right) limit of regions changed in the last command loop.")
-(make-variable-buffer-local 'aggressive-indent--changed-list)
-
-(defun aggressive-indent--proccess-changed-list-and-indent ()
-  "Indent the regions in `aggressive-indent--changed-list'."
-  (let ((inhibit-modification-hooks t)
-        (inhibit-point-motion-hooks t)
-        (indent-function
-         (if (cl-member-if #'derived-mode-p 
aggressive-indent-modes-to-prefer-defun)
-             #'aggressive-indent--softly-indent-defun 
#'aggressive-indent--softly-indent-region-and-on)))
-    ;; Take the 10 most recent changes.
-    (let ((cell (nthcdr 10 aggressive-indent--changed-list)))
-      (when cell (setcdr cell nil)))
-    ;; (message "----------")
-    (while aggressive-indent--changed-list
-      ;; (message "%S" (car aggressive-indent--changed-list))
-      (apply indent-function (car aggressive-indent--changed-list))
-      (setq aggressive-indent--changed-list
-            (cdr aggressive-indent--changed-list)))))
-
-(defcustom aggressive-indent-sit-for-time 0.05
-  "Time, in seconds, to wait before indenting.
-If you feel aggressive-indent is causing Emacs to hang while
-typing, try tweaking this number."
-  :type 'float)
-
-(defun aggressive-indent--indent-if-changed ()
-  "Indent any region that changed in the last command loop."
-  (when aggressive-indent--changed-list
-    (save-excursion
-      (save-selected-window
-        (unless (or (run-hook-wrapped 
'aggressive-indent--internal-dont-indent-if #'eval)
-                    (aggressive-indent--run-user-hooks))
-          (while-no-input
-            (sit-for aggressive-indent-sit-for-time t)
-            (redisplay)
-            (aggressive-indent--proccess-changed-list-and-indent)))))))
-
-(defun aggressive-indent--keep-track-of-changes (l r &rest _)
-  "Store the limits (L and R) of each change in the buffer."
-  (when aggressive-indent-mode
-    (push (list l r) aggressive-indent--changed-list)))
-
-;;; Minor modes
-;;;###autoload
-(define-minor-mode aggressive-indent-mode
-  nil nil " =>"
-  `((,(kbd "C-c C-q") . aggressive-indent-indent-defun)
-    ([backspace]
-     menu-item "maybe-delete-indentation" ignore :filter
-     (lambda (&optional _)
-       (when (and (looking-back "^[[:blank:]]+")
-                  ;; Wherever we don't want to indent, we probably also
-                  ;; want the default backspace behavior.
-                  (not (run-hook-wrapped 
'aggressive-indent--internal-dont-indent-if #'eval))
-                  (not (aggressive-indent--run-user-hooks)))
-         #'delete-indentation))))
-  (if aggressive-indent-mode
-      (if (and global-aggressive-indent-mode
-               (or (cl-member-if #'derived-mode-p 
aggressive-indent-excluded-modes)
-                   (memq major-mode '(text-mode fundamental-mode))
-                   buffer-read-only))
-          (aggressive-indent-mode -1)
-        ;; Should electric indent be ON or OFF?
-        (if (or (eq aggressive-indent-dont-electric-modes t)
-                (cl-member-if #'derived-mode-p 
aggressive-indent-dont-electric-modes))
-            (aggressive-indent--local-electric nil)
-          (aggressive-indent--local-electric t))
-        (add-hook 'after-change-functions 
#'aggressive-indent--keep-track-of-changes nil 'local)
-        (add-hook 'before-save-hook 
#'aggressive-indent--proccess-changed-list-and-indent nil 'local)
-        (add-hook 'post-command-hook #'aggressive-indent--indent-if-changed 
nil 'local))
-    ;; Clean the hooks
-    (remove-hook 'after-change-functions 
#'aggressive-indent--keep-track-of-changes 'local)
-    (remove-hook 'before-save-hook 
#'aggressive-indent--proccess-changed-list-and-indent 'local)
-    (remove-hook 'post-command-hook #'aggressive-indent--indent-if-changed 
'local)
-    (remove-hook 'post-command-hook #'aggressive-indent--softly-indent-defun 
'local)))
-
-(defun aggressive-indent--local-electric (on)
-  "Turn variable `electric-indent-mode' on or off locally, as per boolean ON."
-  (if (fboundp 'electric-indent-local-mode)
-      (electric-indent-local-mode (if on 1 -1))
-    (set (make-local-variable 'electric-indent-mode) on)))
-
-;;;###autoload
-(define-globalized-minor-mode global-aggressive-indent-mode
-  aggressive-indent-mode aggressive-indent-mode)
-
-;;;###autoload
-(defalias 'aggressive-indent-global-mode
-  #'global-aggressive-indent-mode)
-
-(provide 'aggressive-indent)
-;;; aggressive-indent.el ends here
diff --git a/packages/aggressive-indent/c-example.gif 
b/packages/aggressive-indent/c-example.gif
deleted file mode 100644
index f72e143..0000000
Binary files a/packages/aggressive-indent/c-example.gif and /dev/null differ
diff --git a/packages/aggressive-indent/lisp-example.gif 
b/packages/aggressive-indent/lisp-example.gif
deleted file mode 100644
index 220289a..0000000
Binary files a/packages/aggressive-indent/lisp-example.gif and /dev/null differ
diff --git a/packages/coffee-mode/README.md b/packages/coffee-mode/README.md
deleted file mode 100644
index 51a7322..0000000
--- a/packages/coffee-mode/README.md
+++ /dev/null
@@ -1,284 +0,0 @@
-CoffeeScript Major Mode
-=======================
-
-An Emacs major mode for [CoffeeScript][cs], unfancy JavaScript.
-
-Provides syntax highlighting, indentation support, imenu support,
-a menu bar, and a few cute commands.
-
-![Screenshot](http://img.skitch.com/20100308-fcr622c95ibey4m474d5m1m1qt.png)
-
-## Installation
-
-In your shell:
-
-    $ cd ~/.emacs.d/vendor
-    $ git clone git://github.com/defunkt/coffee-mode.git
-
-In your emacs config:
-
-    (add-to-list 'load-path "~/.emacs.d/vendor/coffee-mode")
-    (require 'coffee-mode)
-
-If `coffee-mode` is not enabled automatically for any files ending in
-".coffee" or named "Cakefile", add this to your emacs config as well:
-
-    (add-to-list 'auto-mode-alist '("\\.coffee$" . coffee-mode))
-    (add-to-list 'auto-mode-alist '("Cakefile" . coffee-mode))
-
-[coffee-mode used to offer automatic deletion of trailing whitespace.
-This is now left to whitespace-mode. See its documentation for full
-details, but as a hint, configure:
-
-    (setq whitespace-action '(auto-cleanup)) ;; automatically clean up bad 
whitespace
-    (setq whitespace-style '(trailing space-before-tab indentation empty 
space-after-tab)) ;; only show bad whitespace
-
-Then turn on whitespace-mode, or global-whitespace-mode.]
-
-## Indentation
-
-### TAB Theory
-
-It goes like this: when you press `TAB`, we indent the line unless
-doing so would make the current line more than two indentation levels
-deepers than the previous line. If that's the case, remove all
-indentation.
-
-Consider this code, with point at the position indicated by the
-caret:
-
-    line1()
-      line2()
-      line3()
-         ^
-
-Pressing `TAB` will produce the following code:
-
-    line1()
-      line2()
-        line3()
-           ^
-
-Pressing `TAB` again will produce this code:
-
-    line1()
-      line2()
-    line3()
-       ^
-
-And so on. I think this is a pretty good way of getting decent
-indentation with a whitespace-sensitive language.
-
-### Newline and Indent
-
-We all love hitting `RET` and having the next line indented
-properly. Given this code and cursor position:
-
-    line1()
-      line2()
-      line3()
-            ^
-
-Pressing `RET` would insert a newline and place our cursor at the
-following position:
-
-    line1()
-      line2()
-      line3()
-
-      ^
-
-In other words, the level of indentation is maintained. This
-applies to comments as well. Combined with the `TAB` you should be
-able to get things where you want them pretty easily.
-
-### Indenters
-
-`class`, `for`, `if`, and possibly other keywords cause the next line
-to be indented a level deeper automatically.
-
-For example, given this code and cursor position::
-
-    class Animal
-                ^
-
-Pressing enter would produce the following:
-
-    class Animal
-
-      ^
-
-That is, indented a column deeper.
-
-This also applies to lines ending in `->`, `=>`, `{`, `[`, and
-possibly more characters.
-
-So this code and cursor position:
-
-    $('#demo').click ->
-                       ^
-
-On enter would produce this:
-
-    $('#demo').click ->
-
-      ^
-
-Pretty slick.
-
-## imenu
-
-If you're using imenu, `coffee-mode` should work just fine. This
-means users of [textmate.el][tm] will find that `⇧⌘T`
-(`textmate-go-to-symbol`) mostly works as expected.
-
-If you're not using imenu check out [this page][im] or textmate.el for
-a really awesome way to jump quickly to a function's definition in a
-file.
-
-## Commands
-
-If you have `easymenu` you can get to any of these commands from the
-menu bar:
-
-![coffee-mode menu 
bar](http://img.skitch.com/20100308-tt5yn51h2jww2pmjqaawed6eq8.png)
-
-### coffee-compile-file
-
-Compiles the current file as a JavaScript file. Doesn't open it or
-anything special for you.
-
-Operating on "basic.coffee" and running this command will save a
-"basic.js" in the same directory. Subsequent runs will overwrite the
-file.
-
-If there are compilation errors and we the compiler have returned a
-line number to us for the first error, the point is moved to that
-line, so you can investigate.  If this annoys you, you can set
-`coffee-compile-jump-to-error` to `nil`.
-
-### coffee-compile-buffer
-
-Compiles the current buffer to JavaScript using the command specified
-by the `coffee-command` variable and opens the contents in a new
-buffer using the mode configured for ".js" files.
-
-Bind it:
-
-    (define-key coffee-mode-map [(meta r)] 'coffee-compile-buffer)
-
-### coffee-compile-region
-
-Compiles the selected region to JavaScript using the same
-configuration variables as `coffee-compile-buffer`.
-
-Bind it:
-
-    (define-key coffee-mode-map [(meta R)] 'coffee-compile-region)
-
-### Compile-on-save
-
-Hitting the key sequence `C-c C-o C-s` turns on (toggles) the
-compile-on-save minor mode in `coffee-mode`.  To enable it by default:
-
-    (add-hook 'coffee-mode-hook '(lambda () (coffee-cos-mode t)))
-
-### coffee-repl
-
-Starts a repl in a new buffer using `coffee-command`.
-
-## Hooks
-
-### coffee-mode-hook
-
-Naturally. Example:
-
-    (defun coffee-custom ()
-      "coffee-mode-hook"
-
-      ;; CoffeeScript uses two spaces.
-      (make-local-variable 'tab-width)
-      (set 'tab-width 2)
-
-      ;; If you don't want your compiled files to be wrapped
-      (setq coffee-args-compile '("-c" "--bare"))
-
-      ;; Emacs key binding
-      (define-key coffee-mode-map [(meta r)] 'coffee-compile-buffer)
-
-      ;; Riding edge.
-      (setq coffee-command "~/dev/coffee")
-
-      ;; Compile '.coffee' files on every save
-      (and (file-exists-p (buffer-file-name))
-           (file-exists-p (coffee-compiled-file-name))
-           (coffee-cos-mode t)))
-
-    (add-hook 'coffee-mode-hook 'coffee-custom)
-
-## Configuration
-
-You can customize any of the following options using `M-x
-customize-group` with "coffee" as the group.
-
-You can also customize then with `coffee-mode-hook`, as demonstrated
-above.
-
-### coffee-tab-width
-
-The tab width to use when indenting.
-
-Default: `tab-width`
-
-### coffee-command
-
-The CoffeeScript command used for evaluating code. Must be in your
-path.
-
-Default: `"coffee"`
-
-### coffee-args-repl
-
-The command line arguments to pass to `coffee-command' to start a
-REPL.
-
-Default: `'("-i")`
-
-### coffee-args-compile
-
-The command line arguments to pass to `coffee-command' when compiling a file.
-
-Default: `'("-c")`
-
-### coffee-compiled-buffer-name
-
-The name of the scratch buffer used when compiling CoffeeScript.
-
-Default: `"*coffee-compiled*"`
-
-### coffee-compile-jump-to-error
-
-Whether to jump to the first error if compilation fails.  Please note
-that the coffee compiler doesn't always give a line number for the
-issue and in that case it is not possible to jump to the error, of
-course.
-
-Default: `t`
-
-## Thanks
-
-* Jeremy Ashkenas for CoffeeScript
-* <http://xahlee.org/emacs/elisp_syntax_coloring.html> for instructions.
-* Jason Blevins for the guidance his markdown-mode.el gave.
-* Steve Yegge for js2
-
-## Bugs
-
-Prototype accessor assignments like `String::length: -> 10` don't look
-great.
-
-Please file bugs at <http://github.com/defunkt/coffee-mode/issues>
-
-[cs]: http://jashkenas.github.com/coffee-script/
-[tm]: http://github.com/defunkt/textmate.el
-[im]: http://chopmo.blogspot.com/2008/09/quickly-jumping-to-symbols.html
diff --git a/packages/coffee-mode/coffee-mode.el 
b/packages/coffee-mode/coffee-mode.el
deleted file mode 100644
index cf8b5a8..0000000
--- a/packages/coffee-mode/coffee-mode.el
+++ /dev/null
@@ -1,640 +0,0 @@
-;;; coffee-mode.el --- Major mode for CoffeeScript files
-
-;; Copyright (C) 2010-2013 Free Software Foundation, Inc.
-
-;; Version: 0.4.1.1
-;; Keywords: CoffeeScript major mode
-;; Author: Chris Wanstrath <chris@ozmm.org>
-;; URL: http://github.com/defunkt/coffee-mode
-
-;; 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
-
-;; CoffeeScript mode is an Emacs major mode for [CoffeeScript][cs],
-;; unfancy JavaScript.  It provides syntax highlighting, indentation
-;; support, imenu support, a menu bar, and a few cute commands.
-
-;; Installing this package enables CoffeeScript mode for file named
-;; *.coffee and Cakefile.
-
-;; Commands:
-
-;; M-x coffee-compile-file compiles the current file as a JavaScript
-;; file.  Operating on "basic.coffee" and running this command will
-;; save a "basic.js" in the same directory.  Subsequent runs will
-;; overwrite the file.
-;;
-;; If there are compilation errors and we the compiler have returned a
-;; line number to us for the first error, the point is moved to that
-;; line, so you can investigate.  If this annoys you, you can set
-;; `coffee-compile-jump-to-error` to `nil`.
-;;
-;; M-x coffee-compile-buffer compiles the current buffer to JavaScript
-;; using the command specified by the `coffee-command` variable, and
-;; opens the contents in a new buffer using the mode configured for
-;; ".js" files.
-;;
-;; M-x coffee-compile-region compiles the selected region to
-;; JavaScript using the same configuration variables as
-;; `coffee-compile-buffer`.
-;;
-;; `C-c C-o C-s' (coffee-cos-mode) toggles a minor mode implementing
-;; "compile-on-save" behavior.
-;;
-;; M-x coffee-repl starts a repl via `coffee-command` in a new buffer.
-
-;; Options:
-;;
-;; `coffee-tab-width' - Tab width to use when indenting.
-;; `coffee-command'   - CoffeeScript command for evaluating code.
-;;                      Must be in your path.
-;; `coffee-args-repl' - Command line arguments for `coffee-command'
-;;                      when starting a REPL.
-;; `coffee-args-compile'          - Arguments for `coffee-command'
-;;                                  when compiling a file.
-;; `coffee-compiled-buffer-name'  - Name of the scratch buffer used
-;;                                  when compiling CoffeeScript.
-;; `coffee-compile-jump-to-error' - Whether to jump to the first error
-;;                                  if compilation fails.
-
-;; Please file bugs at <http://github.com/defunkt/coffee-mode/issues>
-
-;; Thanks:
-
-;; Major thanks to http://xahlee.org/emacs/elisp_syntax_coloring.html
-;; the instructions.
-
-;; Also thanks to Jason Blevins's markdown-mode.el and Steve Yegge's
-;; js2-mode for guidance.
-
-;; TODO:
-;; - Execute {buffer,region,line} and show output in new buffer
-;; - Make prototype accessor assignments like `String::length: -> 10` pretty.
-;; - mirror-mode - close brackets and parens automatically
-
-;;; Code:
-
-(require 'comint)
-(require 'easymenu)
-(require 'font-lock)
-
-(eval-when-compile
-  (require 'cl))
-
-;;
-;; Customizable Variables
-;;
-
-(defconst coffee-mode-version "0.4.1"
-  "The version of `coffee-mode'.")
-
-(defgroup coffee nil
-  "A CoffeeScript major mode."
-  :group 'languages)
-
-(defcustom coffee-tab-width tab-width
-  "The tab width to use when indenting."
-  :type 'integer
-  :group 'coffee)
-
-(defcustom coffee-command "coffee"
-  "The CoffeeScript command used for evaluating code."
-  :type 'string
-  :group 'coffee)
-
-(defcustom js2coffee-command "js2coffee"
-  "The js2coffee command used for evaluating code."
-  :type 'string
-  :group 'coffee)
-
-(defcustom coffee-args-repl '("-i")
-  "The arguments to pass to `coffee-command' to start a REPL."
-  :type 'list
-  :group 'coffee)
-
-(defcustom coffee-args-compile '("-c")
-  "The arguments to pass to `coffee-command' to compile a file."
-  :type 'list
-  :group 'coffee)
-
-(defcustom coffee-compiled-buffer-name "*coffee-compiled*"
-  "The name of the scratch buffer used for compiled CoffeeScript."
-  :type 'string
-  :group 'coffee)
-
-(defcustom coffee-compile-jump-to-error t
-  "Whether to jump to the first error if compilation fails.
-Please note that the coffee compiler doesn't always give a line
-number for the issue and in that case it is not possible to jump
-to the error."
-  :type 'boolean
-  :group 'coffee)
-
-(defcustom coffee-watch-buffer-name "*coffee-watch*"
-  "The name of the scratch buffer used when using the --watch flag
-with CoffeeScript."
-  :type 'string
-  :group 'coffee)
-
-(defcustom coffee-mode-hook nil
-  "Hook called by `coffee-mode'."
-  :type 'hook
-  :group 'coffee)
-
-(defvar coffee-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map (kbd "A-r") 'coffee-compile-buffer)
-    (define-key map (kbd "A-R") 'coffee-compile-region)
-    (define-key map (kbd "A-M-r") 'coffee-repl)
-    (define-key map "\C-m" 'coffee-newline-and-indent)
-    (define-key map "\C-c\C-o\C-s" 'coffee-cos-mode)
-    map)
-  "Keymap for CoffeeScript major mode.")
-
-(defvar coffee-mode-syntax-table
-  (let ((st (make-syntax-table)))
-    (modify-syntax-entry ?# "< b" st)
-    (modify-syntax-entry ?\n "> b" st)
-    (modify-syntax-entry ?' "\"" st)
-    st))
-
-;;
-;; Commands
-;;
-
-(defun coffee-repl ()
-  "Launch a CoffeeScript REPL using `coffee-command' as an inferior mode."
-  (interactive)
-
-  (unless (comint-check-proc "*CoffeeREPL*")
-    (set-buffer
-     (apply 'make-comint "CoffeeREPL"
-            coffee-command nil coffee-args-repl)))
-
-  (pop-to-buffer "*CoffeeREPL*"))
-
-(defun coffee-compiled-file-name (&optional filename)
-  "Returns the name of the JavaScript file compiled from a CoffeeScript file.
-If FILENAME is omitted, the current buffer's file name is used."
-  (concat (file-name-sans-extension (or filename (buffer-file-name))) ".js"))
-
-(defun coffee-compile-file ()
-  "Compiles and saves the current file to disk."
-  (interactive)
-  (let ((compiler-output (shell-command-to-string (coffee-command-compile 
(buffer-file-name)))))
-    (if (string= compiler-output "")
-        (message "Compiled and saved %s" (coffee-compiled-file-name))
-      (let* ((msg (car (split-string compiler-output "[\n\r]+")))
-             (line (and (string-match "on line \\([0-9]+\\)" msg)
-                        (string-to-number (match-string 1 msg)))))
-        (message msg)
-        (when (and coffee-compile-jump-to-error line (> line 0))
-          (goto-char (point-min))
-          (forward-line (1- line)))))))
-
-(defun coffee-compile-buffer ()
-  "Compiles the current buffer and displays the JavaScript in a buffer
-called `coffee-compiled-buffer-name'."
-  (interactive)
-  (save-excursion
-    (coffee-compile-region (point-min) (point-max))))
-
-(defun coffee-compile-region (start end)
-  "Compiles a region and displays the JavaScript in a buffer called
-`coffee-compiled-buffer-name'."
-  (interactive "r")
-
-  (let ((buffer (get-buffer coffee-compiled-buffer-name)))
-    (when buffer
-      (kill-buffer buffer)))
-
-  (apply (apply-partially 'call-process-region start end coffee-command nil
-                          (get-buffer-create coffee-compiled-buffer-name)
-                          nil)
-         (append coffee-args-compile (list "-s" "-p")))
-  (switch-to-buffer (get-buffer coffee-compiled-buffer-name))
-  (let ((buffer-file-name "tmp.js")) (set-auto-mode))
-  (goto-char (point-min)))
-
-(defun coffee-js2coffee-replace-region (start end)
-  "Convert JavaScript in the region into CoffeeScript."
-  (interactive "r")
-
-  (let ((buffer (get-buffer coffee-compiled-buffer-name)))
-    (when buffer
-      (kill-buffer buffer)))
-
-  (call-process-region start end
-                       js2coffee-command nil
-                       (current-buffer))
-  (delete-region start end))
-
-(defun coffee-version ()
-  "Show the `coffee-mode' version in the echo area."
-  (interactive)
-  (message (concat "coffee-mode version " coffee-mode-version)))
-
-(defun coffee-watch (dir-or-file)
-  "Run `coffee-run-cmd' with the --watch flag on a directory or file."
-  (interactive "fDirectory or File: ")
-  (let ((coffee-compiled-buffer-name coffee-watch-buffer-name)
-        (args (mapconcat 'identity (append coffee-args-compile (list "--watch" 
(expand-file-name dir-or-file))) " ")))
-    (coffee-run-cmd args)))
-
-;;
-;; Menubar
-;;
-
-(easy-menu-define coffee-mode-menu coffee-mode-map
-  "Menu for CoffeeScript mode"
-  '("CoffeeScript"
-    ["Compile File" coffee-compile-file]
-    ["Compile Buffer" coffee-compile-buffer]
-    ["Compile Region" coffee-compile-region]
-    ["REPL" coffee-repl]
-    "---"
-    ["Version" coffee-show-version]
-    ))
-
-;;
-;; Define Language Syntax
-;;
-
-;; String literals
-(defvar coffee-string-regexp 
"\"\\([^\\]\\|\\\\.\\)*?\"\\|'\\([^\\]\\|\\\\.\\)*?'")
-
-;; Instance variables (implicit this)
-(defvar coffee-this-regexp "@\\(\\w\\|_\\)*\\|this")
-
-;; Prototype::access
-(defvar coffee-prototype-regexp "\\(\\(\\w\\|\\.\\|_\\| 
\\|$\\)+?\\)::\\(\\(\\w\\|\\.\\|_\\| \\|$\\)+?\\):")
-
-;; Assignment
-(defvar coffee-assign-regexp "\\(\\(\\w\\|\\.\\|_\\|$\\)+?\s*\\):")
-
-;; Lambda
-(defvar coffee-lambda-regexp "\\((.+)\\)?\\s *\\(->\\|=>\\)")
-
-;; Namespaces
-(defvar coffee-namespace-regexp "\\b\\(class\\s +\\(\\S +\\)\\)\\b")
-
-;; Booleans
-(defvar coffee-boolean-regexp 
"\\b\\(true\\|false\\|yes\\|no\\|on\\|off\\|null\\|undefined\\)\\b")
-
-;; Regular Expressions
-(defvar coffee-regexp-regexp 
"\\/\\(\\\\.\\|\\[\\(\\\\.\\|.\\)+?\\]\\|[^/]\\)+?\\/")
-
-;; JavaScript Keywords
-(defvar coffee-js-keywords
-      '("if" "else" "new" "return" "try" "catch"
-        "finally" "throw" "break" "continue" "for" "in" "while"
-        "delete" "instanceof" "typeof" "switch" "super" "extends"
-        "class" "until" "loop"))
-
-;; Reserved keywords either by JS or CS.
-(defvar coffee-js-reserved
-      '("case" "default" "do" "function" "var" "void" "with"
-        "const" "let" "debugger" "enum" "export" "import" "native"
-        "__extends" "__hasProp"))
-
-;; CoffeeScript keywords.
-(defvar coffee-cs-keywords
-      '("then" "unless" "and" "or" "is"
-        "isnt" "not" "of" "by" "where" "when"))
-
-;; Regular expression combining the above three lists.
-(defvar coffee-keywords-regexp (regexp-opt
-                                (append
-                                 coffee-js-reserved
-                                 coffee-js-keywords
-                                 coffee-cs-keywords) 'words))
-
-
-;; Create the list for font-lock. Each class of keyword is given a
-;; particular face.
-(defvar coffee-font-lock-keywords
-  ;; *Note*: order below matters. `coffee-keywords-regexp' goes last
-  ;; because otherwise the keyword "state" in the function
-  ;; "state_entry" would be highlighted.
-  `((,coffee-string-regexp . font-lock-string-face)
-    (,coffee-this-regexp . font-lock-variable-name-face)
-    (,coffee-prototype-regexp . font-lock-variable-name-face)
-    (,coffee-assign-regexp . font-lock-type-face)
-    (,coffee-regexp-regexp . font-lock-constant-face)
-    (,coffee-boolean-regexp . font-lock-constant-face)
-    (,coffee-keywords-regexp . font-lock-keyword-face)))
-
-;;
-;; Helper Functions
-;;
-
-(defun coffee-command-compile (file-name)
-  "Run `coffee-command' to compile FILE."
-  (let ((full-file-name (expand-file-name file-name)))
-    (mapconcat 'identity (append (list coffee-command) coffee-args-compile 
(list full-file-name)) " ")))
-
-(defun coffee-run-cmd (args)
-  "Run `coffee-command' with the given arguments, and display the
-output in a compilation buffer."
-  (interactive "sArguments: ")
-  (let ((compilation-buffer-name-function
-         (lambda (_this-mode)
-           (generate-new-buffer-name coffee-compiled-buffer-name))))
-    (compile (concat coffee-command " " args))))
-
-;;
-;; imenu support
-;;
-
-;; This is a pretty naive but workable way of doing it. First we look
-;; for any lines that starting with `coffee-assign-regexp' that include
-;; `coffee-lambda-regexp' then add those tokens to the list.
-;;
-;; Should cover cases like these:
-;;
-;; minus: (x, y) -> x - y
-;; String::length: -> 10
-;; block: ->
-;;   print('potion')
-;;
-;; Next we look for any line that starts with `class' or
-;; `coffee-assign-regexp' followed by `{` and drop into a
-;; namespace. This means we search one indentation level deeper for
-;; more assignments and add them to the alist prefixed with the
-;; namespace name.
-;;
-;; Should cover cases like these:
-;;
-;; class Person
-;;   print: ->
-;;     print 'My name is ' + this.name + '.'
-;;
-;; class Policeman extends Person
-;;   constructor: (rank) ->
-;;     @rank: rank
-;;   print: ->
-;;     print 'My name is ' + this.name + " and I'm a " + this.rank + '.'
-;;
-;; TODO:
-;; app = {
-;;   window:  {width: 200, height: 200}
-;;   para:    -> 'Welcome.'
-;;   button:  -> 'OK'
-;; }
-
-(defun coffee-imenu-create-index ()
-  "Create an imenu index of all methods in the buffer."
-  (interactive)
-
-  ;; This function is called within a `save-excursion' so we're safe.
-  (goto-char (point-min))
-
-  (let ((index-alist '()) assign pos indent ns-name ns-indent)
-    ;; Go through every assignment that includes -> or => on the same
-    ;; line or starts with `class'.
-    (while (re-search-forward
-            (concat "^\\(\\s *\\)"
-                    "\\("
-                      coffee-assign-regexp
-                      ".+?"
-                      coffee-lambda-regexp
-                    "\\|"
-                      coffee-namespace-regexp
-                    "\\)")
-            (point-max)
-            t)
-
-      ;; If this is the start of a new namespace, save the namespace's
-      ;; indentation level and name.
-      (when (match-string 8)
-        ;; Set the name.
-        (setq ns-name (match-string 8))
-
-        ;; If this is a class declaration, add :: to the namespace.
-        (setq ns-name (concat ns-name "::"))
-
-        ;; Save the indentation level.
-        (setq ns-indent (length (match-string 1))))
-
-      ;; If this is an assignment, save the token being
-      ;; assigned. `Please.print:` will be `Please.print`, `block:`
-      ;; will be `block`, etc.
-      (when (setq assign (match-string 3))
-          ;; The position of the match in the buffer.
-          (setq pos (match-beginning 3))
-
-          ;; The indent level of this match
-          (setq indent (length (match-string 1)))
-
-          ;; If we're within the context of a namespace, add that to the
-          ;; front of the assign, e.g.
-          ;; constructor: => Policeman::constructor
-          (when (and ns-name (> indent ns-indent))
-            (setq assign (concat ns-name assign)))
-
-          ;; Clear the namespace if we're no longer indented deeper
-          ;; than it.
-          (when (and ns-name (<= indent ns-indent))
-            (setq ns-name nil)
-            (setq ns-indent nil))
-
-          ;; Add this to the alist. Done.
-          (push (cons assign pos) index-alist)))
-
-    ;; Return the alist.
-    index-alist))
-
-;;
-;; Indentation
-;;
-
-;;; The theory is explained in the README.
-
-(defun coffee-indent-line ()
-  "Indent current line as CoffeeScript."
-  (interactive)
-
-  (if (= (point) (point-at-bol))
-      (insert-tab)
-    (save-excursion
-      (let ((prev-indent (coffee-previous-indent)))
-        ;; Shift one column to the left
-        (beginning-of-line)
-        (insert-tab)
-
-        (when (= (point-at-bol) (point))
-          (forward-char coffee-tab-width))
-
-        ;; We're too far, remove all indentation.
-        (when (> (- (current-indentation) prev-indent) coffee-tab-width)
-          (backward-to-indentation 0)
-          (delete-region (point-at-bol) (point)))))))
-
-(defun coffee-previous-indent ()
-  "Return the indentation level of the previous non-blank line."
-  (save-excursion
-    (forward-line -1)
-    (if (bobp)
-        0
-      (progn
-        (while (and (looking-at "^[ \t]*$") (not (bobp))) (forward-line -1))
-        (current-indentation)))))
-
-(defun coffee-newline-and-indent ()
-  "Insert a newline and indent it to the same level as the previous line."
-  (interactive)
-
-  ;; Remember the current line indentation level,
-  ;; insert a newline, and indent the newline to the same
-  ;; level as the previous line.
-  (let ((prev-indent (current-indentation)))
-    (delete-horizontal-space t)
-    (newline)
-    (insert-tab (/ prev-indent coffee-tab-width))
-
-    ;; We need to insert an additional tab because the last line was special.
-    (when (coffee-line-wants-indent)
-      (insert-tab)))
-
-  ;; Last line was a comment so this one should probably be,
-  ;; too. Makes it easy to write multi-line comments (like the one I'm
-  ;; writing right now).
-  (when (coffee-previous-line-is-comment)
-    (insert "# ")))
-
-;; Indenters help determine whether the current line should be
-;; indented further based on the content of the previous line. If a
-;; line starts with `class', for instance, you're probably going to
-;; want to indent the next line.
-
-(defvar coffee-indenters-bol '("class" "for" "if" "try")
-  "Keywords or syntax whose presence at the start of a line means the
-next line should probably be indented.")
-
-(defun coffee-indenters-bol-regexp ()
-  "Builds a regexp out of `coffee-indenters-bol' words."
-  (regexp-opt coffee-indenters-bol 'words))
-
-(defvar coffee-indenters-eol '(?> ?{ ?\[)
-  "Single characters at the end of a line that mean the next line
-should probably be indented.")
-
-(defun coffee-line-wants-indent ()
-  "Return t if the current line should be indented relative to the
-previous line."
-  (interactive)
-
-  (save-excursion
-    (let ((indenter-at-bol) (indenter-at-eol))
-      ;; Go back a line and to the first character.
-      (forward-line -1)
-      (backward-to-indentation 0)
-
-      ;; If the next few characters match one of our magic indenter
-      ;; keywords, we want to indent the line we were on originally.
-      (when (looking-at (coffee-indenters-bol-regexp))
-        (setq indenter-at-bol t))
-
-      ;; If that didn't match, go to the back of the line and check to
-      ;; see if the last character matches one of our indenter
-      ;; characters.
-      (when (not indenter-at-bol)
-        (end-of-line)
-
-        ;; Optimized for speed - checks only the last character.
-        (let ((indenters coffee-indenters-eol))
-          (while indenters
-            (if (/= (char-before) (car indenters))
-                (setq indenters (cdr indenters))
-              (setq indenter-at-eol t)
-              (setq indenters nil)))))
-
-      ;; If we found an indenter, return `t'.
-      (or indenter-at-bol indenter-at-eol))))
-
-(defun coffee-previous-line-is-comment ()
-  "Return t if the previous line is a CoffeeScript comment."
-  (save-excursion
-    (forward-line -1)
-    (coffee-line-is-comment)))
-
-(defun coffee-line-is-comment ()
-  "Return t if the current line is a CoffeeScript comment."
-  (save-excursion
-    (backward-to-indentation 0)
-    (= (char-after) (string-to-char "#"))))
-
-;;
-;; Define Major Mode
-;;
-
-(unless (fboundp 'prog-mode) (defalias 'prog-mode 'fundamental-mode))
-
-(defvar electric-indent-inhibit)
-
-;;;###autoload
-(define-derived-mode coffee-mode prog-mode
-  "Coffee"
-  "Major mode for editing CoffeeScript."
-
-  ;; code for syntax highlighting
-  (setq font-lock-defaults '((coffee-font-lock-keywords)))
-
-  ;; perl style comment: "# ..."
-  (set (make-local-variable 'comment-start) "#")
-
-  ;; Indentation.
-  (set (make-local-variable 'indent-line-function) 'coffee-indent-line)
-  (set (make-local-variable 'tab-width) coffee-tab-width)
-  ;; Because indentation is not redundant, we cannot safely reindent code.
-  (setq-local electric-indent-inhibit t)
-
-  ;; imenu
-  (make-local-variable 'imenu-create-index-function)
-  (setq imenu-create-index-function 'coffee-imenu-create-index)
-
-  ;; no tabs
-  (setq indent-tabs-mode nil))
-
-;;
-;; Compile-on-Save minor mode
-;;
-
-(defvar coffee-cos-mode-line " CoS")
-(make-variable-buffer-local 'coffee-cos-mode-line)
-
-(define-minor-mode coffee-cos-mode
-  "Toggle compile-on-save for coffee-mode."
-  :group 'coffee-cos :lighter coffee-cos-mode-line
-  (cond
-   (coffee-cos-mode
-    (add-hook 'after-save-hook 'coffee-compile-file nil t))
-   (t
-    (remove-hook 'after-save-hook 'coffee-compile-file t))))
-
-;;
-;; On Load
-;;
-
-;; Run coffee-mode for files ending in .coffee.
-;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.coffee\\'" . coffee-mode))
-;;;###autoload
-(add-to-list 'auto-mode-alist '("Cakefile" . coffee-mode))
-
-(provide 'coffee-mode)
-;;; coffee-mode.el ends here
diff --git a/packages/coffee-mode/examples/basic.coffee 
b/packages/coffee-mode/examples/basic.coffee
deleted file mode 100644
index d275632..0000000
--- a/packages/coffee-mode/examples/basic.coffee
+++ /dev/null
@@ -1,118 +0,0 @@
-# These examples are taken from
-# http://jashkenas.github.com/coffee-script/
-
-song = ["do", "re", "mi", "fa", "so"]
-
-ages = {
-  max: 10
-  ida: 9
-  tim: 11
-}
-
-matrix = [
-  1, 0, 1
-  0, 0, 1
-  1, 1, 0
-]
-
-eldest = if 24 > 21 then "Liz" else "Ike"
-
-six = (one = 1) + (two = 2) + (three = 3)
-
-My.mood = greatly_improved if true
-
-# Unfancy JavaScript
-if happy and knows_it
-  cha_cha_cha()
-  false
-
-Account = (customer, cart) ->
-  @customer: customer
-  @cart: cart
-
-  $('.shopping_cart').bind 'click', (event) =>
-    @customer.purchase @cart
-
-class Animal
-  move: (meters) ->
-    alert @name + " moved " + meters + "m."
-
-  randomify: ->
-    @name.replace(/^[\w_-]*$/g, "-")
-
-class Snake extends Animal
-  constructor: (name) ->
-    @name: name
-
-  move: ->
-    alert "Slithering..."
-    super 5
-
-class Horse extends Animal
-  constructor: (name) ->
-    @name: name
-
-  move: ->
-    alert "Galloping..."
-    super 45
-
-sam = new Snake "Sammy the Python"
-tom = new Horse "Tommy the Palomino"
-
-sam.move()
-tom.move()
-if car.speed < speed_limit then accelerate()
-
-print "My name is " + @name
-
-gold = silver = the_field = "unknown"
-
-award_medals = (first, second, rest...) ->
-  gold:       first
-  silver:     second
-  the_field:  rest
-
-contenders = [
-  "Michael Phelps"
-  "Liu Xiang"
-]
-
-award_medals contenders...
-
-alert "Gold: " + gold
-alert "Silver: " + silver
-alert "The Field: " + the_field
-
-# Eat lunch.
-# what up
-# love it.
-lunch = eat food for food in ['toast', 'cheese', 'wine']
-
-$('#demo').click ->
-  asd
-# sup
-  # asd
-  # asdasd
-blah = true
-
-okay
-
-
-# Naive collision detection.
-for roid in asteroids
-  for roid2 in asteroids when roid isnt roid2
-    roid.explode() if roid.overlaps roid2
-
-years_old = max: 10, ida: 9, tim: 11
-
-ages = for child, age of years_old
-  child + " is " + age
-
-grade = (student) ->
-  if student.excellent_work
-    "A+"
-  else if student.okay_stuff
-    if student.tried_hard then "B" else "B-"
-  else
-    "C"
-
diff --git a/packages/coffee-mode/examples/edge.coffee 
b/packages/coffee-mode/examples/edge.coffee
deleted file mode 100644
index 7682a58..0000000
--- a/packages/coffee-mode/examples/edge.coffee
+++ /dev/null
@@ -1,16 +0,0 @@
-# Edge cases
-
-if string.match /\// or string.match /\x1b/ or string.match /a\/b/
-  console.log "matched"
-
-string = "Something with a \"double quote"
-console.log string
-
-string = 'Something with a \'single quote'
-console.log string
-
-# TODO
-heredoc = """
-  Heredoc with a " double quote
-"""
-console.log heredoc
diff --git a/packages/coffee-mode/examples/imenu.coffee 
b/packages/coffee-mode/examples/imenu.coffee
deleted file mode 100644
index fdf0025..0000000
--- a/packages/coffee-mode/examples/imenu.coffee
+++ /dev/null
@@ -1,33 +0,0 @@
-# Testing imenu
-regexp = /asdas/
-two = 4 / 2
-
-minus = (x, y) -> x - y
-
-String::length = -> 10
-
-class Person
-  print: ->
-    print 'My name is ' + this.name + '.'
-
-app =
-  window:  {width: 200, height: 200}
-  para:    'Welcome.'
-  button:  'OK'
-
-block = ->
-  print('potion')
-
-Please = {}
-Please.print = (word) ->
-  print(word)
-
-HomePage::get = (url) ->
-  session: url.query.session if url.query?
-
-class Policeman extends Person
-  constructor: (rank) ->
-    @rank: rank
-
-  print: ->
-    print 'My name is ' + this.name + " and I'm a " + this.rank + '.'
diff --git a/packages/compact-docstrings/.gitignore 
b/packages/compact-docstrings/.gitignore
deleted file mode 100644
index 64b1053..0000000
--- a/packages/compact-docstrings/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.cask/
diff --git a/packages/compact-docstrings/Cask b/packages/compact-docstrings/Cask
deleted file mode 100644
index 9fd0c8c..0000000
--- a/packages/compact-docstrings/Cask
+++ /dev/null
@@ -1,6 +0,0 @@
-(source gnu)
-(source melpa)
-
-(package-file "compact-docstrings.el")
-
-(development)
diff --git a/packages/compact-docstrings/Makefile 
b/packages/compact-docstrings/Makefile
deleted file mode 100644
index 4677e7f..0000000
--- a/packages/compact-docstrings/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-EMACS ?= emacs
-CASK = env --unset INSIDE_EMACS EMACS=$(EMACS) cask
-
-screenshot:
-       $(CASK) exec $(EMACS) --debug-init -Q \
-               -L . -l etc/screenshot.el
diff --git a/packages/compact-docstrings/README.rst 
b/packages/compact-docstrings/README.rst
deleted file mode 100644
index 7a56b5a..0000000
--- a/packages/compact-docstrings/README.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-=============================
- Compact docstrings in Emacs
-=============================
-
-Shrink blank lines in docstrings and doc comments
-
-.. image:: etc/compact-docstrings.png
-
-Setup
-=====
-
-Enable locally with ``compact-docstrings-mode``::
-
-  (add-hook 'some-mode-hook #'compact-docstrings-mode)
-
-Enable globally (in all programming modes) with 
``global-compact-docstrings-mode``::
-
-  (add-hook 'after-init-hook #'global-compact-docstrings-mode)
-
-Customization
-=============
-
-Enable compaction of all comments and strings by setting 
``compact-docstrings-only-doc-blocks`` to ``nil``.  Change the compact line 
height by customizing ``compact-docstrings-face``.
diff --git a/packages/compact-docstrings/compact-docstrings.el 
b/packages/compact-docstrings/compact-docstrings.el
deleted file mode 100644
index 7df3537..0000000
--- a/packages/compact-docstrings/compact-docstrings.el
+++ /dev/null
@@ -1,90 +0,0 @@
-;;; compact-docstrings.el --- Shrink blank lines in docstrings and doc 
comments  -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2016-2020  Free Software Foundation, Inc.
-
-;; Author: Clément Pit-Claudel <clement.pitclaudel@live.com>
-;; Maintainer: Clément Pit-Claudel <clement.pitclaudel@live.com>
-;; URL: https://github.com/cpitclaudel/compact-docstrings
-;; Package-Version: 0.2
-;; Keywords: convenience, faces, lisp, maint, c
-
-;; 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:
-
-;; Shrink blank lines in docstrings and doc comments
-;;
-;; Enable locally with `compact-docstrings-mode':
-;;   (add-hook 'some-mode-hook #'compact-docstrings-mode)
-;;
-;; Enable globally (in all programming modes) with
-;;   (add-hook 'after-init-hook #'global-compact-docstrings--mode)
-
-;;; Code:
-
-(defgroup compact-docstrings nil
-  "Shrink empty lines in docstrings and doc comments."
-  :group 'faces)
-
-(defface compact-docstrings-face
-  '((t :height 0.5))
-  "Face applied to blank lines in docstrings.")
-
-(defcustom compact-docstrings-only-doc-blocks t
-  "When nil, also shrink blank lines in regular strings and comments."
-  :type 'boolean)
-
-(defun compact-docstrings--matcher (bound)
-  "Find blank line in docstring, looking in point .. BOUND."
-  (let ((found nil))
-    (while (and (not found) (re-search-forward "^\n" bound t))
-      (let ((syntax (syntax-ppss)))
-        (when (and (or (nth 3 syntax)  ;; In string
-                       (nth 4 syntax)) ;; In comment
-                   (or (not compact-docstrings-only-doc-blocks)
-                       (let ((face (get-text-property (point) 'face)))
-                         (or (eq face 'font-lock-doc-face)
-                             (and (listp face) (memq 'font-lock-doc-face 
face))))))
-          (setq found t))))
-    found))
-
-(defconst compact-docstrings--keywords
-  '((compact-docstrings--matcher 0 'compact-docstrings-face prepend)) 'append)
-
-;;;###autoload
-(define-minor-mode compact-docstrings-mode
-  "Shrink empty lines in docstrings and doc comments."
-  :lighter " →∥←"
-  (if compact-docstrings-mode
-      (font-lock-add-keywords nil compact-docstrings--keywords 'append)
-    (font-lock-remove-keywords nil compact-docstrings--keywords))
-  (if (fboundp #'font-lock-flush)
-      (font-lock-flush)
-    (with-no-warnings (font-lock-fontify-buffer))))
-
-(defun compact-docstrings--mode-on ()
-  "Turn on `compact-docstrings-mode', if appropriate."
-  (when (derived-mode-p #'prog-mode)
-    (compact-docstrings-mode)))
-
-;;;###autoload
-(defalias 'shrink-docstrings #'compact-docstrings--mode-on)
-
-;;;###autoload
-(define-globalized-minor-mode global-compact-docstrings-mode 
compact-docstrings-mode
-  compact-docstrings--mode-on
-  :init-value nil)
-
-(provide 'compact-docstrings)
-;;; compact-docstrings.el ends here
diff --git a/packages/compact-docstrings/etc/after.py 
b/packages/compact-docstrings/etc/after.py
deleted file mode 100644
index 26a7ae2..0000000
--- a/packages/compact-docstrings/etc/after.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# With compact docstrings
-def complex(real=0.0, imag=0.0):
-    """Form a complex number.
-
-    Keyword arguments:
-    real -- the real part (default 0.0)
-    imag -- the imaginary part (default 0.0)
-
-    Some more description text, artificially
-    lengthened to make it span two lines.
-
-    Another paragraph.
-    """
-    pass
diff --git a/packages/compact-docstrings/etc/before.py 
b/packages/compact-docstrings/etc/before.py
deleted file mode 100644
index 66bebaa..0000000
--- a/packages/compact-docstrings/etc/before.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# With regular docstrings
-def complex(real=0.0, imag=0.0):
-    """Form a complex number.
-
-    Keyword arguments:
-    real -- the real part (default 0.0)
-    imag -- the imaginary part (default 0.0)
-
-    Some more description text, artificially
-    lengthened to make it span two lines.
-
-    Another paragraph.
-    """
-    pass
diff --git a/packages/compact-docstrings/etc/compact-docstrings-screenshot.el 
b/packages/compact-docstrings/etc/compact-docstrings-screenshot.el
deleted file mode 100644
index 6764b07..0000000
--- a/packages/compact-docstrings/etc/compact-docstrings-screenshot.el
+++ /dev/null
@@ -1,99 +0,0 @@
-;;; compact-docstrings-screenshot.el --- Make a screenshot of 
compact-docstrings
-
-;; Copyright (C) 2016  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:
-
-;; This just makes a screenshot for this package's homepage.
-
-;;; Code:
-
-(defvar cds-fringe-width 6)
-
-(defconst cds-script-dir
-  (file-name-directory (or load-file-name
-                           buffer-file-name)))
-
-(defun cds-cleanup ()
-  (dolist (buffer (buffer-list))
-    (kill-buffer buffer)))
-
-(defun cds-prepare-UI ()
-  "Prepare UI for taking a screenshot."
-  (ido-mode)
-  (tool-bar-mode -1)
-  (menu-bar-mode -1)
-  (scroll-bar-mode -1)
-  (column-number-mode)
-  (fringe-mode (cons cds-fringe-width cds-fringe-width))
-  (blink-cursor-mode -1)
-  (setq-default cursor-type 'bar
-                split-width-threshold 80
-                truncate-partial-width-windows t
-                frame-title-format (format "Compact docstrings @ Emacs %s" 
emacs-version)
-                x-gtk-use-system-tooltips nil)
-  (load-theme 'tango t)
-  ;; (set-face-attribute 'tooltip nil :height 60)
-  (set-face-attribute 'match nil :background "yellow1")
-  (set-face-attribute 'default nil :family "Ubuntu Mono" :height 110)
-  (set-face-attribute 'mode-line nil :foreground "gray60" :background "black")
-  (set-face-attribute 'mode-line-inactive nil :foreground "gray60" :background 
"#404045")
-  (set-face-attribute 'mode-line-buffer-id nil :foreground "#eab700")
-  (set-fontset-font t 'unicode "Ubuntu Mono")
-  (set-frame-size nil 100 13)
-  (redisplay t))
-
-(defun cds-load-package ()
-  "Load package."
-  (package-initialize)
-  (load-library "compact-docstrings"))
-
-(defun cds-load-example ()
-  "Prepare files and layout windows."
-  (find-file "etc/before.py")
-  (setq buffer-name "Regular docstrings")
-  (find-file-other-window "after.py")
-  (setq buffer-name "Compact docstrings")
-  (compact-docstrings-mode))
-
-(defun cds-prepare-screenshot-1 ()
-  "Prepare for taking a screenshot."
-  (cds-prepare-UI)
-  (cds-load-package)
-  (cds-load-example)
-  (message nil))
-
-(defun cds-save-screenshot ()
-  "Save screenshot of current frame."
-  (let ((fname (expand-file-name "compact-docstrings.png" cds-script-dir)))
-    (process-lines "import" "-window" (frame-parameter nil 'outer-window-id)
-                   fname)
-    (process-lines "mogrify" "-strip" "-matte"
-                   "-bordercolor" (face-attribute 'fringe :background)
-                   "-border" (format "0x%d" cds-fringe-width) fname)
-    (process-lines "optipng" "-o3" fname))
-  (kill-emacs))
-
-(defun cds-take-screenshot ()
-  (cds-prepare-screenshot-1)
-  (redisplay t)
-  (run-with-idle-timer 1 nil #'cds-save-screenshot))
-
-(print default-directory)
-(run-with-idle-timer 0 nil #'cds-take-screenshot)
-
-(provide 'compact-docstrings-screenshot)
-;; compact-docstrings-screenshot.el ends here
diff --git a/packages/compact-docstrings/etc/compact-docstrings.png 
b/packages/compact-docstrings/etc/compact-docstrings.png
deleted file mode 100644
index fd86dd3..0000000
Binary files a/packages/compact-docstrings/etc/compact-docstrings.png and 
/dev/null differ
diff --git a/packages/company/.dir-locals.el b/packages/company/.dir-locals.el
deleted file mode 100644
index 79d9a12..0000000
--- a/packages/company/.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/.elpaignore b/packages/company/.elpaignore
deleted file mode 100644
index 2203be3..0000000
--- a/packages/company/.elpaignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.travis.yml
-.gitignore
-Makefile
-test
-company-tests.el
diff --git a/packages/company/.gitignore b/packages/company/.gitignore
deleted file mode 100644
index 2ecd291..0000000
--- a/packages/company/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.elc
-ert.el
diff --git a/packages/company/.travis.yml b/packages/company/.travis.yml
deleted file mode 100644
index 18e928d..0000000
--- a/packages/company/.travis.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-language: generic
-
-env:
-  global:
-    - CURL="curl -fsSkL --retry 9 --retry-delay 9"
-  matrix:
-    - EMACS_VERSION=24.5
-    - EMACS_VERSION=25.3
-    - EMACS_VERSION=26.1
-    - EMACS_VERSION=master
-    
-matrix:
-  allow_failures:
-    - env: EMACS_VERSION=master
-
-install:
-  - $CURL -O 
https://github.com/npostavs/emacs-travis/releases/download/bins/emacs-bin-${EMACS_VERSION}.tar.gz
-  - tar -xaf emacs-bin-${EMACS_VERSION}.tar.gz -C /
-  - export EMACS=/tmp/emacs/bin/emacs
-  - $EMACS --version
-
-script:
-  make test-batch EMACS=${EMACS}
diff --git a/packages/company/Makefile b/packages/company/Makefile
deleted file mode 100644
index 015f3ac..0000000
--- a/packages/company/Makefile
+++ /dev/null
@@ -1,31 +0,0 @@
-EMACS=emacs
-
-.PHONY: ert test test-batch
-
-package: *.el
-       @ver=`grep -o "Version: .*" company.el | cut -c 10-`; \
-       tar cjvf company-$$ver.tar.bz2 --mode 644 $$(find . -name \*.el)
-
-elpa: *.el
-       @version=`grep -o "Version: .*" company.el | cut -c 10-`; \
-       dir=company-$$version; \
-       mkdir -p "$$dir"; \
-       cp $$(find . -name \*.el) company-$$version; \
-       echo "(define-package \"company\" \"$$version\" \
-       \"Modular in-buffer completion framework\")" \
-       > "$$dir"/company-pkg.el; \
-       tar cvf company-$$version.tar --mode 644 "$$dir"
-
-clean:
-       @rm -rf company-*/ company-*.tar company-*.tar.bz2 *.elc ert.el
-
-test:
-       ${EMACS} -Q -nw -L . -l test/all.el \
-       --eval "(let (pop-up-windows) (ert t))"
-
-test-batch:
-       ${EMACS} -Q --batch -L . -l test/all.el \
-       --eval "(ert-run-tests-batch-and-exit '(not (tag interactive)))"
-
-compile:
-       ${EMACS} -Q --batch -L . -f batch-byte-compile company.el company-*.el
diff --git a/packages/company/NEWS.md b/packages/company/NEWS.md
deleted file mode 100644
index f1f1d05..0000000
--- a/packages/company/NEWS.md
+++ /dev/null
@@ -1,520 +0,0 @@
-# History of user-visible changes
-
-## 2020-07-26 (0.9.13)
-
-* `company-clang`: error handling is more permissive.
-* `company-tng` stops disabling `post-completion` in backends
-  ([#946](https://github.com/company-mode/company-mode/pull/946)). Instead,
-  `company-tng-configure-default` disables snippet expansion in most popular
-  backends. If a backend you use needs this and is not covered, and you use
-  `company-tng`, disable snippet insertion by customizing a relevant option
-  provided by the backend. The result is better compatibility with LSP backends
-  because they currently depend on `post-completion` in all cases.
-* `company-keywords`: additions for C and C++.
-* `company-yasnippet` supports the `doc-buffer` action.
-* `company-bbdb` supports more headers.
-
-## 2020-02-07 (0.9.12)
-
-* Tooltip rendering bugfix.
-* `company-indent-or-complete-common` is better compatible with
-  `indent-for-tab-command`
-  
([comment](https://github.com/company-mode/company-mode/issues/94#issuecomment-571265393)).
-
-## 2020-01-03 (0.9.11)
-
-* New value for option `company-show-numbers` to show numbers on the left.
-* `company-gtags` has some minor fixes.
-* Face definitions have moved to a separate group: `company-faces`.
-* `company-capf`'s `:exit-function` handling has been improved
-  ([#935](https://github.com/company-mode/company-mode/issues/935)).
-* New user option `company-clang-use-compile-flags-txt`
-  ([#933](https://github.com/company-mode/company-mode/issues/933)).
-* Support for completion style specific sorting (Emacs 27 feature).
-* Snippet/template field interaction is inhibited while completion is active
-  (where by default `TAB` calls `company-complete-common`, clashing with 
snippet
-  map binding `TAB` to "jump to the next field"). Affects both
-  `company-template` and `yasnippet` (requires version 0.14.0).
-
-## 2019-04-15 (0.9.10)
-
-* `company-clang`: better compatibility with Clang 8
-  ([#885](https://github.com/company-mode/company-mode/issues/885)).
-* The change in `company-clang` regarding identity #defines is reverted because
-  it affected other completions as well
-  ([#884](https://github.com/company-mode/company-mode/issues/884)).
-* `company-idle-delay` now accepts a function which generates the idle time or
-  nil indicating no idle completion.
-* Add custom variable `company-show-numbers-function` to make numbers of
-  candidates customizable. 
-* When a symbol is already typed in full, calling `M-x company-complete` will
-  now run its post-completion action (e.g. inserting method parameters
-  template). Calling `M-x company-manual-begin` or invoking a backend command
-  directly will show the popup
-  ([#150](https://github.com/company-mode/company-mode/issues/150),
-  [#476](https://github.com/company-mode/company-mode/issues/476)).
-
-## 2018-12-13 (0.9.9)
-
-* Fix for the changes in the previous release.
-* New hook `company-after-completion-hook`.
-* `company-clang` removes identity preprocessor #defines from completions
-  ([#841](https://github.com/company-mode/company-mode/issues/841)).
-
-## 2018-12-08 (0.9.8)
-
-* CAPF backend fixed to use the right `:exit-function`. It can now safely be a
-  closure with lexical context capturing the buffer state at the moment when 
the
-  completion table was returned
-  ([#845](https://github.com/company-mode/company-mode/pull/845)).
-
-## 2018-11-06 (0.9.7)
-
-* For more sophisticated highlighting in non-prefix completion, a backend may
-  now respond to a `match` request with a list of regions.  See
-  `company-backends`.
-  ([#798](https://github.com/company-mode/company-mode/issues/798),
-  [#762](https://github.com/company-mode/company-mode/issues/762))
-* The `company-capf` backend will pick up on a `:company-match` metadata 
element
-  on the capf function (similar to `:company-location` or 
`:company-doc-buffer`)
-  and use it as a response to aforementioned `match` request.
-* `company-cmake` supports completion inside string interpolations
-  ([#714](https://github.com/company-mode/company-mode/pull/714)).
-* Workaround for the conflict between `inferior-python-mode`'s completion code
-  and `company-sort-by-occurrence`.
-* In Emacs 26 and newer, `company-css` is removed from `company-backends`.
-  `company-capf` is used instead.
-* Same for `company-nxml`.
-
-## 2018-02-23 (0.9.6)
-
-* Workaround for Emacs' ([bug#23980](https://debbugs.gnu.org/23980)) triggered
-  in combination with Flyspell.
-
-## 2018-02-18 (0.9.5)
-
-* The most common case of tooltip flickering with asynchronous backends (and
-  disabled built-in cache) is fixed
-  ([#510](https://github.com/company-mode/company-mode/issues/510),
-  [#654](https://github.com/company-mode/company-mode/issues/654)).
-* `company-keywords` added entries for `go-mode`, `swift-mode` and
-  `kotlin-mode`.
-* Native line numbers compatibility fixes.
-* `company-dabbrev` and `company-dabbrev-code` are more responsive when user
-  input is pending
-  ([#720](https://github.com/company-mode/company-mode/pull/720)).
-* New feature `company-tng`. It contains a frontend and some helper code.
-  The frontend triggers insertion of the candidate as soon as it's selected, so
-  you only need to press TAB. Add `(company-tng-configure-default)` to your
-  init script to give it a try
-  ([#706](https://github.com/company-mode/company-mode/issues/706)).
-* New user option `company-tooltip-maximum-width`.
-
-## 2017-07-15 (0.9.4)
-
-* Compatibility with native line numbers display in Emacs 26.
-* `company-files` allows completion after `=`.
-* `company-template` has a new shortcut (`C-d`) for deleting an unmodified
-  template field while cursor is on it.
-
-## 2017-03-29 (0.9.3)
-
-* New user option `company-echo-truncate-lines`.
-* `company-auto-complete` improved compatibility with `electric-pair-mode`.
-* Use of `overriding-terminal-local-map` does not disable completion.
-* `company-clang` and `company-gtags` can work over Tramp.
-* New frontend `company-preview-common-frontend`.
-* `company-clang` calls Clang using a pipe instead of pty.
-* The minimum required version of Emacs is now 24.3.
-
-## 2016-11-14 (0.9.2)
-
-* Miscellaneous fixes and docstring improvements.
-
-## 2016-11-12 (0.9.1)
-
-* `company-indent-or-complete-common` skips trying to indent if
-  `indent-line-function` is `indent-relative` or `indent-relative-maybe`.
-* Better visualization of search matches. New face 
`company-tooltip-search-selection`.
-* New user option `company-files-exclusions`.
-* `company-next-page` and `company-previous-page` adhere to
-  `company-selection-wrap-around` docstring more closely and only wrap around
-  when the selection is at the start of the end of the list.
-* `company-pseudo-tooltip-unless-just-one-frontend-with-delay` handles custom
-  frontends derived from `company-preview-frontend` better.
-* `company-idle-delay` is automatically adjusted to a non-zero value.
-
-## 2016-06-23 (0.9.0)
-
-* Group of backends can now contain keyword `:separate`, which makes candidates
-  from different backends sorted separately in the combined list.
-* New frontend `company-pseudo-tooltip-unless-just-one-frontend-with-delay`.
-* New transformer `company-sort-prefer-same-case-prefix`.
-* The value of `company-dabbrev-ignore-buffers` can also be a function.
-* `company-files` has been moved to right after `company-capf` in
-  `company-backends`
-  ([#463](https://github.com/company-mode/company-mode/issues/463)).
-* `company-semantic-insert-arguments`: New option. Like in `company-clang`.
-* `company-semantic-begin-after-member-access`: New option. Similar to the one
-  in `company-clang`.
-* `company-capf` accepts `:company-prefix-length` property value.
-* New face `company-tooltip-annotation-selection`, used for the annotation in
-  the selected tooltip line.
-* `company-clang-objc-templatify` has been renamed to
-  `company-template-objc-templatify`.
-* New user option `company-etags-everywhere`.
-* `company-yasnippet` supports `yas-key-syntaxes` better. But we use them in 
the
-  reverse order, preferring the longest key prefix that matches anything. And 
we
-  only consider trigger key prefixes that are at least as long as the symbol at
-  point, which effectively means skipping the `"w"` element
-  ([#422](https://github.com/company-mode/company-mode/issues/422)).
-* New user option `company-search-regexp-function`.
-* Completion is not started automatically when a keyboard macro is being
-  recorded ([#374](https://github.com/company-mode/company-mode/issues/374)).
-* New command `company-indent-or-complete-common`.
-* Backend command `doc-buffer` now can also return a cons of buffer and window
-  start position.
-* Backend command `ignore-case` has been documented.
-* `company-template-c-like-templatify` does not replace the default argument
-  values with `argN` anymore
-  ([#336](https://github.com/company-mode/company-mode/issues/336)). This
-  affects `company-clang` and all third-party backends that use this function.
-* Likewise for `company-clang-objc-templatify`.
-* `company-template-add-field` calling convention has changed.
-* New user option `company-dabbrev-ignore-invisible`.
-* `company-ropemacs` was removed. `ropemacs` supports completion via
-  `completion-at-point-functions` starting with version 0.8.
-* `company-pysmell` was removed.
-* `company-select-next`, `company-select-previous`,
-  `company-select-next-or-abort`, `company-select-previous-or-abort` and
-  `company-complete-common-or-cycle` accept a numeric argument.
-* The documentation buffer window can be scrolled with the mouse wheel.
-* New command `company-diag`. Use it in bug reports.
-
-## 2015-02-02 (0.8.10)
-
-* New variable `company-lighter-base`.
-* Better tracking of the current selection.
-* Pressing `M-0`...`M-9` works in the search mode.
-* Pressing `<up>` or `<down>` doesn't quit the search mode.
-
-## 2015-01-23 (0.8.9)
-
-* New commands `company-next-page` and `company-previous-page`, remapping
-  `scroll-up-command` and `scroll-down-command` during completion.
-
-## 2015-01-13 (0.8.8)
-
-* Pressing `M-n` or `M-p` doesn't quit the search mode.
-* New command `company-complete-common-or-cycle`. No default binding.
-* `company-search-toggle-filtering` replaced `company-search-kill-others`.
-* Quitting the search mode resets the filtering.
-* Pressing `backspace` in the search mode deletes the character at the end of
-  the search string.
-* `company-semantic` displays function arguments as annotations.
-* New user option, `company-bbdb-modes`.
-* `company-show-numbers` and `company-complete-number` now use visual numbering
-  of the candidates, taking into account only the ones currently displayed.
-* `company-complete-number` can be bound to keypad numbers directly, with or
-  without modifiers.
-* `company-cmake` expands `<LANG>` and `<CONFIG>` placeholders inside variable
-  names.
-
-## 2014-10-15 (0.8.6)
-
-* `company-clang` and `company-template-c-like-templatify` support templated
-  functions and arguments.
-* `company-dabbrev` ignores "uninteresting" buffers by default. Depends on the
-  new user option, `company-dabbrev-ignore-buffers`.
-* `company-files` checks directory's last modification time.
-* `company-files` supports relative paths and Windows drive letters.
-
-## 2014-08-13 (0.8.4)
-
-* `company-ropemacs` is only used when `ropemacs-mode` is on.
-* `company-gtags` is enabled in all `prog-mode` derivatives by default.
-* `company-end-of-buffer-workaround` is not used anymore.
-* `company-begin-commands` includes some of `cc-mode` commands.
-
-## 2014-08-27 (0.8.3)
-
-* On Emacs 24.4 or newer, tooltip positioning takes line-spacing into account.
-* New face `company-tooltip-search`, used for the search string in the tooltip.
-* The default value of `company-dabbrev-minimum-length` is set to 4, 
independent
-  of the `company-minimum-prefix-length` value.
-
-## 2014-07-26 (0.8.2)
-
-* New user option `company-occurrence-weight-function`, allowing to tweak the
-  behavior of the transformer `company-sort-by-occurrence`.
-* Setting `company-idle-delay` to `t` is deprecated. Use the value 0 instead.
-
-## 2014-07-01 (0.8.1)
-
-* `company-require-match` is not in effect when the new input doesn't continue
-  the previous prefix, and that prefix was a match.
-* The meaning of `company-begin-commands` value t has slightly changed.
-* New transformer, `company-sort-by-backend-importance`.
-* When grouped back-ends are used, the back-end of the current candidate is
-  indicated in the mode-line, enclosed in angle brackets.
-* New user option `company-gtags-insert-arguments`, t by default.
-* `company-css` knows about CSS3.
-* `company-gtags` supports `meta` and `annotation`.
-* User option `company-dabbrev-code-other-buffers` can have a new value: 
`code`.
-* New user option `company-tooltip-flip-when-above`.
-* `company-clang` uses the standard header search paths by default.
-* `C-h` is bound to `company-show-doc-buffer` (like `f1`).
-
-## 2014-04-19 (0.8.0)
-
-* `company-capf` is included in `company-backends` in any supported Emacs
-  version (>= 24.1). `company-elisp` goes before it if Emacs version is < 24.4.
-* New user option `company-clang-insert-arguments`, by default t.
-* Default value of `company-idle-delay` lowered to `0.5`.
-* New user option `company-tooltip-minimum-width`, by default 0.
-* New function `company-grab-symbol-cons`.
-* `company-clang` fetches completion candidates asynchronously.
-* Added support for asynchronous back-ends (experimental).
-* Support for back-end command `crop` dropped (it was never documented).
-* Support for Emacs 23 dropped.
-* New user option `company-abort-manual-when-too-short`.
-
-## 2014-03-25 (0.7.3)
-
-* New user option `company-etags-ignore-case`.
-
-## 2014-03-19 (0.7.2)
-
-* Support for Emacs 22 officially dropped.
-* `company-clang` supports `indent-tabs-mode` and multibyte chars before point.
-
-## 2014-03-18 (0.7.1)
-
-* Group of back-ends can now contain keyword `:with`, which makes all back-ends
-  after it to be skipped for prefix calculation.
-* New function `company-version`.
-* New bundled back-end `company-yasnippet`.
-* Completion candidates returned from grouped back-ends are tagged to remember
-  which back-end each came from.
-* New user option `company-tooltip-align-annotations`, off by default.
-* New bundled back-end `company-bbdb`.
-
-## 2014-02-18 (0.7)
-
-* New back-end command, `match`, for non-prefix completion.
-* New user option `company-continue-commands`. The default value aborts
-  completion on buffer saving commands.
-* New back-end command, `annotation`, for text displayed inline in the popup
-  that's not a part of completion candidate.
-* `company-capf`, `company-clang` and `company-eclim` use `annotation`.
-* `company-preview*` faces inherit from `company-tooltip-selection` and
-  `company-tooltip-common-selection` on light themes.
-* New user option `company-transformers`.
-* First transformer, `company-sort-by-occurrence`.
-* New user options controlling `company-dabbrev` and `company-dabbrev-code`.
-
-## 2014-01-25 (0.6.14)
-
-* The tooltip front-end is rendered with scrollbar, controlled by the user
-  option `company-tooltip-offset-display`.
-* The tooltip front-end is rendered with margins, controlled by the user option
-  `company-tooltip-margin`.
-
-## 2014-01-14 (0.6.13)
-
-* Experimental support for non-prefix completion.
-* Starting with Emacs version 24.4, `company-capf` is included in
-  `company-backends` and replaces `company-elisp`.
-* `company-capf` supports completion tables that return non-default boundaries.
-* `company-elisp` is enabled in `inferior-emacs-lisp-mode`.
-
-## 2013-09-28 (0.6.12)
-
-* Default value of `company-begin-commands` changed to `(self-insert-command)`.
-* Further improvement in `org-indent-mode` compatibility.
-
-## 2013-08-18 (0.6.11)
-
-* `company-template-c-like-templatify` removes all text after closing paren, 
for
-  use in backends that display additional info there.
-* `company-cmake` is now bundled.
-* Better `linum` compatibility in Emacs <= 24.2.
-* `company-global-modes`: New option.
-
-## 2013-05-26 (0.6.10)
-
-* Plays nicer with `org-indent-mode`.
-* Works in horizontally scrolled windows.
-
-## 2013-05-10 (0.6.9)
-
-* `company-capf` respects `:exit-function` completion property.
-* `company-backends`: `prefix` command can return `t` in the cdr.
-* `company-clang-begin-after-member-access`: New option.
-* Mouse click outside the tooltip aborts completion.
-* `company-clang` uses standard input to pass the contents of current buffer to
-  Clang 2.9+, otherwise saves the buffer and passes the path to the file.
-* `company-clang-auto-save` option has been removed.
-* Better interaction with `outline-minor-mode`.
-* `company-dabbrev-code` supports all `prog-mode` derivatives.
-
-## 2013-04-16 (0.6.8)
-
-* `company-auto-complete` is disabled by default.
-* `company-auto-complete-chars` default value includes fewer syntax classes.
-* In expanded function calls, arguments skipped by the user default to "argN".
-* `company-eclim` and `company-clang` do not strip argument types from fields.
-* `company-clang` expands function calls for all three modes now.
-* `company-clang` supports `c++-mode` by default.
-
-## 2013-04-05 (0.6.7)
-
-* Two `company-elisp` tweaks.
-
-## 2013-04-01 (0.6.6)
-
-* `company-elisp` doesn't offer completions when typing the name and the
-  arguments of a new function or macro definition, allowing to fall back to
-  other back-ends like `company-dabbrev-code`.
-
-## 2013-03-30 (0.6.5)
-
-* Fixed keybindings when running in a terminal.
-* `company-elisp-show-locals-first`: new customizable variable.
-* `company-elisp` shows more accurate and comprehensive candidates list.
-
-## 2013-03-26 (0.6.4)
-
-* `company-eclim` shows valid completions after an opening paren.
-* Expanded template does not get removed until the point leaves it.  After your
-  input the last argument in a method call expanded by `company-eclim`, you can
-  press `<tab>` once more, to jump after the closing paren.  No other bundled
-  back-ends are affected.
-
-## 2013-03-25 (0.6.3)
-
-* New tooltip face colors used on themes with light background.
-* Pseudo-tooltip stays up-to-date when text is inserted after the point.
-* Fixed `company-require-match` mechanics.
-
-## 2013-03-24 (0.6.2)
-
-* `global-company-mode` is now autoloaded.
-
-## 2013-03-23 (0.6.1)
-
-* Documented `init` and `post-completion` back-end commands.
-* `company-eclim` and `company-clang` only expand the template on explicit user
-  action (such as `company-complete-{selection,number,mouse}`).
-* `company-template` has some breaking changes.  When point is at one of the
-  fields, it's displayed at the beginning, not right after it; `<tab>` jumps to
-  the next field, `forward-word` and `subword-forward` remappings are removed;
-  when you jump to the next field, if the current one hasn't been edited, the
-  overlay gets removed but the text remains.
-* `company-eclim` shows method overloads and expands templates for calls.
-* `company-clang-objc-templatify` does not insert spaces after colons anymore.
-* `company-clang` is now only initialized in supported buffers.
-  So, no error messages if you don't have Clang until you open a C file.
-* `company-clang` recognizes Clang included in recent Xcode.
-* New commands `company-select-previous-or-abort` and
-  `company-select-next-or-abort`, bound to `<up>` and `<down>`.
-
-## 2013-03-19 (0.6)
-
-* Across-the-board bugfixing.
-* `company-pysmell` is not used by default anymore.
-* Loading of `nxml`, `semantic`, `pymacs` and `ropemacs` is now deferred.
-* Candidates from grouped back-ends are merged more conservatively: only
-  back-ends that return the same prefix at point are used.
-* `company-clang` now shows meta information, too.
-* Some performance improvements.
-* Fixed two old tooltip annoyances.
-* Instead of `overrriding-terminal-local-map`, we're now using
-  `emulation-mode-map-alists` (experimental).  This largely means that when the
-  completion keymap is active, other minor modes' keymaps are still used, so,
-  for example, it's not as easy to accidentally circumvent `paredit-mode`
-  when it's enabled.
-* `company-elisp` has seen some improvements.
-* Added `company-capf`: completion adapter using
-  `completion-at-point-functions`.  (Stefan Monnier)
-* Clang completions now include macros and are case-sensitive.
-* Switching between tag files now works correctly with `company-etags`.
-
-## 2010-02-24 (0.5)
-
-* `company-ropemacs` now provides location and docs.  (Fernando H. Silva)
-* Added `company-with-candidate-inserted` macro.
-* Added `company-clang` back-end.
-* Added new mechanism for non-consecutive insertion.
-  (So far only used by clang for ObjC.)
-* The semantic back-end now shows meta information for local symbols.
-* Added compatibility for CEDET in Emacs 23.2 and from CVS.  (Oleg Andreev)
-
-## 2009-05-07 (0.4.3)
-
-* Added `company-other-backend`.
-* Idle completion no longer interrupts multi-key command input.
-* Added `company-ropemacs` and `company-pysmell` back-ends.
-
-## 2009-04-25 (0.4.2)
-
-* In C modes . and -> now count towards `company-minimum-prefix-length`.
-* Reverted default front-end back to `company-preview-if-just-one-frontend`.
-* The pseudo tooltip will no longer be clipped at the right window edge.
-* Added `company-tooltip-minimum`.
-* Windows compatibility fixes.
-
-## 2009-04-19 (0.4.1)
-
-* Added `global-company-mode`.
-* Performance enhancements.
-* Added `company-eclim` back-end.
-* Added safer workaround for Emacs `posn-col-row` bug.
-
-## 2009-04-18 (0.4)
-
-* Automatic completion is now aborted if the prefix gets too short.
-* Added option `company-dabbrev-time-limit`.
-* `company-backends` now supports merging back-ends.
-* Added back-end `company-dabbrev-code` for generic code.
-* Fixed `company-begin-with`.
-
-## 2009-04-15 (0.3.1)
-
-* Added 'stop prefix to prevent dabbrev from completing inside of symbols.
-* Fixed issues with tabbar-mode and line-spacing.
-* Performance enhancements.
-
-## 2009-04-12 (0.3)
-
-* Added `company-begin-commands` option.
-* Added abbrev, tempo and Xcode back-ends.
-* Back-ends are now interactive.  You can start them with M-x backend-name.
-* Added `company-begin-with` for starting company from elisp-code.
-* Added hooks.
-* Added `company-require-match` and `company-auto-complete` options.
-
-## 2009-04-05 (0.2.1)
-
-* Improved Emacs Lisp back-end behavior for local variables.
-* Added `company-elisp-detect-function-context` option.
-* The mouse can now be used for selection.
-
-## 2009-03-22 (0.2)
-
-* Added `company-show-location`.
-* Added etags back-end.
-* Added work-around for end-of-buffer bug.
-* Added `company-filter-candidates`.
-* More local Lisp variables are now included in the candidates.
-
-## 2009-03-21 (0.1.5)
-
-* Fixed elisp documentation buffer always showing the same doc.
-* Added `company-echo-strip-common-frontend`.
-* Added `company-show-numbers` option and M-0 ... M-9 default bindings.
-* Don't hide the echo message if it isn't shown.
-
-## 2009-03-20 (0.1)
-
-* Initial release.
diff --git a/packages/company/README.md b/packages/company/README.md
deleted file mode 100644
index 1e0e5e6..0000000
--- a/packages/company/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-See the [homepage](http://company-mode.github.com/).
-
-[![Build 
Status](https://travis-ci.org/company-mode/company-mode.png?branch=master)](https://travis-ci.org/company-mode/company-mode)
-[![Melpa 
Status](http://melpa.milkbox.net/packages/company-badge.svg)](http://melpa.milkbox.net/#/company)
diff --git a/packages/company/company-abbrev.el 
b/packages/company/company-abbrev.el
deleted file mode 100644
index 386feb6..0000000
--- a/packages/company/company-abbrev.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;;; company-abbrev.el --- company-mode completion backend for abbrev
-
-;; Copyright (C) 2009-2011, 2015  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'abbrev)
-
-(defun company-abbrev-insert (match)
-  "Replace MATCH with the expanded abbrev."
-  (expand-abbrev))
-
-;;;###autoload
-(defun company-abbrev (command &optional arg &rest ignored)
-  "`company-mode' completion backend for abbrev."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-abbrev
-                                        'company-abbrev-insert))
-    (prefix (company-grab-symbol))
-    (candidates (nconc
-                 (delete "" (all-completions arg global-abbrev-table))
-                 (delete "" (all-completions arg local-abbrev-table))))
-    (meta (abbrev-expansion arg))))
-
-(provide 'company-abbrev)
-;;; company-abbrev.el ends here
diff --git a/packages/company/company-bbdb.el b/packages/company/company-bbdb.el
deleted file mode 100644
index 7160231..0000000
--- a/packages/company/company-bbdb.el
+++ /dev/null
@@ -1,63 +0,0 @@
-;;; company-bbdb.el --- company-mode completion backend for BBDB in 
message-mode
-
-;; Copyright (C) 2013-2014, 2016  Free Software Foundation, Inc.
-
-;; Author: Jan Tatarik <jan.tatarik@gmail.com>
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company)
-(require 'cl-lib)
-
-(declare-function bbdb-record-get-field "bbdb")
-(declare-function bbdb-records "bbdb")
-(declare-function bbdb-dwim-mail "bbdb-com")
-(declare-function bbdb-search "bbdb-com")
-
-(defgroup company-bbdb nil
-  "Completion backend for BBDB."
-  :group 'company)
-
-(defcustom company-bbdb-modes '(message-mode)
-  "Major modes in which `company-bbdb' may complete."
-  :type '(repeat (symbol :tag "Major mode"))
-  :package-version '(company . "0.8.8"))
-
-(defun company-bbdb--candidates (arg)
-  (cl-mapcan (lambda (record)
-               (mapcar (lambda (mail) (bbdb-dwim-mail record mail))
-                       (bbdb-record-get-field record 'mail)))
-             (eval '(bbdb-search (bbdb-records) arg nil arg))))
-
-;;;###autoload
-(defun company-bbdb (command &optional arg &rest ignore)
-  "`company-mode' completion backend for BBDB."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-bbdb))
-    (prefix (and (memq major-mode company-bbdb-modes)
-                 (featurep 'bbdb-com)
-                 (let ((case-fold-search t))
-                   (looking-back
-                    "^\\([^ :]*-\\)?\\(To\\|B?Cc\\|From\\):.*? *\\([^,;]*\\)"
-                    (line-beginning-position)))
-                 (match-string-no-properties 3)))
-    (candidates (company-bbdb--candidates arg))
-    (sorted t)
-    (no-cache t)))
-
-(provide 'company-bbdb)
-;;; company-bbdb.el ends here
diff --git a/packages/company/company-capf.el b/packages/company/company-capf.el
deleted file mode 100644
index 7d34f9c..0000000
--- a/packages/company/company-capf.el
+++ /dev/null
@@ -1,208 +0,0 @@
-;;; company-capf.el --- company-mode completion-at-point-functions backend -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2013-2019  Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; The CAPF back-end provides a bridge to the standard
-;; completion-at-point-functions facility, and thus can support any major mode
-;; that defines a proper completion function, including emacs-lisp-mode,
-;; css-mode and nxml-mode.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-;; Amortizes several calls to a c-a-p-f from the same position.
-(defvar company--capf-cache nil)
-
-;; FIXME: Provide a way to save this info once in Company itself
-;; (https://github.com/company-mode/company-mode/pull/845).
-(defvar-local company-capf--current-completion-data nil
-  "Value last returned by `company-capf' when called with `candidates'.
-For most properties/actions, this is just what we need: the exact values
-that accompanied the completion table that's currently is use.
-
-`company-capf', however, could be called at some different positions during
-a completion session (most importantly, by `company-sort-by-occurrence'),
-so we can't just use the preceding variable instead.")
-
-(defun company--capf-data ()
-  (let ((cache company--capf-cache))
-    (if (and (equal (current-buffer) (car cache))
-             (equal (point) (car (setq cache (cdr cache))))
-             (equal (buffer-chars-modified-tick) (car (setq cache (cdr 
cache)))))
-        (cadr cache)
-      (let ((data (company--capf-data-real)))
-        (setq company--capf-cache
-              (list (current-buffer) (point) (buffer-chars-modified-tick) 
data))
-        data))))
-
-(defun company--capf-data-real ()
-  (cl-letf* (((default-value 'completion-at-point-functions)
-              ;; Ignore tags-completion-at-point-function because it subverts
-              ;; company-etags in the default value of company-backends, where
-              ;; the latter comes later.
-              (remove 'tags-completion-at-point-function
-                      (default-value 'completion-at-point-functions)))
-             (completion-at-point-functions (company--capf-workaround))
-             (data (run-hook-wrapped 'completion-at-point-functions
-                                     ;; Ignore misbehaving functions.
-                                     #'completion--capf-wrapper 'optimist)))
-    (when (and (consp (cdr data)) (integer-or-marker-p (nth 1 data))) data)))
-
-(declare-function python-shell-get-process "python")
-
-(defun company--capf-workaround ()
-  ;; For http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18067
-  (if (or (not (listp completion-at-point-functions))
-          (not (memq 'python-completion-complete-at-point 
completion-at-point-functions))
-          (python-shell-get-process))
-      completion-at-point-functions
-    (remq 'python-completion-complete-at-point completion-at-point-functions)))
-
-(defun company-capf--save-current-data (data)
-  (setq company-capf--current-completion-data data)
-  (add-hook 'company-after-completion-hook
-            #'company-capf--clear-current-data nil t))
-
-(defun company-capf--clear-current-data (_ignored)
-  (setq company-capf--current-completion-data nil))
-
-(defvar-local company-capf--sorted nil)
-
-(defun company-capf (command &optional arg &rest _args)
-  "`company-mode' backend using `completion-at-point-functions'."
-  (interactive (list 'interactive))
-  (pcase command
-    (`interactive (company-begin-backend 'company-capf))
-    (`prefix
-     (let ((res (company--capf-data)))
-       (when res
-         (let ((length (plist-get (nthcdr 4 res) :company-prefix-length))
-               (prefix (buffer-substring-no-properties (nth 1 res) (point))))
-           (cond
-            ((> (nth 2 res) (point)) 'stop)
-            (length (cons prefix length))
-            (t prefix))))))
-    (`candidates
-     (company-capf--candidates arg))
-    (`sorted
-     company-capf--sorted)
-    (`match
-     ;; Ask the for the `:company-match' function.  If that doesn't help,
-     ;; fallback to sniffing for face changes to get a suitable value.
-     (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
-                         :company-match)))
-       (if f (funcall f arg)
-         (let* ((match-start nil) (pos -1)
-                (prop-value nil)  (faces nil)
-                (has-face-p nil)  chunks
-                (limit (length arg)))
-           (while (< pos limit)
-             (setq pos
-                   (if (< pos 0) 0 (next-property-change pos arg limit)))
-             (setq prop-value (or
-                               (get-text-property pos 'face arg)
-                               (get-text-property pos 'font-lock-face arg))
-                   faces (if (listp prop-value) prop-value (list prop-value))
-                   has-face-p (memq 'completions-common-part faces))
-             (cond ((and (not match-start) has-face-p)
-                    (setq match-start pos))
-                   ((and match-start (not has-face-p))
-                    (push (cons match-start pos) chunks)
-                    (setq match-start nil))))
-           (nreverse chunks)))))
-    (`duplicates t)
-    (`no-cache t)   ;Not much can be done here, as long as we handle
-                    ;non-prefix matches.
-    (`meta
-     (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
-                         :company-docsig)))
-       (when f (funcall f arg))))
-    (`doc-buffer
-     (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
-                         :company-doc-buffer)))
-       (when f (funcall f arg))))
-    (`location
-     (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
-                         :company-location)))
-       (when f (funcall f arg))))
-    (`annotation
-     (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
-                         :annotation-function)))
-       (when f (funcall f arg))))
-    (`require-match
-     (plist-get (nthcdr 4 (company--capf-data)) :company-require-match))
-    (`init nil)      ;Don't bother: plenty of other ways to initialize the 
code.
-    (`post-completion
-     (company--capf-post-completion arg))
-    ))
-
-(defun company-capf--candidates (input)
-  (let ((res (company--capf-data)))
-    (company-capf--save-current-data res)
-    (when res
-      (let* ((table (nth 3 res))
-             (pred (plist-get (nthcdr 4 res) :predicate))
-             (meta (completion-metadata
-                    (buffer-substring (nth 1 res) (nth 2 res))
-                    table pred))
-             (candidates (completion-all-completions input table pred
-                                                     (length input)
-                                                     meta))
-             (sortfun (cdr (assq 'display-sort-function meta)))
-             (last (last candidates))
-             (base-size (and (numberp (cdr last)) (cdr last))))
-        (when base-size
-          (setcdr last nil))
-        (setq company-capf--sorted (functionp sortfun))
-        (when sortfun
-          (setq candidates (funcall sortfun candidates)))
-        (if (not (zerop (or base-size 0)))
-            (let ((before (substring input 0 base-size)))
-              (mapcar (lambda (candidate)
-                        (concat before candidate))
-                      candidates))
-          candidates)))))
-
-(defun company--capf-post-completion (arg)
-  (let* ((res company-capf--current-completion-data)
-         (exit-function (plist-get (nthcdr 4 res) :exit-function))
-         (table (nth 3 res)))
-    (if exit-function
-        ;; We can more or less know when the user is done with completion,
-        ;; so we do something different than `completion--done'.
-        (funcall exit-function arg
-                 ;; FIXME: Should probably use an additional heuristic:
-                 ;; completion-at-point doesn't know when the user picked a
-                 ;; particular candidate explicitly (it only checks whether
-                 ;; further completions exist). Whereas company user can press
-                 ;; RET (or use implicit completion with company-tng).
-                 (if (= (car (completion-boundaries arg table nil ""))
-                        (length arg))
-                     'sole
-                   'finished)))))
-
-(provide 'company-capf)
-
-;;; company-capf.el ends here
diff --git a/packages/company/company-clang.el 
b/packages/company/company-clang.el
deleted file mode 100644
index d7391b3..0000000
--- a/packages/company/company-clang.el
+++ /dev/null
@@ -1,389 +0,0 @@
-;;; company-clang.el --- company-mode completion backend for Clang  -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2013-2019  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defgroup company-clang nil
-  "Completion backend for Clang."
-  :group 'company)
-
-(defcustom company-clang-executable
-  (executable-find "clang")
-  "Location of clang executable."
-  :type 'file)
-
-(defcustom company-clang-begin-after-member-access t
-  "When non-nil, automatic completion will start whenever the current
-symbol is preceded by \".\", \"->\" or \"::\", ignoring
-`company-minimum-prefix-length'.
-
-If `company-begin-commands' is a list, it should include `c-electric-lt-gt'
-and `c-electric-colon', for automatic completion right after \">\" and
-\":\"."
-  :type 'boolean)
-
-(defcustom company-clang-use-compile-flags-txt nil
-  "When non-nil, use flags from compile_flags.txt if present.
-
-The lines from that files will be appended to `company-clang-arguments'.
-
-And if such file is found, Clang is called from the directory containing
-it.  That allows the flags use relative file names within the project."
-  :type 'boolean
-  :safe 'booleanp)
-
-(defcustom company-clang-arguments nil
-  "Additional arguments to pass to clang when completing.
-Prefix files (-include ...) can be selected with `company-clang-set-prefix'
-or automatically through a custom `company-clang-prefix-guesser'."
-  :type '(repeat (string :tag "Argument")))
-
-(defcustom company-clang-prefix-guesser 'company-clang-guess-prefix
-  "A function to determine the prefix file for the current buffer."
-  :type '(function :tag "Guesser function" nil))
-
-(defvar company-clang-modes '(c-mode c++-mode objc-mode)
-  "Major modes which clang may complete.")
-
-(defcustom company-clang-insert-arguments t
-  "When non-nil, insert function arguments as a template after completion."
-  :type 'boolean
-  :package-version '(company . "0.8.0"))
-
-;; prefix 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar company-clang--prefix nil)
-
-(defsubst company-clang--guess-pch-file (file)
-  (let ((dir (directory-file-name (file-name-directory file))))
-    (when (equal (file-name-nondirectory dir) "Classes")
-      (setq dir (file-name-directory dir)))
-    (car (directory-files dir t "\\([^.]h\\|[^h]\\).pch\\'" t))))
-
-(defsubst company-clang--file-substring (file beg end)
-  (with-temp-buffer
-    (insert-file-contents-literally file nil beg end)
-    (buffer-string)))
-
-(defun company-clang-guess-prefix ()
-  "Try to guess the prefix file for the current buffer."
-  ;; Prefixes seem to be called .pch.  Pre-compiled headers do, too.
-  ;; So we look at the magic number to rule them out.
-  (let* ((file (company-clang--guess-pch-file buffer-file-name))
-         (magic-number (and file (company-clang--file-substring file 0 4))))
-    (unless (member magic-number '("CPCH" "gpch"))
-      file)))
-
-(defun company-clang-set-prefix (&optional prefix)
-  "Use PREFIX as a prefix (-include ...) file for clang completion."
-  (interactive (let ((def (funcall company-clang-prefix-guesser)))
-     (unless (stringp def)
-       (setq def default-directory))
-     (list (read-file-name "Prefix file: "
-                           (when def (file-name-directory def))
-                           def t (when def (file-name-nondirectory def))))))
-  ;; TODO: pre-compile?
-  (setq company-clang--prefix (and (stringp prefix)
-                                   (file-regular-p prefix)
-                                   prefix)))
-
-;; Clean-up on exit.
-(add-hook 'kill-emacs-hook 'company-clang-set-prefix)
-
-;; parsing 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; TODO: Handle Pattern (syntactic hints would be neat).
-;; Do we ever see OVERLOAD (or OVERRIDE)?
-(defconst company-clang--completion-pattern
-  "^COMPLETION: \\_<\\(%s[a-zA-Z0-9_:]*\\)\\(?:\\(?: (InBase)\\)? : 
\\(.*\\)$\\)?$")
-
-(defconst company-clang--error-buffer-name "*clang-error*")
-
-(defun company-clang--lang-option ()
-     (if (eq major-mode 'objc-mode)
-         (if (string= "m" (file-name-extension buffer-file-name))
-             "objective-c" "objective-c++")
-       (substring (symbol-name major-mode) 0 -5)))
-
-(defun company-clang--parse-output (prefix _objc)
-  (goto-char (point-min))
-  (let ((pattern (format company-clang--completion-pattern
-                         (regexp-quote prefix)))
-        (case-fold-search nil)
-        lines match)
-    (while (re-search-forward pattern nil t)
-      (setq match (match-string-no-properties 1))
-      (unless (equal match "Pattern")
-        (save-match-data
-          (when (string-match ":" match)
-            (setq match (substring match 0 (match-beginning 0)))))
-        (let ((meta (match-string-no-properties 2)))
-          (when (and meta (not (string= match meta)))
-            (put-text-property 0 1 'meta
-                               (company-clang--strip-formatting meta)
-                               match)))
-        (push match lines)))
-    lines))
-
-(defun company-clang--meta (candidate)
-  (get-text-property 0 'meta candidate))
-
-(defun company-clang--annotation (candidate)
-  (let ((ann (company-clang--annotation-1 candidate)))
-    (if (not (and ann (string-prefix-p "(*)" ann)))
-        ann
-      (with-temp-buffer
-        (insert ann)
-        (search-backward ")")
-        (let ((pt (1+ (point))))
-          (re-search-forward ".\\_>" nil t)
-          (delete-region pt (point)))
-        (buffer-string)))))
-
-(defun company-clang--annotation-1 (candidate)
-  (let ((meta (company-clang--meta candidate)))
-    (cond
-     ((null meta) nil)
-     ((string-match "[^:]:[^:]" meta)
-      (substring meta (1+ (match-beginning 0))))
-     ((string-match "(anonymous)" meta) nil)
-     ((string-match "\\((.*)[ a-z]*\\'\\)" meta)
-      (let ((paren (match-beginning 1)))
-        (if (not (eq (aref meta (1- paren)) ?>))
-            (match-string 1 meta)
-          (with-temp-buffer
-            (insert meta)
-            (goto-char paren)
-            (substring meta (1- (search-backward "<"))))))))))
-
-(defun company-clang--strip-formatting (text)
-  (replace-regexp-in-string
-   "#]" " "
-   (replace-regexp-in-string "[<{[]#\\|#[>}]" "" text t)
-   t))
-
-(defun company-clang--handle-error (res args)
-  (goto-char (point-min))
-  (let* ((buf (get-buffer-create company-clang--error-buffer-name))
-         (cmd (concat company-clang-executable " " (mapconcat 'identity args " 
")))
-         (pattern (format company-clang--completion-pattern ""))
-         (message-truncate-lines t)
-         (err (if (and (re-search-forward pattern nil t)
-                       ;; Something in the Windows build?
-                       ;; Looks like Clang doesn't always include the error 
text
-                       ;; before completions (even if exited with error).
-                       (> (match-beginning 0) (point-min)))
-                  (buffer-substring-no-properties (point-min)
-                                                  (1- (match-beginning 0)))
-                ;; Warn the user more aggressively if no match was found.
-                (message "clang failed with error %d: %s" res cmd)
-                (buffer-string))))
-
-    (with-current-buffer buf
-      (let ((inhibit-read-only t))
-        (erase-buffer)
-        (insert (current-time-string)
-                (format "\nclang failed with error %d:\n" res)
-                cmd "\n\n")
-        (insert err)
-        (setq buffer-read-only t)
-        (goto-char (point-min))))))
-
-(defun company-clang--start-process (prefix callback &rest args)
-  (let* ((objc (derived-mode-p 'objc-mode))
-         (buf (get-buffer-create "*clang-output*"))
-         ;; Looks unnecessary in Emacs 25.1 and later.
-         (process-adaptive-read-buffering nil)
-         (existing-process (get-buffer-process buf)))
-    (when existing-process
-      (kill-process existing-process))
-    (with-current-buffer buf
-      (erase-buffer)
-      (setq buffer-undo-list t))
-    (let* ((process-connection-type nil)
-           (process (apply #'start-file-process "company-clang" buf
-                           company-clang-executable args)))
-      (set-process-sentinel
-       process
-       (lambda (proc status)
-         (unless (string-match-p "hangup\\|killed" status)
-           (funcall
-            callback
-            (let ((res (process-exit-status proc)))
-              (with-current-buffer buf
-                (unless (eq 0 res)
-                  (company-clang--handle-error res args))
-                ;; Still try to get any useful input.
-                (company-clang--parse-output prefix objc)))))))
-      (unless (company-clang--auto-save-p)
-        (send-region process (point-min) (point-max))
-        (send-string process "\n")
-        (process-send-eof process)))))
-
-(defsubst company-clang--build-location (pos)
-  (save-excursion
-    (goto-char pos)
-    (format "%s:%d:%d"
-            (if (company-clang--auto-save-p) buffer-file-name "-")
-            (line-number-at-pos)
-            (1+ (length
-                 (encode-coding-region
-                  (line-beginning-position)
-                  (point)
-                  'utf-8
-                  t))))))
-
-(defsubst company-clang--build-complete-args (pos)
-  (append '("-fsyntax-only" "-Xclang" "-code-completion-macros")
-          (unless (company-clang--auto-save-p)
-            (list "-x" (company-clang--lang-option)))
-          (company-clang--arguments)
-          (when (stringp company-clang--prefix)
-            (list "-include" (expand-file-name company-clang--prefix)))
-          (list "-Xclang" (format "-code-completion-at=%s"
-                                  (company-clang--build-location pos)))
-          (list (if (company-clang--auto-save-p) buffer-file-name "-"))))
-
-(defun company-clang--arguments ()
-  (let ((fname "compile_flags.txt")
-        (args company-clang-arguments)
-        current-dir-rel)
-    (when company-clang-use-compile-flags-txt
-      (let ((dir (locate-dominating-file default-directory fname)))
-        (when dir
-          (setq current-dir-rel (file-relative-name default-directory dir))
-          (setq default-directory dir)
-          (with-temp-buffer
-            (insert-file-contents fname)
-            (setq args
-                  (append
-                   args
-                   (split-string (buffer-substring-no-properties
-                                  (point-min) (point-max))
-                                 "[\n\r]+"
-                                 t
-                                 "[ \t]+"))))
-          (unless (equal current-dir-rel "./")
-            (push (format "-I%s" current-dir-rel) args)))))
-    args))
-
-(defun company-clang--candidates (prefix callback)
-  (and (company-clang--auto-save-p)
-       (buffer-modified-p)
-       (basic-save-buffer))
-  (when (null company-clang--prefix)
-    (company-clang-set-prefix (or (funcall company-clang-prefix-guesser)
-                                  'none)))
-  (let ((default-directory default-directory))
-    (apply 'company-clang--start-process
-           prefix
-           callback
-           (company-clang--build-complete-args
-            (if (company-clang--check-version 4.0 9.0)
-                (point)
-              (- (point) (length prefix)))))))
-
-(defun company-clang--prefix ()
-  (if company-clang-begin-after-member-access
-      (company-grab-symbol-cons "\\.\\|->\\|::" 2)
-    (company-grab-symbol)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst company-clang-required-version 1.1)
-
-(defvar company-clang--version nil)
-
-(defun company-clang--auto-save-p ()
-  (not
-   (company-clang--check-version 2.9 3.1)))
-
-(defun company-clang--check-version (min apple-min)
-  (pcase company-clang--version
-    (`(apple . ,ver) (>= ver apple-min))
-    (`(normal . ,ver) (>= ver min))
-    (_ (error "pcase-exhaustive is not in Emacs 24.3!"))))
-
-(defsubst company-clang-version ()
-  "Return the version of `company-clang-executable'."
-  (with-temp-buffer
-    (call-process company-clang-executable nil t nil "--version")
-    (goto-char (point-min))
-    (if (re-search-forward
-         "\\(clang\\|Apple LLVM\\|bcc32x\\|bcc64\\) version \\([0-9.]+\\)" nil 
t)
-        (cons
-         (if (equal (match-string-no-properties 1) "Apple LLVM")
-             'apple
-           'normal)
-         (string-to-number (match-string-no-properties 2)))
-      0)))
-
-(defun company-clang (command &optional arg &rest ignored)
-  "`company-mode' completion backend for Clang.
-Clang is a parser for C and ObjC.  Clang version 1.1 or newer is required.
-
-Additional command line arguments can be specified in
-`company-clang-arguments'.  Prefix files (-include ...) can be selected
-with `company-clang-set-prefix' or automatically through a custom
-`company-clang-prefix-guesser'.
-
-With Clang versions before 2.9, we have to save the buffer before
-performing completion.  With Clang 2.9 and later, buffer contents are
-passed via standard input."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-clang))
-    (init (when (memq major-mode company-clang-modes)
-            (unless company-clang-executable
-              (error "Company found no clang executable"))
-            (setq company-clang--version (company-clang-version))
-            (unless (company-clang--check-version
-                     company-clang-required-version
-                     company-clang-required-version)
-              (error "Company requires clang version %s"
-                     company-clang-required-version))))
-    (prefix (and (memq major-mode company-clang-modes)
-                 buffer-file-name
-                 company-clang-executable
-                 (not (company-in-string-or-comment))
-                 (or (company-clang--prefix) 'stop)))
-    (candidates (cons :async
-                      (lambda (cb) (company-clang--candidates arg cb))))
-    (meta       (company-clang--meta arg))
-    (annotation (company-clang--annotation arg))
-    (post-completion (let ((anno (company-clang--annotation arg)))
-                       (when (and company-clang-insert-arguments anno)
-                         (insert anno)
-                         (if (string-match "\\`:[^:]" anno)
-                             (company-template-objc-templatify anno)
-                           (company-template-c-like-templatify
-                            (concat arg anno))))))))
-
-(provide 'company-clang)
-;;; company-clang.el ends here
diff --git a/packages/company/company-cmake.el 
b/packages/company/company-cmake.el
deleted file mode 100644
index 2e69b6d..0000000
--- a/packages/company/company-cmake.el
+++ /dev/null
@@ -1,206 +0,0 @@
-;;; company-cmake.el --- company-mode completion backend for CMake
-
-;; Copyright (C) 2013-2014, 2017-2018  Free Software Foundation, Inc.
-
-;; Author: Chen Bin <chenbin DOT sh AT gmail>
-;; Version: 0.2
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; company-cmake offers completions for module names, variable names and
-;; commands used by CMake.  And their descriptions.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-cmake nil
-  "Completion backend for CMake."
-  :group 'company)
-
-(defcustom company-cmake-executable
-  (executable-find "cmake")
-  "Location of cmake executable."
-  :type 'file)
-
-(defvar company-cmake-executable-arguments
-  '("--help-command-list"
-    "--help-module-list"
-    "--help-variable-list")
-  "The arguments we pass to cmake, separately.
-They affect which types of symbols we get completion candidates for.")
-
-(defvar company-cmake--completion-pattern
-  "^\\(%s[a-zA-Z0-9_<>]%s\\)$"
-  "Regexp to match the candidates.")
-
-(defvar company-cmake-modes '(cmake-mode)
-  "Major modes in which cmake may complete.")
-
-(defvar company-cmake--candidates-cache nil
-  "Cache for the raw candidates.")
-
-(defvar company-cmake--meta-command-cache nil
-  "Cache for command arguments to retrieve descriptions for the candidates.")
-
-(defun company-cmake--replace-tags (rlt)
-  (setq rlt (replace-regexp-in-string
-             "\\(.*?\\(IS_GNU\\)?\\)<LANG>\\(.*\\)"
-             (lambda (_match)
-               (mapconcat 'identity
-                          (if (match-beginning 2)
-                              '("\\1CXX\\3" "\\1C\\3" "\\1G77\\3")
-                            '("\\1CXX\\3" "\\1C\\3" "\\1Fortran\\3"))
-                          "\n"))
-             rlt t))
-  (setq rlt (replace-regexp-in-string
-             "\\(.*\\)<CONFIG>\\(.*\\)"
-             (mapconcat 'identity '("\\1DEBUG\\2" "\\1RELEASE\\2"
-                                    "\\1RELWITHDEBINFO\\2" "\\1MINSIZEREL\\2")
-                        "\n")
-             rlt))
-  rlt)
-
-(defun company-cmake--fill-candidates-cache (arg)
-  "Fill candidates cache if needed."
-  (let (rlt)
-    (unless company-cmake--candidates-cache
-      (setq company-cmake--candidates-cache (make-hash-table :test 'equal)))
-
-    ;; If hash is empty, fill it.
-    (unless (gethash arg company-cmake--candidates-cache)
-      (with-temp-buffer
-        (let ((res (call-process company-cmake-executable nil t nil arg)))
-          (unless (zerop res)
-            (message "cmake executable exited with error=%d" res)))
-        (setq rlt (buffer-string)))
-      (setq rlt (company-cmake--replace-tags rlt))
-      (puthash arg rlt company-cmake--candidates-cache))
-    ))
-
-(defun company-cmake--parse (prefix content cmd)
-  (let ((start 0)
-        (pattern (format company-cmake--completion-pattern
-                         (regexp-quote prefix)
-                         (if (zerop (length prefix)) "+" "*")))
-        (lines (split-string content "\n"))
-        match
-        rlt)
-    (dolist (line lines)
-      (when (string-match pattern line)
-        (let ((match (match-string 1 line)))
-          (when match
-            (puthash match cmd company-cmake--meta-command-cache)
-            (push match rlt)))))
-    rlt))
-
-(defun company-cmake--candidates (prefix)
-  (let (results
-        cmd-opts
-        str)
-
-    (unless company-cmake--meta-command-cache
-      (setq company-cmake--meta-command-cache (make-hash-table :test 'equal)))
-
-    (dolist (arg company-cmake-executable-arguments)
-      (company-cmake--fill-candidates-cache arg)
-      (setq cmd-opts (replace-regexp-in-string "-list$" "" arg) )
-
-      (setq str (gethash arg company-cmake--candidates-cache))
-      (when str
-        (setq results (nconc results
-                             (company-cmake--parse prefix str cmd-opts)))))
-    results))
-
-(defun company-cmake--unexpand-candidate (candidate)
-  (cond
-   ((string-match "^CMAKE_\\(C\\|CXX\\|Fortran\\)\\(_.*\\)$" candidate)
-    (setq candidate (concat "CMAKE_<LANG>" (match-string 2 candidate))))
-
-   ;; C flags
-   ((string-match "^\\(.*_\\)IS_GNU\\(C\\|CXX\\|G77\\)$" candidate)
-    (setq candidate (concat (match-string 1 candidate) "IS_GNU<LANG>")))
-
-   ;; C flags
-   ((string-match "^\\(.*_\\)OVERRIDE_\\(C\\|CXX\\|Fortran\\)$" candidate)
-    (setq candidate (concat (match-string 1 candidate) "OVERRIDE_<LANG>")))
-
-   ((string-match 
"^\\(.*\\)\\(_DEBUG\\|_RELEASE\\|_RELWITHDEBINFO\\|_MINSIZEREL\\)\\(.*\\)$" 
candidate)
-    (setq candidate (concat (match-string 1 candidate)
-                            "_<CONFIG>"
-                            (match-string 3 candidate)))))
-  candidate)
-
-(defun company-cmake--meta (candidate)
-  (let ((cmd-opts (gethash candidate company-cmake--meta-command-cache))
-        result)
-    (setq candidate (company-cmake--unexpand-candidate candidate))
-
-    ;; Don't cache the documentation of every candidate (command)
-    ;; Cache in this case will cost too much memory.
-    (with-temp-buffer
-      (call-process company-cmake-executable nil t nil cmd-opts candidate)
-      ;; Go to the third line, trim it and return the result.
-      ;; Tested with cmake 2.8.9.
-      (goto-char (point-min))
-      (forward-line 2)
-      (setq result (buffer-substring-no-properties (line-beginning-position)
-                                                   (line-end-position)))
-      (setq result (replace-regexp-in-string "^[ \t\n\r]+" "" result))
-      result)))
-
-(defun company-cmake--doc-buffer (candidate)
-  (let ((cmd-opts (gethash candidate company-cmake--meta-command-cache)))
-
-    (setq candidate (company-cmake--unexpand-candidate candidate))
-    (with-temp-buffer
-      (call-process company-cmake-executable nil t nil cmd-opts candidate)
-      ;; Go to the third line, trim it and return the doc buffer.
-      ;; Tested with cmake 2.8.9.
-      (goto-char (point-min))
-      (forward-line 2)
-      (company-doc-buffer
-       (buffer-substring-no-properties (line-beginning-position)
-                                       (point-max))))))
-
-(defun company-cmake-prefix-dollar-brace-p ()
-  "Test if the current symbol follows ${."
-  (save-excursion
-    (skip-syntax-backward "w_")
-    (and (eq (char-before (point)) ?\{)
-         (eq (char-before (1- (point))) ?$))))
-
-(defun company-cmake (command &optional arg &rest ignored)
-  "`company-mode' completion backend for CMake.
-CMake is a cross-platform, open-source make system."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-cmake))
-    (init (when (memq major-mode company-cmake-modes)
-            (unless company-cmake-executable
-              (error "Company found no cmake executable"))))
-    (prefix (and (memq major-mode company-cmake-modes)
-                 (or (not (company-in-string-or-comment))
-                     (company-cmake-prefix-dollar-brace-p))
-                 (company-grab-symbol)))
-    (candidates (company-cmake--candidates arg))
-    (meta (company-cmake--meta arg))
-    (doc-buffer (company-cmake--doc-buffer arg))
-    ))
-
-(provide 'company-cmake)
-;;; company-cmake.el ends here
diff --git a/packages/company/company-css.el b/packages/company/company-css.el
deleted file mode 100644
index c98040b..0000000
--- a/packages/company/company-css.el
+++ /dev/null
@@ -1,446 +0,0 @@
-;;; company-css.el --- company-mode completion backend for css-mode  -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2014, 2018  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; In Emacs >= 26, company-capf is used instead.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(declare-function web-mode-language-at-pos "web-mode" (&optional pos))
-
-(defconst company-css-property-alist
-  ;; see http://www.w3.org/TR/CSS21/propidx.html
-  '(("azimuth" angle "left-side" "far-left" "left" "center-left" "center"
-     "center-right" "right" "far-right" "right-side" "behind" "leftwards"
-     "rightwards")
-    ("background" background-color background-image background-repeat
-     background-attachment background-position
-     background-clip background-origin background-size)
-    ("background-attachment" "scroll" "fixed")
-    ("background-color" color "transparent")
-    ("background-image" uri "none")
-    ("background-position" percentage length "left" "center" "right" percentage
-     length "top" "center" "bottom" "left" "center" "right" "top" "center"
-     "bottom")
-    ("background-repeat" "repeat" "repeat-x" "repeat-y" "no-repeat")
-    ("border" border-width border-style border-color)
-    ("border-bottom" border)
-    ("border-bottom-color" border-color)
-    ("border-bottom-style" border-style)
-    ("border-bottom-width" border-width)
-    ("border-collapse" "collapse" "separate")
-    ("border-color" color "transparent")
-    ("border-left" border)
-    ("border-left-color" border-color)
-    ("border-left-style" border-style)
-    ("border-left-width" border-width)
-    ("border-right" border)
-    ("border-right-color" border-color)
-    ("border-right-style" border-style)
-    ("border-right-width" border-width)
-    ("border-spacing" length length)
-    ("border-style" border-style)
-    ("border-top" border)
-    ("border-top-color" border-color)
-    ("border-top-style" border-style)
-    ("border-top-width" border-width)
-    ("border-width" border-width)
-    ("bottom" length percentage "auto")
-    ("caption-side" "top" "bottom")
-    ("clear" "none" "left" "right" "both")
-    ("clip" shape "auto")
-    ("color" color)
-    ("content" "normal" "none" string uri counter "attr()" "open-quote"
-     "close-quote" "no-open-quote" "no-close-quote")
-    ("counter-increment" identifier integer "none")
-    ("counter-reset" identifier integer "none")
-    ("cue" cue-before cue-after)
-    ("cue-after" uri "none")
-    ("cue-before" uri "none")
-    ("cursor" uri "*" "auto" "crosshair" "default" "pointer" "move" "e-resize"
-     "ne-resize" "nw-resize" "n-resize" "se-resize" "sw-resize" "s-resize"
-     "w-resize" "text" "wait" "help" "progress")
-    ("direction" "ltr" "rtl")
-    ("display" "inline" "block" "list-item" "run-in" "inline-block" "table"
-     "inline-table" "table-row-group" "table-header-group" "table-footer-group"
-     "table-row" "table-column-group" "table-column" "table-cell"
-     "table-caption" "none")
-    ("elevation" angle "below" "level" "above" "higher" "lower")
-    ("empty-cells" "show" "hide")
-    ("float" "left" "right" "none")
-    ("font" font-style font-weight font-size "/" line-height
-     font-family "caption" "icon" "menu" "message-box" "small-caption"
-     "status-bar" "normal" "small-caps"
-     ;; CSS3
-     font-stretch)
-    ("font-family" family-name generic-family)
-    ("font-size" absolute-size relative-size length percentage)
-    ("font-style" "normal" "italic" "oblique")
-    ("font-weight" "normal" "bold" "bolder" "lighter" "100" "200" "300" "400"
-     "500" "600" "700" "800" "900")
-    ("height" length percentage "auto")
-    ("left" length percentage "auto")
-    ("letter-spacing" "normal" length)
-    ("line-height" "normal" number length percentage)
-    ("list-style" list-style-type list-style-position list-style-image)
-    ("list-style-image" uri "none")
-    ("list-style-position" "inside" "outside")
-    ("list-style-type" "disc" "circle" "square" "decimal" 
"decimal-leading-zero"
-     "lower-roman" "upper-roman" "lower-greek" "lower-latin" "upper-latin"
-     "armenian" "georgian" "lower-alpha" "upper-alpha" "none")
-    ("margin" margin-width)
-    ("margin-bottom" margin-width)
-    ("margin-left" margin-width)
-    ("margin-right" margin-width)
-    ("margin-top" margin-width)
-    ("max-height" length percentage "none")
-    ("max-width" length percentage "none")
-    ("min-height" length percentage)
-    ("min-width" length percentage)
-    ("orphans" integer)
-    ("outline" outline-color outline-style outline-width)
-    ("outline-color" color "invert")
-    ("outline-style" border-style)
-    ("outline-width" border-width)
-    ("overflow" "visible" "hidden" "scroll" "auto"
-     ;; CSS3:
-     "no-display" "no-content")
-    ("padding" padding-width)
-    ("padding-bottom" padding-width)
-    ("padding-left" padding-width)
-    ("padding-right" padding-width)
-    ("padding-top" padding-width)
-    ("page-break-after" "auto" "always" "avoid" "left" "right")
-    ("page-break-before" "auto" "always" "avoid" "left" "right")
-    ("page-break-inside" "avoid" "auto")
-    ("pause" time percentage)
-    ("pause-after" time percentage)
-    ("pause-before" time percentage)
-    ("pitch" frequency "x-low" "low" "medium" "high" "x-high")
-    ("pitch-range" number)
-    ("play-during" uri "mix" "repeat" "auto" "none")
-    ("position" "static" "relative" "absolute" "fixed")
-    ("quotes" string string "none")
-    ("richness" number)
-    ("right" length percentage "auto")
-    ("speak" "normal" "none" "spell-out")
-    ("speak-header" "once" "always")
-    ("speak-numeral" "digits" "continuous")
-    ("speak-punctuation" "code" "none")
-    ("speech-rate" number "x-slow" "slow" "medium" "fast" "x-fast" "faster"
-     "slower")
-    ("stress" number)
-    ("table-layout" "auto" "fixed")
-    ("text-align" "left" "right" "center" "justify")
-    ("text-indent" length percentage)
-    ("text-transform" "capitalize" "uppercase" "lowercase" "none")
-    ("top" length percentage "auto")
-    ("unicode-bidi" "normal" "embed" "bidi-override")
-    ("vertical-align" "baseline" "sub" "super" "top" "text-top" "middle"
-     "bottom" "text-bottom" percentage length)
-    ("visibility" "visible" "hidden" "collapse")
-    ("voice-family" specific-voice generic-voice "*" specific-voice
-     generic-voice)
-    ("volume" number percentage "silent" "x-soft" "soft" "medium" "loud"
-     "x-loud")
-    ("white-space" "normal" "pre" "nowrap" "pre-wrap" "pre-line")
-    ("widows" integer)
-    ("width" length percentage "auto")
-    ("word-spacing" "normal" length)
-    ("z-index" "auto" integer)
-    ;; CSS3
-    ("align-content" align-stretch "space-between" "space-around")
-    ("align-items" align-stretch "baseline")
-    ("align-self" align-items "auto")
-    ("animation" animation-name animation-duration animation-timing-function
-     animation-delay animation-iteration-count animation-direction
-     animation-fill-mode)
-    ("animation-delay" time)
-    ("animation-direction" "normal" "reverse" "alternate" "alternate-reverse")
-    ("animation-duration" time)
-    ("animation-fill-mode" "none" "forwards" "backwards" "both")
-    ("animation-iteration-count" integer "infinite")
-    ("animation-name" "none")
-    ("animation-play-state" "paused" "running")
-    ("animation-timing-function" transition-timing-function
-     "step-start" "step-end" "steps(,)")
-    ("backface-visibility" "visible" "hidden")
-    ("background-clip" background-origin)
-    ("background-origin" "border-box" "padding-box" "content-box")
-    ("background-size" length percentage "auto" "cover" "contain")
-    ("border-image" border-image-outset border-image-repeat border-image-source
-     border-image-slice border-image-width)
-    ("border-image-outset" length)
-    ("border-image-repeat" "stretch" "repeat" "round" "space")
-    ("border-image-source" uri "none")
-    ("border-image-slice" length)
-    ("border-image-width" length percentage)
-    ("border-radius" length)
-    ("border-top-left-radius" length)
-    ("border-top-right-radius" length)
-    ("border-bottom-left-radius" length)
-    ("border-bottom-right-radius" length)
-    ("box-decoration-break" "slice" "clone")
-    ("box-shadow" length color)
-    ("box-sizing" "content-box" "border-box")
-    ("break-after" "auto" "always" "avoid" "left" "right" "page" "column"
-     "avoid-page" "avoid-column")
-    ("break-before" break-after)
-    ("break-inside" "avoid" "auto")
-    ("columns" column-width column-count)
-    ("column-count" integer)
-    ("column-fill" "auto" "balance")
-    ("column-gap" length "normal")
-    ("column-rule" column-rule-width column-rule-style column-rule-color)
-    ("column-rule-color" color)
-    ("column-rule-style" border-style)
-    ("column-rule-width" border-width)
-    ("column-span" "all" "none")
-    ("column-width" length "auto")
-    ("filter" url "blur()" "brightness()" "contrast()" "drop-shadow()"
-     "grayscale()" "hue-rotate()" "invert()" "opacity()" "saturate()" 
"sepia()")
-    ("flex" flex-grow flex-shrink flex-basis)
-    ("flex-basis" percentage length "auto")
-    ("flex-direction" "row" "row-reverse" "column" "column-reverse")
-    ("flex-flow" flex-direction flex-wrap)
-    ("flex-grow" number)
-    ("flex-shrink" number)
-    ("flex-wrap" "nowrap" "wrap" "wrap-reverse")
-    ("font-feature-setting" normal string number)
-    ("font-kerning" "auto" "normal" "none")
-    ("font-language-override" "normal" string)
-    ("font-size-adjust" "none" number)
-    ("font-stretch" "normal" "ultra-condensed" "extra-condensed" "condensed"
-     "semi-condensed" "semi-expanded" "expanded" "extra-expanded" 
"ultra-expanded")
-    ("font-synthesis" "none" "weight" "style")
-    ("font-variant" font-variant-alternates font-variant-caps
-     font-variant-east-asian font-variant-ligatures font-variant-numeric
-     font-variant-position)
-    ("font-variant-alternates" "normal" "historical-forms" "stylistic()"
-     "styleset()" "character-variant()" "swash()" "ornaments()" "annotation()")
-    ("font-variant-caps" "normal" "small-caps" "all-small-caps" "petite-caps"
-     "all-petite-caps" "unicase" "titling-caps")
-    ("font-variant-east-asian" "jis78" "jis83" "jis90" "jis04" "simplified"
-     "traditional" "full-width" "proportional-width" "ruby")
-    ("font-variant-ligatures" "normal" "none" "common-ligatures"
-     "no-common-ligatures" "discretionary-ligatures" 
"no-discretionary-ligatures"
-     "historical-ligatures" "no-historical-ligatures" "contextual" 
"no-contextual")
-    ("font-variant-numeric" "normal" "ordinal" "slashed-zero"
-     "lining-nums" "oldstyle-nums" "proportional-nums" "tabular-nums"
-     "diagonal-fractions" "stacked-fractions")
-    ("font-variant-position" "normal" "sub" "super")
-    ("hyphens" "none" "manual" "auto")
-    ("justify-content" align-common "space-between" "space-around")
-    ("line-break" "auto" "loose" "normal" "strict")
-    ("marquee-direction" "forward" "reverse")
-    ("marquee-play-count" integer "infinite")
-    ("marquee-speed" "slow" "normal" "fast")
-    ("marquee-style" "scroll" "slide" "alternate")
-    ("opacity" number)
-    ("order" number)
-    ("outline-offset" length)
-    ("overflow-x" overflow)
-    ("overflow-y" overflow)
-    ("overflow-style" "auto" "marquee-line" "marquee-block")
-    ("overflow-wrap" "normal" "break-word")
-    ("perspective" "none" length)
-    ("perspective-origin" percentage length "left" "center" "right" "top" 
"bottom")
-    ("resize" "none" "both" "horizontal" "vertical")
-    ("tab-size" integer length)
-    ("text-align-last" "auto" "start" "end" "left" "right" "center" "justify")
-    ("text-decoration" text-decoration-color text-decoration-line 
text-decoration-style)
-    ("text-decoration-color" color)
-    ("text-decoration-line" "none" "underline" "overline" "line-through" 
"blink")
-    ("text-decoration-style" "solid" "double" "dotted" "dashed" "wavy")
-    ("text-overflow" "clip" "ellipsis")
-    ("text-shadow" color length)
-    ("text-underline-position" "auto" "under" "left" "right")
-    ("transform" "matrix(,,,,,)" "translate(,)" "translateX()" "translateY()"
-     "scale()" "scaleX()" "scaleY()" "rotate()" "skewX()" "skewY()" "none")
-    ("transform-origin" perspective-origin)
-    ("transform-style" "flat" "preserve-3d")
-    ("transition" transition-property transition-duration
-     transition-timing-function transition-delay)
-    ("transition-delay" time)
-    ("transition-duration" time)
-    ("transition-timing-function"
-     "ease" "linear" "ease-in" "ease-out" "ease-in-out" "cubic-bezier(,,,)")
-    ("transition-property" "none" "all" identifier)
-    ("word-wrap" overflow-wrap)
-    ("word-break" "normal" "break-all" "keep-all"))
-  "A list of CSS properties and their possible values.")
-
-(defconst company-css-value-classes
-  '((absolute-size "xx-small" "x-small" "small" "medium" "large" "x-large"
-                   "xx-large")
-    (align-common "flex-start" "flex-end" "center")
-    (align-stretch align-common "stretch")
-    (border-style "none" "hidden" "dotted" "dashed" "solid" "double" "groove"
-                  "ridge" "inset" "outset")
-    (border-width "thick" "medium" "thin")
-    (color "aqua" "black" "blue" "fuchsia" "gray" "green" "lime" "maroon" 
"navy"
-           "olive" "orange" "purple" "red" "silver" "teal" "white" "yellow")
-    (counter "counter(,)")
-    (family-name "Courier" "Helvetica" "Times")
-    (generic-family "serif" "sans-serif" "cursive" "fantasy" "monospace")
-    (generic-voice "male" "female" "child")
-    (margin-width "auto") ;; length percentage
-    (relative-size "larger" "smaller")
-    (shape "rect(,,,)")
-    (uri "url()"))
-  "A list of CSS property value classes and their contents.")
-;; missing, because not completable
-;; <angle><frequency><identifier><integer><length><number><padding-width>
-;; <percentage><specific-voice><string><time><uri>
-
-(defconst company-css-html-tags
-  '("a" "abbr" "acronym" "address" "applet" "area" "b" "base" "basefont" "bdo"
-    "big" "blockquote" "body" "br" "button" "caption" "center" "cite" "code"
-    "col" "colgroup" "dd" "del" "dfn" "dir" "div" "dl" "dt" "em" "fieldset"
-    "font" "form" "frame" "frameset" "h1" "h2" "h3" "h4" "h5" "h6" "head" "hr"
-    "html" "i" "iframe" "img" "input" "ins" "isindex" "kbd" "label" "legend"
-    "li" "link" "map" "menu" "meta" "noframes" "noscript" "object" "ol"
-    "optgroup" "option" "p" "param" "pre" "q" "s" "samp" "script" "select"
-    "small" "span" "strike" "strong" "style" "sub" "sup" "table" "tbody" "td"
-    "textarea" "tfoot" "th" "thead" "title" "tr" "tt" "u" "ul" "var"
-    ;; HTML5
-    "section" "article" "aside" "header" "footer" "nav" "figure" "figcaption"
-    "time" "mark" "main")
-  "A list of HTML tags for use in CSS completion.")
-
-(defconst company-css-pseudo-classes
-  '("active" "after" "before" "first" "first-child" "first-letter" "first-line"
-    "focus" "hover" "lang" "left" "link" "right" "visited")
-  "Identifiers for CSS pseudo-elements and pseudo-classes.")
-
-(defconst company-css-property-cache (make-hash-table :size 115 :test 'equal))
-
-(defun company-css-property-values (attribute)
-  "Access the `company-css-property-alist' cached and flattened."
-  (or (gethash attribute company-css-property-cache)
-      (let (results)
-        (dolist (value (cdr (assoc attribute company-css-property-alist)))
-          (if (symbolp value)
-              (dolist (child (or (cdr (assoc value company-css-value-classes))
-                                 (company-css-property-values
-                                  (symbol-name value))))
-                (push child results))
-            (push value results)))
-        (setq results (sort results 'string<))
-        (puthash attribute
-                 (if (fboundp 'delete-consecutive-dups)
-                     (delete-consecutive-dups results)
-                   (delete-dups results))
-                 company-css-property-cache)
-        results)))
-
-;;; bracket detection
-
-(defconst company-css-braces-syntax-table
-  (let ((table (make-syntax-table)))
-    (setf (aref table ?{) '(4 . 125))
-    (setf (aref table ?}) '(5 . 123))
-    table)
-  "A syntax table giving { and } paren syntax.")
-
-(defun company-css-inside-braces-p ()
-  "Return non-nil, if point is within matched { and }."
-  (ignore-errors
-    (with-syntax-table company-css-braces-syntax-table
-      (let ((parse-sexp-ignore-comments t))
-        (scan-lists (point) -1 1)))))
-
-;;; tags
-(defconst company-css-tag-regexp
-  (concat "\\(?:\\`\\|}\\)[[:space:]]*"
-          ;; multiple
-          "\\(?:"
-          ;; previous tags:
-          "\\(?:#\\|\\_<[[:alpha:]]\\)[[:alnum:]-#]*\\(?:\\[[^]]*\\]\\)?"
-          ;; space or selectors
-          "\\(?:[[:space:]]+\\|[[:space:]]*[+,>][[:space:]]*\\)"
-          "\\)*"
-          "\\(\\(?:#\\|\\_<[[:alpha:]]\\)\\(?:[[:alnum:]-#]*\\_>\\)?\\_>\\|\\)"
-          "\\=")
-  "A regular expression matching CSS tags.")
-
-;;; pseudo id
-(defconst company-css-pseudo-regexp
-  (concat "\\(?:\\`\\|}\\)[[:space:]]*"
-          ;; multiple
-          "\\(?:"
-          ;; previous tags:
-          "\\(?:#\\|\\_<[[:alpha:]]\\)[[:alnum:]-#]*\\(?:\\[[^]]*\\]\\)?"
-          ;; space or delimiters
-          "\\(?:[[:space:]]+\\|[[:space:]]*[+,>][[:space:]]*\\)"
-          "\\)*"
-          "\\(?:\\(?:\\#\\|\\_<[[:alpha:]]\\)[[:alnum:]-#]*\\):"
-          "\\([[:alpha:]-]+\\_>\\|\\)\\_>\\=")
-  "A regular expression matching CSS pseudo classes.")
-
-;;; properties
-
-(defun company-css-grab-property ()
-  "Return the CSS property before point, if any.
-Returns \"\" if no property found, but feasible at this position."
-  (when (company-css-inside-braces-p)
-    (company-grab-symbol)))
-
-;;; values
-(defconst company-css-property-value-regexp
-  "\\_<\\([[:alpha:]-]+\\):\\(?:[^{};]*[[:space:]]+\\)?\\([^{};]*\\_>\\|\\)\\="
-  "A regular expression matching CSS tags.")
-
-;;;###autoload
-(defun company-css (command &optional arg &rest ignored)
-  "`company-mode' completion backend for `css-mode'."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-css))
-    (prefix (and (or (derived-mode-p 'css-mode)
-                     (and (derived-mode-p 'web-mode)
-                          (string= (web-mode-language-at-pos) "css")))
-                 (or (company-grab company-css-tag-regexp 1)
-                     (company-grab company-css-pseudo-regexp 1)
-                     (company-grab company-css-property-value-regexp 2
-                                   (line-beginning-position))
-                     (company-css-grab-property))))
-    (candidates
-     (cond
-      ((company-grab company-css-tag-regexp 1)
-       (all-completions arg company-css-html-tags))
-      ((company-grab company-css-pseudo-regexp 1)
-       (all-completions arg company-css-pseudo-classes))
-      ((company-grab company-css-property-value-regexp 2
-                     (line-beginning-position))
-       (all-completions arg
-                        (company-css-property-values
-                         (company-grab company-css-property-value-regexp 1))))
-      ((company-css-grab-property)
-       (all-completions arg company-css-property-alist))))
-    (sorted t)))
-
-(provide 'company-css)
-;;; company-css.el ends here
diff --git a/packages/company/company-dabbrev-code.el 
b/packages/company/company-dabbrev-code.el
deleted file mode 100644
index 6d250ce..0000000
--- a/packages/company/company-dabbrev-code.el
+++ /dev/null
@@ -1,104 +0,0 @@
-;;; company-dabbrev-code.el --- dabbrev-like company-mode backend for code  
-*- lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2014  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-dabbrev)
-(require 'cl-lib)
-
-(defgroup company-dabbrev-code nil
-  "dabbrev-like completion backend for code."
-  :group 'company)
-
-(defcustom company-dabbrev-code-modes
-  '(prog-mode
-    batch-file-mode csharp-mode css-mode erlang-mode haskell-mode jde-mode
-    lua-mode python-mode)
-  "Modes that use `company-dabbrev-code'.
-In all these modes (and their derivatives) `company-dabbrev-code' will
-complete only symbols, not text in comments or strings.  In other modes
-`company-dabbrev-code' will pass control to other backends
-\(e.g. `company-dabbrev'\).  Value t means complete in all modes."
-  :type '(choice (repeat :tag "Some modes" (symbol :tag "Major mode"))
-                 (const :tag "All modes" t)))
-
-(defcustom company-dabbrev-code-other-buffers t
-  "Determines whether `company-dabbrev-code' should search other buffers.
-If `all', search all other buffers, except the ignored ones.  If t, search
-buffers with the same major mode.  If `code', search all buffers with major
-modes in `company-dabbrev-code-modes', or derived from one of them.  See
-also `company-dabbrev-code-time-limit'."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "Same major mode" t)
-                 (const :tag "Code major modes" code)
-                 (const :tag "All" all)))
-
-(defcustom company-dabbrev-code-time-limit .1
-  "Determines how long `company-dabbrev-code' should look for matches."
-  :type '(choice (const :tag "Off" nil)
-                 (number :tag "Seconds")))
-
-(defcustom company-dabbrev-code-everywhere nil
-  "Non-nil to offer completions in comments and strings."
-  :type 'boolean)
-
-(defcustom company-dabbrev-code-ignore-case nil
-  "Non-nil to ignore case when collecting completion candidates."
-  :type 'boolean)
-
-(defun company-dabbrev-code--make-regexp (prefix)
-  (concat "\\_<" (if (equal prefix "")
-                     "\\([a-zA-Z]\\|\\s_\\)"
-                   (regexp-quote prefix))
-          "\\(\\sw\\|\\s_\\)*\\_>"))
-
-;;;###autoload
-(defun company-dabbrev-code (command &optional arg &rest ignored)
-  "dabbrev-like `company-mode' backend for code.
-The backend looks for all symbols in the current buffer that aren't in
-comments or strings."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-dabbrev-code))
-    (prefix (and (or (eq t company-dabbrev-code-modes)
-                     (apply #'derived-mode-p company-dabbrev-code-modes))
-                 (or company-dabbrev-code-everywhere
-                     (not (company-in-string-or-comment)))
-                 (or (company-grab-symbol) 'stop)))
-    (candidates (let ((case-fold-search company-dabbrev-code-ignore-case))
-                  (company-dabbrev--search
-                   (company-dabbrev-code--make-regexp arg)
-                   company-dabbrev-code-time-limit
-                   (pcase company-dabbrev-code-other-buffers
-                     (`t (list major-mode))
-                     (`code company-dabbrev-code-modes)
-                     (`all `all))
-                   (not company-dabbrev-code-everywhere))))
-    (ignore-case company-dabbrev-code-ignore-case)
-    (duplicates t)))
-
-(provide 'company-dabbrev-code)
-;;; company-dabbrev-code.el ends here
diff --git a/packages/company/company-dabbrev.el 
b/packages/company/company-dabbrev.el
deleted file mode 100644
index 88b7419..0000000
--- a/packages/company/company-dabbrev.el
+++ /dev/null
@@ -1,206 +0,0 @@
-;;; company-dabbrev.el --- dabbrev-like company-mode completion backend  -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2014, 2015, 2016  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-dabbrev nil
-  "dabbrev-like completion backend."
-  :group 'company)
-
-(defcustom company-dabbrev-other-buffers 'all
-  "Determines whether `company-dabbrev' should search other buffers.
-If `all', search all other buffers, except the ignored ones.  If t, search
-buffers with the same major mode.  See also `company-dabbrev-time-limit'."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "Same major mode" t)
-                 (const :tag "All" all)))
-
-(defcustom company-dabbrev-ignore-buffers "\\`[ *]"
-  "Regexp matching the names of buffers to ignore.
-Or a function that returns non-nil for such buffers."
-  :type '(choice (regexp :tag "Regexp")
-                 (function :tag "Predicate"))
-  :package-version '(company . "0.9.0"))
-
-(defcustom company-dabbrev-time-limit .1
-  "Determines how many seconds `company-dabbrev' should look for matches."
-  :type '(choice (const :tag "Off" nil)
-                 (number :tag "Seconds")))
-
-(defcustom company-dabbrev-char-regexp "\\sw"
-  "A regular expression matching the characters `company-dabbrev' looks for."
-  :type 'regexp)
-
-(defcustom company-dabbrev-ignore-case 'keep-prefix
-  "Non-nil to ignore case when collecting completion candidates.
-When it's `keep-prefix', the text before point will remain unchanged after
-candidate is inserted, even some of its characters have different case."
-  :type '(choice
-          (const :tag "Don't ignore case" nil)
-          (const :tag "Ignore case" t)
-          (const :tag "Keep case before point" keep-prefix)))
-
-(defcustom company-dabbrev-downcase 'case-replace
-  "Whether to downcase the returned candidates.
-
-The value of nil means keep them as-is.
-`case-replace' means use the value of `case-replace'.
-Any other value means downcase.
-
-If you set this value to nil, you may also want to set
-`company-dabbrev-ignore-case' to any value other than `keep-prefix'."
-  :type '(choice
-          (const :tag "Keep as-is" nil)
-          (const :tag "Downcase" t)
-          (const :tag "Use case-replace" case-replace)))
-
-(defcustom company-dabbrev-minimum-length 4
-  "The minimum length for the completion candidate to be included.
-This variable affects both `company-dabbrev' and `company-dabbrev-code'."
-  :type 'integer
-  :package-version '(company . "0.8.3"))
-
-(defcustom company-dabbrev-ignore-invisible nil
-  "Non-nil to skip invisible text."
-  :type 'boolean
-  :package-version '(company . "0.9.0"))
-
-(defmacro company-dabbrev--time-limit-while (test start limit freq &rest body)
-  (declare (indent 3) (debug t))
-  `(let ((company-time-limit-while-counter 0))
-     (catch 'done
-       (while ,test
-         ,@body
-         (and ,limit
-              (= (cl-incf company-time-limit-while-counter) ,freq)
-              (setq company-time-limit-while-counter 0)
-              (> (float-time (time-since ,start)) ,limit)
-              (throw 'done 'company-time-out))))))
-
-(defun company-dabbrev--make-regexp ()
-  (concat "\\(?:" company-dabbrev-char-regexp "\\)+"))
-
-(defun company-dabbrev--search-buffer (regexp pos symbols start limit
-                                       ignore-comments)
-  (save-excursion
-    (cl-labels ((maybe-collect-match
-                 ()
-                 (let ((match (match-string-no-properties 0)))
-                   (when (and (>= (length match) 
company-dabbrev-minimum-length)
-                              (not (and company-dabbrev-ignore-invisible
-                                        (invisible-p (match-beginning 0)))))
-                     (push match symbols)))))
-      (goto-char (if pos (1- pos) (point-min)))
-      ;; Search before pos.
-      (let ((tmp-end (point)))
-        (company-dabbrev--time-limit-while (and (not (input-pending-p))
-                                                (> tmp-end (point-min)))
-            start limit 1
-          (ignore-errors
-            (forward-char -10000))
-          (forward-line 0)
-          (save-excursion
-            ;; Before, we used backward search, but it matches non-greedily, 
and
-            ;; that forced us to use the "beginning/end of word" anchors in
-            ;; `company-dabbrev--make-regexp'.  It's also about 2x slower.
-            (while (and (not (input-pending-p))
-                        (re-search-forward regexp tmp-end t))
-              (if (and ignore-comments (save-match-data 
(company-in-string-or-comment)))
-                  (re-search-forward "\\s>\\|\\s!\\|\\s\"" tmp-end t)
-                (maybe-collect-match))))
-          (setq tmp-end (point))))
-      (goto-char (or pos (point-min)))
-      ;; Search after pos.
-      (company-dabbrev--time-limit-while (and (not (input-pending-p))
-                                              (re-search-forward regexp nil t))
-          start limit 25
-        (if (and ignore-comments (save-match-data 
(company-in-string-or-comment)))
-            (re-search-forward "\\s>\\|\\s!\\|\\s\"" nil t)
-          (maybe-collect-match)))
-      symbols)))
-
-(defun company-dabbrev--search (regexp &optional limit other-buffer-modes
-                                ignore-comments)
-  (let* ((start (current-time))
-         (symbols (company-dabbrev--search-buffer regexp (point) nil start 
limit
-                                                  ignore-comments)))
-    (when other-buffer-modes
-      (cl-dolist (buffer (delq (current-buffer) (buffer-list)))
-        (unless (if (stringp company-dabbrev-ignore-buffers)
-                    (string-match-p company-dabbrev-ignore-buffers
-                                    (buffer-name buffer))
-                  (funcall company-dabbrev-ignore-buffers buffer))
-          (with-current-buffer buffer
-            (when (or (eq other-buffer-modes 'all)
-                      (apply #'derived-mode-p other-buffer-modes))
-              (setq symbols
-                    (company-dabbrev--search-buffer regexp nil symbols start
-                                                    limit ignore-comments)))))
-        (and limit
-             (> (float-time (time-since start)) limit)
-             (cl-return))))
-    symbols))
-
-(defun company-dabbrev--prefix ()
-  ;; Not in the middle of a word.
-  (unless (looking-at company-dabbrev-char-regexp)
-    ;; Emacs can't do greedy backward-search.
-    (company-grab-line (format "\\(?:^\\| \\)[^ ]*?\\(\\(?:%s\\)*\\)"
-                               company-dabbrev-char-regexp)
-                       1)))
-
-(defun company-dabbrev--filter (prefix candidates)
-  (let ((completion-ignore-case company-dabbrev-ignore-case))
-    (all-completions prefix candidates)))
-
-;;;###autoload
-(defun company-dabbrev (command &optional arg &rest ignored)
-  "dabbrev-like `company-mode' completion backend."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-dabbrev))
-    (prefix (company-dabbrev--prefix))
-    (candidates
-     (let* ((case-fold-search company-dabbrev-ignore-case)
-            (words (company-dabbrev--search (company-dabbrev--make-regexp)
-                                            company-dabbrev-time-limit
-                                            (pcase 
company-dabbrev-other-buffers
-                                              (`t (list major-mode))
-                                              (`all `all))))
-            (downcase-p (if (eq company-dabbrev-downcase 'case-replace)
-                            case-replace
-                          company-dabbrev-downcase)))
-       (setq words (company-dabbrev--filter arg words))
-       (if downcase-p
-           (mapcar 'downcase words)
-         words)))
-    (ignore-case company-dabbrev-ignore-case)
-    (duplicates t)))
-
-(provide 'company-dabbrev)
-;;; company-dabbrev.el ends here
diff --git a/packages/company/company-eclim.el 
b/packages/company/company-eclim.el
deleted file mode 100644
index 4763e97..0000000
--- a/packages/company/company-eclim.el
+++ /dev/null
@@ -1,186 +0,0 @@
-;;; company-eclim.el --- company-mode completion backend for Eclim
-
-;; Copyright (C) 2009, 2011, 2013, 2015  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; Using `emacs-eclim' together with (or instead of) this backend is
-;; recommended, as it allows you to use other Eclim features.
-;;
-;; The alternative backend provided by `emacs-eclim' uses `yasnippet'
-;; instead of `company-template' to expand function calls, and it supports
-;; some languages other than Java.
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defgroup company-eclim nil
-  "Completion backend for Eclim."
-  :group 'company)
-
-(defun company-eclim-executable-find ()
-  (let (file)
-    (cl-dolist (eclipse-root '("/Applications/eclipse" "/usr/lib/eclipse"
-                            "/usr/local/lib/eclipse"))
-      (and (file-exists-p (setq file (expand-file-name "plugins" 
eclipse-root)))
-           (setq file (car (last (directory-files file t "^org.eclim_"))))
-           (file-exists-p (setq file (expand-file-name "bin/eclim" file)))
-           (cl-return file)))))
-
-(defcustom company-eclim-executable
-  (or (bound-and-true-p eclim-executable)
-      (executable-find "eclim")
-      (company-eclim-executable-find))
-  "Location of eclim executable."
-  :type 'file)
-
-(defcustom company-eclim-auto-save t
-  "Determines whether to save the buffer when retrieving completions.
-eclim can only complete correctly when the buffer has been saved."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "On" t)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-eclim--project-dir 'unknown)
-
-(defvar-local company-eclim--project-name nil)
-
-(declare-function json-read "json")
-(defvar json-array-type)
-
-(defun company-eclim--call-process (&rest args)
-  (let ((coding-system-for-read 'utf-8)
-        res)
-    (require 'json)
-    (with-temp-buffer
-      (if (= 0 (setq res (apply 'call-process company-eclim-executable nil t 
nil
-                                "-command" args)))
-          (let ((json-array-type 'list))
-            (goto-char (point-min))
-            (unless (eobp)
-              (json-read)))
-        (message "Company-eclim command failed with error %d:\n%s" res
-                 (buffer-substring (point-min) (point-max)))
-        nil))))
-
-(defun company-eclim--project-list ()
-  (company-eclim--call-process "project_list"))
-
-(defun company-eclim--project-dir ()
-  (if (eq company-eclim--project-dir 'unknown)
-      (let ((dir (locate-dominating-file buffer-file-name ".project")))
-        (when dir
-          (setq company-eclim--project-dir
-                (directory-file-name
-                 (expand-file-name dir)))))
-    company-eclim--project-dir))
-
-(defun company-eclim--project-name ()
-  (or company-eclim--project-name
-      (let ((dir (company-eclim--project-dir)))
-        (when dir
-          (setq company-eclim--project-name
-                (cl-loop for project in (company-eclim--project-list)
-                         when (equal (cdr (assoc 'path project)) dir)
-                         return (cdr (assoc 'name project))))))))
-
-(defun company-eclim--candidates (prefix)
-  (interactive "d")
-  (let ((project-file (file-relative-name buffer-file-name
-                                          (company-eclim--project-dir)))
-        completions)
-    (when company-eclim-auto-save
-      (when (buffer-modified-p)
-        (basic-save-buffer))
-      ;; FIXME: Sometimes this isn't finished when we complete.
-      (company-eclim--call-process "java_src_update"
-                                   "-p" (company-eclim--project-name)
-                                   "-f" project-file))
-    (dolist (item (cdr (assoc 'completions
-                              (company-eclim--call-process
-                               "java_complete" "-p" 
(company-eclim--project-name)
-                               "-f" project-file
-                               "-o" (number-to-string
-                                     (company-eclim--search-point prefix))
-                               "-e" "utf-8"
-                               "-l" "standard"))))
-      (let* ((meta (cdr (assoc 'info item)))
-             (completion meta))
-        (when (string-match " ?[(:-]" completion)
-          (setq completion (substring completion 0 (match-beginning 0))))
-        (put-text-property 0 1 'meta meta completion)
-        (push completion completions)))
-    (let ((completion-ignore-case nil))
-      (all-completions prefix completions))))
-
-(defun company-eclim--search-point (prefix)
-  (if (or (cl-plusp (length prefix)) (eq (char-before) ?.))
-      (1- (point))
-    (point)))
-
-(defun company-eclim--meta (candidate)
-  (get-text-property 0 'meta candidate))
-
-(defun company-eclim--annotation (candidate)
-  (let ((meta (company-eclim--meta candidate)))
-    (when (string-match "\\(([^-]*\\) -" meta)
-      (substring meta (match-beginning 1) (match-end 1)))))
-
-(defun company-eclim--prefix ()
-  (let ((prefix (company-grab-symbol)))
-    (when prefix
-      ;; Completion candidates for annotations don't include '@'.
-      (when (eq ?@ (string-to-char prefix))
-        (setq prefix (substring prefix 1)))
-      prefix)))
-
-(defun company-eclim (command &optional arg &rest ignored)
-  "`company-mode' completion backend for Eclim.
-Eclim provides access to Eclipse Java IDE features for other editors.
-
-Eclim version 1.7.13 or newer (?) is required.
-
-Completions only work correctly when the buffer has been saved.
-`company-eclim-auto-save' determines whether to do this automatically."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-eclim))
-    (prefix (and (derived-mode-p 'java-mode 'jde-mode)
-                 buffer-file-name
-                 company-eclim-executable
-                 (company-eclim--project-name)
-                 (not (company-in-string-or-comment))
-                 (or (company-eclim--prefix) 'stop)))
-    (candidates (company-eclim--candidates arg))
-    (meta (company-eclim--meta arg))
-    ;; because "" doesn't return everything
-    (no-cache (equal arg ""))
-    (annotation (company-eclim--annotation arg))
-    (post-completion (let ((anno (company-eclim--annotation arg)))
-                       (when anno
-                         (insert anno)
-                         (company-template-c-like-templatify anno))))))
-
-(provide 'company-eclim)
-;;; company-eclim.el ends here
diff --git a/packages/company/company-elisp.el 
b/packages/company/company-elisp.el
deleted file mode 100644
index c024d66..0000000
--- a/packages/company/company-elisp.el
+++ /dev/null
@@ -1,226 +0,0 @@
-;;; company-elisp.el --- company-mode completion backend for Emacs Lisp -*- 
lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011-2013, 2017  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; In newer versions of Emacs, company-capf is used instead.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'help-mode)
-(require 'find-func)
-
-(defgroup company-elisp nil
-  "Completion backend for Emacs Lisp."
-  :group 'company)
-
-(defcustom company-elisp-detect-function-context t
-  "If enabled, offer Lisp functions only in appropriate contexts.
-Functions are offered for completion only after \\=' and \(."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "On" t)))
-
-(defcustom company-elisp-show-locals-first t
-  "If enabled, locally bound variables and functions are displayed
-first in the candidates list."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "On" t)))
-
-(defun company-elisp--prefix ()
-  (let ((prefix (company-grab-symbol)))
-    (if prefix
-        (when (if (company-in-string-or-comment)
-                  (= (char-before (- (point) (length prefix))) ?`)
-                (company-elisp--should-complete))
-          prefix)
-      'stop)))
-
-(defun company-elisp--predicate (symbol)
-  (or (boundp symbol)
-      (fboundp symbol)
-      (facep symbol)
-      (featurep symbol)))
-
-(defun company-elisp--fns-regexp (&rest names)
-  (concat "\\_<\\(?:cl-\\)?" (regexp-opt names) "\\*?\\_>"))
-
-(defvar company-elisp-parse-limit 30)
-(defvar company-elisp-parse-depth 100)
-
-(defvar company-elisp-defun-names '("defun" "defmacro" "defsubst"))
-
-(defvar company-elisp-var-binding-regexp
-  (apply #'company-elisp--fns-regexp "let" "lambda" "lexical-let"
-         company-elisp-defun-names)
-  "Regular expression matching head of a multiple variable bindings form.")
-
-(defvar company-elisp-var-binding-regexp-1
-  (company-elisp--fns-regexp "dolist" "dotimes")
-  "Regular expression matching head of a form with one variable binding.")
-
-(defvar company-elisp-fun-binding-regexp
-  (company-elisp--fns-regexp "flet" "labels")
-  "Regular expression matching head of a function bindings form.")
-
-(defvar company-elisp-defuns-regexp
-  (concat "([ \t\n]*"
-          (apply #'company-elisp--fns-regexp company-elisp-defun-names)))
-
-(defun company-elisp--should-complete ()
-  (let ((start (point))
-        (depth (car (syntax-ppss))))
-    (not
-     (when (> depth 0)
-       (save-excursion
-         (up-list (- depth))
-         (when (looking-at company-elisp-defuns-regexp)
-           (forward-char)
-           (forward-sexp 1)
-           (unless (= (point) start)
-             (condition-case nil
-                 (let ((args-end (scan-sexps (point) 2)))
-                   (or (null args-end)
-                       (> args-end start)))
-               (scan-error
-                t)))))))))
-
-(defun company-elisp--locals (prefix functions-p)
-  (let ((regexp (concat "[ \t\n]*\\(\\_<" (regexp-quote prefix)
-                        "\\(?:\\sw\\|\\s_\\)*\\_>\\)"))
-        (pos (point))
-        res)
-    (condition-case nil
-        (save-excursion
-          (dotimes (_ company-elisp-parse-depth)
-            (up-list -1)
-            (save-excursion
-              (when (eq (char-after) ?\()
-                (forward-char 1)
-                (when (ignore-errors
-                        (save-excursion (forward-list)
-                                        (<= (point) pos)))
-                  (skip-chars-forward " \t\n")
-                  (cond
-                   ((looking-at (if functions-p
-                                    company-elisp-fun-binding-regexp
-                                  company-elisp-var-binding-regexp))
-                    (down-list 1)
-                    (condition-case nil
-                        (dotimes (_ company-elisp-parse-limit)
-                          (save-excursion
-                            (when (looking-at "[ \t\n]*(")
-                              (down-list 1))
-                            (when (looking-at regexp)
-                              (cl-pushnew (match-string-no-properties 1) res)))
-                          (forward-sexp))
-                      (scan-error nil)))
-                   ((unless functions-p
-                      (looking-at company-elisp-var-binding-regexp-1))
-                    (down-list 1)
-                    (when (looking-at regexp)
-                      (cl-pushnew (match-string-no-properties 1) res)))))))))
-      (scan-error nil))
-    res))
-
-(defun company-elisp-candidates (prefix)
-  (let* ((predicate (company-elisp--candidates-predicate prefix))
-         (locals (company-elisp--locals prefix (eq predicate 'fboundp)))
-         (globals (company-elisp--globals prefix predicate))
-         (locals (cl-loop for local in locals
-                          when (not (member local globals))
-                          collect local)))
-    (if company-elisp-show-locals-first
-        (append (sort locals 'string<)
-                (sort globals 'string<))
-      (append locals globals))))
-
-(defun company-elisp--globals (prefix predicate)
-  (all-completions prefix obarray predicate))
-
-(defun company-elisp--candidates-predicate (prefix)
-  (let* ((completion-ignore-case nil)
-         (beg (- (point) (length prefix)))
-         (before (char-before beg)))
-    (if (and company-elisp-detect-function-context
-             (not (memq before '(?' ?`))))
-        (if (and (eq before ?\()
-                 (not
-                  (save-excursion
-                    (ignore-errors
-                      (goto-char (1- beg))
-                      (or (company-elisp--before-binding-varlist-p)
-                          (progn
-                            (up-list -1)
-                            (company-elisp--before-binding-varlist-p)))))))
-            'fboundp
-          'boundp)
-      'company-elisp--predicate)))
-
-(defun company-elisp--before-binding-varlist-p ()
-  (save-excursion
-    (and (prog1 (search-backward "(")
-           (forward-char 1))
-         (looking-at company-elisp-var-binding-regexp))))
-
-(defun company-elisp--doc (symbol)
-  (let* ((symbol (intern symbol))
-         (doc (if (fboundp symbol)
-                  (documentation symbol t)
-                (documentation-property symbol 'variable-documentation t))))
-    (and (stringp doc)
-         (string-match ".*$" doc)
-         (match-string 0 doc))))
-
-;;;###autoload
-(defun company-elisp (command &optional arg &rest ignored)
-  "`company-mode' completion backend for Emacs Lisp."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-elisp))
-    (prefix (and (derived-mode-p 'emacs-lisp-mode 'inferior-emacs-lisp-mode)
-                 (company-elisp--prefix)))
-    (candidates (company-elisp-candidates arg))
-    (sorted company-elisp-show-locals-first)
-    (meta (company-elisp--doc arg))
-    (doc-buffer (let ((symbol (intern arg)))
-                  (save-window-excursion
-                    (ignore-errors
-                      (cond
-                       ((fboundp symbol) (describe-function symbol))
-                       ((boundp symbol) (describe-variable symbol))
-                       ((featurep symbol) (describe-package symbol))
-                       ((facep symbol) (describe-face symbol))
-                       (t (signal 'user-error nil)))
-                      (help-buffer)))))
-    (location (let ((sym (intern arg)))
-                (cond
-                 ((fboundp sym) (find-definition-noselect sym nil))
-                 ((boundp sym) (find-definition-noselect sym 'defvar))
-                 ((featurep sym) (cons (find-file-noselect (find-library-name
-                                                            (symbol-name sym)))
-                                       0))
-                 ((facep sym) (find-definition-noselect sym 'defface)))))))
-
-(provide 'company-elisp)
-;;; company-elisp.el ends here
diff --git a/packages/company/company-etags.el 
b/packages/company/company-etags.el
deleted file mode 100644
index 55a1279..0000000
--- a/packages/company/company-etags.el
+++ /dev/null
@@ -1,108 +0,0 @@
-;;; company-etags.el --- company-mode completion backend for etags
-
-;; Copyright (C) 2009-2011, 2014  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'etags)
-
-(defgroup company-etags nil
-  "Completion backend for etags."
-  :group 'company)
-
-(defcustom company-etags-use-main-table-list t
-  "Always search `tags-table-list' if set.
-If this is disabled, `company-etags' will try to find the one table for each
-buffer automatically."
-  :type '(choice (const :tag "off" nil)
-                 (const :tag "on" t)))
-
-(defcustom company-etags-ignore-case nil
-  "Non-nil to ignore case in completion candidates."
-  :type 'boolean
-  :package-version '(company . "0.7.3"))
-
-(defcustom company-etags-everywhere nil
-  "Non-nil to offer completions in comments and strings.
-Set it to t or to a list of major modes."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "Any supported mode" t)
-                 (repeat :tag "Some major modes"
-                         (symbol :tag "Major mode")))
-  :package-version '(company . "0.9.0"))
-
-(defvar company-etags-modes '(prog-mode c-mode objc-mode c++-mode java-mode
-                              jde-mode pascal-mode perl-mode python-mode))
-
-(defvar-local company-etags-buffer-table 'unknown)
-
-(defun company-etags-find-table ()
-  (let ((file (expand-file-name
-               "TAGS"
-               (locate-dominating-file (or buffer-file-name
-                                           default-directory)
-                                       "TAGS"))))
-    (when (and file (file-regular-p file))
-      (list file))))
-
-(defun company-etags-buffer-table ()
-  (or (and company-etags-use-main-table-list tags-table-list)
-      (if (eq company-etags-buffer-table 'unknown)
-          (setq company-etags-buffer-table (company-etags-find-table))
-        company-etags-buffer-table)))
-
-(defun company-etags--candidates (prefix)
-  (let ((tags-table-list (company-etags-buffer-table))
-        (tags-file-name tags-file-name)
-        (completion-ignore-case company-etags-ignore-case))
-    (and (or tags-file-name tags-table-list)
-         (fboundp 'tags-completion-table)
-         (save-excursion
-           (visit-tags-table-buffer)
-           (all-completions prefix (tags-completion-table))))))
-
-;;;###autoload
-(defun company-etags (command &optional arg &rest ignored)
-  "`company-mode' completion backend for etags."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-etags))
-    (prefix (and (apply #'derived-mode-p company-etags-modes)
-                 (or (eq t company-etags-everywhere)
-                     (apply #'derived-mode-p company-etags-everywhere)
-                     (not (company-in-string-or-comment)))
-                 (company-etags-buffer-table)
-                 (or (company-grab-symbol) 'stop)))
-    (candidates (company-etags--candidates arg))
-    (location (let ((tags-table-list (company-etags-buffer-table)))
-                (when (fboundp 'find-tag-noselect)
-                  (save-excursion
-                    (let ((buffer (find-tag-noselect arg)))
-                      (cons buffer (with-current-buffer buffer (point))))))))
-    (ignore-case company-etags-ignore-case)))
-
-(provide 'company-etags)
-;;; company-etags.el ends here
diff --git a/packages/company/company-files.el 
b/packages/company/company-files.el
deleted file mode 100644
index 3d74c4d..0000000
--- a/packages/company/company-files.el
+++ /dev/null
@@ -1,151 +0,0 @@
-;;; company-files.el --- company-mode completion backend for file names
-
-;; Copyright (C) 2009-2011, 2014-2015  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-files nil
-  "Completion backend for file names."
-  :group 'company)
-
-(defcustom company-files-exclusions nil
-  "File name extensions and directory names to ignore.
-The values should use the same format as `completion-ignored-extensions'."
-  :type '(const string)
-  :package-version '(company . "0.9.1"))
-
-(defun company-files--directory-files (dir prefix)
-  ;; Don't use directory-files. It produces directories without trailing /.
-  (condition-case err
-      (let ((comp (sort (file-name-all-completions prefix dir)
-                        (lambda (s1 s2) (string-lessp (downcase s1) (downcase 
s2))))))
-        (when company-files-exclusions
-          (setq comp (company-files--exclusions-filtered comp)))
-        (if (equal prefix "")
-            (delete "../" (delete "./" comp))
-          comp))
-    (file-error nil)))
-
-(defun company-files--exclusions-filtered (completions)
-  (let* ((dir-exclusions (cl-delete-if-not #'company-files--trailing-slash-p
-                                           company-files-exclusions))
-         (file-exclusions (cl-set-difference company-files-exclusions
-                                             dir-exclusions)))
-    (cl-loop for c in completions
-             unless (if (company-files--trailing-slash-p c)
-                        (member c dir-exclusions)
-                      (cl-find-if (lambda (exclusion)
-                                    (string-suffix-p exclusion c))
-                                  file-exclusions))
-             collect c)))
-
-(defvar company-files--regexps
-  (let* ((root (if (eq system-type 'windows-nt)
-                   "[a-zA-Z]:/"
-                 "/"))
-         (begin (concat "\\(?:\\.\\{1,2\\}/\\|~/\\|" root "\\)")))
-    (list (concat "\"\\(" begin "[^\"\n]*\\)")
-          (concat "\'\\(" begin "[^\'\n]*\\)")
-          (concat "\\(?:[ \t=\[]\\|^\\)\\(" begin "[^ \t\n]*\\)"))))
-
-(defun company-files--grab-existing-name ()
-  ;; Grab the file name.
-  ;; When surrounded with quotes, it can include spaces.
-  (let (file dir)
-    (and (cl-dolist (regexp company-files--regexps)
-           (when (setq file (company-grab-line regexp 1))
-             (cl-return file)))
-         (company-files--connected-p file)
-         (setq dir (file-name-directory file))
-         (not (string-match "//" dir))
-         (file-exists-p dir)
-         file)))
-
-(defun company-files--connected-p (file)
-  (or (not (file-remote-p file))
-      (file-remote-p file nil t)))
-
-(defun company-files--trailing-slash-p (file)
-  ;; `file-directory-p' is very expensive on remotes. We are relying on
-  ;; `file-name-all-completions' returning directories with trailing / instead.
-  (let ((len (length file)))
-    (and (> len 0) (eq (aref file (1- len)) ?/))))
-
-(defvar company-files--completion-cache nil)
-
-(defun company-files--complete (prefix)
-  (let* ((dir (file-name-directory prefix))
-         (file (file-name-nondirectory prefix))
-         (key (list file
-                    (expand-file-name dir)
-                    (nth 5 (file-attributes dir))))
-         (completion-ignore-case read-file-name-completion-ignore-case))
-    (unless (company-file--keys-match-p key (car 
company-files--completion-cache))
-      (let* ((candidates (mapcar (lambda (f) (concat dir f))
-                                 (company-files--directory-files dir file)))
-             (directories (unless (file-remote-p dir)
-                            (cl-remove-if-not (lambda (f)
-                                                (and 
(company-files--trailing-slash-p f)
-                                                     (not (file-remote-p f))
-                                                     
(company-files--connected-p f)))
-                                              candidates)))
-             (children (and directories
-                            (cl-mapcan (lambda (d)
-                                         (mapcar (lambda (c) (concat d c))
-                                                 
(company-files--directory-files d "")))
-                                       directories))))
-        (setq company-files--completion-cache
-              (cons key (append candidates children)))))
-    (all-completions prefix
-                     (cdr company-files--completion-cache))))
-
-(defun company-file--keys-match-p (new old)
-  (and (equal (cdr old) (cdr new))
-       (string-prefix-p (car old) (car new))))
-
-(defun company-files--post-completion (arg)
-  (when (company-files--trailing-slash-p arg)
-    (delete-char -1)))
-
-;;;###autoload
-(defun company-files (command &optional arg &rest ignored)
-  "`company-mode' completion backend existing file names.
-Completions works for proper absolute and relative files paths.
-File paths with spaces are only supported inside strings."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-files))
-    (prefix (company-files--grab-existing-name))
-    (candidates (company-files--complete arg))
-    (location (cons (dired-noselect
-                     (file-name-directory (directory-file-name arg))) 1))
-    (post-completion (company-files--post-completion arg))
-    (sorted t)
-    (no-cache t)))
-
-(provide 'company-files)
-;;; company-files.el ends here
diff --git a/packages/company/company-gtags.el 
b/packages/company/company-gtags.el
deleted file mode 100644
index eb3c453..0000000
--- a/packages/company/company-gtags.el
+++ /dev/null
@@ -1,119 +0,0 @@
-;;; company-gtags.el --- company-mode completion backend for GNU Global
-
-;; Copyright (C) 2009-2011, 2014-2020  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defgroup company-gtags nil
-  "Completion backend for GNU Global."
-  :group 'company)
-
-(define-obsolete-variable-alias
-  'company-gtags-gnu-global-program-name
-  'company-gtags-executable "earlier")
-
-(defcustom company-gtags-executable
-  (executable-find "global")
-  "Location of GNU global executable."
-  :type 'string)
-
-(defcustom company-gtags-insert-arguments t
-  "When non-nil, insert function arguments as a template after completion."
-  :type 'boolean
-  :package-version '(company . "0.8.1"))
-
-(defvar-local company-gtags--tags-available-p 'unknown)
-
-(defcustom company-gtags-modes '(prog-mode jde-mode)
-  "Modes that use `company-gtags'.
-In all these modes (and their derivatives) `company-gtags' will perform
-completion."
-  :type '(repeat (symbol :tag "Major mode"))
-  :package-version '(company . "0.8.4"))
-
-(defun company-gtags--tags-available-p ()
-  (if (eq company-gtags--tags-available-p 'unknown)
-      (setq company-gtags--tags-available-p
-            (locate-dominating-file buffer-file-name "GTAGS"))
-    company-gtags--tags-available-p))
-
-(defun company-gtags--fetch-tags (prefix)
-  (with-temp-buffer
-    (let (tags)
-      ;; For some reason Global v 6.6.3 is prone to returning exit status 1
-      ;; even on successful searches when '-T' is used.
-      (when (/= 3 (process-file company-gtags-executable nil
-                               ;; "-T" goes through all the tag files listed 
in GTAGSLIBPATH
-                               (list (current-buffer) nil) nil "-xGqT" (concat 
"^" prefix)))
-        (goto-char (point-min))
-        (cl-loop while
-                 (re-search-forward (concat
-                                     "^"
-                                     "\\([^ ]*\\)" ;; completion
-                                     "[ \t]+\\([[:digit:]]+\\)" ;; linum
-                                     "[ \t]+\\([^ \t]+\\)" ;; file
-                                     "[ \t]+\\(.*\\)" ;; definition
-                                     "$"
-                                     ) nil t)
-                 collect
-                 (propertize (match-string 1)
-                             'meta (match-string 4)
-                             'location (cons (expand-file-name (match-string 
3))
-                                             (string-to-number (match-string 
2)))
-                             ))))))
-
-(defun company-gtags--annotation (arg)
-  (let ((meta (get-text-property 0 'meta arg)))
-    (when (string-match (concat (regexp-quote arg) "\\((.*)\\).*") meta)
-      (match-string 1 meta))))
-
-;;;###autoload
-(defun company-gtags (command &optional arg &rest ignored)
-  "`company-mode' completion backend for GNU Global."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-gtags))
-    (prefix (and company-gtags-executable
-                 buffer-file-name
-                 (apply #'derived-mode-p company-gtags-modes)
-                 (not (company-in-string-or-comment))
-                 (company-gtags--tags-available-p)
-                 (or (company-grab-symbol) 'stop)))
-    (candidates (company-gtags--fetch-tags arg))
-    (sorted t)
-    (duplicates t)
-    (annotation (company-gtags--annotation arg))
-    (meta (get-text-property 0 'meta arg))
-    (location (get-text-property 0 'location arg))
-    (post-completion (let ((anno (company-gtags--annotation arg)))
-                       (when (and company-gtags-insert-arguments anno)
-                         (insert anno)
-                         (company-template-c-like-templatify anno))))))
-
-(provide 'company-gtags)
-;;; company-gtags.el ends here
diff --git a/packages/company/company-ispell.el 
b/packages/company/company-ispell.el
deleted file mode 100644
index 4d0bc22..0000000
--- a/packages/company/company-ispell.el
+++ /dev/null
@@ -1,82 +0,0 @@
-;;; company-ispell.el --- company-mode completion backend using Ispell
-
-;; Copyright (C) 2009-2011, 2013-2016  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'ispell)
-
-(defgroup company-ispell nil
-  "Completion backend using Ispell."
-  :group 'company)
-
-(defcustom company-ispell-dictionary nil
-  "Dictionary to use for `company-ispell'.
-If nil, use `ispell-complete-word-dict'."
-  :type '(choice (const :tag "default (nil)" nil)
-                 (file :tag "dictionary" t)))
-
-(defvar company-ispell-available 'unknown)
-
-(defalias 'company-ispell--lookup-words
-  (if (fboundp 'ispell-lookup-words)
-      'ispell-lookup-words
-    'lookup-words))
-
-(defun company-ispell-available ()
-  (when (eq company-ispell-available 'unknown)
-    (condition-case err
-        (progn
-          (company-ispell--lookup-words "WHATEVER")
-          (setq company-ispell-available t))
-      (error
-       (message "Company-Ispell: %s" (error-message-string err))
-       (setq company-ispell-available nil))))
-  company-ispell-available)
-
-;;;###autoload
-(defun company-ispell (command &optional arg &rest ignored)
-  "`company-mode' completion backend using Ispell."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-ispell))
-    (prefix (when (company-ispell-available)
-              (company-grab-word)))
-    (candidates
-     (let ((words (company-ispell--lookup-words
-                   arg
-                   (or company-ispell-dictionary ispell-complete-word-dict)))
-           (completion-ignore-case t))
-       (if (string= arg "")
-           ;; Small optimization.
-           words
-         ;; Work around issue #284.
-         (all-completions arg words))))
-    (sorted t)
-    (ignore-case 'keep-prefix)))
-
-(provide 'company-ispell)
-;;; company-ispell.el ends here
diff --git a/packages/company/company-keywords.el 
b/packages/company/company-keywords.el
deleted file mode 100644
index 80a0103..0000000
--- a/packages/company/company-keywords.el
+++ /dev/null
@@ -1,314 +0,0 @@
-;;; company-keywords.el --- A company backend for programming language keywords
-
-;; Copyright (C) 2009-2011, 2016  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defun company-keywords-upper-lower (&rest lst)
-  ;; Upcase order is different for _.
-  (nconc (sort (mapcar 'upcase lst) 'string<) lst))
-
-(defvar company-keywords-alist
-  ;; Please contribute corrections or additions.
-  `((c++-mode
-     ;; from https://en.cppreference.com/w/cpp/keyword
-     "alignas" "alignof" "and" "and_eq" "asm" "atomic_cancel" "atomic_commit"
-     "atomic_noexcept" "auto" "bitand" "bitor" "bool" "break" "case" "catch"
-     "char" "char16_t" "char32_t" "char8_t" "class" "co_await" "co_return"
-     "co_yield" "compl" "concept" "const" "const_cast" "consteval" "constexpr"
-     "constinit" "continue" "decltype" "default" "delete" "do" "double"
-     "dynamic_cast" "else" "enum" "explicit" "export" "extern" "false" "final"
-     "float" "for" "friend" "goto" "if" "import" "inline" "int" "long" "module"
-     "mutable" "namespace" "new" "noexcept" "not" "not_eq" "nullptr" "operator"
-     "or" "or_eq" "override" "private" "protected" "public" "reflexpr" 
"register"
-     "reinterpret_cast" "requires" "return" "short" "signed" "sizeof" "static"
-     "static_assert" "static_cast" "struct" "switch" "synchronized" "template"
-     "this" "thread_local" "throw" "true" "try" "typedef" "typeid" "typename"
-     "union" "unsigned" "using" "virtual" "void" "volatile" "wchar_t" "while"
-     "xor" "xor_eq")
-    (c-mode
-     ;; from https://en.cppreference.com/w/c/keyword
-     "_Alignas" "_Alignof" "_Atomic" "_Bool" "_Complex" "_Generic" "_Imaginary"
-     "_Noreturn" "_Static_assert" "_Thread_local"
-     "auto" "break" "case" "char" "const" "continue" "default" "do"
-     "double" "else" "enum" "extern" "float" "for" "goto" "if" "inline"
-     "int" "long" "register" "restrict" "return" "short" "signed" "sizeof"
-     "static" "struct" "switch" "typedef" "union" "unsigned" "void" "volatile"
-     "while")
-    (csharp-mode
-     "abstract" "add" "alias" "as" "base" "bool" "break" "byte" "case"
-     "catch" "char" "checked" "class" "const" "continue" "decimal" "default"
-     "delegate" "do" "double" "else" "enum" "event" "explicit" "extern"
-     "false" "finally" "fixed" "float" "for" "foreach" "get" "global" "goto"
-     "if" "implicit" "in" "int" "interface" "internal" "is" "lock" "long"
-     "namespace" "new" "null" "object" "operator" "out" "override" "params"
-     "partial" "private" "protected" "public" "readonly" "ref" "remove"
-     "return" "sbyte" "sealed" "set" "short" "sizeof" "stackalloc" "static"
-     "string" "struct" "switch" "this" "throw" "true" "try" "typeof" "uint"
-     "ulong" "unchecked" "unsafe" "ushort" "using" "value" "var" "virtual"
-     "void" "volatile" "where" "while" "yield")
-    (d-mode
-     ;; from http://www.digitalmars.com/d/2.0/lex.html
-     "abstract" "alias" "align" "asm"
-     "assert" "auto" "body" "bool" "break" "byte" "case" "cast" "catch"
-     "cdouble" "cent" "cfloat" "char" "class" "const" "continue" "creal"
-     "dchar" "debug" "default" "delegate" "delete" "deprecated" "do"
-     "double" "else" "enum" "export" "extern" "false" "final" "finally"
-     "float" "for" "foreach" "foreach_reverse" "function" "goto" "idouble"
-     "if" "ifloat" "import" "in" "inout" "int" "interface" "invariant"
-     "ireal" "is" "lazy" "long" "macro" "mixin" "module" "new" "nothrow"
-     "null" "out" "override" "package" "pragma" "private" "protected"
-     "public" "pure" "real" "ref" "return" "scope" "short" "static" "struct"
-     "super" "switch" "synchronized" "template" "this" "throw" "true" "try"
-     "typedef" "typeid" "typeof" "ubyte" "ucent" "uint" "ulong" "union"
-     "unittest" "ushort" "version" "void" "volatile" "wchar" "while" "with")
-    (f90-mode .
-     ;; from f90.el
-     ;; ".AND." ".GE." ".GT." ".LT." ".LE." ".NE." ".OR." ".TRUE." ".FALSE."
-     ,(company-keywords-upper-lower
-      "abs" "abstract" "achar" "acos" "adjustl" "adjustr" "aimag" "aint"
-      "align" "all" "all_prefix" "all_scatter" "all_suffix" "allocatable"
-      "allocate" "allocated" "and" "anint" "any" "any_prefix" "any_scatter"
-      "any_suffix" "asin" "assign" "assignment" "associate" "associated"
-      "asynchronous" "atan" "atan2" "backspace" "bind" "bit_size" "block"
-      "btest" "c_alert" "c_associated" "c_backspace" "c_bool"
-      "c_carriage_return" "c_char" "c_double" "c_double_complex" "c_f_pointer"
-      "c_f_procpointer" "c_float" "c_float_complex" "c_form_feed" "c_funloc"
-      "c_funptr" "c_horizontal_tab" "c_int" "c_int16_t" "c_int32_t" "c_int64_t"
-      "c_int8_t" "c_int_fast16_t" "c_int_fast32_t" "c_int_fast64_t"
-      "c_int_fast8_t" "c_int_least16_t" "c_int_least32_t" "c_int_least64_t"
-      "c_int_least8_t" "c_intmax_t" "c_intptr_t" "c_loc" "c_long"
-      "c_long_double" "c_long_double_complex" "c_long_long" "c_new_line"
-      "c_null_char" "c_null_funptr" "c_null_ptr" "c_ptr" "c_short"
-      "c_signed_char" "c_size_t" "c_vertical_tab" "call" "case" "ceiling"
-      "char" "character" "character_storage_size" "class" "close" "cmplx"
-      "command_argument_count" "common" "complex" "conjg" "contains" "continue"
-      "copy_prefix" "copy_scatter" "copy_suffix" "cos" "cosh" "count"
-      "count_prefix" "count_scatter" "count_suffix" "cpu_time" "cshift"
-      "cycle" "cyclic" "data" "date_and_time" "dble" "deallocate" "deferred"
-      "digits" "dim" "dimension" "distribute" "do" "dot_product" "double"
-      "dprod" "dynamic" "elemental" "else" "elseif" "elsewhere" "end" "enddo"
-      "endfile" "endif" "entry" "enum" "enumerator" "eoshift" "epsilon" "eq"
-      "equivalence" "eqv" "error_unit" "exit" "exp" "exponent" "extends"
-      "extends_type_of" "external" "extrinsic" "false" "file_storage_size"
-      "final" "floor" "flush" "forall" "format" "fraction" "function" "ge"
-      "generic" "get_command" "get_command_argument" "get_environment_variable"
-      "goto" "grade_down" "grade_up" "gt" "hpf_alignment" "hpf_distribution"
-      "hpf_template" "huge" "iachar" "iall" "iall_prefix" "iall_scatter"
-      "iall_suffix" "iand" "iany" "iany_prefix" "iany_scatter" "iany_suffix"
-      "ibclr" "ibits" "ibset" "ichar" "ieee_arithmetic" "ieee_exceptions"
-      "ieee_features" "ieee_get_underflow_mode" "ieee_set_underflow_mode"
-      "ieee_support_underflow_control" "ieor" "if" "ilen" "implicit"
-      "import" "include" "independent" "index" "inherit" "input_unit"
-      "inquire" "int" "integer" "intent" "interface" "intrinsic" "ior"
-      "iostat_end" "iostat_eor" "iparity" "iparity_prefix" "iparity_scatter"
-      "iparity_suffix" "ishft" "ishftc" "iso_c_binding" "iso_fortran_env"
-      "kind" "lbound" "le" "leadz" "len" "len_trim" "lge" "lgt" "lle" "llt"
-      "log" "log10" "logical" "lt" "matmul" "max" "maxexponent" "maxloc"
-      "maxval" "maxval_prefix" "maxval_scatter" "maxval_suffix" "merge"
-      "min" "minexponent" "minloc" "minval" "minval_prefix" "minval_scatter"
-      "minval_suffix" "mod" "module" "modulo" "move_alloc" "mvbits" "namelist"
-      "ne" "nearest" "neqv" "new" "new_line" "nint" "non_intrinsic"
-      "non_overridable" "none" "nopass" "not" "null" "nullify"
-      "number_of_processors" "numeric_storage_size" "only" "onto" "open"
-      "operator" "optional" "or" "output_unit" "pack" "parameter" "parity"
-      "parity_prefix" "parity_scatter" "parity_suffix" "pass" "pause"
-      "pointer" "popcnt" "poppar" "precision" "present" "print" "private"
-      "procedure" "processors" "processors_shape" "product" "product_prefix"
-      "product_scatter" "product_suffix" "program" "protected" "public"
-      "pure" "radix" "random_number" "random_seed" "range" "read" "real"
-      "realign" "recursive" "redistribute" "repeat" "reshape" "result"
-      "return" "rewind" "rrspacing" "same_type_as" "save" "scale" "scan"
-      "select" "selected_char_kind" "selected_int_kind" "selected_real_kind"
-      "sequence" "set_exponent" "shape" "sign" "sin" "sinh" "size" "spacing"
-      "spread" "sqrt" "stop" "subroutine" "sum" "sum_prefix" "sum_scatter"
-      "sum_suffix" "system_clock" "tan" "tanh" "target" "template" "then"
-      "tiny" "transfer" "transpose" "trim" "true" "type" "ubound" "unpack"
-      "use" "value" "verify" "volatile" "wait" "where" "while" "with" "write"))
-    (go-mode
-     ;; 1. Keywords ref: https://golang.org/ref/spec#Keywords
-     ;; 2. Builtin functions and types ref: https://golang.org/pkg/builtin/
-     "append" "bool" "break" "byte" "cap" "case" "chan" "close" "complex" 
"complex128"
-     "complex64" "const" "continue" "copy" "default" "defer" "delete" "else" 
"error"
-     "fallthrough" "false" "float32" "float64" "for" "func" "go" "goto" "if" 
"imag"
-     "import" "int" "int16" "int32" "int64" "int8" "interface" "len" "make"
-     "map" "new" "nil" "package" "panic" "print" "println" "range" "real" 
"recover"
-     "return" "rune" "select" "string" "struct" "switch" "true" "type" "uint" 
"uint16"
-     "uint32" "uint64" "uint8" "uintptr" "var")
-    (java-mode
-     "abstract" "assert" "boolean" "break" "byte" "case" "catch" "char" "class"
-     "continue" "default" "do" "double" "else" "enum" "extends" "final"
-     "finally" "float" "for" "if" "implements" "import" "instanceof" "int"
-     "interface" "long" "native" "new" "package" "private" "protected" "public"
-     "return" "short" "static" "strictfp" "super" "switch" "synchronized"
-     "this" "throw" "throws" "transient" "try" "void" "volatile" "while")
-    (javascript-mode
-     ;; https://tc39.github.io/ecma262/ + async, static and undefined
-     "async" "await" "break" "case" "catch" "class" "const" "continue"
-     "debugger" "default" "delete" "do" "else" "enum" "export" "extends" 
"false"
-     "finally" "for" "function" "if" "import" "in" "instanceof" "let" "new"
-     "null" "return" "static" "super" "switch" "this" "throw" "true" "try"
-     "typeof" "undefined" "var" "void" "while" "with" "yield")
-    (kotlin-mode
-     "abstract" "annotation" "as" "break" "by" "catch" "class" "companion"
-     "const" "constructor" "continue" "data" "do" "else" "enum" "false" "final"
-     "finally" "for" "fun" "if" "import" "in" "init" "inner" "interface"
-     "internal" "is" "lateinit" "nested" "null" "object" "open" "out" 
"override"
-     "package" "private" "protected" "public" "return" "super" "this" "throw"
-     "trait" "true" "try" "typealias" "val" "var" "when" "while")
-    (objc-mode
-     "@catch" "@class" "@encode" "@end" "@finally" "@implementation"
-     "@interface" "@private" "@protected" "@protocol" "@public"
-     "@selector" "@synchronized" "@throw" "@try" "alloc" "autorelease"
-     "bycopy" "byref" "in" "inout" "oneway" "out" "release" "retain")
-    (perl-mode
-     ;; from cperl.el
-     "AUTOLOAD" "BEGIN" "CHECK" "CORE" "DESTROY" "END" "INIT" "__END__"
-     "__FILE__" "__LINE__" "abs" "accept" "alarm" "and" "atan2" "bind"
-     "binmode" "bless" "caller" "chdir" "chmod" "chomp" "chop" "chown" "chr"
-     "chroot" "close" "closedir" "cmp" "connect" "continue" "cos"
-     "crypt" "dbmclose" "dbmopen" "defined" "delete" "die" "do" "dump" "each"
-     "else" "elsif" "endgrent" "endhostent" "endnetent" "endprotoent"
-     "endpwent" "endservent" "eof" "eq" "eval" "exec" "exists" "exit" "exp"
-     "fcntl" "fileno" "flock" "for" "foreach" "fork" "format" "formline"
-     "ge" "getc" "getgrent" "getgrgid" "getgrnam" "gethostbyaddr"
-     "gethostbyname" "gethostent" "getlogin" "getnetbyaddr" "getnetbyname"
-     "getnetent" "getpeername" "getpgrp" "getppid" "getpriority"
-     "getprotobyname" "getprotobynumber" "getprotoent" "getpwent" "getpwnam"
-     "getpwuid" "getservbyname" "getservbyport" "getservent" "getsockname"
-     "getsockopt" "glob" "gmtime" "goto" "grep" "gt" "hex" "if" "index" "int"
-     "ioctl" "join" "keys" "kill" "last" "lc" "lcfirst" "le" "length"
-     "link" "listen" "local" "localtime" "lock" "log" "lstat" "lt" "map"
-     "mkdir" "msgctl" "msgget" "msgrcv" "msgsnd" "my" "ne" "next" "no"
-     "not" "oct" "open" "opendir" "or" "ord" "our" "pack" "package" "pipe"
-     "pop" "pos" "print" "printf" "push" "q" "qq" "quotemeta" "qw" "qx"
-     "rand" "read" "readdir" "readline" "readlink" "readpipe" "recv" "redo"
-     "ref" "rename" "require" "reset" "return" "reverse" "rewinddir" "rindex"
-     "rmdir" "scalar" "seek" "seekdir" "select" "semctl" "semget" "semop"
-     "send" "setgrent" "sethostent" "setnetent" "setpgrp" "setpriority"
-     "setprotoent" "setpwent" "setservent" "setsockopt" "shift" "shmctl"
-     "shmget" "shmread" "shmwrite" "shutdown" "sin" "sleep" "socket"
-     "socketpair" "sort" "splice" "split" "sprintf" "sqrt" "srand" "stat"
-     "study" "sub" "substr" "symlink" "syscall" "sysopen" "sysread" "system"
-     "syswrite" "tell" "telldir" "tie" "time" "times" "tr" "truncate" "uc"
-     "ucfirst" "umask" "undef" "unless" "unlink" "unpack" "unshift" "untie"
-     "until" "use" "utime" "values" "vec" "wait" "waitpid"
-     "wantarray" "warn" "while" "write" "x" "xor" "y")
-    (php-mode
-     "__CLASS__" "__DIR__" "__FILE__" "__FUNCTION__" "__LINE__" "__METHOD__"
-     "__NAMESPACE__" "_once" "abstract" "and" "array" "as" "break" "case"
-     "catch" "cfunction" "class" "clone" "const" "continue" "declare"
-     "default" "die" "do" "echo" "else" "elseif" "empty" "enddeclare"
-     "endfor" "endforeach" "endif" "endswitch" "endwhile" "eval" "exception"
-     "exit" "extends" "final" "for" "foreach" "function" "global"
-     "goto" "if" "implements" "include" "instanceof" "interface"
-     "isset" "list" "namespace" "new" "old_function" "or" "php_user_filter"
-     "print" "private" "protected" "public" "require" "require_once" "return"
-     "static" "switch" "this" "throw" "try" "unset" "use" "var" "while" "xor")
-    (python-mode
-     ;; https://docs.python.org/3/reference/lexical_analysis.html#keywords
-     "False" "None" "True" "and" "as" "assert" "break" "class" "continue" "def"
-     "del" "elif" "else" "except" "exec" "finally" "for" "from" "global" "if"
-     "import" "in" "is" "lambda" "nonlocal" "not" "or" "pass" "print" "raise"
-     "return" "try" "while" "with" "yield")
-    (ruby-mode
-     "BEGIN" "END" "alias" "and"  "begin" "break" "case" "class" "def" 
"defined?"
-     "do" "else" "elsif"  "end" "ensure" "false" "for" "if" "in" "module"
-     "next" "nil" "not" "or" "redo" "rescue" "retry" "return" "self" "super"
-     "then" "true" "undef" "unless" "until" "when" "while" "yield")
-    ;; From https://doc.rust-lang.org/grammar.html#keywords
-    ;; but excluding unused reserved words: 
https://www.reddit.com/r/rust/comments/34fq0k/is_there_a_good_list_of_rusts_keywords/cqucvnj
-    (rust-mode
-     "Self"
-     "as" "box" "break" "const" "continue" "crate" "else" "enum" "extern"
-     "false" "fn" "for" "if" "impl" "in" "let" "loop" "macro" "match" "mod"
-     "move" "mut" "pub" "ref" "return" "self" "static" "struct" "super"
-     "trait" "true" "type" "unsafe" "use" "where" "while")
-    (scala-mode
-     "abstract" "case" "catch" "class" "def" "do" "else" "extends" "false"
-     "final" "finally" "for" "forSome" "if" "implicit" "import" "lazy" "match"
-     "new" "null" "object" "override" "package" "private" "protected"
-     "return" "sealed" "super" "this" "throw" "trait" "true" "try" "type" "val"
-     "var" "while" "with" "yield")
-    (swift-mode
-     "Protocol" "Self" "Type" "and" "as" "assignment" "associatedtype"
-     "associativity" "available" "break" "case" "catch" "class" "column" 
"continue"
-     "convenience" "default" "defer" "deinit" "didSet" "do" "dynamic" 
"dynamicType"
-     "else" "elseif" "endif" "enum" "extension" "fallthrough" "false" "file"
-     "fileprivate" "final" "for" "func" "function" "get" "guard" "higherThan" 
"if"
-     "import" "in" "indirect" "infix" "init" "inout" "internal" "is" "lazy" 
"left"
-     "let" "line" "lowerThan" "mutating" "nil" "none" "nonmutating" "open"
-     "operator" "optional" "override" "postfix" "precedence" "precedencegroup"
-     "prefix" "private" "protocol" "public" "repeat" "required" "rethrows" 
"return"
-     "right" "selector" "self" "set" "static" "struct" "subscript" "super" 
"switch"
-     "throw" "throws" "true" "try" "typealias" "unowned" "var" "weak" "where"
-     "while" "willSet")
-    (julia-mode
-     "abstract" "break" "case" "catch" "const" "continue" "do" "else" "elseif"
-     "end" "eval" "export" "false" "finally" "for" "function" "global" "if"
-     "ifelse" "immutable" "import" "importall" "in" "let" "macro" "module"
-     "otherwise" "quote" "return" "switch" "throw" "true" "try" "type"
-     "typealias" "using" "while"
-     )
-    ;; From https://github.com/apache/thrift/blob/master/contrib/thrift.el
-    (thrift-mode
-     "binary" "bool" "byte" "const" "double" "enum" "exception" "extends"
-     "i16" "i32" "i64" "include" "list" "map" "oneway" "optional" "required"
-     "service" "set" "string" "struct" "throws" "typedef" "void"
-     )
-    ;; aliases
-    (js2-mode . javascript-mode)
-    (js2-jsx-mode . javascript-mode)
-    (espresso-mode . javascript-mode)
-    (js-mode . javascript-mode)
-    (js-jsx-mode . javascript-mode)
-    (rjsx-mode . javascript-mode)
-    (cperl-mode . perl-mode)
-    (jde-mode . java-mode)
-    (ess-julia-mode . julia-mode)
-    (enh-ruby-mode . ruby-mode))
-  "Alist mapping major-modes to sorted keywords for `company-keywords'.")
-
-;;;###autoload
-(defun company-keywords (command &optional arg &rest ignored)
-  "`company-mode' backend for programming language keywords."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-keywords))
-    (prefix (and (assq major-mode company-keywords-alist)
-                 (not (company-in-string-or-comment))
-                 (or (company-grab-symbol) 'stop)))
-    (candidates
-     (let ((completion-ignore-case nil)
-           (symbols (cdr (assq major-mode company-keywords-alist))))
-       (all-completions arg (if (consp symbols)
-                                symbols
-                              (cdr (assq symbols company-keywords-alist))))))
-    (sorted t)))
-
-(provide 'company-keywords)
-;;; company-keywords.el ends here
diff --git a/packages/company/company-nxml.el b/packages/company/company-nxml.el
deleted file mode 100644
index d05f57c..0000000
--- a/packages/company/company-nxml.el
+++ /dev/null
@@ -1,143 +0,0 @@
-;;; company-nxml.el --- company-mode completion backend for nxml-mode
-
-;; Copyright (C) 2009-2011, 2013, 2018  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; In Emacs >= 26, company-capf is used instead.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defvar rng-open-elements)
-(defvar rng-validate-mode)
-(defvar rng-in-attribute-regex)
-(defvar rng-in-attribute-value-regex)
-(declare-function rng-set-state-after "rng-nxml")
-(declare-function rng-match-possible-start-tag-names "rng-match")
-(declare-function rng-adjust-state-for-attribute "rng-nxml")
-(declare-function rng-match-possible-attribute-names "rng-match")
-(declare-function rng-adjust-state-for-attribute-value "rng-nxml")
-(declare-function rng-match-possible-value-strings "rng-match")
-
-(defconst company-nxml-token-regexp
-  "\\(?:[_[:alpha:]][-._[:alnum:]]*\\_>\\)")
-
-(defvar company-nxml-in-attribute-value-regexp
-  (replace-regexp-in-string "w" company-nxml-token-regexp
-   "<w\\(?::w\\)?\
-\\(?:[ \t\r\n]+w\\(?::w\\)?[ \t\r\n]*=\
-\[ \t\r\n]*\\(?:\"[^\"]*\"\\|'[^']*'\\)\\)*\
-\[ \t\r\n]+\\(w\\(:w\\)?\\)[ \t\r\n]*=[ \t\r\n]*\
-\\(\"\\([^\"]*\\>\\)\\|'\\([^']*\\>\\)\\)\\="
-   t t))
-
-(defvar company-nxml-in-tag-name-regexp
-  (replace-regexp-in-string "w" company-nxml-token-regexp
-                            "<\\(/?w\\(?::w?\\)?\\)?\\=" t t))
-
-(defun company-nxml-all-completions (prefix alist)
-  (let ((candidates (mapcar 'cdr alist))
-        (case-fold-search nil)
-        filtered)
-    (when (cdar rng-open-elements)
-      (push (concat "/" (cdar rng-open-elements)) candidates))
-    (setq candidates (sort (all-completions prefix candidates) 'string<))
-    (while candidates
-      (unless (equal (car candidates) (car filtered))
-        (push (car candidates) filtered))
-      (pop candidates))
-    (nreverse filtered)))
-
-(defmacro company-nxml-prepared (&rest body)
-  (declare (indent 0) (debug t))
-  `(let ((lt-pos (save-excursion (search-backward "<" nil t)))
-         xmltok-dtd)
-     (when (and lt-pos (= (rng-set-state-after lt-pos) lt-pos))
-       ,@body)))
-
-(defun company-nxml-tag (command &optional arg &rest ignored)
-  (cl-case command
-    (prefix (and (derived-mode-p 'nxml-mode)
-                 rng-validate-mode
-                 (company-grab company-nxml-in-tag-name-regexp 1)))
-    (candidates (company-nxml-prepared
-                 (company-nxml-all-completions
-                  arg (rng-match-possible-start-tag-names))))
-    (sorted t)))
-
-(defun company-nxml-attribute (command &optional arg &rest ignored)
-  (cl-case command
-    (prefix (and (derived-mode-p 'nxml-mode)
-                 rng-validate-mode
-                 (memq (char-after) '(?\  ?\t ?\n)) ;; outside word
-                 (company-grab rng-in-attribute-regex 1)))
-    (candidates (company-nxml-prepared
-                 (and (rng-adjust-state-for-attribute
-                       lt-pos (- (point) (length arg)))
-                      (company-nxml-all-completions
-                       arg (rng-match-possible-attribute-names)))))
-    (sorted t)))
-
-(defun company-nxml-attribute-value (command &optional arg &rest ignored)
-  (cl-case command
-    (prefix (and (derived-mode-p 'nxml-mode)
-                 rng-validate-mode
-                 (and (memq (char-after) '(?' ?\" ?\  ?\t ?\n)) ;; outside word
-                      (looking-back company-nxml-in-attribute-value-regexp nil)
-                      (or (match-string-no-properties 4)
-                          (match-string-no-properties 5)
-                          ""))))
-    (candidates (company-nxml-prepared
-                 (let (attr-start attr-end colon)
-                   (and (looking-back rng-in-attribute-value-regex lt-pos)
-                        (setq colon (match-beginning 2)
-                              attr-start (match-beginning 1)
-                              attr-end (match-end 1))
-                        (rng-adjust-state-for-attribute lt-pos attr-start)
-                        (rng-adjust-state-for-attribute-value
-                         attr-start colon attr-end)
-                        (all-completions
-                         arg (rng-match-possible-value-strings))))))))
-
-;;;###autoload
-(defun company-nxml (command &optional arg &rest ignored)
-  "`company-mode' completion backend for `nxml-mode'."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-nxml))
-    (prefix (or (company-nxml-tag 'prefix)
-                (company-nxml-attribute 'prefix)
-                (company-nxml-attribute-value 'prefix)))
-    (candidates (cond
-                 ((company-nxml-tag 'prefix)
-                  (company-nxml-tag 'candidates arg))
-                 ((company-nxml-attribute 'prefix)
-                  (company-nxml-attribute 'candidates arg))
-                 ((company-nxml-attribute-value 'prefix)
-                  (sort (company-nxml-attribute-value 'candidates arg)
-                        'string<))))
-    (sorted t)))
-
-(provide 'company-nxml)
-;;; company-nxml.el ends here
diff --git a/packages/company/company-oddmuse.el 
b/packages/company/company-oddmuse.el
deleted file mode 100644
index 787ca91..0000000
--- a/packages/company/company-oddmuse.el
+++ /dev/null
@@ -1,57 +0,0 @@
-;;; company-oddmuse.el --- company-mode completion backend for oddmuse-mode
-
-;; Copyright (C) 2009-2011, 2014  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(eval-when-compile (require 'yaoddmuse nil t))
-(eval-when-compile (require 'oddmuse nil t))
-
-(defvar company-oddmuse-link-regexp
-  "\\(\\<[A-Z][[:alnum:]]*\\>\\)\\|\\[\\[\\([[:alnum:]]+\\>\\|\\)")
-
-(defun company-oddmuse-get-page-table ()
-  (cl-case major-mode
-    (yaoddmuse-mode (with-no-warnings
-                      (yaoddmuse-get-pagename-table yaoddmuse-wikiname)))
-    (oddmuse-mode (with-no-warnings
-                    (oddmuse-make-completion-table oddmuse-wiki)))))
-
-;;;###autoload
-(defun company-oddmuse (command &optional arg &rest ignored)
-  "`company-mode' completion backend for `oddmuse-mode'."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-oddmuse))
-    (prefix (let ((case-fold-search nil))
-              (and (memq major-mode '(oddmuse-mode yaoddmuse-mode))
-                   (looking-back company-oddmuse-link-regexp (point-at-bol))
-                   (or (match-string 1)
-                       (match-string 2)))))
-    (candidates (all-completions arg (company-oddmuse-get-page-table)))))
-
-(provide 'company-oddmuse)
-;;; company-oddmuse.el ends here
diff --git a/packages/company/company-semantic.el 
b/packages/company/company-semantic.el
deleted file mode 100644
index 86cc8c6..0000000
--- a/packages/company/company-semantic.el
+++ /dev/null
@@ -1,168 +0,0 @@
-;;; company-semantic.el --- company-mode completion backend using Semantic
-
-;; Copyright (C) 2009-2011, 2013-2016  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defvar semantic-idle-summary-function)
-(declare-function semantic-documentation-for-tag "semantic/doc" )
-(declare-function semantic-analyze-current-context "semantic/analyze")
-(declare-function semantic-analyze-possible-completions "semantic/complete")
-(declare-function semantic-analyze-find-tags-by-prefix "semantic/analyze/fcn")
-(declare-function semantic-tag-class "semantic/tag")
-(declare-function semantic-tag-name "semantic/tag")
-(declare-function semantic-tag-start "semantic/tag")
-(declare-function semantic-tag-buffer "semantic/tag")
-(declare-function semantic-active-p "semantic")
-(declare-function semantic-format-tag-prototype "semantic/format")
-
-(defgroup company-semantic nil
-  "Completion backend using Semantic."
-  :group 'company)
-
-(defcustom company-semantic-metadata-function 'company-semantic-summary-and-doc
-  "The function turning a semantic tag into doc information."
-  :type 'function)
-
-(defcustom company-semantic-begin-after-member-access t
-  "When non-nil, automatic completion will start whenever the current
-symbol is preceded by \".\", \"->\" or \"::\", ignoring
-`company-minimum-prefix-length'.
-
-If `company-begin-commands' is a list, it should include `c-electric-lt-gt'
-and `c-electric-colon', for automatic completion right after \">\" and
-\":\"."
-  :type 'boolean)
-
-(defcustom company-semantic-insert-arguments t
-  "When non-nil, insert function arguments as a template after completion."
-  :type 'boolean
-  :package-version '(company . "0.9.0"))
-
-(defvar company-semantic-modes '(c-mode c++-mode jde-mode java-mode))
-
-(defvar-local company-semantic--current-tags nil
-  "Tags for the current context.")
-
-(defun company-semantic-documentation-for-tag (tag)
-  (when (semantic-tag-buffer tag)
-    ;; When TAG's buffer is unknown, the function below raises an error.
-    (semantic-documentation-for-tag tag)))
-
-(defun company-semantic-doc-or-summary (tag)
-  (or (company-semantic-documentation-for-tag tag)
-      (and (require 'semantic-idle nil t)
-           (require 'semantic/idle nil t)
-           (funcall semantic-idle-summary-function tag nil t))))
-
-(defun company-semantic-summary-and-doc (tag)
-  (let ((doc (company-semantic-documentation-for-tag tag))
-        (summary (funcall semantic-idle-summary-function tag nil t)))
-    (and (stringp doc)
-         (string-match "\n*\\(.*\\)$" doc)
-         (setq doc (match-string 1 doc)))
-    (concat summary
-            (when doc
-                  (if (< (+ (length doc) (length summary) 4) (window-width))
-                      " -- "
-                    "\n"))
-            doc)))
-
-(defun company-semantic-doc-buffer (tag)
-  (let ((doc (company-semantic-documentation-for-tag tag)))
-    (when doc
-      (company-doc-buffer
-       (concat (funcall semantic-idle-summary-function tag nil t)
-               "\n"
-               doc)))))
-
-(defsubst company-semantic-completions (prefix)
-  (ignore-errors
-    (let ((completion-ignore-case nil)
-          (context (semantic-analyze-current-context)))
-      (setq company-semantic--current-tags
-            (semantic-analyze-possible-completions context 'no-unique))
-      (all-completions prefix company-semantic--current-tags))))
-
-(defun company-semantic-completions-raw (prefix)
-  (setq company-semantic--current-tags nil)
-  (dolist (tag (semantic-analyze-find-tags-by-prefix prefix))
-    (unless (eq (semantic-tag-class tag) 'include)
-      (push tag company-semantic--current-tags)))
-  (delete "" (mapcar 'semantic-tag-name company-semantic--current-tags)))
-
-(defun company-semantic-annotation (argument tags)
-  (let* ((tag (assq argument tags))
-         (kind (when tag (elt tag 1))))
-    (cl-case kind
-      (function (let* ((prototype (semantic-format-tag-prototype tag nil nil))
-                       (par-pos (string-match "(" prototype)))
-                  (when par-pos (substring prototype par-pos)))))))
-
-(defun company-semantic--prefix ()
-  (if company-semantic-begin-after-member-access
-      (company-grab-symbol-cons "\\.\\|->\\|::" 2)
-    (company-grab-symbol)))
-
-;;;###autoload
-(defun company-semantic (command &optional arg &rest ignored)
-  "`company-mode' completion backend using CEDET Semantic."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-semantic))
-    (prefix (and (featurep 'semantic)
-                 (semantic-active-p)
-                 (memq major-mode company-semantic-modes)
-                 (not (company-in-string-or-comment))
-                 (or (company-semantic--prefix) 'stop)))
-    (candidates (if (and (equal arg "")
-                         (not (looking-back "->\\|\\.\\|::" (- (point) 2))))
-                    (company-semantic-completions-raw arg)
-                  (company-semantic-completions arg)))
-    (meta (funcall company-semantic-metadata-function
-                   (assoc arg company-semantic--current-tags)))
-    (annotation (company-semantic-annotation arg
-                                             company-semantic--current-tags))
-    (doc-buffer (company-semantic-doc-buffer
-                 (assoc arg company-semantic--current-tags)))
-    ;; Because "" is an empty context and doesn't return local variables.
-    (no-cache (equal arg ""))
-    (duplicates t)
-    (location (let ((tag (assoc arg company-semantic--current-tags)))
-                (when (buffer-live-p (semantic-tag-buffer tag))
-                  (cons (semantic-tag-buffer tag)
-                        (semantic-tag-start tag)))))
-    (post-completion (let ((anno (company-semantic-annotation
-                                  arg company-semantic--current-tags)))
-                       (when (and company-semantic-insert-arguments anno)
-                         (insert anno)
-                         (company-template-c-like-templatify (concat arg 
anno)))
-                       ))))
-
-(provide 'company-semantic)
-;;; company-semantic.el ends here
diff --git a/packages/company/company-template.el 
b/packages/company/company-template.el
deleted file mode 100644
index 4cd9292..0000000
--- a/packages/company/company-template.el
+++ /dev/null
@@ -1,272 +0,0 @@
-;;; company-template.el --- utility library for template expansion
-
-;; Copyright (C) 2009, 2010, 2014-2017 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'cl-lib)
-
-(defface company-template-field
-  '((((background dark)) (:background "yellow" :foreground "black"))
-    (((background light)) (:background "orange" :foreground "black")))
-  "Face used for editable text in template fields."
-  :group 'company-faces)
-
-(defvar company-template-forward-field-item
-  '(menu-item "" company-template-forward-field
-              :filter company-template--keymap-filter))
-
-(defvar company-template-nav-map
-  (let ((keymap (make-sparse-keymap)))
-    (define-key keymap [tab] company-template-forward-field-item)
-    (define-key keymap (kbd "TAB") company-template-forward-field-item)
-    keymap))
-
-(defvar company-template-clear-field-item
-  '(menu-item "" company-template-clear-field
-              :filter company-template--keymap-filter))
-
-(defvar company-template-field-map
-  (let ((keymap (make-sparse-keymap)))
-    (set-keymap-parent keymap company-template-nav-map)
-    (define-key keymap (kbd "C-d") company-template-clear-field-item)
-    keymap))
-
-(defvar-local company-template--buffer-templates nil)
-
-;; interactive 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-templates-at (pos)
-  (let (os)
-    (dolist (o (overlays-at pos))
-      ;; FIXME: Always return the whole list of templates?
-      ;; We remove templates not at point after every command.
-      (when (memq o company-template--buffer-templates)
-        (push o os)))
-    os))
-
-(defun company-template-move-to-first (templ)
-  (interactive)
-  (goto-char (overlay-start templ))
-  (company-template-forward-field))
-
-(defun company-template-forward-field ()
-  (interactive)
-  (let ((start (point))
-        (next-field-start (company-template-find-next-field)))
-    (push-mark)
-    (goto-char next-field-start)
-    (company-template-remove-field (company-template-field-at start))))
-
-(defun company-template-clear-field ()
-  "Clear the field at point."
-  (interactive)
-  (let ((ovl (company-template-field-at (point))))
-    (when ovl
-      (company-template-remove-field ovl t)
-      (let ((after-clear-fn
-             (overlay-get ovl 'company-template-after-clear)))
-        (when (functionp after-clear-fn)
-          (funcall after-clear-fn))))))
-
-(defun company-template--keymap-filter (cmd)
-  (unless (run-hook-with-args-until-success 'yas-keymap-disable-hook)
-    cmd))
-
-(defun company-template--after-clear-c-like-field ()
-  "Function that can be called after deleting a field of a c-like template.
-For c-like templates it is set as `after-post-fn' property on fields in
-`company-template-add-field'.  If there is a next field, delete everything
-from point to it.  If there is no field after point, remove preceding comma
-if present."
-  (let* ((pos (point))
-         (next-field-start (company-template-find-next-field))
-         (last-field-p (not (company-template-field-at next-field-start))))
-    (cond ((and (not last-field-p)
-                (< pos next-field-start)
-                (string-match "^[ ]*,+[ ]*$" (buffer-substring-no-properties
-                                              pos next-field-start)))
-           (delete-region pos next-field-start))
-          ((and last-field-p
-                (looking-back ",+[ ]*" (line-beginning-position)))
-           (delete-region (match-beginning 0) pos)))))
-
-(defun company-template-find-next-field ()
-  (let* ((start (point))
-         (templates (company-template-templates-at start))
-         (minimum (apply 'max (mapcar 'overlay-end templates)))
-         (fields (cl-loop for templ in templates
-                          append (overlay-get templ 
'company-template-fields))))
-    (dolist (pos (mapcar 'overlay-start fields) minimum)
-      (and pos
-           (> pos start)
-           (< pos minimum)
-           (setq minimum pos)))))
-
-(defun company-template-field-at (&optional point)
-  (cl-loop for ovl in (overlays-at (or point (point)))
-           when (overlay-get ovl 'company-template-parent)
-           return ovl))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-declare-template (beg end)
-  (let ((ov (make-overlay beg end)))
-    ;; (overlay-put ov 'face 'highlight)
-    (overlay-put ov 'keymap company-template-nav-map)
-    (overlay-put ov 'priority 101)
-    (overlay-put ov 'evaporate t)
-    (push ov company-template--buffer-templates)
-    (add-hook 'post-command-hook 'company-template-post-command nil t)
-    ov))
-
-(defun company-template-remove-template (templ)
-  (mapc 'company-template-remove-field
-        (overlay-get templ 'company-template-fields))
-  (setq company-template--buffer-templates
-        (delq templ company-template--buffer-templates))
-  (delete-overlay templ))
-
-(defun company-template-add-field (templ beg end &optional display 
after-clear-fn)
-  "Add new field to template TEMPL spanning from BEG to END.
-When DISPLAY is non-nil, set the respective property on the overlay.
-Leave point at the end of the field.
-AFTER-CLEAR-FN is a function that can be used to apply custom behavior
-after deleting a field in `company-template-remove-field'."
-  (cl-assert templ)
-  (when (> end (overlay-end templ))
-    (move-overlay templ (overlay-start templ) end))
-  (let ((ov (make-overlay beg end))
-        (siblings (overlay-get templ 'company-template-fields)))
-    ;; (overlay-put ov 'evaporate t)
-    (overlay-put ov 'intangible t)
-    (overlay-put ov 'face 'company-template-field)
-    (when display
-      (overlay-put ov 'display display))
-    (overlay-put ov 'company-template-parent templ)
-    (overlay-put ov 'insert-in-front-hooks '(company-template-insert-hook))
-    (when after-clear-fn
-      (overlay-put ov 'company-template-after-clear after-clear-fn))
-    (overlay-put ov 'keymap company-template-field-map)
-    (overlay-put ov 'priority 101)
-    (push ov siblings)
-    (overlay-put templ 'company-template-fields siblings)))
-
-(defun company-template-remove-field (ovl &optional clear)
-  (when (overlayp ovl)
-    (when (overlay-buffer ovl)
-      (when clear
-        (delete-region (overlay-start ovl) (overlay-end ovl)))
-      (delete-overlay ovl))
-    (let* ((templ (overlay-get ovl 'company-template-parent))
-           (siblings (overlay-get templ 'company-template-fields)))
-      (setq siblings (delq ovl siblings))
-      (overlay-put templ 'company-template-fields siblings))))
-
-(defun company-template-clean-up (&optional pos)
-  "Clean up all templates that don't contain POS."
-  (let ((local-ovs (overlays-at (or pos (point)))))
-    (dolist (templ company-template--buffer-templates)
-      (unless (memq templ local-ovs)
-        (company-template-remove-template templ)))))
-
-;; hooks 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-insert-hook (ovl after-p &rest _ignore)
-  "Called when a snippet input prompt is modified."
-  (unless after-p
-    (company-template-remove-field ovl t)))
-
-(defun company-template-post-command ()
-  (company-template-clean-up)
-  (unless company-template--buffer-templates
-    (remove-hook 'post-command-hook 'company-template-post-command t)))
-
-;; common 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-c-like-templatify (call)
-  (let* ((end (point-marker))
-         (beg (- (point) (length call)))
-         (templ (company-template-declare-template beg end))
-         paren-open paren-close)
-    (with-syntax-table (make-syntax-table (syntax-table))
-      (modify-syntax-entry ?< "(")
-      (modify-syntax-entry ?> ")")
-      (when (search-backward ")" beg t)
-        (setq paren-close (point-marker))
-        (forward-char 1)
-        (delete-region (point) end)
-        (backward-sexp)
-        (forward-char 1)
-        (setq paren-open (point-marker)))
-      (when (search-backward ">" beg t)
-        (let ((angle-close (point-marker)))
-          (forward-char 1)
-          (backward-sexp)
-          (forward-char)
-          (company-template--c-like-args templ angle-close)))
-      (when (looking-back "\\((\\*)\\)(" (line-beginning-position))
-        (delete-region (match-beginning 1) (match-end 1)))
-      (when paren-open
-        (goto-char paren-open)
-        (company-template--c-like-args templ paren-close)))
-    (if (overlay-get templ 'company-template-fields)
-        (company-template-move-to-first templ)
-      (company-template-remove-template templ)
-      (goto-char end))))
-
-(defun company-template--c-like-args (templ end)
-  (let ((last-pos (point)))
-    (while (re-search-forward "\\([^,]+\\),?" end 'move)
-      (when (zerop (car (parse-partial-sexp last-pos (point))))
-        (company-template-add-field templ last-pos (match-end 1) nil
-                                    
#'company-template--after-clear-c-like-field)
-        (skip-chars-forward " ")
-        (setq last-pos (point))))))
-
-;; objc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-objc-templatify (selector)
-  (let* ((end (point-marker))
-         (beg (- (point) (length selector) 1))
-         (templ (company-template-declare-template beg end))
-         (cnt 0))
-    (save-excursion
-      (goto-char beg)
-      (catch 'stop
-        (while (search-forward ":" end t)
-          (if (looking-at "\\(([^)]*)\\) ?")
-              (company-template-add-field templ (point) (match-end 1))
-            ;; Not sure which conditions this case manifests under, but
-            ;; apparently it did before, when I wrote the first test for this
-            ;; function.  FIXME: Revisit it.
-            (company-template-add-field templ (point)
-                                        (progn
-                                          (insert (format "arg%d" cnt))
-                                          (point)))
-            (when (< (point) end)
-              (insert " "))
-            (cl-incf cnt))
-          (when (>= (point) end)
-            (throw 'stop t)))))
-    (company-template-move-to-first templ)))
-
-(provide 'company-template)
-;;; company-template.el ends here
diff --git a/packages/company/company-tempo.el 
b/packages/company/company-tempo.el
deleted file mode 100644
index fc8f227..0000000
--- a/packages/company/company-tempo.el
+++ /dev/null
@@ -1,71 +0,0 @@
-;;; company-tempo.el --- company-mode completion backend for tempo
-
-;; Copyright (C) 2009-2011, 2015  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'tempo)
-
-(defgroup company-tempo nil
-  "Tempo completion backend."
-  :group 'company)
-
-(defcustom company-tempo-expand nil
-  "Whether to expand a tempo tag after completion."
-  :type '(choice (const :tag "Off" nil)
-                 (const :tag "On" t)))
-
-(defsubst company-tempo-lookup (match)
-  (cdr (assoc match (tempo-build-collection))))
-
-(defun company-tempo-insert (match)
-  "Replace MATCH with the expanded tempo template."
-  (search-backward match)
-  (goto-char (match-beginning 0))
-  (replace-match "")
-  (call-interactively (company-tempo-lookup match)))
-
-(defsubst company-tempo-meta (match)
-  (let ((templ (company-tempo-lookup match))
-        doc)
-    (and templ
-         (setq doc (documentation templ t))
-         (car (split-string doc "\n" t)))))
-
-;;;###autoload
-(defun company-tempo (command &optional arg &rest ignored)
-  "`company-mode' completion backend for tempo."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-tempo))
-    (prefix (or (car (tempo-find-match-string tempo-match-finder)) ""))
-    (candidates (all-completions arg (tempo-build-collection)))
-    (meta (company-tempo-meta arg))
-    (post-completion (when company-tempo-expand (company-tempo-insert arg)))
-    (sorted t)))
-
-(provide 'company-tempo)
-;;; company-tempo.el ends here
diff --git a/packages/company/company-tests.el 
b/packages/company/company-tests.el
deleted file mode 100644
index 7859e93..0000000
--- a/packages/company/company-tests.el
+++ /dev/null
@@ -1,39 +0,0 @@
-;;; company-tests.el --- company-mode test helpers  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011, 2013-2016  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company)
-
-(defvar company-dir (file-name-directory (or load-file-name
-                                             buffer-file-name)))
-
-(defun company--column (&optional pos)
-  (car (company--col-row pos)))
-
-(defun company-call (name &rest args)
-  (let* ((maybe (intern (format "company-%s" name)))
-         (command (if (fboundp maybe) maybe name)))
-    (let ((this-command command))
-      (run-hooks 'pre-command-hook))
-    (apply command args)
-    (let ((this-command command))
-      (run-hooks 'post-command-hook))))
-
-(provide 'company-tests)
diff --git a/packages/company/company-tng.el b/packages/company/company-tng.el
deleted file mode 100644
index bd325c7..0000000
--- a/packages/company/company-tng.el
+++ /dev/null
@@ -1,197 +0,0 @@
-;;; company-tng.el --- company-mode configuration for single-button interaction
-
-;; Copyright (C) 2017-2020  Free Software Foundation, Inc.
-
-;; Author: Nikita Leshenko
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; company-tng (Tab and Go) allows you to perform completion using just TAB.
-;; Pressing it will both select the next completion candidate in the list and
-;; insert it into the buffer (or make it look like it's inserted, in fact).
-;;
-;; It cycles the candidates like `yank-pop' or `dabbrev-expand' or Vim:
-;; Pressing TAB selects the first item in the completion menu and inserts it in
-;; the buffer. Pressing TAB again selects the second item and replaces the
-;; "inserted" item with the second one. This can continue as long as the user
-;; wishes to cycle through the menu. You can also press S-TAB to select the
-;; previous candidate, of course.
-;;
-;; The benefits are that you only have to use one shortcut key and there is no
-;; need to confirm the entry.
-;;
-;; Usage:
-;;
-;; To apply the default configuration for company-tng call
-;; `company-tng-configure-default' from your init script.
-;;
-;; You can also configure company-tng manually:
-;;
-;; Add `company-tng-frontend' to `company-frontends':
-;;
-;;   (add-to-list 'company-frontends 'company-tng-frontend)
-;;
-;; We recommend to bind TAB to `company-select-next', S-TAB to
-;; `company-select-previous', and unbind RET and other now-unnecessary
-;; keys from `company-active-map':
-;;
-;;   (define-key company-active-map (kbd "TAB") 'company-select-next)
-;;   (define-key company-active-map (kbd "<backtab>") 'company-select-previous)
-;;   (define-key company-active-map (kbd "RET") nil)
-;;
-;; Note that it's not necessary to rebind keys to use this frontend,
-;; you can use the arrow keys or M-n/M-p to select and insert
-;; candidates. You also need to decide which keys to unbind, depending
-;; on whether you want them to do the Company action or the default
-;; Emacs action (for example C-s or C-w).
-;;
-;; We recommend to disable `company-require-match' to allow free typing at any
-;; point.
-;;
-;; By default, company-tng doesn't work well with backends that insert function
-;; arguments into the buffer and (optionally) expand them into a snippet
-;; (usually performed in `post-completion' using yasnippet or 
company-template).
-;; In company-tng, completion candidates
-;; are inserted into the buffer as the user selects them and the completion is
-;; finished implicitly when the user continues typing after selecting a
-;; candidate. Modifying the buffer (by expanding a snippet) when the user
-;; continues typing would be surprising and undesirable, since the candidate 
was
-;; already inserted into the buffer.
-;;
-;; For this reason `company-tng-configure-default' disables arguments insertion
-;; for a number of popular backends.  If the backend you are using is not among
-;; them, you might have to configure it not to do that yourself.
-;;
-;; YASnippet and company-tng both use TAB, which causes conflicts. The
-;; recommended way to use YASnippet with company-tng is to choose a different
-;; key for expanding a snippet and moving to the next snippet field:
-;;
-;;   (define-key yas-minor-mode-map "\C-j" 'yas-expand)
-;;   (define-key yas-keymap "\C-j" 'yas-next-field-or-maybe-expand)
-;;   (dolist (keymap (list yas-minor-mode-map yas-keymap))
-;;     (define-key keymap (kbd "TAB") nil)
-;;     (define-key keymap [(tab)] nil))
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defvar-local company-tng--overlay nil)
-
-;;;###autoload
-(defun company-tng-frontend (command)
-  "When the user changes the selection at least once, this
-frontend will display the candidate in the buffer as if it's
-already there and any key outside of `company-active-map' will
-confirm the selection and finish the completion."
-  (cl-case command
-    (show
-     (let ((ov (make-overlay (point) (point))))
-       (setq company-tng--overlay ov)
-       (overlay-put ov 'priority 2))
-     (advice-add 'company-select-next :before-until 
'company-tng--allow-unselected)
-     (advice-add 'company-fill-propertize :filter-args 
'company-tng--adjust-tooltip-highlight))
-    (update
-     (let ((ov company-tng--overlay)
-           (selected (nth company-selection company-candidates))
-           (prefix (length company-prefix)))
-       (move-overlay ov (- (point) prefix) (point))
-       (overlay-put ov
-                    (if (= prefix 0) 'after-string 'display)
-                    (and company-selection-changed selected))))
-    (hide
-     (when company-tng--overlay
-       (delete-overlay company-tng--overlay)
-       (kill-local-variable 'company-tng--overlay))
-     (advice-remove 'company-select-next 'company-tng--allow-unselected)
-     (advice-remove 'company-fill-propertize 
'company-tng--adjust-tooltip-highlight))
-    (pre-command
-     (when (and company-selection-changed
-                (not (company--company-command-p (this-command-keys))))
-       (company--unread-this-command-keys)
-       (setq this-command 'company-complete-selection)))))
-
-(defvar company-clang-insert-arguments)
-(defvar company-semantic-insert-arguments)
-(defvar company-rtags-insert-arguments)
-(defvar lsp-enable-snippet)
-
-;;;###autoload
-(defun company-tng-configure-default ()
-  "Applies the default configuration to enable company-tng."
-  (setq company-require-match nil)
-  (setq company-frontends '(company-tng-frontend
-                            company-pseudo-tooltip-frontend
-                            company-echo-metadata-frontend))
-  (setq company-clang-insert-arguments nil
-        company-semantic-insert-arguments nil
-        company-rtags-insert-arguments nil
-        lsp-enable-snippet nil)
-  (advice-add #'eglot--snippet-expansion-fn :override #'ignore)
-  (let ((keymap company-active-map))
-    (define-key keymap [return] nil)
-    (define-key keymap (kbd "RET") nil)
-    (define-key keymap [tab] 'company-select-next)
-    (define-key keymap (kbd "TAB") 'company-select-next)
-    (define-key keymap [backtab] 'company-select-previous)
-    (define-key keymap (kbd "S-TAB") 'company-select-previous)))
-
-(defun company-tng--allow-unselected (&optional arg)
-  "Advice `company-select-next' to allow for an 'unselected'
-state. Unselected means that no user interaction took place on the
-completion candidates and it's marked by setting
-`company-selection-changed' to nil. This advice will call the underlying
-`company-select-next' unless we need to transition to or from an unselected
-state.
-
-Possible state transitions:
-- (arg > 0) unselected -> first candidate selected
-- (arg < 0) first candidate selected -> unselected
-- (arg < 0 wrap-round) unselected -> last candidate selected
-- (arg < 0 no wrap-round) unselected -> unselected
-
-There is no need to advice `company-select-previous' because it calls
-`company-select-next' internally."
-  (cond
-   ;; Selecting next
-   ((or (not arg) (> arg 0))
-    (unless company-selection-changed
-      (company-set-selection (1- (or arg 1)) 'force-update)
-      t))
-   ;; Selecting previous
-   ((< arg 0)
-    (when (and company-selection-changed
-               (< (+ company-selection arg) 0))
-      (company-set-selection 0)
-      (setq company-selection-changed nil)
-      (company-call-frontends 'update)
-      t)
-    )))
-
-(defun company-tng--adjust-tooltip-highlight (args)
-  "Prevent the tooltip from highlighting the current selection if it wasn't
-made explicitly (i.e. `company-selection-changed' is true)"
-  (unless company-selection-changed
-    ;; The 4th arg of `company-fill-propertize' is selected
-    (setf (nth 3 args) nil))
-  args)
-
-(provide 'company-tng)
-;;; company-tng.el ends here
diff --git a/packages/company/company-xcode.el 
b/packages/company/company-xcode.el
deleted file mode 100644
index ea89bcb..0000000
--- a/packages/company/company-xcode.el
+++ /dev/null
@@ -1,123 +0,0 @@
-;;; company-xcode.el --- company-mode completion backend for Xcode projects
-
-;; Copyright (C) 2009-2011, 2014  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-xcode nil
-  "Completion backend for Xcode projects."
-  :group 'company)
-
-(defcustom company-xcode-xcodeindex-executable (executable-find "xcodeindex")
-  "Location of xcodeindex executable."
-  :type 'file)
-
-(defvar company-xcode-tags nil)
-
-(defun company-xcode-reset ()
-  "Reset the cached tags."
-  (interactive)
-  (setq company-xcode-tags nil))
-
-(defcustom company-xcode-types
-  '("Class" "Constant" "Enum" "Macro" "Modeled Class" "Structure"
-    "Type" "Union" "Function")
-  "The types of symbols offered by `company-xcode'.
-No context-enabled completion is available.  Types like methods will be
-offered regardless of whether the class supports them.  The defaults should be
-valid in most contexts."
-  :set (lambda (variable value)
-         (set variable value)
-         (company-xcode-reset))
-  :type '(set (const "Category") (const "Class") (const "Class Method")
-              (const "Class Variable") (const "Constant") (const "Enum")
-              (const "Field") (const "Instance Method")
-              (const "Instance Variable") (const "Macro")
-              (const "Modeled Class") (const "Modeled Method")
-              (const "Modeled Property") (const "Property") (const "Protocol")
-              (const "Structure") (const "Type") (const "Union")
-              (const "Variable") (const "Function")))
-
-(defvar-local company-xcode-project 'unknown)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-xcode-fetch (project-bundle)
-  (setq project-bundle (directory-file-name project-bundle))
-  (message "Retrieving dump from %s..." project-bundle)
-  (with-temp-buffer
-    (let ((default-directory (file-name-directory project-bundle)))
-      (call-process company-xcode-xcodeindex-executable nil (current-buffer)
-                    nil "dump" "-project"
-                    (file-name-nondirectory project-bundle) "-quiet")
-      (goto-char (point-min))
-      (let ((regexp (concat "^\\([^\t\n]*\\)\t[^\t\n]*\t"
-                            (regexp-opt company-xcode-types)
-                            "\t[^\t\n]*\t[^\t\n]*"))
-            candidates)
-        (while (re-search-forward regexp nil t)
-          (cl-pushnew (match-string 1) candidates :test #'equal))
-        (message "Retrieving dump from %s...done" project-bundle)
-        candidates))))
-
-(defun company-xcode-find-project ()
-  (let ((dir (if buffer-file-name
-                 (file-name-directory buffer-file-name)
-               (expand-file-name default-directory)))
-        (prev-dir nil)
-        file)
-    (while (not (or file (equal dir prev-dir)))
-      (setq file (car (directory-files dir t ".xcodeproj\\'" t))
-            prev-dir dir
-            dir (file-name-directory (directory-file-name dir))))
-    file))
-
-(defun company-xcode-tags ()
-  (when (eq company-xcode-project 'unknown)
-    (setq company-xcode-project (company-xcode-find-project)))
-  (when company-xcode-project
-    (cdr (or (assoc company-xcode-project company-xcode-tags)
-             (car (push (cons company-xcode-project
-                              (company-xcode-fetch company-xcode-project))
-                        company-xcode-tags))))))
-;;;###autoload
-(defun company-xcode (command &optional arg &rest ignored)
-  "`company-mode' completion backend for Xcode projects."
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-xcode))
-    (prefix (and company-xcode-xcodeindex-executable
-                 (company-xcode-tags)
-                 (not (company-in-string-or-comment))
-                 (or (company-grab-symbol) 'stop)))
-    (candidates (let ((completion-ignore-case nil))
-                  (company-xcode-tags)
-                  (all-completions arg (company-xcode-tags))))))
-
-
-(provide 'company-xcode)
-;;; company-xcode.el ends here
diff --git a/packages/company/company-yasnippet.el 
b/packages/company/company-yasnippet.el
deleted file mode 100644
index 197ae78..0000000
--- a/packages/company/company-yasnippet.el
+++ /dev/null
@@ -1,176 +0,0 @@
-;;; company-yasnippet.el --- company-mode completion backend for Yasnippet
-
-;; Copyright (C) 2014, 2015, 2020  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(declare-function yas--table-hash "yasnippet")
-(declare-function yas--get-snippet-tables "yasnippet")
-(declare-function yas-expand-snippet "yasnippet")
-(declare-function yas--template-content "yasnippet")
-(declare-function yas--template-expand-env "yasnippet")
-(declare-function yas--warning "yasnippet")
-
-(defvar company-yasnippet-annotation-fn
-  (lambda (name)
-    (concat
-     (unless company-tooltip-align-annotations " -> ")
-     name))
-  "Function to format completion annotation.
-It has to accept one argument: the snippet's name.")
-
-(defun company-yasnippet--key-prefixes ()
-  ;; Mostly copied from `yas--templates-for-key-at-point'.
-  (defvar yas-key-syntaxes)
-  (save-excursion
-    (let ((original (point))
-          (methods yas-key-syntaxes)
-          prefixes
-          method)
-      (while methods
-        (unless (eq method (car methods))
-          (goto-char original))
-        (setq method (car methods))
-        (cond ((stringp method)
-               (skip-syntax-backward method)
-               (setq methods (cdr methods)))
-              ((functionp method)
-               (unless (eq (funcall method original)
-                           'again)
-                 (setq methods (cdr methods))))
-              (t
-               (setq methods (cdr methods))
-               (yas--warning "Invalid element `%s' in `yas-key-syntaxes'" 
method)))
-        (let ((prefix (buffer-substring-no-properties (point) original)))
-          (unless (equal prefix (car prefixes))
-            (push prefix prefixes))))
-      prefixes)))
-
-(defun company-yasnippet--candidates (prefix)
-  ;; Process the prefixes in reverse: unlike Yasnippet, we look for prefix
-  ;; matches, so the longest prefix with any matches should be the most useful.
-  (cl-loop with tables = (yas--get-snippet-tables)
-           for key-prefix in (company-yasnippet--key-prefixes)
-           ;; Only consider keys at least as long as the symbol at point.
-           when (>= (length key-prefix) (length prefix))
-           thereis (company-yasnippet--completions-for-prefix prefix
-                                                              key-prefix
-                                                              tables)))
-
-(defun company-yasnippet--completions-for-prefix (prefix key-prefix tables)
-  (cl-mapcan
-   (lambda (table)
-     (let ((keyhash (yas--table-hash table))
-           res)
-       (when keyhash
-         (maphash
-          (lambda (key value)
-            (when (and (stringp key)
-                       (string-prefix-p key-prefix key))
-              (maphash
-               (lambda (name template)
-                 (push
-                  (propertize key
-                              'yas-annotation name
-                              'yas-template template
-                              'yas-prefix-offset (- (length key-prefix)
-                                                    (length prefix)))
-                  res))
-               value)))
-          keyhash))
-       res))
-   tables))
-
-(defun company-yasnippet--doc (arg)
-  (let ((template (get-text-property 0 'yas-template arg))
-        (mode major-mode)
-        (file-name (buffer-file-name)))
-    (with-current-buffer (company-doc-buffer)
-      (let ((buffer-file-name file-name))
-        (yas-minor-mode 1)
-        (condition-case error
-            (yas-expand-snippet (yas--template-content template))
-          (error
-           (message "%s"  (error-message-string error))))
-        (delay-mode-hooks
-          (let ((inhibit-message t))
-            (if (eq mode 'web-mode)
-                (progn
-                  (setq mode 'html-mode)
-                  (funcall mode))
-              (funcall mode)))
-          (ignore-errors (font-lock-ensure))))
-      (current-buffer))))
-
-;;;###autoload
-(defun company-yasnippet (command &optional arg &rest ignore)
-  "`company-mode' backend for `yasnippet'.
-
-This backend should be used with care, because as long as there are
-snippets defined for the current major mode, this backend will always
-shadow backends that come after it.  Recommended usages:
-
-* In a buffer-local value of `company-backends', grouped with a backend or
-  several that provide actual text completions.
-
-  (add-hook \\='js-mode-hook
-            (lambda ()
-              (set (make-local-variable \\='company-backends)
-                   \\='((company-dabbrev-code company-yasnippet)))))
-
-* After keyword `:with', grouped with other backends.
-
-  (push \\='(company-semantic :with company-yasnippet) company-backends)
-
-* Not in `company-backends', just bound to a key.
-
-  (global-set-key (kbd \"C-c y\") \\='company-yasnippet)
-"
-  (interactive (list 'interactive))
-  (cl-case command
-    (interactive (company-begin-backend 'company-yasnippet))
-    (prefix
-     ;; Should probably use `yas--current-key', but that's bound to be slower.
-     ;; How many trigger keys start with non-symbol characters anyway?
-     (and (bound-and-true-p yas-minor-mode)
-          (company-grab-symbol)))
-    (annotation
-     (funcall company-yasnippet-annotation-fn
-              (get-text-property 0 'yas-annotation arg)))
-    (candidates (company-yasnippet--candidates arg))
-    (doc-buffer (company-yasnippet--doc arg))
-    (no-cache t)
-    (post-completion
-     (let ((template (get-text-property 0 'yas-template arg))
-           (prefix-offset (get-text-property 0 'yas-prefix-offset arg)))
-       (yas-expand-snippet (yas--template-content template)
-                           (- (point) (length arg) prefix-offset)
-                           (point)
-                           (yas--template-expand-env template))))))
-
-(provide 'company-yasnippet)
-;;; company-yasnippet.el ends here
diff --git a/packages/company/company.el b/packages/company/company.el
deleted file mode 100644
index b96983b..0000000
--- a/packages/company/company.el
+++ /dev/null
@@ -1,3247 +0,0 @@
-;;; company.el --- Modular text completion framework  -*- lexical-binding: t 
-*-
-
-;; Copyright (C) 2009-2020  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-;; Maintainer: Dmitry Gutov <dgutov@yandex.ru>
-;; URL: http://company-mode.github.io/
-;; Version: 0.9.13
-;; Keywords: abbrev, convenience, matching
-;; Package-Requires: ((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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; Company is a modular completion framework.  Modules for retrieving 
completion
-;; candidates are called backends, modules for displaying them are frontends.
-;;
-;; Company comes with many backends, e.g. `company-etags'.  These are
-;; distributed in separate files and can be used individually.
-;;
-;; Enable `company-mode' in all buffers with M-x global-company-mode.  For
-;; further information look at the documentation for `company-mode' (C-h f
-;; company-mode RET).
-;;
-;; If you want to start a specific backend, call it interactively or use
-;; `company-begin-backend'.  For example:
-;; M-x company-abbrev will prompt for and insert an abbrev.
-;;
-;; To write your own backend, look at the documentation for `company-backends'.
-;; Here is a simple example completing "foo":
-;;
-;; (defun company-my-backend (command &optional arg &rest ignored)
-;;   (interactive (list 'interactive))
-;;   (pcase command
-;;     (`interactive (company-begin-backend 'company-my-backend))
-;;     (`prefix (company-grab-symbol))
-;;     (`candidates (list "foobar" "foobaz" "foobarbaz"))
-;;     (`meta (format "This value is named %s" arg))))
-;;
-;; Sometimes it is a good idea to mix several backends together, for example to
-;; enrich gtags with dabbrev-code results (to emulate local variables).  To do
-;; this, add a list with both backends as an element in `company-backends'.
-;;
-;;; Change Log:
-;;
-;; See NEWS.md in the repository.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'newcomment)
-(require 'pcase)
-
-;;; Compatibility
-(eval-and-compile
-  ;; Defined in Emacs 24.4
-  (unless (fboundp 'string-suffix-p)
-    (defun string-suffix-p (suffix string  &optional ignore-case)
-      "Return non-nil if SUFFIX is a suffix of STRING.
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences."
-      (let ((start-pos (- (length string) (length suffix))))
-        (and (>= start-pos 0)
-             (eq t (compare-strings suffix nil nil
-                                    string start-pos nil ignore-case)))))))
-
-(defgroup company nil
-  "Extensible inline text completion mechanism."
-  :group 'abbrev
-  :group 'convenience
-  :group 'matching)
-
-(defgroup company-faces nil
-  "Faces used by Company."
-  :group 'company
-  :group 'faces)
-
-(defface company-tooltip
-  '((default :foreground "black")
-    (((class color) (min-colors 88) (background light))
-     (:background "cornsilk"))
-    (((class color) (min-colors 88) (background dark))
-     (:background "yellow"))
-    (t
-     (:background "yellow")))
-  "Face used for the tooltip.")
-
-(defface company-tooltip-selection
-  '((((class color) (min-colors 88) (background light))
-     (:background "light blue"))
-    (((class color) (min-colors 88) (background dark))
-     (:background "orange1"))
-    (t (:background "green")))
-  "Face used for the selection in the tooltip.")
-
-(defface company-tooltip-search
-  '((default :inherit highlight))
-  "Face used for the search string in the tooltip.")
-
-(defface company-tooltip-search-selection
-  '((default :inherit highlight))
-  "Face used for the search string inside the selection in the tooltip.")
-
-(defface company-tooltip-mouse
-  '((default :inherit highlight))
-  "Face used for the tooltip item under the mouse.")
-
-(defface company-tooltip-common
-  '((((background light))
-     :foreground "darkred")
-    (((background dark))
-     :foreground "red"))
-  "Face used for the common completion in the tooltip.")
-
-(defface company-tooltip-common-selection
-  '((default :inherit company-tooltip-common))
-  "Face used for the selected common completion in the tooltip.")
-
-(defface company-tooltip-annotation
-  '((((background light))
-     :foreground "firebrick4")
-    (((background dark))
-     :foreground "red4"))
-  "Face used for the completion annotation in the tooltip.")
-
-(defface company-tooltip-annotation-selection
-  '((default :inherit company-tooltip-annotation))
-  "Face used for the selected completion annotation in the tooltip.")
-
-(defface company-scrollbar-fg
-  '((((background light))
-     :background "darkred")
-    (((background dark))
-     :background "red"))
-  "Face used for the tooltip scrollbar thumb.")
-
-(defface company-scrollbar-bg
-  '((((background light))
-     :background "wheat")
-    (((background dark))
-     :background "gold"))
-  "Face used for the tooltip scrollbar background.")
-
-(defface company-preview
-  '((((background light))
-     :inherit (company-tooltip-selection company-tooltip))
-    (((background dark))
-     :background "blue4"
-     :foreground "wheat"))
-  "Face used for the completion preview.")
-
-(defface company-preview-common
-  '((((background light))
-     :inherit company-tooltip-common-selection)
-    (((background dark))
-     :inherit company-preview
-     :foreground "red"))
-  "Face used for the common part of the completion preview.")
-
-(defface company-preview-search
-  '((((background light))
-     :inherit company-tooltip-common-selection)
-    (((background dark))
-     :inherit company-preview
-     :background "blue1"))
-  "Face used for the search string in the completion preview.")
-
-(defface company-echo nil
-  "Face used for completions in the echo area.")
-
-(defface company-echo-common
-  '((((background dark)) (:foreground "firebrick1"))
-    (((background light)) (:background "firebrick4")))
-  "Face used for the common part of completions in the echo area.")
-
-;; Too lazy to re-add :group to all defcustoms down below.
-(setcdr (assoc load-file-name custom-current-group-alist)
-        'company)
-
-(defun company-frontends-set (variable value)
-  ;; Uniquify.
-  (let ((value (delete-dups (copy-sequence value))))
-    (and (or (and (memq 'company-pseudo-tooltip-unless-just-one-frontend value)
-                  (memq 'company-pseudo-tooltip-frontend value))
-             (and (memq 
'company-pseudo-tooltip-unless-just-one-frontend-with-delay value)
-                  (memq 'company-pseudo-tooltip-frontend value))
-             (and (memq 
'company-pseudo-tooltip-unless-just-one-frontend-with-delay value)
-                  (memq 'company-pseudo-tooltip-unless-just-one-frontend 
value)))
-         (user-error "Pseudo tooltip frontend cannot be used more than once"))
-    (and (or (and (memq 'company-preview-if-just-one-frontend value)
-                  (memq 'company-preview-frontend value))
-             (and (memq 'company-preview-if-just-one-frontend value)
-                  (memq 'company-preview-common-frontend value))
-             (and (memq 'company-preview-frontend value)
-                  (memq 'company-preview-common-frontend value))
-             )
-         (user-error "Preview frontend cannot be used twice"))
-    (and (memq 'company-echo value)
-         (memq 'company-echo-metadata-frontend value)
-         (user-error "Echo area cannot be used twice"))
-    ;; Preview must come last.
-    (dolist (f '(company-preview-if-just-one-frontend company-preview-frontend 
company-preview-common-frontend))
-      (when (cdr (memq f value))
-        (setq value (append (delq f value) (list f)))))
-    (set variable value)))
-
-(defcustom company-frontends '(company-pseudo-tooltip-unless-just-one-frontend
-                               company-preview-if-just-one-frontend
-                               company-echo-metadata-frontend)
-  "The list of active frontends (visualizations).
-Each frontend is a function that takes one argument.  It is called with
-one of the following arguments:
-
-`show': When the visualization should start.
-
-`hide': When the visualization should end.
-
-`update': When the data has been updated.
-
-`pre-command': Before every command that is executed while the
-visualization is active.
-
-`post-command': After every command that is executed while the
-visualization is active.
-
-The visualized data is stored in `company-prefix', `company-candidates',
-`company-common', `company-selection', `company-point' and
-`company-search-string'."
-  :set 'company-frontends-set
-  :type '(repeat (choice (const :tag "echo" company-echo-frontend)
-                         (const :tag "echo, strip common"
-                                company-echo-strip-common-frontend)
-                         (const :tag "show echo meta-data in echo"
-                                company-echo-metadata-frontend)
-                         (const :tag "pseudo tooltip"
-                                company-pseudo-tooltip-frontend)
-                         (const :tag "pseudo tooltip, multiple only"
-                                
company-pseudo-tooltip-unless-just-one-frontend)
-                         (const :tag "pseudo tooltip, multiple only, delayed"
-                                
company-pseudo-tooltip-unless-just-one-frontend-with-delay)
-                         (const :tag "preview" company-preview-frontend)
-                         (const :tag "preview, unique only"
-                                company-preview-if-just-one-frontend)
-                         (const :tag "preview, common"
-                                company-preview-common-frontend)
-                         (function :tag "custom function" nil))))
-
-(defcustom company-tooltip-limit 10
-  "The maximum number of candidates in the tooltip."
-  :type 'integer)
-
-(defcustom company-tooltip-minimum 6
-  "The minimum height of the tooltip.
-If this many lines are not available, prefer to display the tooltip above."
-  :type 'integer)
-
-(defcustom company-tooltip-minimum-width 0
-  "The minimum width of the tooltip's inner area.
-This doesn't include the margins and the scroll bar."
-  :type 'integer
-  :package-version '(company . "0.8.0"))
-
-(defcustom company-tooltip-maximum-width most-positive-fixnum
-  "The maximum width of the tooltip's inner area.
-This doesn't include the margins and the scroll bar."
-  :type 'integer
-  :package-version '(company . "0.9.5"))
-
-(defcustom company-tooltip-margin 1
-  "Width of margin columns to show around the toolip."
-  :type 'integer)
-
-(defcustom company-tooltip-offset-display 'scrollbar
-  "Method using which the tooltip displays scrolling position.
-`scrollbar' means draw a scrollbar to the right of the items.
-`lines' means wrap items in lines with \"before\" and \"after\" counters."
-  :type '(choice (const :tag "Scrollbar" scrollbar)
-                 (const :tag "Two lines" lines)))
-
-(defcustom company-tooltip-align-annotations nil
-  "When non-nil, align annotations to the right tooltip border."
-  :type 'boolean
-  :package-version '(company . "0.7.1"))
-
-(defcustom company-tooltip-flip-when-above nil
-  "Whether to flip the tooltip when it's above the current line."
-  :type 'boolean
-  :package-version '(company . "0.8.1"))
-
-(defvar company-safe-backends
-  '((company-abbrev . "Abbrev")
-    (company-bbdb . "BBDB")
-    (company-capf . "completion-at-point-functions")
-    (company-clang . "Clang")
-    (company-cmake . "CMake")
-    (company-css . "CSS")
-    (company-dabbrev . "dabbrev for plain text")
-    (company-dabbrev-code . "dabbrev for code")
-    (company-eclim . "Eclim (an Eclipse interface)")
-    (company-elisp . "Emacs Lisp")
-    (company-etags . "etags")
-    (company-files . "Files")
-    (company-gtags . "GNU Global")
-    (company-ispell . "Ispell")
-    (company-keywords . "Programming language keywords")
-    (company-nxml . "nxml")
-    (company-oddmuse . "Oddmuse")
-    (company-semantic . "Semantic")
-    (company-tempo . "Tempo templates")
-    (company-xcode . "Xcode")))
-(put 'company-safe-backends 'risky-local-variable t)
-
-(defun company-safe-backends-p (backends)
-  (and (consp backends)
-       (not (cl-dolist (backend backends)
-              (unless (if (consp backend)
-                          (company-safe-backends-p backend)
-                        (assq backend company-safe-backends))
-                (cl-return t))))))
-
-(defcustom company-backends `(,@(unless (version< "24.3.51" emacs-version)
-                                  (list 'company-elisp))
-                              company-bbdb
-                              ,@(unless (version<= "26" emacs-version)
-                                  (list 'company-nxml))
-                              ,@(unless (version<= "26" emacs-version)
-                                  (list 'company-css))
-                              company-eclim company-semantic company-clang
-                              company-xcode company-cmake
-                              company-capf
-                              company-files
-                              (company-dabbrev-code company-gtags company-etags
-                               company-keywords)
-                              company-oddmuse company-dabbrev)
-  "The list of active backends (completion engines).
-
-Only one backend is used at a time.  The choice depends on the order of
-the items in this list, and on the values they return in response to the
-`prefix' command (see below).  But a backend can also be a \"grouped\"
-one (see below).
-
-`company-begin-backend' can be used to start a specific backend,
-`company-other-backend' will skip to the next matching backend in the list.
-
-Each backend is a function that takes a variable number of arguments.
-The first argument is the command requested from the backend.  It is one
-of the following:
-
-`prefix': The backend should return the text to be completed.  It must be
-text immediately before point.  Returning nil from this command passes
-control to the next backend.  The function should return `stop' if it
-should complete but cannot (e.g. when in the middle of a symbol).
-Instead of a string, the backend may return a cons (PREFIX . LENGTH)
-where LENGTH is a number used in place of PREFIX's length when
-comparing against `company-minimum-prefix-length'.  LENGTH can also
-be just t, and in the latter case the test automatically succeeds.
-
-`candidates': The second argument is the prefix to be completed.  The
-return value should be a list of candidates that match the prefix.
-
-Non-prefix matches are also supported (candidates that don't start with the
-prefix, but match it in some backend-defined way).  Backends that use this
-feature must disable cache (return t to `no-cache') and might also want to
-respond to `match'.
-
-Optional commands
-=================
-
-`sorted': Return t here to indicate that the candidates are sorted and will
-not need to be sorted again.
-
-`duplicates': If non-nil, company will take care of removing duplicates
-from the list.
-
-`no-cache': Usually company doesn't ask for candidates again as completion
-progresses, unless the backend returns t for this command.  The second
-argument is the latest prefix.
-
-`ignore-case': Return t here if the backend returns case-insensitive
-matches.  This value is used to determine the longest common prefix (as
-used in `company-complete-common'), and to filter completions when fetching
-them from cache.
-
-`meta': The second argument is a completion candidate.  Return a (short)
-documentation string for it.
-
-`doc-buffer': The second argument is a completion candidate.  Return a
-buffer with documentation for it.  Preferably use `company-doc-buffer'.  If
-not all buffer contents pertain to this candidate, return a cons of buffer
-and window start position.
-
-`location': The second argument is a completion candidate.  Return a cons
-of buffer and buffer location, or of file and line number where the
-completion candidate was defined.
-
-`annotation': The second argument is a completion candidate.  Return a
-string to be displayed inline with the candidate in the popup.  If
-duplicates are removed by company, candidates with equal string values will
-be kept if they have different annotations.  For that to work properly,
-backends should store the related information on candidates using text
-properties.
-
-`match': The second argument is a completion candidate.  Return a positive
-integer, the index after the end of text matching `prefix' within the
-candidate string.  Alternatively, return a list of (CHUNK-START
-. CHUNK-END) elements, where CHUNK-START and CHUNK-END are indexes within
-the candidate string.  The corresponding regions are be used when rendering
-the popup.  This command only makes sense for backends that provide
-non-prefix completion.
-
-`require-match': If this returns t, the user is not allowed to enter
-anything not offered as a candidate.  Please don't use that value in normal
-backends.  The default value nil gives the user that choice with
-`company-require-match'.  Return value `never' overrides that option the
-other way around (using that value will indicate that the returned set of
-completions is often incomplete, so this behavior will not be useful).
-
-`init': Called once for each buffer. The backend can check for external
-programs and files and load any required libraries.  Raising an error here
-will show up in message log once, and the backend will not be used for
-completion.
-
-`post-completion': Called after a completion candidate has been inserted
-into the buffer.  The second argument is the candidate.  Can be used to
-modify it, e.g. to expand a snippet.
-
-The backend should return nil for all commands it does not support or
-does not know about.  It should also be callable interactively and use
-`company-begin-backend' to start itself in that case.
-
-Grouped backends
-================
-
-An element of `company-backends' can also be a list of backends.  The
-completions from backends in such groups are merged, but only from those
-backends which return the same `prefix'.
-
-If a backend command takes a candidate as an argument (e.g. `meta'), the
-call is dispatched to the backend the candidate came from.  In other
-cases (except for `duplicates' and `sorted'), the first non-nil value among
-all the backends is returned.
-
-The group can also contain keywords.  Currently, `:with' and `:separate'
-keywords are defined.  If the group contains keyword `:with', the backends
-listed after this keyword are ignored for the purpose of the `prefix'
-command.  If the group contains keyword `:separate', the candidates that
-come from different backends are sorted separately in the combined list.
-
-Asynchronous backends
-=====================
-
-The return value of each command can also be a cons (:async . FETCHER)
-where FETCHER is a function of one argument, CALLBACK.  When the data
-arrives, FETCHER must call CALLBACK and pass it the appropriate return
-value, as described above.  That call must happen in the same buffer as
-where completion was initiated.
-
-True asynchronous operation is only supported for command `candidates', and
-only during idle completion.  Other commands will block the user interface,
-even if the backend uses the asynchronous calling convention."
-  :type `(repeat
-          (choice
-           :tag "backend"
-           ,@(mapcar (lambda (b) `(const :tag ,(cdr b) ,(car b)))
-                     company-safe-backends)
-           (symbol :tag "User defined")
-           (repeat :tag "Merged backends"
-                   (choice :tag "backend"
-                           ,@(mapcar (lambda (b)
-                                       `(const :tag ,(cdr b) ,(car b)))
-                                     company-safe-backends)
-                           (const :tag "With" :with)
-                           (symbol :tag "User defined"))))))
-
-(put 'company-backends 'safe-local-variable 'company-safe-backends-p)
-
-(defcustom company-transformers nil
-  "Functions to change the list of candidates received from backends.
-
-Each function gets called with the return value of the previous one.
-The first one gets passed the list of candidates, already sorted and
-without duplicates."
-  :type '(choice
-          (const :tag "None" nil)
-          (const :tag "Sort by occurrence" (company-sort-by-occurrence))
-          (const :tag "Sort by backend importance"
-                 (company-sort-by-backend-importance))
-          (const :tag "Prefer case sensitive prefix"
-                 (company-sort-prefer-same-case-prefix))
-          (repeat :tag "User defined" (function))))
-
-(defcustom company-completion-started-hook nil
-  "Hook run when company starts completing.
-The hook is called with one argument that is non-nil if the completion was
-started manually."
-  :type 'hook)
-
-(defcustom company-completion-cancelled-hook nil
-  "Hook run when company cancels completing.
-The hook is called with one argument that is non-nil if the completion was
-aborted manually."
-  :type 'hook)
-
-(defcustom company-completion-finished-hook nil
-  "Hook run when company successfully completes.
-The hook is called with the selected candidate as an argument.
-
-If you indend to use it to post-process candidates from a specific
-backend, consider using the `post-completion' command instead."
-  :type 'hook)
-
-(defcustom company-after-completion-hook nil
-  "Hook run at the end of completion, successful or not.
-The hook is called with one argument which is either a string or a symbol."
-  :type 'hook)
-
-(defcustom company-minimum-prefix-length 3
-  "The minimum prefix length for idle completion."
-  :type '(integer :tag "prefix length"))
-
-(defcustom company-abort-manual-when-too-short nil
-  "If enabled, cancel a manually started completion when the prefix gets
-shorter than both `company-minimum-prefix-length' and the length of the
-prefix it was started from."
-  :type 'boolean
-  :package-version '(company . "0.8.0"))
-
-(defcustom company-require-match 'company-explicit-action-p
-  "If enabled, disallow non-matching input.
-This can be a function do determine if a match is required.
-
-This can be overridden by the backend, if it returns t or `never' to
-`require-match'.  `company-auto-complete' also takes precedence over this."
-  :type '(choice (const :tag "Off" nil)
-                 (function :tag "Predicate function")
-                 (const :tag "On, if user interaction took place"
-                        'company-explicit-action-p)
-                 (const :tag "On" t)))
-
-(defcustom company-auto-complete nil
-  "Determines when to auto-complete.
-If this is enabled, all characters from `company-auto-complete-chars'
-trigger insertion of the selected completion candidate.
-This can also be a function."
-  :type '(choice (const :tag "Off" nil)
-                 (function :tag "Predicate function")
-                 (const :tag "On, if user interaction took place"
-                        'company-explicit-action-p)
-                 (const :tag "On" t)))
-
-(defcustom company-auto-complete-chars '(?\  ?\) ?.)
-  "Determines which characters trigger auto-completion.
-See `company-auto-complete'.  If this is a string, each string character
-triggers auto-completion.  If it is a list of syntax description characters 
(see
-`modify-syntax-entry'), all characters with that syntax auto-complete.
-
-This can also be a function, which is called with the new input and should
-return non-nil if company should auto-complete.
-
-A character that is part of a valid candidate never triggers auto-completion."
-  :type '(choice (string :tag "Characters")
-                 (set :tag "Syntax"
-                      (const :tag "Whitespace" ?\ )
-                      (const :tag "Symbol" ?_)
-                      (const :tag "Opening parentheses" ?\()
-                      (const :tag "Closing parentheses" ?\))
-                      (const :tag "Word constituent" ?w)
-                      (const :tag "Punctuation." ?.)
-                      (const :tag "String quote." ?\")
-                      (const :tag "Paired delimiter." ?$)
-                      (const :tag "Expression quote or prefix operator." ?\')
-                      (const :tag "Comment starter." ?<)
-                      (const :tag "Comment ender." ?>)
-                      (const :tag "Character-quote." ?/)
-                      (const :tag "Generic string fence." ?|)
-                      (const :tag "Generic comment fence." ?!))
-                 (function :tag "Predicate function")))
-
-(defcustom company-idle-delay .5
-  "The idle delay in seconds until completion starts automatically.
-The prefix still has to satisfy `company-minimum-prefix-length' before that
-happens.  The value of nil means no idle completion."
-  :type '(choice (const :tag "never (nil)" nil)
-                 (const :tag "immediate (0)" 0)
-                 (function :tag "Predicate function")
-                 (number :tag "seconds")))
-
-(defcustom company-tooltip-idle-delay .5
-  "The idle delay in seconds until tooltip is shown when using
-`company-pseudo-tooltip-unless-just-one-frontend-with-delay'."
-  :type '(choice (const :tag "never (nil)" nil)
-                 (const :tag "immediate (0)" 0)
-                 (number :tag "seconds")))
-
-(defcustom company-begin-commands '(self-insert-command
-                                    org-self-insert-command
-                                    orgtbl-self-insert-command
-                                    c-scope-operator
-                                    c-electric-colon
-                                    c-electric-lt-gt
-                                    c-electric-slash)
-  "A list of commands after which idle completion is allowed.
-If this is t, it can show completions after any command except a few from a
-pre-defined list.  See `company-idle-delay'.
-
-Alternatively, any command with a non-nil `company-begin' property is
-treated as if it was on this list."
-  :type '(choice (const :tag "Any command" t)
-                 (const :tag "Self insert command" '(self-insert-command))
-                 (repeat :tag "Commands" function))
-  :package-version '(company . "0.8.4"))
-
-(defcustom company-continue-commands '(not save-buffer save-some-buffers
-                                           save-buffers-kill-terminal
-                                           save-buffers-kill-emacs
-                                           completion-at-point)
-  "A list of commands that are allowed during completion.
-If this is t, or if `company-begin-commands' is t, any command is allowed.
-Otherwise, the value must be a list of symbols.  If it starts with `not',
-the cdr is the list of commands that abort completion.  Otherwise, all
-commands except those in that list, or in `company-begin-commands', or
-commands in the `company-' namespace, abort completion."
-  :type '(choice (const :tag "Any command" t)
-                 (cons  :tag "Any except"
-                        (const not)
-                        (repeat :tag "Commands" function))
-                 (repeat :tag "Commands" function)))
-
-(defcustom company-show-numbers nil
-  "If enabled, show quick-access numbers for the first ten candidates."
-  :type '(choice (const :tag "off" nil)
-                 (const :tag "left" 'left)
-                 (const :tag "on" 't)))
-
-(defcustom company-show-numbers-function #'company--show-numbers
-  "Function called to get quick-access numbers for the first ten candidates.
-
-The function receives the candidate number (starting from 1) and should
-return a string prefixed with one space."
-  :type 'function)
-
-(defcustom company-selection-wrap-around nil
-  "If enabled, selecting item before first or after last wraps around."
-  :type '(choice (const :tag "off" nil)
-                 (const :tag "on" t)))
-
-(defvar company-async-wait 0.03
-  "Pause between checks to see if the value's been set when turning an
-asynchronous call into synchronous.")
-
-(defvar company-async-timeout 2
-  "Maximum wait time for a value to be set during asynchronous call.")
-
-;;; mode 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar company-mode-map (make-sparse-keymap)
-  "Keymap used by `company-mode'.")
-
-(defvar company-active-map
-  (let ((keymap (make-sparse-keymap)))
-    (define-key keymap "\e\e\e" 'company-abort)
-    (define-key keymap "\C-g" 'company-abort)
-    (define-key keymap (kbd "M-n") 'company-select-next)
-    (define-key keymap (kbd "M-p") 'company-select-previous)
-    (define-key keymap (kbd "<down>") 'company-select-next-or-abort)
-    (define-key keymap (kbd "<up>") 'company-select-previous-or-abort)
-    (define-key keymap [remap scroll-up-command] 'company-next-page)
-    (define-key keymap [remap scroll-down-command] 'company-previous-page)
-    (define-key keymap [down-mouse-1] 'ignore)
-    (define-key keymap [down-mouse-3] 'ignore)
-    (define-key keymap [mouse-1] 'company-complete-mouse)
-    (define-key keymap [mouse-3] 'company-select-mouse)
-    (define-key keymap [up-mouse-1] 'ignore)
-    (define-key keymap [up-mouse-3] 'ignore)
-    (define-key keymap [return] 'company-complete-selection)
-    (define-key keymap (kbd "RET") 'company-complete-selection)
-    (define-key keymap [tab] 'company-complete-common)
-    (define-key keymap (kbd "TAB") 'company-complete-common)
-    (define-key keymap (kbd "<f1>") 'company-show-doc-buffer)
-    (define-key keymap (kbd "C-h") 'company-show-doc-buffer)
-    (define-key keymap "\C-w" 'company-show-location)
-    (define-key keymap "\C-s" 'company-search-candidates)
-    (define-key keymap "\C-\M-s" 'company-filter-candidates)
-    (dotimes (i 10)
-      (define-key keymap (read-kbd-macro (format "M-%d" i)) 
'company-complete-number))
-     keymap)
-  "Keymap that is enabled during an active completion.")
-
-(defvar company--disabled-backends nil)
-
-(defun company-init-backend (backend)
-  (and (symbolp backend)
-       (not (fboundp backend))
-       (ignore-errors (require backend nil t)))
-  (cond
-   ((symbolp backend)
-    (condition-case err
-        (progn
-          (funcall backend 'init)
-          (put backend 'company-init t))
-      (error
-       (put backend 'company-init 'failed)
-       (unless (memq backend company--disabled-backends)
-         (message "Company backend '%s' could not be initialized:\n%s"
-                  backend (error-message-string err)))
-       (cl-pushnew backend company--disabled-backends)
-       nil)))
-   ;; No initialization for lambdas.
-   ((functionp backend) t)
-   (t ;; Must be a list.
-    (cl-dolist (b backend)
-      (unless (keywordp b)
-        (company-init-backend b))))))
-
-(defun company--maybe-init-backend (backend)
-  (or (not (symbolp backend))
-      (eq t (get backend 'company-init))
-      (unless (get backend 'company-init)
-        (company-init-backend backend))))
-
-(defcustom company-lighter-base "company"
-  "Base string to use for the `company-mode' lighter."
-  :type 'string
-  :package-version '(company . "0.8.10"))
-
-(defvar company-lighter '(" "
-                          (company-candidates
-                           (:eval
-                            (if (consp company-backend)
-                                (company--group-lighter (nth company-selection
-                                                             
company-candidates)
-                                                        company-lighter-base)
-                              (symbol-name company-backend)))
-                           company-lighter-base))
-  "Mode line lighter for Company.
-
-The value of this variable is a mode line template as in
-`mode-line-format'.")
-
-(put 'company-lighter 'risky-local-variable t)
-
-;;;###autoload
-(define-minor-mode company-mode
-  "\"complete anything\"; is an in-buffer completion framework.
-Completion starts automatically, depending on the values
-`company-idle-delay' and `company-minimum-prefix-length'.
-
-Completion can be controlled with the commands:
-`company-complete-common', `company-complete-selection', `company-complete',
-`company-select-next', `company-select-previous'.  If these commands are
-called before `company-idle-delay', completion will also start.
-
-Completions can be searched with `company-search-candidates' or
-`company-filter-candidates'.  These can be used while completion is
-inactive, as well.
-
-The completion data is retrieved using `company-backends' and displayed
-using `company-frontends'.  If you want to start a specific backend, call
-it interactively or use `company-begin-backend'.
-
-By default, the completions list is sorted alphabetically, unless the
-backend chooses otherwise, or `company-transformers' changes it later.
-
-regular keymap (`company-mode-map'):
-
-\\{company-mode-map}
-keymap during active completions (`company-active-map'):
-
-\\{company-active-map}"
-  nil company-lighter company-mode-map
-  (if company-mode
-      (progn
-        (add-hook 'pre-command-hook 'company-pre-command nil t)
-        (add-hook 'post-command-hook 'company-post-command nil t)
-        (add-hook 'yas-keymap-disable-hook 'company--active-p nil t)
-        (mapc 'company-init-backend company-backends))
-    (remove-hook 'pre-command-hook 'company-pre-command t)
-    (remove-hook 'post-command-hook 'company-post-command t)
-    (remove-hook 'yas-keymap-disable-hook 'company--active-p t)
-    (company-cancel)
-    (kill-local-variable 'company-point)))
-
-(defcustom company-global-modes t
-  "Modes for which `company-mode' mode is turned on by `global-company-mode'.
-If nil, means no modes.  If t, then all major modes have it turned on.
-If a list, it should be a list of `major-mode' symbol names for which
-`company-mode' should be automatically turned on.  The sense of the list is
-negated if it begins with `not'.  For example:
- (c-mode c++-mode)
-means that `company-mode' is turned on for buffers in C and C++ modes only.
- (not message-mode)
-means that `company-mode' is always turned on except in `message-mode' 
buffers."
-  :type '(choice (const :tag "none" nil)
-                 (const :tag "all" t)
-                 (set :menu-tag "mode specific" :tag "modes"
-                      :value (not)
-                      (const :tag "Except" not)
-                      (repeat :inline t (symbol :tag "mode")))))
-
-;;;###autoload
-(define-globalized-minor-mode global-company-mode company-mode company-mode-on)
-
-(defun company-mode-on ()
-  (when (and (not (or noninteractive (eq (aref (buffer-name) 0) ?\s)))
-             (cond ((eq company-global-modes t)
-                    t)
-                   ((eq (car-safe company-global-modes) 'not)
-                    (not (memq major-mode (cdr company-global-modes))))
-                   (t (memq major-mode company-global-modes))))
-    (company-mode 1)))
-
-(defsubst company-assert-enabled ()
-  (unless company-mode
-    (company-uninstall-map)
-    (user-error "Company not enabled")))
-
-;;; keymaps 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-my-keymap nil)
-
-(defvar company-emulation-alist '((t . nil)))
-
-(defun company-enable-overriding-keymap (keymap)
-  (company-uninstall-map)
-  (setq company-my-keymap keymap))
-
-(defun company-ensure-emulation-alist ()
-  (unless (eq 'company-emulation-alist (car emulation-mode-map-alists))
-    (setq emulation-mode-map-alists
-          (cons 'company-emulation-alist
-                (delq 'company-emulation-alist emulation-mode-map-alists)))))
-
-(defun company-install-map ()
-  (unless (or (cdar company-emulation-alist)
-              (null company-my-keymap))
-    (setf (cdar company-emulation-alist) company-my-keymap)))
-
-(defun company-uninstall-map ()
-  (setf (cdar company-emulation-alist) nil))
-
-(defun company--company-command-p (keys)
-  "Checks if the keys are part of company's overriding keymap"
-  (or (equal [company-dummy-event] keys)
-      (commandp (lookup-key company-my-keymap keys))))
-
-;; Hack:
-;; Emacs calculates the active keymaps before reading the event.  That means we
-;; cannot change the keymap from a timer.  So we send a bogus command.
-;; XXX: Seems not to be needed anymore in Emacs 24.4
-;; Apparently, starting with emacs-mirror/emacs@99d0d6dc23.
-(defun company-ignore ()
-  (interactive)
-  (setq this-command last-command))
-
-(global-set-key '[company-dummy-event] 'company-ignore)
-
-(defun company-input-noop ()
-  (push 'company-dummy-event unread-command-events))
-
-;; To avoid warnings in Emacs < 26.
-(declare-function line-number-display-width "indent.c")
-
-(defun company--posn-col-row (posn)
-  (let ((col (car (posn-col-row posn)))
-        ;; `posn-col-row' doesn't work well with lines of different height.
-        ;; `posn-actual-col-row' doesn't handle multiple-width characters.
-        (row (cdr (or (posn-actual-col-row posn)
-                      ;; When position is non-visible for some reason.
-                      (posn-col-row posn)))))
-    (when (and header-line-format (version< emacs-version "24.3.93.3"))
-      ;; http://debbugs.gnu.org/18384
-      (cl-decf row))
-    (when (bound-and-true-p display-line-numbers)
-      (cl-decf col (+ 2 (line-number-display-width))))
-    (cons (+ col (window-hscroll)) row)))
-
-(defun company--col-row (&optional pos)
-  (company--posn-col-row (posn-at-point pos)))
-
-(defun company--row (&optional pos)
-  (cdr (company--col-row pos)))
-
-;;; backends 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-backend nil)
-
-(defun company-grab (regexp &optional expression limit)
-  (when (looking-back regexp limit)
-    (or (match-string-no-properties (or expression 0)) "")))
-
-(defun company-grab-line (regexp &optional expression)
-  "Return a match string for REGEXP if it matches text before point.
-If EXPRESSION is non-nil, return the match string for the respective
-parenthesized expression in REGEXP.
-Matching is limited to the current line."
-  (let ((inhibit-field-text-motion t))
-    (company-grab regexp expression (point-at-bol))))
-
-(defun company-grab-symbol ()
-  "If point is at the end of a symbol, return it.
-Otherwise, if point is not inside a symbol, return an empty string."
-  (if (looking-at "\\_>")
-      (buffer-substring (point) (save-excursion (skip-syntax-backward "w_")
-                                                (point)))
-    (unless (and (char-after) (memq (char-syntax (char-after)) '(?w ?_)))
-      "")))
-
-(defun company-grab-word ()
-  "If point is at the end of a word, return it.
-Otherwise, if point is not inside a symbol, return an empty string."
-  (if (looking-at "\\>")
-      (buffer-substring (point) (save-excursion (skip-syntax-backward "w")
-                                                (point)))
-    (unless (and (char-after) (eq (char-syntax (char-after)) ?w))
-      "")))
-
-(defun company-grab-symbol-cons (idle-begin-after-re &optional max-len)
-  "Return a string SYMBOL or a cons (SYMBOL . t).
-SYMBOL is as returned by `company-grab-symbol'.  If the text before point
-matches IDLE-BEGIN-AFTER-RE, return it wrapped in a cons."
-  (let ((symbol (company-grab-symbol)))
-    (when symbol
-      (save-excursion
-        (forward-char (- (length symbol)))
-        (if (looking-back idle-begin-after-re (if max-len
-                                                  (- (point) max-len)
-                                                (line-beginning-position)))
-            (cons symbol t)
-          symbol)))))
-
-(defun company-in-string-or-comment ()
-  "Return non-nil if point is within a string or comment."
-  (let ((ppss (syntax-ppss)))
-    (or (car (setq ppss (nthcdr 3 ppss)))
-        (car (setq ppss (cdr ppss)))
-        (nth 3 ppss))))
-
-(defun company-call-backend (&rest args)
-  (company--force-sync #'company-call-backend-raw args company-backend))
-
-(defun company--force-sync (fun args backend)
-  (let ((value (apply fun args)))
-    (if (not (eq (car-safe value) :async))
-        value
-      (let ((res 'trash)
-            (start (time-to-seconds)))
-        (funcall (cdr value)
-                 (lambda (result) (setq res result)))
-        (while (eq res 'trash)
-          (if (> (- (time-to-seconds) start) company-async-timeout)
-              (error "Company: backend %s async timeout with args %s"
-                     backend args)
-            ;; XXX: Reusing the trick from company--fetch-candidates here
-            ;; doesn't work well: sit-for isn't a good fit when we want to
-            ;; ignore pending input (results in too many calls).
-            ;; FIXME: We should deal with this by standardizing on a kind of
-            ;; Future object that knows how to sync itself. In most cases (but
-            ;; not all), by calling accept-process-output, probably.
-            (sleep-for company-async-wait)))
-        res))))
-
-(defun company-call-backend-raw (&rest args)
-  (condition-case-unless-debug err
-      (if (functionp company-backend)
-          (apply company-backend args)
-        (apply #'company--multi-backend-adapter company-backend args))
-    (user-error (user-error
-                 "Company: backend %s user-error: %s"
-                 company-backend (error-message-string err)))
-    (error (error "Company: backend %s error \"%s\" with args %s"
-                  company-backend (error-message-string err) args))))
-
-(defun company--multi-backend-adapter (backends command &rest args)
-  (let ((backends (cl-loop for b in backends
-                           when (or (keywordp b)
-                                    (company--maybe-init-backend b))
-                           collect b))
-        (separate (memq :separate backends)))
-
-    (when (eq command 'prefix)
-      (setq backends (butlast backends (length (member :with backends)))))
-
-    (setq backends (cl-delete-if #'keywordp backends))
-
-    (pcase command
-      (`candidates
-       (company--multi-backend-adapter-candidates backends (car args) 
separate))
-      (`sorted separate)
-      (`duplicates (not separate))
-      ((or `prefix `ignore-case `no-cache `require-match)
-       (let (value)
-         (cl-dolist (backend backends)
-           (when (setq value (company--force-sync
-                              backend (cons command args) backend))
-             (cl-return value)))))
-      (_
-       (let ((arg (car args)))
-         (when (> (length arg) 0)
-           (let ((backend (or (get-text-property 0 'company-backend arg)
-                              (car backends))))
-             (apply backend command args))))))))
-
-(defun company--multi-backend-adapter-candidates (backends prefix separate)
-  (let ((pairs (cl-loop for backend in backends
-                        when (equal (company--prefix-str
-                                     (let ((company-backend backend))
-                                       (company-call-backend 'prefix)))
-                                    prefix)
-                        collect (cons (funcall backend 'candidates prefix)
-                                      (company--multi-candidates-mapper
-                                       backend
-                                       separate
-                                       ;; Small perf optimization: don't tag 
the
-                                       ;; candidates received from the first
-                                       ;; backend in the group.
-                                       (not (eq backend (car backends))))))))
-    (company--merge-async pairs (lambda (values) (apply #'append values)))))
-
-(defun company--multi-candidates-mapper (backend separate tag)
-  (lambda (candidates)
-    (when separate
-      (let ((company-backend backend))
-        (setq candidates
-              (company--preprocess-candidates candidates))))
-    (when tag
-      (setq candidates
-            (mapcar
-             (lambda (str)
-               (propertize str 'company-backend backend))
-             candidates)))
-    candidates))
-
-(defun company--merge-async (pairs merger)
-  (let ((async (cl-loop for pair in pairs
-                        thereis
-                        (eq :async (car-safe (car pair))))))
-    (if (not async)
-        (funcall merger (cl-loop for (val . mapper) in pairs
-                                 collect (funcall mapper val)))
-      (cons
-       :async
-       (lambda (callback)
-         (let* (lst
-                (pending (mapcar #'car pairs))
-                (finisher (lambda ()
-                            (unless pending
-                              (funcall callback
-                                       (funcall merger
-                                                (nreverse lst)))))))
-           (dolist (pair pairs)
-             (push nil lst)
-             (let* ((cell lst)
-                    (val (car pair))
-                    (mapper (cdr pair))
-                    (this-finisher (lambda (res)
-                                     (setq pending (delq val pending))
-                                     (setcar cell (funcall mapper res))
-                                     (funcall finisher))))
-               (if (not (eq :async (car-safe val)))
-                   (funcall this-finisher val)
-                 (let ((fetcher (cdr val)))
-                   (funcall fetcher this-finisher)))))))))))
-
-(defun company--prefix-str (prefix)
-  (or (car-safe prefix) prefix))
-
-;;; completion mechanism 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-prefix nil)
-
-(defvar-local company-candidates nil)
-
-(defvar-local company-candidates-length nil)
-
-(defvar-local company-candidates-cache nil)
-
-(defvar-local company-candidates-predicate nil)
-
-(defvar-local company-common nil)
-
-(defvar-local company-selection 0)
-
-(defvar-local company-selection-changed nil)
-
-(defvar-local company--manual-action nil
-  "Non-nil, if manual completion took place.")
-
-(defvar-local company--manual-prefix nil)
-
-(defvar company--auto-completion nil
-  "Non-nil when current candidate is being inserted automatically.
-Controlled by `company-auto-complete'.")
-
-(defvar-local company--point-max nil)
-
-(defvar-local company-point nil)
-
-(defvar company-timer nil)
-(defvar company-tooltip-timer nil)
-
-(defsubst company-strip-prefix (str)
-  (substring str (length company-prefix)))
-
-(defun company--insert-candidate (candidate)
-  (when (> (length candidate) 0)
-    (setq candidate (substring-no-properties candidate))
-    ;; XXX: Return value we check here is subject to change.
-    (if (eq (company-call-backend 'ignore-case) 'keep-prefix)
-        (insert (company-strip-prefix candidate))
-      (unless (equal company-prefix candidate)
-        (delete-region (- (point) (length company-prefix)) (point))
-        (insert candidate)))))
-
-(defmacro company-with-candidate-inserted (candidate &rest body)
-  "Evaluate BODY with CANDIDATE temporarily inserted.
-This is a tool for backends that need candidates inserted before they
-can retrieve meta-data for them."
-  (declare (indent 1))
-  `(let ((inhibit-modification-hooks t)
-         (inhibit-point-motion-hooks t)
-         (modified-p (buffer-modified-p)))
-     (company--insert-candidate ,candidate)
-     (unwind-protect
-         (progn ,@body)
-       (delete-region company-point (point))
-       (set-buffer-modified-p modified-p))))
-
-(defun company-explicit-action-p ()
-  "Return whether explicit completion action was taken by the user."
-  (or company--manual-action
-      company-selection-changed))
-
-(defun company-reformat (candidate)
-  ;; company-ispell needs this, because the results are always lower-case
-  ;; It's mory efficient to fix it only when they are displayed.
-  ;; FIXME: Adopt the current text's capitalization instead?
-  (if (eq (company-call-backend 'ignore-case) 'keep-prefix)
-      (let ((prefix (company--clean-string company-prefix)))
-        (concat prefix (substring candidate (length prefix))))
-    candidate))
-
-(defun company--should-complete ()
-  (and (eq company-idle-delay 'now)
-       (not (or buffer-read-only
-                overriding-local-map))
-       ;; Check if in the middle of entering a key combination.
-       (or (equal (this-command-keys-vector) [])
-           (not (keymapp (key-binding (this-command-keys-vector)))))
-       (not (and transient-mark-mode mark-active))))
-
-(defun company--should-continue ()
-  (or (eq t company-begin-commands)
-      (eq t company-continue-commands)
-      (if (eq 'not (car company-continue-commands))
-          (not (memq this-command (cdr company-continue-commands)))
-        (or (memq this-command company-begin-commands)
-            (memq this-command company-continue-commands)
-            (and (symbolp this-command)
-                 (string-match-p "\\`company-" (symbol-name this-command)))))))
-
-(defun company-call-frontends (command)
-  (dolist (frontend company-frontends)
-    (condition-case-unless-debug err
-        (funcall frontend command)
-      (error (error "Company: frontend %s error \"%s\" on command %s"
-                    frontend (error-message-string err) command)))))
-
-(defun company-set-selection (selection &optional force-update)
-  (setq selection
-        (if company-selection-wrap-around
-            (mod selection company-candidates-length)
-          (max 0 (min (1- company-candidates-length) selection))))
-  (when (or force-update (not (equal selection company-selection)))
-    (setq company-selection selection
-          company-selection-changed t)
-    (company-call-frontends 'update)))
-
-(defun company--group-lighter (candidate base)
-  (let ((backend (or (get-text-property 0 'company-backend candidate)
-                     (cl-some (lambda (x) (and (not (keywordp x)) x))
-                              company-backend))))
-    (when (and backend (symbolp backend))
-      (let ((name (replace-regexp-in-string "company-\\|-company" ""
-                                            (symbol-name backend))))
-        (format "%s-<%s>" base name)))))
-
-(defun company-update-candidates (candidates)
-  (setq company-candidates-length (length candidates))
-  (if company-selection-changed
-      ;; Try to restore the selection
-      (let ((selected (nth company-selection company-candidates)))
-        (setq company-selection 0
-              company-candidates candidates)
-        (when selected
-          (catch 'found
-            (while candidates
-              (let ((candidate (pop candidates)))
-                (when (and (string= candidate selected)
-                           (equal (company-call-backend 'annotation candidate)
-                                  (company-call-backend 'annotation selected)))
-                  (throw 'found t)))
-              (cl-incf company-selection))
-            (setq company-selection 0
-                  company-selection-changed nil))))
-    (setq company-selection 0
-          company-candidates candidates))
-  ;; Calculate common.
-  (let ((completion-ignore-case (company-call-backend 'ignore-case)))
-    ;; We want to support non-prefix completion, so filtering is the
-    ;; responsibility of each respective backend, not ours.
-    ;; On the other hand, we don't want to replace non-prefix input in
-    ;; `company-complete-common', unless there's only one candidate.
-    (setq company-common
-          (if (cdr company-candidates)
-              (let ((common (try-completion "" company-candidates)))
-                (when (string-prefix-p company-prefix common
-                                       completion-ignore-case)
-                  common))
-            (car company-candidates)))))
-
-(defun company-calculate-candidates (prefix ignore-case)
-  (let ((candidates (cdr (assoc prefix company-candidates-cache))))
-    (or candidates
-        (when company-candidates-cache
-          (let ((len (length prefix))
-                (completion-ignore-case ignore-case)
-                prev)
-            (cl-dotimes (i (1+ len))
-              (when (setq prev (cdr (assoc (substring prefix 0 (- len i))
-                                           company-candidates-cache)))
-                (setq candidates (all-completions prefix prev))
-                (cl-return t)))))
-        (progn
-          ;; No cache match, call the backend.
-          (setq candidates (company--preprocess-candidates
-                            (company--fetch-candidates prefix)))
-          ;; Save in cache.
-          (push (cons prefix candidates) company-candidates-cache)))
-    ;; Only now apply the predicate and transformers.
-    (company--postprocess-candidates candidates)))
-
-(defun company--unique-match-p (candidates prefix ignore-case)
-  (and candidates
-       (not (cdr candidates))
-       (eq t (compare-strings (car candidates) nil nil
-                              prefix nil nil ignore-case))))
-
-(defun company--fetch-candidates (prefix)
-  (let* ((non-essential (not (company-explicit-action-p)))
-         (inhibit-redisplay t)
-         (c (if (or company-selection-changed
-                    ;; FIXME: This is not ideal, but we have not managed to 
deal
-                    ;; with these situations in a better way yet.
-                    (company-require-match-p))
-                (company-call-backend 'candidates prefix)
-              (company-call-backend-raw 'candidates prefix))))
-    (if (not (eq (car c) :async))
-        c
-      (let ((res 'none))
-        (funcall
-         (cdr c)
-         (lambda (candidates)
-           (when (eq res 'none)
-             (push 'company-foo unread-command-events))
-           (setq res candidates)))
-        (if (company--flyspell-workaround-p)
-            (while (and (eq res 'none)
-                        (not (input-pending-p)))
-              (sleep-for company-async-wait))
-          (while (and (eq res 'none)
-                      (sit-for 0.5 t))))
-        (while (member (car unread-command-events)
-                       '(company-foo (t . company-foo)))
-          (pop unread-command-events))
-        (prog1
-            (and (consp res) res)
-          (setq res 'exited))))))
-
-(defun company--flyspell-workaround-p ()
-  ;; https://debbugs.gnu.org/23980
-  (and (bound-and-true-p flyspell-mode)
-       (version< emacs-version "27")))
-
-(defun company--preprocess-candidates (candidates)
-  (cl-assert (cl-every #'stringp candidates))
-  (unless (company-call-backend 'sorted)
-    (setq candidates (sort candidates 'string<)))
-  (when (company-call-backend 'duplicates)
-    (company--strip-duplicates candidates))
-  candidates)
-
-(defun company--postprocess-candidates (candidates)
-  (when (or company-candidates-predicate company-transformers)
-    (setq candidates (copy-sequence candidates)))
-  (when company-candidates-predicate
-    (setq candidates (cl-delete-if-not company-candidates-predicate 
candidates)))
-  (company--transform-candidates candidates))
-
-(defun company--strip-duplicates (candidates)
-  (let ((c2 candidates)
-        (annos 'unk))
-    (while c2
-      (setcdr c2
-              (let ((str (pop c2)))
-                (while (let ((str2 (car c2)))
-                         (if (not (equal str str2))
-                             (progn
-                               (setq annos 'unk)
-                               nil)
-                           (when (eq annos 'unk)
-                             (setq annos (list (company-call-backend
-                                                'annotation str))))
-                           (let ((anno2 (company-call-backend
-                                         'annotation str2)))
-                             (if (member anno2 annos)
-                                 t
-                               (push anno2 annos)
-                               nil))))
-                  (pop c2))
-                c2)))))
-
-(defun company--transform-candidates (candidates)
-  (let ((c candidates))
-    (dolist (tr company-transformers)
-      (setq c (funcall tr c)))
-    c))
-
-(defcustom company-occurrence-weight-function
-  #'company-occurrence-prefer-closest-above
-  "Function to weigh matches in `company-sort-by-occurrence'.
-It's called with three arguments: cursor position, the beginning and the
-end of the match."
-  :type '(choice
-          (const :tag "First above point, then below point"
-                 company-occurrence-prefer-closest-above)
-          (const :tag "Prefer closest in any direction"
-                 company-occurrence-prefer-any-closest)))
-
-(defun company-occurrence-prefer-closest-above (pos match-beg match-end)
-  "Give priority to the matches above point, then those below point."
-  (if (< match-beg pos)
-      (- pos match-end)
-    (- match-beg (window-start))))
-
-(defun company-occurrence-prefer-any-closest (pos _match-beg match-end)
-  "Give priority to the matches closest to the point."
-  (abs (- pos match-end)))
-
-(defun company-sort-by-occurrence (candidates)
-  "Sort CANDIDATES according to their occurrences.
-Searches for each in the currently visible part of the current buffer and
-prioritizes the matches according to `company-occurrence-weight-function'.
-The rest of the list is appended unchanged.
-Keywords and function definition names are ignored."
-  (let* ((w-start (window-start))
-         (w-end (window-end))
-         (start-point (point))
-         occurs
-         (noccurs
-          (save-excursion
-            (cl-delete-if
-             (lambda (candidate)
-               (when (catch 'done
-                       (goto-char w-start)
-                       (while (search-forward candidate w-end t)
-                         (when (and (not (eq (point) start-point))
-                                    (save-match-data
-                                      (company--occurrence-predicate)))
-                           (throw 'done t))))
-                 (push
-                  (cons candidate
-                        (funcall company-occurrence-weight-function
-                                 start-point
-                                 (match-beginning 0)
-                                 (match-end 0)))
-                  occurs)
-                 t))
-             candidates))))
-    (nconc
-     (mapcar #'car (sort occurs (lambda (e1 e2) (<= (cdr e1) (cdr e2)))))
-     noccurs)))
-
-(defun company--occurrence-predicate ()
-  (defvar comint-last-prompt)
-  (let ((beg (match-beginning 0))
-        (end (match-end 0))
-        (comint-last-prompt (bound-and-true-p comint-last-prompt)))
-    (save-excursion
-      (goto-char end)
-      ;; Workaround for python-shell-completion-at-point's behavior:
-      ;; https://github.com/company-mode/company-mode/issues/759
-      ;; https://github.com/company-mode/company-mode/issues/549
-      (when (derived-mode-p 'inferior-python-mode)
-        (let ((lbp (line-beginning-position)))
-          (setq comint-last-prompt (cons lbp lbp))))
-      (and (not (memq (get-text-property (1- (point)) 'face)
-                      '(font-lock-function-name-face
-                        font-lock-keyword-face)))
-           (let ((prefix (company--prefix-str
-                          (company-call-backend 'prefix))))
-             (and (stringp prefix)
-                  (= (length prefix) (- end beg))))))))
-
-(defun company-sort-by-backend-importance (candidates)
-  "Sort CANDIDATES as two priority groups.
-If `company-backend' is a function, do nothing.  If it's a list, move
-candidates from backends before keyword `:with' to the front.  Candidates
-from the rest of the backends in the group, if any, will be left at the end."
-  (if (functionp company-backend)
-      candidates
-    (let ((low-priority (cdr (memq :with company-backend))))
-      (if (null low-priority)
-          candidates
-        (sort candidates
-              (lambda (c1 c2)
-                (and
-                 (let ((b2 (get-text-property 0 'company-backend c2)))
-                   (and b2 (memq b2 low-priority)))
-                 (let ((b1 (get-text-property 0 'company-backend c1)))
-                   (or (not b1) (not (memq b1 low-priority)))))))))))
-
-(defun company-sort-prefer-same-case-prefix (candidates)
-  "Prefer CANDIDATES with the exact same prefix.
-If a backend returns case insensitive matches, candidates with the an exact
-prefix match (same case) will be prioritized."
-  (cl-loop for candidate in candidates
-           if (string-prefix-p company-prefix candidate)
-           collect candidate into same-case
-           else collect candidate into other-case
-           finally return (append same-case other-case)))
-
-(defun company-idle-begin (buf win tick pos)
-  (and (eq buf (current-buffer))
-       (eq win (selected-window))
-       (eq tick (buffer-chars-modified-tick))
-       (eq pos (point))
-       (when (company-auto-begin)
-         (when (version< emacs-version "24.3.50")
-           (company-input-noop))
-         (let ((this-command 'company-idle-begin))
-           (company-post-command)))))
-
-(defun company-auto-begin ()
-  (and company-mode
-       (not company-candidates)
-       (let ((company-idle-delay 'now))
-         (condition-case-unless-debug err
-             (let ((inhibit-quit nil))
-               (company--perform)
-               ;; Return non-nil if active.
-               company-candidates)
-           (error (message "Company: An error occurred in auto-begin")
-                  (message "%s" (error-message-string err))
-                  (company-cancel))
-           (quit (company-cancel))))))
-
-;;;###autoload
-(defun company-manual-begin ()
-  (interactive)
-  (company-assert-enabled)
-  (setq company--manual-action t)
-  (unwind-protect
-      (let ((company-minimum-prefix-length 0))
-        (or company-candidates
-            (company-auto-begin)))
-    (unless company-candidates
-      (setq company--manual-action nil))))
-
-(defun company-other-backend (&optional backward)
-  (interactive (list current-prefix-arg))
-  (company-assert-enabled)
-  (let* ((after (if company-backend
-                    (cdr (member company-backend company-backends))
-                  company-backends))
-         (before (cdr (member company-backend (reverse company-backends))))
-         (next (if backward
-                   (append before (reverse after))
-                 (append after (reverse before)))))
-    (company-cancel)
-    (cl-dolist (backend next)
-      (when (ignore-errors (company-begin-backend backend))
-        (cl-return t))))
-  (unless company-candidates
-    (user-error "No other backend")))
-
-(defun company-require-match-p ()
-  (let ((backend-value (company-call-backend 'require-match)))
-    (or (eq backend-value t)
-        (and (not (eq backend-value 'never))
-             (if (functionp company-require-match)
-                 (funcall company-require-match)
-               (eq company-require-match t))))))
-
-(defun company-auto-complete-p (input)
-  "Return non-nil if INPUT should trigger auto-completion."
-  (and (if (functionp company-auto-complete)
-           (funcall company-auto-complete)
-         company-auto-complete)
-       (if (functionp company-auto-complete-chars)
-           (funcall company-auto-complete-chars input)
-         (if (consp company-auto-complete-chars)
-             (memq (char-syntax (string-to-char input))
-                   company-auto-complete-chars)
-           (string-match (regexp-quote (substring input 0 1))
-                          company-auto-complete-chars)))))
-
-(defun company--incremental-p ()
-  (and (> (point) company-point)
-       (> (point-max) company--point-max)
-       (not (eq this-command 'backward-delete-char-untabify))
-       (equal (buffer-substring (- company-point (length company-prefix))
-                                company-point)
-              company-prefix)))
-
-(defun company--continue-failed (new-prefix)
-  (cond
-   ((and (or (not (company-require-match-p))
-             ;; Don't require match if the new prefix
-             ;; doesn't continue the old one, and the latter was a match.
-             (not (stringp new-prefix))
-             (<= (length new-prefix) (length company-prefix)))
-         (member company-prefix company-candidates))
-    ;; Last input was a success,
-    ;; but we're treating it as an abort + input anyway,
-    ;; like the `unique' case below.
-    (company-cancel 'non-unique))
-   ((company-require-match-p)
-    ;; Wrong incremental input, but required match.
-    (delete-char (- company-point (point)))
-    (ding)
-    (message "Matching input is required")
-    company-candidates)
-   (t (company-cancel))))
-
-(defun company--good-prefix-p (prefix)
-  (and (stringp (company--prefix-str prefix)) ;excludes 'stop
-       (or (eq (cdr-safe prefix) t)
-           (let ((len (or (cdr-safe prefix) (length prefix))))
-             (if company--manual-prefix
-                 (or (not company-abort-manual-when-too-short)
-                     ;; Must not be less than minimum or initial length.
-                     (>= len (min company-minimum-prefix-length
-                                  (length company--manual-prefix))))
-               (>= len company-minimum-prefix-length))))))
-
-(defun company--continue ()
-  (when (company-call-backend 'no-cache company-prefix)
-    ;; Don't complete existing candidates, fetch new ones.
-    (setq company-candidates-cache nil))
-  (let* ((new-prefix (company-call-backend 'prefix))
-         (ignore-case (company-call-backend 'ignore-case))
-         (c (when (and (company--good-prefix-p new-prefix)
-                       (setq new-prefix (company--prefix-str new-prefix))
-                       (= (- (point) (length new-prefix))
-                          (- company-point (length company-prefix))))
-              (company-calculate-candidates new-prefix ignore-case))))
-    (cond
-     ((company--unique-match-p c new-prefix ignore-case)
-      ;; Handle it like completion was aborted, to differentiate from user
-      ;; calling one of Company's commands to insert the candidate,
-      ;; not to trigger template expansion, etc.
-      (company-cancel 'unique))
-     ((consp c)
-      ;; incremental match
-      (setq company-prefix new-prefix)
-      (company-update-candidates c)
-      c)
-     ((and (characterp last-command-event)
-           (company-auto-complete-p (string last-command-event)))
-      ;; auto-complete
-      (save-excursion
-        (goto-char company-point)
-        (let ((company--auto-completion t))
-          (company-complete-selection))
-        nil))
-     ((not (company--incremental-p))
-      (company-cancel))
-     (t (company--continue-failed new-prefix)))))
-
-(defun company--begin-new ()
-  (let (prefix c)
-    (cl-dolist (backend (if company-backend
-                            ;; prefer manual override
-                            (list company-backend)
-                          company-backends))
-      (setq prefix
-            (if (or (symbolp backend)
-                    (functionp backend))
-                (when (company--maybe-init-backend backend)
-                  (let ((company-backend backend))
-                    (company-call-backend 'prefix)))
-              (company--multi-backend-adapter backend 'prefix)))
-      (when prefix
-        (when (company--good-prefix-p prefix)
-          (let ((ignore-case (company-call-backend 'ignore-case)))
-            (setq company-prefix (company--prefix-str prefix)
-                  company-backend backend
-                  c (company-calculate-candidates company-prefix ignore-case))
-            (cond
-             ((and (company--unique-match-p c company-prefix ignore-case)
-                   (if company--manual-action
-                       ;; If `company-manual-begin' was called, the user
-                       ;; really wants something to happen.  Otherwise...
-                       (ignore (message "Sole completion"))
-                     t))
-              ;; ...abort and run the hooks, e.g. to clear the cache.
-              (company-cancel 'unique))
-             ((null c)
-              (when company--manual-action
-                (message "No completion found")))
-             (t ;; We got completions!
-              (when company--manual-action
-                (setq company--manual-prefix prefix))
-              (company-update-candidates c)
-              (run-hook-with-args 'company-completion-started-hook
-                                  (company-explicit-action-p))
-              (company-call-frontends 'show)))))
-        (cl-return c)))))
-
-(defun company--perform ()
-  (cond
-   (company-candidates
-    (company--continue))
-   ((company--should-complete)
-    (company--begin-new)))
-  (if (not company-candidates)
-      (setq company-backend nil)
-    (setq company-point (point)
-          company--point-max (point-max))
-    (company-ensure-emulation-alist)
-    (company-enable-overriding-keymap company-active-map)
-    (company-call-frontends 'update)))
-
-(defun company-cancel (&optional result)
-  (let ((prefix company-prefix)
-        (backend company-backend))
-    (setq company-backend nil
-          company-prefix nil
-          company-candidates nil
-          company-candidates-length nil
-          company-candidates-cache nil
-          company-candidates-predicate nil
-          company-common nil
-          company-selection 0
-          company-selection-changed nil
-          company--manual-action nil
-          company--manual-prefix nil
-          company--point-max nil
-          company-point nil)
-    (when company-timer
-      (cancel-timer company-timer))
-    (company-echo-cancel t)
-    (company-search-mode 0)
-    (company-call-frontends 'hide)
-    (company-enable-overriding-keymap nil)
-    (when prefix
-      (if (stringp result)
-          (let ((company-backend backend))
-            (run-hook-with-args 'company-completion-finished-hook result)
-            (company-call-backend 'post-completion result))
-        (run-hook-with-args 'company-completion-cancelled-hook result))
-      (run-hook-with-args 'company-after-completion-hook result)))
-  ;; Make return value explicit.
-  nil)
-
-(defun company-abort ()
-  (interactive)
-  (company-cancel 'abort))
-
-(defun company-finish (result)
-  (company--insert-candidate result)
-  (company-cancel result))
-
-(defsubst company-keep (command)
-  (and (symbolp command) (get command 'company-keep)))
-
-(defun company--active-p ()
-  company-candidates)
-
-(defun company-pre-command ()
-  (company--electric-restore-window-configuration)
-  (unless (company-keep this-command)
-    (condition-case-unless-debug err
-        (when company-candidates
-          (company-call-frontends 'pre-command)
-          (unless (company--should-continue)
-            (company-abort)))
-      (error (message "Company: An error occurred in pre-command")
-             (message "%s" (error-message-string err))
-             (company-cancel))))
-  (when company-timer
-    (cancel-timer company-timer)
-    (setq company-timer nil))
-  (company-echo-cancel t)
-  (company-uninstall-map))
-
-(defun company-post-command ()
-  (when (and company-candidates
-             (null this-command))
-    ;; Happens when the user presses `C-g' while inside
-    ;; `flyspell-post-command-hook', for example.
-    ;; Or any other `post-command-hook' function that can call `sit-for',
-    ;; or any quittable timer function.
-    (company-abort)
-    (setq this-command 'company-abort))
-  (unless (company-keep this-command)
-    (condition-case-unless-debug err
-        (progn
-          (unless (equal (point) company-point)
-            (let (company-idle-delay) ; Against misbehavior while debugging.
-              (company--perform)))
-          (if company-candidates
-              (company-call-frontends 'post-command)
-            (let ((delay (company--idle-delay)))
-             (and (numberp delay)
-                  (not defining-kbd-macro)
-                  (company--should-begin)
-                  (setq company-timer
-                        (run-with-timer delay nil
-                                        'company-idle-begin
-                                        (current-buffer) (selected-window)
-                                        (buffer-chars-modified-tick) 
(point)))))))
-      (error (message "Company: An error occurred in post-command")
-             (message "%s" (error-message-string err))
-             (company-cancel))))
-  (company-install-map))
-
-(defun company--idle-delay ()
-  (let ((delay
-          (if (functionp company-idle-delay)
-              (funcall company-idle-delay)
-            company-idle-delay)))
-    (if (memql delay '(t 0 0.0))
-        0.01
-      delay)))
-
-(defvar company--begin-inhibit-commands '(company-abort
-                                          company-complete-mouse
-                                          company-complete
-                                          company-complete-common
-                                          company-complete-selection
-                                          company-complete-number)
-  "List of commands after which idle completion is (still) disabled when
-`company-begin-commands' is t.")
-
-(defun company--should-begin ()
-  (if (eq t company-begin-commands)
-      (not (memq this-command company--begin-inhibit-commands))
-    (or
-     (memq this-command company-begin-commands)
-     (and (symbolp this-command) (get this-command 'company-begin)))))
-
-;;; search 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defcustom company-search-regexp-function #'regexp-quote
-  "Function to construct the search regexp from input.
-It's called with one argument, the current search input.  It must return
-either a regexp without groups, or one where groups don't intersect and
-each one wraps a part of the input string."
-  :type '(choice
-          (const :tag "Exact match" regexp-quote)
-          (const :tag "Words separated with spaces" 
company-search-words-regexp)
-          (const :tag "Words separated with spaces, in any order"
-                 company-search-words-in-any-order-regexp)
-          (const :tag "All characters in given order, with anything in between"
-                 company-search-flex-regexp)))
-
-(defvar-local company-search-string "")
-
-(defvar company-search-lighter '(" "
-                                 (company-search-filtering "Filter" "Search")
-                                 ": \""
-                                 company-search-string
-                                 "\""))
-
-(defvar-local company-search-filtering nil
-  "Non-nil to filter the completion candidates by the search string")
-
-(defvar-local company--search-old-selection 0)
-
-(defvar-local company--search-old-changed nil)
-
-(defun company-search-words-regexp (input)
-  (mapconcat (lambda (word) (format "\\(%s\\)" (regexp-quote word)))
-             (split-string input " +" t) ".*"))
-
-(defun company-search-words-in-any-order-regexp (input)
-  (let* ((words (mapcar (lambda (word) (format "\\(%s\\)" (regexp-quote word)))
-                        (split-string input " +" t)))
-         (permutations (company--permutations words)))
-    (mapconcat (lambda (words)
-                 (mapconcat #'identity words ".*"))
-               permutations
-               "\\|")))
-
-(defun company-search-flex-regexp (input)
-  (if (zerop (length input))
-      ""
-    (concat (regexp-quote (string (aref input 0)))
-            (mapconcat (lambda (c)
-                         (concat "[^" (string c) "]*"
-                                 (regexp-quote (string c))))
-                       (substring input 1) ""))))
-
-(defun company--permutations (lst)
-  (if (not lst)
-      '(nil)
-    (cl-mapcan
-     (lambda (e)
-       (mapcar (lambda (perm) (cons e perm))
-               (company--permutations (cl-remove e lst :count 1))))
-     lst)))
-
-(defun company--search (text lines)
-  (let ((re (funcall company-search-regexp-function text))
-        (i 0))
-    (cl-dolist (line lines)
-      (when (string-match-p re line (length company-prefix))
-        (cl-return i))
-      (cl-incf i))))
-
-(defun company-search-keypad ()
-  (interactive)
-  (let* ((name (symbol-name last-command-event))
-         (last-command-event (aref name (1- (length name)))))
-    (company-search-printing-char)))
-
-(defun company-search-printing-char ()
-  (interactive)
-  (company--search-assert-enabled)
-  (let ((ss (concat company-search-string (string last-command-event))))
-    (when company-search-filtering
-      (company--search-update-predicate ss))
-    (company--search-update-string ss)))
-
-(defun company--search-update-predicate (ss)
-  (let* ((re (funcall company-search-regexp-function ss))
-         (company-candidates-predicate
-          (and (not (string= re ""))
-               company-search-filtering
-               (lambda (candidate) (string-match re candidate))))
-         (cc (company-calculate-candidates company-prefix
-                                           (company-call-backend 
'ignore-case))))
-    (unless cc (user-error "No match"))
-    (company-update-candidates cc)))
-
-(defun company--search-update-string (new)
-  (let* ((pos (company--search new (nthcdr company-selection 
company-candidates))))
-    (if (null pos)
-        (ding)
-      (setq company-search-string new)
-      (company-set-selection (+ company-selection pos) t))))
-
-(defun company--search-assert-input ()
-  (company--search-assert-enabled)
-  (when (string= company-search-string "")
-    (user-error "Empty search string")))
-
-(defun company-search-repeat-forward ()
-  "Repeat the incremental search in completion candidates forward."
-  (interactive)
-  (company--search-assert-input)
-  (let ((pos (company--search company-search-string
-                              (cdr (nthcdr company-selection
-                                           company-candidates)))))
-    (if (null pos)
-        (ding)
-      (company-set-selection (+ company-selection pos 1) t))))
-
-(defun company-search-repeat-backward ()
-  "Repeat the incremental search in completion candidates backwards."
-  (interactive)
-  (company--search-assert-input)
-  (let ((pos (company--search company-search-string
-                              (nthcdr (- company-candidates-length
-                                         company-selection)
-                                      (reverse company-candidates)))))
-    (if (null pos)
-        (ding)
-      (company-set-selection (- company-selection pos 1) t))))
-
-(defun company-search-toggle-filtering ()
-  "Toggle `company-search-filtering'."
-  (interactive)
-  (company--search-assert-enabled)
-  (setq company-search-filtering (not company-search-filtering))
-  (let ((ss company-search-string))
-    (company--search-update-predicate ss)
-    (company--search-update-string ss)))
-
-(defun company-search-abort ()
-  "Abort searching the completion candidates."
-  (interactive)
-  (company--search-assert-enabled)
-  (company-search-mode 0)
-  (company-set-selection company--search-old-selection t)
-  (setq company-selection-changed company--search-old-changed))
-
-(defun company-search-other-char ()
-  (interactive)
-  (company--search-assert-enabled)
-  (company-search-mode 0)
-  (company--unread-this-command-keys))
-
-(defun company-search-delete-char ()
-  (interactive)
-  (company--search-assert-enabled)
-  (if (string= company-search-string "")
-      (ding)
-    (let ((ss (substring company-search-string 0 -1)))
-      (when company-search-filtering
-        (company--search-update-predicate ss))
-      (company--search-update-string ss))))
-
-(defvar company-search-map
-  (let ((i 0)
-        (keymap (make-keymap)))
-    (if (fboundp 'max-char)
-        (set-char-table-range (nth 1 keymap) (cons #x100 (max-char))
-                              'company-search-printing-char)
-      (with-no-warnings
-        ;; obsolete in Emacs 23
-        (let ((l (generic-character-list))
-              (table (nth 1 keymap)))
-          (while l
-            (set-char-table-default table (car l) 
'company-search-printing-char)
-            (setq l (cdr l))))))
-    (define-key keymap [t] 'company-search-other-char)
-    (while (< i ?\s)
-      (define-key keymap (make-string 1 i) 'company-search-other-char)
-      (cl-incf i))
-    (while (< i 256)
-      (define-key keymap (vector i) 'company-search-printing-char)
-      (cl-incf i))
-    (dotimes (i 10)
-      (define-key keymap (read (format "[kp-%s]" i)) 'company-search-keypad))
-    (let ((meta-map (make-sparse-keymap)))
-      (define-key keymap (char-to-string meta-prefix-char) meta-map)
-      (define-key keymap [escape] meta-map))
-    (define-key keymap (vector meta-prefix-char t) 'company-search-other-char)
-    (define-key keymap (kbd "M-n") 'company-select-next)
-    (define-key keymap (kbd "M-p") 'company-select-previous)
-    (define-key keymap (kbd "<down>") 'company-select-next-or-abort)
-    (define-key keymap (kbd "<up>") 'company-select-previous-or-abort)
-    (define-key keymap "\e\e\e" 'company-search-other-char)
-    (define-key keymap [escape escape escape] 'company-search-other-char)
-    (define-key keymap (kbd "DEL") 'company-search-delete-char)
-    (define-key keymap [backspace] 'company-search-delete-char)
-    (define-key keymap "\C-g" 'company-search-abort)
-    (define-key keymap "\C-s" 'company-search-repeat-forward)
-    (define-key keymap "\C-r" 'company-search-repeat-backward)
-    (define-key keymap "\C-o" 'company-search-toggle-filtering)
-    (dotimes (i 10)
-      (define-key keymap (read-kbd-macro (format "M-%d" i)) 
'company-complete-number))
-    keymap)
-  "Keymap used for incrementally searching the completion candidates.")
-
-(define-minor-mode company-search-mode
-  "Search mode for completion candidates.
-Don't start this directly, use `company-search-candidates' or
-`company-filter-candidates'."
-  nil company-search-lighter nil
-  (if company-search-mode
-      (if (company-manual-begin)
-          (progn
-            (setq company--search-old-selection company-selection
-                  company--search-old-changed company-selection-changed)
-            (company-call-frontends 'update)
-            (company-enable-overriding-keymap company-search-map))
-        (setq company-search-mode nil))
-    (kill-local-variable 'company-search-string)
-    (kill-local-variable 'company-search-filtering)
-    (kill-local-variable 'company--search-old-selection)
-    (kill-local-variable 'company--search-old-changed)
-    (when company-backend
-      (company--search-update-predicate "")
-      (company-call-frontends 'update))
-    (company-enable-overriding-keymap company-active-map)))
-
-(defun company--search-assert-enabled ()
-  (company-assert-enabled)
-  (unless company-search-mode
-    (company-uninstall-map)
-    (user-error "Company not in search mode")))
-
-(defun company-search-candidates ()
-  "Start searching the completion candidates incrementally.
-
-\\<company-search-map>Search can be controlled with the commands:
-- `company-search-repeat-forward' (\\[company-search-repeat-forward])
-- `company-search-repeat-backward' (\\[company-search-repeat-backward])
-- `company-search-abort' (\\[company-search-abort])
-- `company-search-delete-char' (\\[company-search-delete-char])
-
-Regular characters are appended to the search string.
-
-Customize `company-search-regexp-function' to change how the input
-is interpreted when searching.
-
-The command `company-search-toggle-filtering' 
(\\[company-search-toggle-filtering])
-uses the search string to filter the completion candidates."
-  (interactive)
-  (company-search-mode 1))
-
-(defvar company-filter-map
-  (let ((keymap (make-keymap)))
-    (define-key keymap [remap company-search-printing-char]
-      'company-filter-printing-char)
-    (set-keymap-parent keymap company-search-map)
-    keymap)
-  "Keymap used for incrementally searching the completion candidates.")
-
-(defun company-filter-candidates ()
-  "Start filtering the completion candidates incrementally.
-This works the same way as `company-search-candidates' immediately
-followed by `company-search-toggle-filtering'."
-  (interactive)
-  (company-search-mode 1)
-  (setq company-search-filtering t))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-select-next (&optional arg)
-  "Select the next candidate in the list.
-
-With ARG, move by that many elements."
-  (interactive "p")
-  (when (company-manual-begin)
-    (company-set-selection (+ (or arg 1) company-selection))))
-
-(defun company-select-previous (&optional arg)
-  "Select the previous candidate in the list.
-
-With ARG, move by that many elements."
-  (interactive "p")
-  (company-select-next (if arg (- arg) -1)))
-
-(defun company-select-next-or-abort (&optional arg)
-  "Select the next candidate if more than one, else abort
-and invoke the normal binding.
-
-With ARG, move by that many elements."
-  (interactive "p")
-  (if (> company-candidates-length 1)
-      (company-select-next arg)
-    (company-abort)
-    (company--unread-this-command-keys)))
-
-(defun company-select-previous-or-abort (&optional arg)
-  "Select the previous candidate if more than one, else abort
-and invoke the normal binding.
-
-With ARG, move by that many elements."
-  (interactive "p")
-  (if (> company-candidates-length 1)
-      (company-select-previous arg)
-    (company-abort)
-    (company--unread-this-command-keys)))
-
-(defun company-next-page ()
-  "Select the candidate one page further."
-  (interactive)
-  (when (company-manual-begin)
-    (if (and company-selection-wrap-around
-             (= company-selection (1- company-candidates-length)))
-        (company-set-selection 0)
-      (let (company-selection-wrap-around)
-        (company-set-selection (+ company-selection
-                                  company-tooltip-limit))))))
-
-(defun company-previous-page ()
-  "Select the candidate one page earlier."
-  (interactive)
-  (when (company-manual-begin)
-    (if (and company-selection-wrap-around
-             (zerop company-selection))
-        (company-set-selection (1- company-candidates-length))
-      (let (company-selection-wrap-around)
-        (company-set-selection (- company-selection
-                                  company-tooltip-limit))))))
-
-(defvar company-pseudo-tooltip-overlay)
-
-(defvar company-tooltip-offset)
-
-(defun company--inside-tooltip-p (event-col-row row height)
-  (let* ((ovl company-pseudo-tooltip-overlay)
-         (column (overlay-get ovl 'company-column))
-         (width (overlay-get ovl 'company-width))
-         (evt-col (car event-col-row))
-         (evt-row (cdr event-col-row)))
-    (and (>= evt-col column)
-         (< evt-col (+ column width))
-         (if (> height 0)
-             (and (> evt-row row)
-                  (<= evt-row (+ row height) ))
-           (and (< evt-row row)
-                (>= evt-row (+ row height)))))))
-
-(defun company--event-col-row (event)
-  (company--posn-col-row (event-start event)))
-
-(defun company-select-mouse (event)
-  "Select the candidate picked by the mouse."
-  (interactive "e")
-  (let ((event-col-row (company--event-col-row event))
-        (ovl-row (company--row))
-        (ovl-height (and company-pseudo-tooltip-overlay
-                         (min (overlay-get company-pseudo-tooltip-overlay
-                                           'company-height)
-                              company-candidates-length))))
-    (if (and ovl-height
-             (company--inside-tooltip-p event-col-row ovl-row ovl-height))
-        (progn
-          (company-set-selection (+ (cdr event-col-row)
-                                    (1- company-tooltip-offset)
-                                    (if (and (eq 
company-tooltip-offset-display 'lines)
-                                             (not (zerop 
company-tooltip-offset)))
-                                        -1 0)
-                                    (- ovl-row)
-                                    (if (< ovl-height 0)
-                                        (- 1 ovl-height)
-                                      0)))
-          t)
-      (company-abort)
-      (company--unread-this-command-keys)
-      nil)))
-
-(defun company-complete-mouse (event)
-  "Insert the candidate picked by the mouse."
-  (interactive "e")
-  (when (company-select-mouse event)
-    (company-complete-selection)))
-
-(defun company-complete-selection ()
-  "Insert the selected candidate."
-  (interactive)
-  (when (company-manual-begin)
-    (let ((result (nth company-selection company-candidates)))
-      (company-finish result))))
-
-(defun company-complete-common ()
-  "Insert the common part of all candidates."
-  (interactive)
-  (when (company-manual-begin)
-    (if (and (not (cdr company-candidates))
-             (equal company-common (car company-candidates)))
-        (company-complete-selection)
-      (company--insert-candidate company-common))))
-
-(defun company-complete-common-or-cycle (&optional arg)
-  "Insert the common part of all candidates, or select the next one.
-
-With ARG, move by that many elements."
-  (interactive "p")
-  (when (company-manual-begin)
-    (let ((tick (buffer-chars-modified-tick)))
-      (call-interactively 'company-complete-common)
-      (when (eq tick (buffer-chars-modified-tick))
-        (let ((company-selection-wrap-around t)
-              (current-prefix-arg arg))
-          (call-interactively 'company-select-next))))))
-
-(defun company-indent-or-complete-common (arg)
-  "Indent the current line or region, or complete the common part."
-  (interactive "P")
-  (cond
-   ((use-region-p)
-    (indent-region (region-beginning) (region-end)))
-   ((memq indent-line-function
-          '(indent-relative indent-relative-maybe))
-    (company-complete-common))
-   ((let ((old-point (point))
-          (old-tick (buffer-chars-modified-tick))
-          (tab-always-indent t))
-      (indent-for-tab-command arg)
-      (when (and (eq old-point (point))
-                 (eq old-tick (buffer-chars-modified-tick)))
-        (company-complete-common))))))
-
-(defun company-select-next-if-tooltip-visible-or-complete-selection ()
-  "Insert selection if appropriate, or select the next candidate.
-Insert selection if only preview is showing or only one candidate,
-otherwise select the next candidate."
-  (interactive)
-  (if (and (company-tooltip-visible-p) (> company-candidates-length 1))
-      (call-interactively 'company-select-next)
-    (call-interactively 'company-complete-selection)))
-
-;;;###autoload
-(defun company-complete ()
-  "Insert the common part of all candidates or the current selection.
-The first time this is called, the common part is inserted, the second
-time, or when the selection has been changed, the selected candidate is
-inserted."
-  (interactive)
-  (when (company-manual-begin)
-    (if (or company-selection-changed
-            (and (eq real-last-command 'company-complete)
-                 (eq last-command 'company-complete-common)))
-        (call-interactively 'company-complete-selection)
-      (call-interactively 'company-complete-common)
-      (when company-candidates
-        (setq this-command 'company-complete-common)))))
-
-(defun company-complete-number (n)
-  "Insert the Nth candidate visible in the tooltip.
-To show the number next to the candidates in some backends, enable
-`company-show-numbers'.  When called interactively, uses the last typed
-character, stripping the modifiers.  That character must be a digit."
-  (interactive
-   (list (let* ((type (event-basic-type last-command-event))
-                (char (if (characterp type)
-                          ;; Number on the main row.
-                          type
-                        ;; Keypad number, if bound directly.
-                        (car (last (string-to-list (symbol-name type))))))
-                (n (- char ?0)))
-           (if (zerop n) 10 n))))
-  (when (company-manual-begin)
-    (and (or (< n 1) (> n (- company-candidates-length
-                             company-tooltip-offset)))
-         (user-error "No candidate number %d" n))
-    (cl-decf n)
-    (company-finish (nth (+ n company-tooltip-offset)
-                         company-candidates))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst company-space-strings-limit 100)
-
-(defconst company-space-strings
-  (let (lst)
-    (dotimes (i company-space-strings-limit)
-      (push (make-string (- company-space-strings-limit 1 i) ?\  ) lst))
-    (apply 'vector lst)))
-
-(defun company-space-string (len)
-  (if (< len company-space-strings-limit)
-      (aref company-space-strings len)
-    (make-string len ?\ )))
-
-(defun company-safe-substring (str from &optional to)
-  (let ((bis buffer-invisibility-spec))
-    (if (> from (string-width str))
-        ""
-      (with-temp-buffer
-        (setq buffer-invisibility-spec bis)
-        (insert str)
-        (move-to-column from)
-        (let ((beg (point)))
-          (if to
-              (progn
-                (move-to-column to)
-                (concat (buffer-substring beg (point))
-                        (let ((padding (- to (current-column))))
-                          (when (> padding 0)
-                            (company-space-string padding)))))
-            (buffer-substring beg (point-max))))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-last-metadata nil)
-
-(defun company-fetch-metadata ()
-  (let ((selected (nth company-selection company-candidates)))
-    (unless (eq selected (car company-last-metadata))
-      (setq company-last-metadata
-            (cons selected (company-call-backend 'meta selected))))
-    (cdr company-last-metadata)))
-
-(defun company-doc-buffer (&optional string)
-  (with-current-buffer (get-buffer-create "*company-documentation*")
-    (erase-buffer)
-    (fundamental-mode)
-    (when string
-      (save-excursion
-        (insert string)
-        (visual-line-mode)))
-    (current-buffer)))
-
-(defvar company--electric-saved-window-configuration nil)
-
-(defvar company--electric-commands
-  '(scroll-other-window scroll-other-window-down mwheel-scroll)
-  "List of Commands that won't break out of electric commands.")
-
-(defun company--electric-restore-window-configuration ()
-  "Restore window configuration (after electric commands)."
-  (when (and company--electric-saved-window-configuration
-             (not (memq this-command company--electric-commands)))
-    (set-window-configuration company--electric-saved-window-configuration)
-    (setq company--electric-saved-window-configuration nil)))
-
-(defmacro company--electric-do (&rest body)
-  (declare (indent 0) (debug t))
-  `(when (company-manual-begin)
-     (cl-assert (null company--electric-saved-window-configuration))
-     (setq company--electric-saved-window-configuration 
(current-window-configuration))
-     (let ((height (window-height))
-           (row (company--row)))
-       ,@body
-       (and (< (window-height) height)
-            (< (- (window-height) row 2) company-tooltip-limit)
-            (recenter (- (window-height) row 2))))))
-
-(defun company--unread-this-command-keys ()
-  (when (> (length (this-command-keys)) 0)
-    (setq unread-command-events (nconc
-                                 (listify-key-sequence (this-command-keys))
-                                 unread-command-events))
-    (clear-this-command-keys t)))
-
-(defun company-show-doc-buffer ()
-  "Temporarily show the documentation buffer for the selection."
-  (interactive)
-  (let (other-window-scroll-buffer)
-    (company--electric-do
-      (let* ((selected (nth company-selection company-candidates))
-             (doc-buffer (or (company-call-backend 'doc-buffer selected)
-                             (user-error "No documentation available")))
-             start)
-        (when (consp doc-buffer)
-          (setq start (cdr doc-buffer)
-                doc-buffer (car doc-buffer)))
-        (setq other-window-scroll-buffer (get-buffer doc-buffer))
-        (let ((win (display-buffer doc-buffer t)))
-          (set-window-start win (if start start (point-min))))))))
-(put 'company-show-doc-buffer 'company-keep t)
-
-(defun company-show-location ()
-  "Temporarily display a buffer showing the selected candidate in context."
-  (interactive)
-  (let (other-window-scroll-buffer)
-    (company--electric-do
-      (let* ((selected (nth company-selection company-candidates))
-             (location (company-call-backend 'location selected))
-             (pos (or (cdr location) (user-error "No location available")))
-             (buffer (or (and (bufferp (car location)) (car location))
-                         (find-file-noselect (car location) t))))
-        (setq other-window-scroll-buffer (get-buffer buffer))
-        (with-selected-window (display-buffer buffer t)
-          (save-restriction
-            (widen)
-            (if (bufferp (car location))
-                (goto-char pos)
-              (goto-char (point-min))
-              (forward-line (1- pos))))
-          (set-window-start nil (point)))))))
-(put 'company-show-location 'company-keep t)
-
-;;; package functions 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-callback nil)
-
-(defun company-remove-callback (&optional ignored)
-  (remove-hook 'company-completion-finished-hook company-callback t)
-  (remove-hook 'company-completion-cancelled-hook 'company-remove-callback t)
-  (remove-hook 'company-completion-finished-hook 'company-remove-callback t))
-
-(defun company-begin-backend (backend &optional callback)
-  "Start a completion at point using BACKEND."
-  (interactive (let ((val (completing-read "Company backend: "
-                                           obarray
-                                           'functionp nil "company-")))
-                 (when val
-                   (list (intern val)))))
-  (when (setq company-callback callback)
-    (add-hook 'company-completion-finished-hook company-callback nil t))
-  (add-hook 'company-completion-cancelled-hook 'company-remove-callback nil t)
-  (add-hook 'company-completion-finished-hook 'company-remove-callback nil t)
-  (setq company-backend backend)
-  ;; Return non-nil if active.
-  (or (company-manual-begin)
-      (user-error "Cannot complete at point")))
-
-(defun company-begin-with (candidates
-                           &optional prefix-length require-match callback)
-  "Start a completion at point.
-CANDIDATES is the list of candidates to use and PREFIX-LENGTH is the length
-of the prefix that already is in the buffer before point.
-It defaults to 0.
-
-CALLBACK is a function called with the selected result if the user
-successfully completes the input.
-
-Example: \(company-begin-with \\='\(\"foo\" \"foobar\" \"foobarbaz\"\)\)"
-  (let ((begin-marker (copy-marker (point) t)))
-    (company-begin-backend
-     (lambda (command &optional arg &rest ignored)
-       (pcase command
-         (`prefix
-          (when (equal (point) (marker-position begin-marker))
-            (buffer-substring (- (point) (or prefix-length 0)) (point))))
-         (`candidates
-          (all-completions arg candidates))
-         (`require-match
-          require-match)))
-     callback)))
-
-(declare-function find-library-name "find-func")
-(declare-function lm-version "lisp-mnt")
-
-(defun company-version (&optional show-version)
-  "Get the Company version as string.
-
-If SHOW-VERSION is non-nil, show the version in the echo area."
-  (interactive (list t))
-  (with-temp-buffer
-    (require 'find-func)
-    (insert-file-contents (find-library-name "company"))
-    (require 'lisp-mnt)
-    (if show-version
-        (message "Company version: %s" (lm-version))
-      (lm-version))))
-
-(defun company-diag ()
-  "Pop a buffer with information about completions at point."
-  (interactive)
-  (let* ((bb company-backends)
-         (mode (symbol-name major-mode))
-         backend
-         (prefix (cl-loop for b in bb
-                          thereis (let ((company-backend b))
-                                    (setq backend b)
-                                    (company-call-backend 'prefix))))
-         cc annotations)
-    (when (or (stringp prefix) (consp prefix))
-      (let ((company-backend backend))
-        (condition-case nil
-            (setq cc (company-call-backend 'candidates (company--prefix-str 
prefix))
-                  annotations
-                  (mapcar
-                   (lambda (c) (cons c (company-call-backend 'annotation c)))
-                   cc))
-          (error (setq annotations 'error)))))
-    (pop-to-buffer (get-buffer-create "*company-diag*"))
-    (setq buffer-read-only nil)
-    (erase-buffer)
-    (insert (format "Emacs %s (%s) of %s on %s"
-                    emacs-version system-configuration
-                    (format-time-string "%Y-%m-%d" emacs-build-time)
-                    emacs-build-system))
-    (insert "\nCompany " (company-version) "\n\n")
-    (insert "company-backends: " (pp-to-string bb))
-    (insert "\n")
-    (insert "Used backend: " (pp-to-string backend))
-    (insert "\n")
-    (when (if (listp backend)
-              (memq 'company-capf backend)
-            (eq backend 'company-capf))
-      (insert "Value of c-a-p-f: "
-              (pp-to-string completion-at-point-functions)))
-    (insert "Major mode: " mode)
-    (insert "\n")
-    (insert "Prefix: " (pp-to-string prefix))
-    (insert "\n")
-    (insert "Completions:")
-    (unless cc (insert " none"))
-    (if (eq annotations 'error)
-        (insert "(error fetching)")
-      (save-excursion
-        (dolist (c annotations)
-          (insert "\n  " (prin1-to-string (car c)))
-          (when (cdr c)
-            (insert " " (prin1-to-string (cdr c)))))))
-    (special-mode)))
-
-;;; pseudo-tooltip 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-pseudo-tooltip-overlay nil)
-
-(defvar-local company-tooltip-offset 0)
-
-(defun company-tooltip--lines-update-offset (selection num-lines limit)
-  (cl-decf limit 2)
-  (setq company-tooltip-offset
-        (max (min selection company-tooltip-offset)
-             (- selection -1 limit)))
-
-  (when (<= company-tooltip-offset 1)
-    (cl-incf limit)
-    (setq company-tooltip-offset 0))
-
-  (when (>= company-tooltip-offset (- num-lines limit 1))
-    (cl-incf limit)
-    (when (= selection (1- num-lines))
-      (cl-decf company-tooltip-offset)
-      (when (<= company-tooltip-offset 1)
-        (setq company-tooltip-offset 0)
-        (cl-incf limit))))
-
-  limit)
-
-(defun company-tooltip--simple-update-offset (selection _num-lines limit)
-  (setq company-tooltip-offset
-        (if (< selection company-tooltip-offset)
-            selection
-          (max company-tooltip-offset
-               (- selection limit -1)))))
-
-;;; propertize
-
-(defsubst company-round-tab (arg)
-  (* (/ (+ arg tab-width) tab-width) tab-width))
-
-(defun company-plainify (str)
-  (let ((prefix (get-text-property 0 'line-prefix str)))
-    (when prefix ; Keep the original value unmodified, for no special reason.
-      (setq str (concat prefix str))
-      (remove-text-properties 0 (length str) '(line-prefix) str)))
-  (let* ((pieces (split-string str "\t"))
-         (copy pieces))
-    (while (cdr copy)
-      (setcar copy (company-safe-substring
-                    (car copy) 0 (company-round-tab (string-width (car 
copy)))))
-      (pop copy))
-    (apply 'concat pieces)))
-
-(defun company-fill-propertize (value annotation width selected left right)
-  (let* ((margin (length left))
-         (common (or (company-call-backend 'match value)
-                     (if company-common
-                         (string-width company-common)
-                       0)))
-         (_ (setq value (company-reformat (company--pre-render value))
-                  annotation (and annotation (company--pre-render annotation 
t))))
-         (ann-ralign company-tooltip-align-annotations)
-         (ann-truncate (< width
-                          (+ (length value) (length annotation)
-                             (if ann-ralign 1 0))))
-         (ann-start (+ margin
-                       (if ann-ralign
-                           (if ann-truncate
-                               (1+ (length value))
-                             (- width (length annotation)))
-                         (length value))))
-         (ann-end (min (+ ann-start (length annotation)) (+ margin width)))
-         (line (concat left
-                       (if (or ann-truncate (not ann-ralign))
-                           (company-safe-substring
-                            (concat value
-                                    (when (and annotation ann-ralign) " ")
-                                    annotation)
-                            0 width)
-                         (concat
-                          (company-safe-substring value 0
-                                                  (- width (length 
annotation)))
-                          annotation))
-                       right)))
-    (setq width (+ width margin (length right)))
-
-    ;; TODO: Use add-face-text-property in Emacs 24.4
-    (font-lock-append-text-property 0 width 'mouse-face
-                                    'company-tooltip-mouse
-                                    line)
-    (when (< ann-start ann-end)
-      (font-lock-append-text-property ann-start ann-end 'face
-                                      (if selected
-                                          'company-tooltip-annotation-selection
-                                        'company-tooltip-annotation)
-                                      line))
-    (cl-loop
-     with width = (- width (length right))
-     for (comp-beg . comp-end) in (if (integerp common) `((0 . ,common)) 
common)
-     for inline-beg = (+ margin comp-beg)
-     for inline-end = (min (+ margin comp-end) width)
-     when (< inline-beg width)
-     do (font-lock-prepend-text-property inline-beg inline-end 'face
-                                         (if selected
-                                             'company-tooltip-common-selection
-                                           'company-tooltip-common)
-                                         line))
-    (when (let ((re (funcall company-search-regexp-function
-                             company-search-string)))
-            (and (not (string= re ""))
-                 (string-match re value (length company-prefix))))
-      (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
-        (let ((beg (+ margin mbeg))
-              (end (+ margin mend))
-              (width (- width (length right))))
-          (when (< beg width)
-            (font-lock-prepend-text-property beg (min end width) 'face
-                                             (if selected
-                                                 
'company-tooltip-search-selection
-                                               'company-tooltip-search)
-                                             line)))))
-    (when selected
-      (font-lock-append-text-property 0 width 'face
-                                      'company-tooltip-selection
-                                      line))
-    (font-lock-append-text-property 0 width 'face
-                                    'company-tooltip
-                                    line)
-    line))
-
-(defun company--search-chunks ()
-  (let ((md (match-data t))
-        res)
-    (if (<= (length md) 2)
-        (push (cons (nth 0 md) (nth 1 md)) res)
-      (while (setq md (nthcdr 2 md))
-        (when (car md)
-          (push (cons (car md) (cadr md)) res))))
-    res))
-
-(defun company--pre-render (str &optional annotation-p)
-  (or (company-call-backend 'pre-render str annotation-p)
-      (progn
-        (when (or (text-property-not-all 0 (length str) 'face nil str)
-                  (text-property-not-all 0 (length str) 'mouse-face nil str))
-          (setq str (copy-sequence str))
-          (remove-text-properties 0 (length str)
-                                  '(face nil font-lock-face nil mouse-face nil)
-                                  str))
-        str)))
-
-(defun company--clean-string (str)
-  (replace-regexp-in-string
-   "\\([^[:graph:] ]\\)\\|\\(\ufeff\\)\\|[[:multibyte:]]"
-   (lambda (match)
-     (cond
-      ((match-beginning 1)
-       ;; FIXME: Better char for 'non-printable'?
-       ;; We shouldn't get any of these, but sometimes we might.
-       "\u2017")
-      ((match-beginning 2)
-       ;; Zero-width non-breakable space.
-       "")
-      ((> (string-width match) 1)
-       (concat
-        (make-string (1- (string-width match)) ?\ufeff)
-        match))
-      (t match)))
-   str))
-
-;;; replace
-
-(defun company-buffer-lines (beg end)
-  (goto-char beg)
-  (let (lines lines-moved)
-    (while (and (not (eobp)) ; http://debbugs.gnu.org/19553
-                (> (setq lines-moved (vertical-motion 1)) 0)
-                (<= (point) end))
-      (let ((bound (min end (point))))
-        ;; A visual line can contain several physical lines (e.g. with 
outline's
-        ;; folding overlay).  Take only the first one.
-        (push (buffer-substring beg
-                                (save-excursion
-                                  (goto-char beg)
-                                  (re-search-forward "$" bound 'move)
-                                  (point)))
-              lines))
-      ;; One physical line can be displayed as several visual ones as well:
-      ;; add empty strings to the list, to even the count.
-      (dotimes (_ (1- lines-moved))
-        (push "" lines))
-      (setq beg (point)))
-    (unless (eq beg end)
-      (push (buffer-substring beg end) lines))
-    (nreverse lines)))
-
-(defun company-modify-line (old new offset)
-  (concat (company-safe-substring old 0 offset)
-          new
-          (company-safe-substring old (+ offset (length new)))))
-
-(defun company--show-numbers (numbered)
-  (format " %d" (mod numbered 10)))
-
-(defsubst company--window-height ()
-  (if (fboundp 'window-screen-lines)
-      (floor (window-screen-lines))
-    (window-body-height)))
-
-(defun company--window-width ()
-  (let ((ww (window-body-width)))
-    ;; Account for the line continuation column.
-    (when (zerop (cadr (window-fringes)))
-      (cl-decf ww))
-    (when (bound-and-true-p display-line-numbers)
-      (cl-decf ww (+ 2 (line-number-display-width))))
-    (unless (or (display-graphic-p)
-                (version< "24.3.1" emacs-version))
-      ;; Emacs 24.3 and earlier included margins
-      ;; in window-width when in TTY.
-      (cl-decf ww
-               (let ((margins (window-margins)))
-                 (+ (or (car margins) 0)
-                    (or (cdr margins) 0)))))
-    (when (and word-wrap
-               (version< emacs-version "24.4.51.5"))
-      ;; http://debbugs.gnu.org/19300
-      (cl-decf ww))
-    ;; whitespace-mode with newline-mark
-    (when (and buffer-display-table
-               (aref buffer-display-table ?\n))
-      (cl-decf ww (1- (length (aref buffer-display-table ?\n)))))
-    ww))
-
-(defun company--replacement-string (lines old column nl &optional align-top)
-  (cl-decf column company-tooltip-margin)
-
-  (when (and align-top company-tooltip-flip-when-above)
-    (setq lines (reverse lines)))
-
-  (let ((width (length (car lines)))
-        (remaining-cols (- (+ (company--window-width) (window-hscroll))
-                           column)))
-    (when (> width remaining-cols)
-      (cl-decf column (- width remaining-cols))))
-
-  (let ((offset (and (< column 0) (- column)))
-        new)
-    (when offset
-      (setq column 0))
-    (when align-top
-      ;; untouched lines first
-      (dotimes (_ (- (length old) (length lines)))
-        (push (pop old) new)))
-    ;; length into old lines.
-    (while old
-      (push (company-modify-line (pop old)
-                                 (company--offset-line (pop lines) offset)
-                                 column)
-            new))
-    ;; Append whole new lines.
-    (while lines
-      (push (concat (company-space-string column)
-                    (company--offset-line (pop lines) offset))
-            new))
-
-    (let ((str (concat (when nl " \n")
-                       (mapconcat 'identity (nreverse new) "\n")
-                       "\n")))
-      (when nl (put-text-property 0 1 'cursor t str))
-      str)))
-
-(defun company--offset-line (line offset)
-  (if (and offset line)
-      (substring line offset)
-    line))
-
-(defun company--create-lines (selection limit)
-  (let ((len company-candidates-length)
-        (window-width (company--window-width))
-        lines
-        width
-        lines-copy
-        items
-        previous
-        remainder
-        scrollbar-bounds)
-
-    ;; Maybe clear old offset.
-    (when (< len (+ company-tooltip-offset limit))
-      (setq company-tooltip-offset 0))
-
-    ;; Scroll to offset.
-    (if (eq company-tooltip-offset-display 'lines)
-        (setq limit (company-tooltip--lines-update-offset selection len limit))
-      (company-tooltip--simple-update-offset selection len limit))
-
-    (cond
-     ((eq company-tooltip-offset-display 'scrollbar)
-      (setq scrollbar-bounds (company--scrollbar-bounds company-tooltip-offset
-                                                        limit len)))
-     ((eq company-tooltip-offset-display 'lines)
-      (when (> company-tooltip-offset 0)
-        (setq previous (format "...(%d)" company-tooltip-offset)))
-      (setq remainder (- len limit company-tooltip-offset)
-            remainder (when (> remainder 0)
-                        (setq remainder (format "...(%d)" remainder))))))
-
-    (cl-decf selection company-tooltip-offset)
-    (setq width (max (length previous) (length remainder))
-          lines (nthcdr company-tooltip-offset company-candidates)
-          len (min limit len)
-          lines-copy lines)
-
-    (cl-decf window-width (* 2 company-tooltip-margin))
-    (when scrollbar-bounds (cl-decf window-width))
-
-    (dotimes (_ len)
-      (let* ((value (pop lines-copy))
-             (annotation (company-call-backend 'annotation value)))
-        (setq value (company--clean-string value))
-        (when annotation
-          (setq annotation (company--clean-string annotation))
-          (when company-tooltip-align-annotations
-            ;; `lisp-completion-at-point' adds a space.
-            (setq annotation (comment-string-strip annotation t nil))))
-        (push (cons value annotation) items)
-        (setq width (max (+ (length value)
-                            (if (and annotation 
company-tooltip-align-annotations)
-                                (1+ (length annotation))
-                              (length annotation)))
-                         width))))
-
-    (setq width (min window-width
-                     company-tooltip-maximum-width
-                     (max company-tooltip-minimum-width
-                          (if company-show-numbers
-                              (+ 2 width)
-                            width))))
-
-    (let ((items (nreverse items))
-          (numbered (if company-show-numbers 0 99999))
-          new)
-      (when previous
-        (push (company--scrollpos-line previous width) new))
-
-      (dotimes (i len)
-        (let* ((item (pop items))
-               (str (car item))
-               (annotation (cdr item))
-               (margin (company-space-string company-tooltip-margin))
-               (left margin)
-               (right margin)
-               (width width))
-          (when (< numbered 10)
-            (cl-decf width 2)
-            (cl-incf numbered)
-            (setf (if (eq company-show-numbers 'left) left right)
-                  (concat (funcall company-show-numbers-function numbered)
-                          margin)))
-          (push (concat
-                 (company-fill-propertize str annotation
-                                          width (equal i selection)
-                                          left
-                                          right)
-                 (when scrollbar-bounds
-                   (company--scrollbar i scrollbar-bounds)))
-                new)))
-
-      (when remainder
-        (push (company--scrollpos-line remainder width) new))
-
-      (nreverse new))))
-
-(defun company--scrollbar-bounds (offset limit length)
-  (when (> length limit)
-    (let* ((size (ceiling (* limit (float limit)) length))
-           (lower (floor (* limit (float offset)) length))
-           (upper (+ lower size -1)))
-      (cons lower upper))))
-
-(defun company--scrollbar (i bounds)
-  (propertize " " 'face
-              (if (and (>= i (car bounds)) (<= i (cdr bounds)))
-                  'company-scrollbar-fg
-                'company-scrollbar-bg)))
-
-(defun company--scrollpos-line (text width)
-  (propertize (concat (company-space-string company-tooltip-margin)
-                      (company-safe-substring text 0 width)
-                      (company-space-string company-tooltip-margin))
-              'face 'company-tooltip))
-
-;; show
-
-(defun company--pseudo-tooltip-height ()
-  "Calculate the appropriate tooltip height.
-Returns a negative number if the tooltip should be displayed above point."
-  (let* ((lines (company--row))
-         (below (- (company--window-height) 1 lines)))
-    (if (and (< below (min company-tooltip-minimum company-candidates-length))
-             (> lines below))
-        (- (max 3 (min company-tooltip-limit lines)))
-      (max 3 (min company-tooltip-limit below)))))
-
-(defun company-pseudo-tooltip-show (row column selection)
-  (company-pseudo-tooltip-hide)
-
-    (let* ((height (company--pseudo-tooltip-height))
-           above)
-
-      (when (< height 0)
-        (setq row (+ row height -1)
-              above t))
-
-      (let (nl beg end ov args)
-        (save-excursion
-          (setq nl (< (move-to-window-line row) row)
-                beg (point)
-                end (save-excursion
-                      (move-to-window-line (+ row (abs height)))
-                      (point))
-                ov (make-overlay beg end nil t)
-                args (list (mapcar 'company-plainify
-                                   (company-buffer-lines beg end))
-                           column nl above)))
-
-        (setq company-pseudo-tooltip-overlay ov)
-        (overlay-put ov 'company-replacement-args args)
-
-        (let ((lines (company--create-lines selection (abs height))))
-          (overlay-put ov 'company-display
-                       (apply 'company--replacement-string lines args))
-          (overlay-put ov 'company-width (string-width (car lines))))
-
-        (overlay-put ov 'company-column column)
-        (overlay-put ov 'company-height height))))
-
-(defun company-pseudo-tooltip-show-at-point (pos column-offset)
-  (let* ((col-row (company--col-row pos))
-         (col (- (car col-row) column-offset)))
-    (when (< col 0) (setq col 0))
-    (company-pseudo-tooltip-show (1+ (cdr col-row)) col company-selection)))
-
-(defun company-pseudo-tooltip-edit (selection)
-  (let* ((height (overlay-get company-pseudo-tooltip-overlay 'company-height))
-         (lines  (company--create-lines selection (abs height))))
-    (overlay-put company-pseudo-tooltip-overlay 'company-width
-                 (string-width (car lines)))
-    (overlay-put company-pseudo-tooltip-overlay 'company-display
-                 (apply 'company--replacement-string
-                        lines
-                        (overlay-get company-pseudo-tooltip-overlay
-                                     'company-replacement-args)))))
-
-(defun company-pseudo-tooltip-hide ()
-  (when company-pseudo-tooltip-overlay
-    (delete-overlay company-pseudo-tooltip-overlay)
-    (setq company-pseudo-tooltip-overlay nil)))
-
-(defun company-pseudo-tooltip-hide-temporarily ()
-  (when (overlayp company-pseudo-tooltip-overlay)
-    (overlay-put company-pseudo-tooltip-overlay 'invisible nil)
-    (overlay-put company-pseudo-tooltip-overlay 'line-prefix nil)
-    (overlay-put company-pseudo-tooltip-overlay 'after-string nil)
-    (overlay-put company-pseudo-tooltip-overlay 'display nil)
-    (overlay-put company-pseudo-tooltip-overlay 'face nil)))
-
-(defun company-pseudo-tooltip-unhide ()
-  (when company-pseudo-tooltip-overlay
-    (let* ((ov company-pseudo-tooltip-overlay)
-           (disp (overlay-get ov 'company-display)))
-      ;; Beat outline's folding overlays.
-      ;; And Flymake (53). And Flycheck (110).
-      (overlay-put ov 'priority 111)
-      ;; No (extra) prefix for the first line.
-      (overlay-put ov 'line-prefix "")
-      ;; `display' is better
-      ;; (http://debbugs.gnu.org/18285, http://debbugs.gnu.org/20847),
-      ;; but it doesn't work on 0-length overlays.
-      (if (< (overlay-start ov) (overlay-end ov))
-          (overlay-put ov 'display disp)
-        (overlay-put ov 'after-string disp)
-        (overlay-put ov 'invisible t))
-      (overlay-put ov 'face 'default)
-      (overlay-put ov 'window (selected-window)))))
-
-(defun company-pseudo-tooltip-guard ()
-  (list
-   (save-excursion (beginning-of-visual-line))
-   (window-width)
-   (let ((ov company-pseudo-tooltip-overlay)
-         (overhang (save-excursion (end-of-visual-line)
-                                   (- (line-end-position) (point)))))
-     (when (>= (overlay-get ov 'company-height) 0)
-       (cons
-        (buffer-substring-no-properties (point) (overlay-start ov))
-        (when (>= overhang 0) overhang))))))
-
-(defun company-pseudo-tooltip-frontend (command)
-  "`company-mode' frontend similar to a tooltip but based on overlays."
-  (cl-case command
-    (pre-command (company-pseudo-tooltip-hide-temporarily))
-    (post-command
-     (unless (when (overlayp company-pseudo-tooltip-overlay)
-              (let* ((ov company-pseudo-tooltip-overlay)
-                     (old-height (overlay-get ov 'company-height))
-                     (new-height (company--pseudo-tooltip-height)))
-                (and
-                 (>= (* old-height new-height) 0)
-                 (>= (abs old-height) (abs new-height))
-                 (equal (company-pseudo-tooltip-guard)
-                        (overlay-get ov 'company-guard)))))
-       ;; Redraw needed.
-       (company-pseudo-tooltip-show-at-point (point) (length company-prefix))
-       (overlay-put company-pseudo-tooltip-overlay
-                    'company-guard (company-pseudo-tooltip-guard)))
-     (company-pseudo-tooltip-unhide))
-    (hide (company-pseudo-tooltip-hide)
-          (setq company-tooltip-offset 0))
-    (update (when (overlayp company-pseudo-tooltip-overlay)
-              (company-pseudo-tooltip-edit company-selection)))))
-
-(defun company-pseudo-tooltip-unless-just-one-frontend (command)
-  "`company-pseudo-tooltip-frontend', but not shown for single candidates."
-  (unless (and (eq command 'post-command)
-               (company--show-inline-p))
-    (company-pseudo-tooltip-frontend command)))
-
-(defun company-pseudo-tooltip-unless-just-one-frontend-with-delay (command)
-  "`compandy-pseudo-tooltip-frontend', but shown after a delay.
-Delay is determined by `company-tooltip-idle-delay'."
-  (defvar company-preview-overlay)
-  (when (and (memq command '(pre-command hide))
-             company-tooltip-timer)
-    (cancel-timer company-tooltip-timer)
-    (setq company-tooltip-timer nil))
-  (cl-case command
-    (post-command
-     (if (or company-tooltip-timer
-             (overlayp company-pseudo-tooltip-overlay))
-         (if (not (overlayp company-preview-overlay))
-             (company-pseudo-tooltip-unless-just-one-frontend command)
-           (let (company-tooltip-timer)
-             (company-call-frontends 'pre-command))
-           (company-call-frontends 'post-command))
-       (setq company-tooltip-timer
-             (run-with-timer company-tooltip-idle-delay nil
-                             
'company-pseudo-tooltip-unless-just-one-frontend-with-delay
-                             'post-command))))
-    (t
-     (company-pseudo-tooltip-unless-just-one-frontend command))))
-
-;;; overlay 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-preview-overlay nil)
-
-(defun company-preview-show-at-point (pos completion)
-  (company-preview-hide)
-
-  (setq completion (copy-sequence (company--pre-render completion)))
-  (font-lock-append-text-property 0 (length completion)
-                                  'face 'company-preview
-                                  completion)
-    (font-lock-prepend-text-property 0 (length company-common)
-                                     'face 'company-preview-common
-                                     completion)
-
-    ;; Add search string
-    (and (string-match (funcall company-search-regexp-function
-                                company-search-string)
-                       completion)
-         (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
-           (font-lock-prepend-text-property mbeg mend
-                                            'face 'company-preview-search
-                                            completion)))
-
-    (setq completion (company-strip-prefix completion))
-
-    (and (equal pos (point))
-         (not (equal completion ""))
-         (add-text-properties 0 1 '(cursor 1) completion))
-
-    (let* ((beg pos)
-           (pto company-pseudo-tooltip-overlay)
-           (ptf-workaround (and
-                            pto
-                            (char-before pos)
-                            (eq pos (overlay-start pto)))))
-      ;; Try to accommodate for the pseudo-tooltip overlay,
-      ;; which may start at the same position if it's at eol.
-      (when ptf-workaround
-        (cl-decf beg)
-        (setq completion (concat (buffer-substring beg pos) completion)))
-
-      (setq company-preview-overlay (make-overlay beg pos))
-
-      (let ((ov company-preview-overlay))
-        (overlay-put ov (if ptf-workaround 'display 'after-string)
-                     completion)
-        (overlay-put ov 'window (selected-window)))))
-
-(defun company-preview-hide ()
-  (when company-preview-overlay
-    (delete-overlay company-preview-overlay)
-    (setq company-preview-overlay nil)))
-
-(defun company-preview-frontend (command)
-  "`company-mode' frontend showing the selection as if it had been inserted."
-  (pcase command
-    (`pre-command (company-preview-hide))
-    (`post-command (company-preview-show-at-point (point)
-                                                  (nth company-selection 
company-candidates)))
-    (`hide (company-preview-hide))))
-
-(defun company-preview-if-just-one-frontend (command)
-  "`company-preview-frontend', but only shown for single candidates."
-  (when (or (not (eq command 'post-command))
-            (company--show-inline-p))
-    (company-preview-frontend command)))
-
-(defun company--show-inline-p ()
-  (and (not (cdr company-candidates))
-       company-common
-       (not (eq t (compare-strings company-prefix nil nil
-                                   (car company-candidates) nil nil
-                                   t)))
-       (or (eq (company-call-backend 'ignore-case) 'keep-prefix)
-           (string-prefix-p company-prefix company-common))))
-
-(defun company-tooltip-visible-p ()
-  "Returns whether the tooltip is visible."
-  (when (overlayp company-pseudo-tooltip-overlay)
-    (not (overlay-get company-pseudo-tooltip-overlay 'invisible))))
-
-(defun company-preview-common--show-p ()
-  "Returns whether the preview of common can be showed or not"
-  (and company-common
-       (or (eq (company-call-backend 'ignore-case) 'keep-prefix)
-           (string-prefix-p company-prefix company-common))))
-
-(defun company-preview-common-frontend (command)
-  "`company-mode' frontend preview the common part of candidates."
-  (when (or (not (eq command 'post-command))
-            (company-preview-common--show-p))
-    (pcase command
-      (`pre-command (company-preview-hide))
-      (`post-command (company-preview-show-at-point (point) company-common))
-      (`hide (company-preview-hide)))))
-
-;;; echo 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-echo-last-msg nil)
-
-(defvar company-echo-timer nil)
-
-(defvar company-echo-delay .01)
-
-(defcustom company-echo-truncate-lines t
-  "Whether frontend messages written to the echo area should be truncated."
-  :type 'boolean
-  :package-version '(company . "0.9.3"))
-
-(defun company-echo-show (&optional getter)
-  (when getter
-    (setq company-echo-last-msg (funcall getter)))
-  (let ((message-log-max nil)
-        (message-truncate-lines company-echo-truncate-lines))
-    (if company-echo-last-msg
-        (message "%s" company-echo-last-msg)
-      (message ""))))
-
-(defun company-echo-show-soon (&optional getter)
-  (company-echo-cancel)
-  (setq company-echo-timer (run-with-timer 0 nil 'company-echo-show getter)))
-
-(defun company-echo-cancel (&optional unset)
-  (when company-echo-timer
-    (cancel-timer company-echo-timer))
-  (when unset
-    (setq company-echo-timer nil)))
-
-(defun company-echo-show-when-idle (&optional getter)
-  (company-echo-cancel)
-  (setq company-echo-timer
-        (run-with-idle-timer company-echo-delay nil 'company-echo-show 
getter)))
-
-(defun company-echo-format ()
-
-  (let ((limit (window-body-width (minibuffer-window)))
-        (len -1)
-        ;; Roll to selection.
-        (candidates (nthcdr company-selection company-candidates))
-        (i (if company-show-numbers company-selection 99999))
-        comp msg)
-
-    (while candidates
-      (setq comp (company-reformat (company--clean-string (pop candidates)))
-            len (+ len 1 (length comp)))
-      (if (< i 10)
-          ;; Add number.
-          (progn
-            (setq comp (propertize (format "%d: %s" i comp)
-                                   'face 'company-echo))
-            (cl-incf len 3)
-            (cl-incf i)
-            (add-text-properties 3 (+ 3 (string-width company-common))
-                                 '(face company-echo-common) comp))
-        (setq comp (propertize comp 'face 'company-echo))
-        (add-text-properties 0 (string-width company-common)
-                             '(face company-echo-common) comp))
-      (if (>= len limit)
-          (setq candidates nil)
-        (push comp msg)))
-
-    (mapconcat 'identity (nreverse msg) " ")))
-
-(defun company-echo-strip-common-format ()
-
-  (let ((limit (window-body-width (minibuffer-window)))
-        (len (+ (length company-prefix) 2))
-        ;; Roll to selection.
-        (candidates (nthcdr company-selection company-candidates))
-        (i (if company-show-numbers company-selection 99999))
-        msg comp)
-
-    (while candidates
-      (setq comp (company-strip-prefix (pop candidates))
-            len (+ len 2 (length comp)))
-      (when (< i 10)
-        ;; Add number.
-        (setq comp (format "%s (%d)" comp i))
-        (cl-incf len 4)
-        (cl-incf i))
-      (if (>= len limit)
-          (setq candidates nil)
-        (push (propertize comp 'face 'company-echo) msg)))
-
-    (concat (propertize company-prefix 'face 'company-echo-common) "{"
-            (mapconcat 'identity (nreverse msg) ", ")
-            "}")))
-
-(defun company-echo-hide ()
-  (unless (equal company-echo-last-msg "")
-    (setq company-echo-last-msg "")
-    (company-echo-show)))
-
-(defun company-echo-frontend (command)
-  "`company-mode' frontend showing the candidates in the echo area."
-  (pcase command
-    (`post-command (company-echo-show-soon 'company-echo-format))
-    (`hide (company-echo-hide))))
-
-(defun company-echo-strip-common-frontend (command)
-  "`company-mode' frontend showing the candidates in the echo area."
-  (pcase command
-    (`post-command (company-echo-show-soon 'company-echo-strip-common-format))
-    (`hide (company-echo-hide))))
-
-(defun company-echo-metadata-frontend (command)
-  "`company-mode' frontend showing the documentation in the echo area."
-  (pcase command
-    (`post-command (company-echo-show-when-idle 'company-fetch-metadata))
-    (`hide (company-echo-hide))))
-
-(provide 'company)
-;;; company.el ends here
diff --git a/packages/company/test/all.el b/packages/company/test/all.el
deleted file mode 100644
index 29dc916..0000000
--- a/packages/company/test/all.el
+++ /dev/null
@@ -1,30 +0,0 @@
-;;; all-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(defvar company-test-path
-  (file-name-directory (or load-file-name buffer-file-name)))
-
-(require 'ert)
-
-(dolist (test-file (directory-files company-test-path t "-tests.el$"))
-  (unless (and (= emacs-major-version 24)
-               (equal (file-name-base test-file) "capf-tests"))
-    (load test-file nil t)))
diff --git a/packages/company/test/async-tests.el 
b/packages/company/test/async-tests.el
deleted file mode 100644
index be9c2b5..0000000
--- a/packages/company/test/async-tests.el
+++ /dev/null
@@ -1,221 +0,0 @@
-;;; async-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015, 2016, 2018  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-
-(defun company-async-backend (command &optional _)
-  (pcase command
-    (`prefix "foo")
-    (`candidates
-     (cons :async
-           (lambda (cb)
-             (run-with-timer 0.05 nil
-                             #'funcall cb '("abc" "abd")))))))
-
-(ert-deftest company-call-backend-forces-sync ()
-  (let ((company-backend 'company-async-backend)
-        (company-async-timeout 0.1))
-    (should (equal '("abc" "abd") (company-call-backend 'candidates)))))
-
-(ert-deftest company-call-backend-errors-on-timeout ()
-  (with-temp-buffer
-    (let* ((company-backend (lambda (command &optional _arg)
-                              (pcase command
-                                (`candidates (cons :async 'ignore)))))
-           (company-async-timeout 0.1)
-           (err (should-error (company-call-backend 'candidates "foo"))))
-      (should (string-match-p "async timeout" (cadr err))))))
-
-(ert-deftest company-call-backend-raw-passes-return-value-verbatim ()
-  (let ((company-backend 'company-async-backend))
-    (should (equal "foo" (company-call-backend-raw 'prefix)))
-    (should (equal :async (car (company-call-backend-raw 'candidates "foo"))))
-    (should (equal 'closure (cadr (company-call-backend-raw 'candidates 
"foo"))))))
-
-(ert-deftest company-manual-begin-forces-async-candidates-to-sync ()
-  (with-temp-buffer
-    (company-mode)
-    (let (company-frontends
-          company-transformers
-          (company-backends (list 'company-async-backend)))
-      (company-manual-begin)
-      (should (equal "foo" company-prefix))
-      (should (equal '("abc" "abd") company-candidates)))))
-
-(ert-deftest company-idle-begin-allows-async-candidates ()
-  (with-temp-buffer
-    (company-mode)
-    (let (company-frontends
-          company-transformers
-          (company-backends (list 'company-async-backend))
-          unread-command-events
-          noninteractive
-          (start-time (current-time)))
-      (company-idle-begin (current-buffer) (selected-window)
-                          (buffer-chars-modified-tick) (point))
-      (should (< (time-to-seconds
-                  (time-subtract (current-time) start-time))
-                 0.1))
-      (should (equal "foo" company-prefix))
-      (should (equal '("abc" "abd") company-candidates)))))
-
-(ert-deftest company-idle-begin-with-async-aborts-on-user-input ()
-  (with-temp-buffer
-    (company-mode)
-    (let (company-frontends
-          (company-backends (list 'company-async-backend))
-          noninteractive
-          (unread-command-events (list 'company-dummy-event)))
-      (company-idle-begin (current-buffer) (selected-window)
-                          (buffer-chars-modified-tick) (point))
-      (should (null company-candidates)))))
-
-(ert-deftest company-idle-begin-async-allows-immediate-callbacks ()
-  (with-temp-buffer
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional arg)
-                   (pcase command
-                     (`prefix (buffer-substring (point-min) (point)))
-                     (`candidates
-                      (let ((c (all-completions arg '("abc" "def"))))
-                        (cons :async
-                              (lambda (cb) (funcall cb c)))))
-                     (`no-cache t)))))
-          (company-minimum-prefix-length 0)
-          (unread-command-events (list 'company-dummy-event)))
-      (company-idle-begin (current-buffer) (selected-window)
-                          (buffer-chars-modified-tick) (point))
-      (should (equal '("abc" "def") company-candidates))
-      (let ((last-command-event ?a))
-        (company-call 'self-insert-command 1))
-      (should (equal '("abc") company-candidates)))))
-
-(ert-deftest company-multi-backend-forces-prefix-to-sync ()
-  (with-temp-buffer
-    (let ((company-backend (list 'ignore
-                                 (lambda (command)
-                                   (should (eq command 'prefix))
-                                   (cons :async
-                                         (lambda (cb)
-                                           (run-with-timer
-                                            0.01 nil
-                                            (lambda () (funcall cb nil))))))
-                                 (lambda (command)
-                                   (should (eq command 'prefix))
-                                   "foo"))))
-      (should (equal "foo" (company-call-backend-raw 'prefix))))
-    (let ((company-backend (list (lambda (_command)
-                                   (cons :async
-                                         (lambda (cb)
-                                           (run-with-timer
-                                            0.01 nil
-                                            (lambda () (funcall cb "bar"))))))
-                                 (lambda (_command)
-                                   "foo"))))
-      (should (equal "bar" (company-call-backend-raw 'prefix))))))
-
-(ert-deftest company-multi-backend-merges-deferred-candidates ()
-  (with-temp-buffer
-    (let* ((immediate (lambda (command &optional _)
-                        (pcase command
-                          (`prefix "foo")
-                          (`candidates
-                           (cons :async
-                                 (lambda (cb) (funcall cb '("f"))))))))
-           (company-backend (list 'ignore
-                                  (lambda (command &optional arg)
-                                    (pcase command
-                                      (`prefix "foo")
-                                      (`candidates
-                                       (should (equal arg "foo"))
-                                       (cons :async
-                                             (lambda (cb)
-                                               (run-with-timer
-                                                0.01 nil
-                                                (lambda () (funcall cb '("a" 
"b")))))))))
-                                  (lambda (command &optional _)
-                                    (pcase command
-                                      (`prefix "foo")
-                                      (`candidates '("c" "d" "e"))))
-                                  immediate)))
-      (should (equal :async (car (company-call-backend-raw 'candidates 
"foo"))))
-      (should (equal '("a" "b" "c" "d" "e" "f")
-                     (company-call-backend 'candidates "foo")))
-      (let ((company-backend (list immediate)))
-        (should (equal '("f") (company-call-backend 'candidates "foo")))))))
-
-(ert-deftest company-multi-backend-merges-deferred-candidates-2 ()
-  (with-temp-buffer
-    (let ((company-backend (list (lambda (command &optional _)
-                                   (pcase command
-                                     (`prefix "foo")
-                                     (`candidates
-                                      (cons :async
-                                            (lambda (cb) (funcall cb '("a" 
"b")))))))
-                                 (lambda (command &optional _)
-                                   (pcase command
-                                     (`prefix "foo")
-                                     (`candidates
-                                      (cons :async
-                                            (lambda (cb) (funcall cb '("c" 
"d")))))))
-                                 (lambda (command &optional _)
-                                   (pcase command
-                                     (`prefix "foo")
-                                     (`candidates
-                                      (cons :async
-                                            (lambda (cb) (funcall cb '("e" 
"f"))))))))))
-      (should (equal :async (car (company-call-backend-raw 'candidates 
"foo"))))
-      (should (equal '("a" "b" "c" "d" "e" "f")
-                     (company-call-backend 'candidates "foo"))))))
-
-(ert-deftest company-multi-backend-merges-deferred-candidates-3 ()
-  (with-temp-buffer
-    (let ((company-backend (list (lambda (command &optional _)
-                                   (pcase command
-                                     (`prefix "foo")
-                                     (`candidates
-                                      (cons :async
-                                            (lambda (cb) (funcall cb '("a" 
"b")))))))
-                                 (lambda (command &optional _)
-                                   (pcase command
-                                     (`prefix "foo")
-                                     (`candidates
-                                      (cons :async
-                                            (lambda (cb)
-                                              (run-with-timer
-                                               0.01 nil
-                                               (lambda ()
-                                                 (funcall cb '("c" "d")))))))))
-                                 (lambda (command &optional _)
-                                   (pcase command
-                                     (`prefix "foo")
-                                     (`candidates
-                                      (cons :async
-                                            (lambda (cb)
-                                              (run-with-timer
-                                               0.01 nil
-                                               (lambda ()
-                                                 (funcall cb '("e" 
"f"))))))))))))
-      (should (equal :async (car (company-call-backend-raw 'candidates 
"foo"))))
-      (should (equal '("a" "b" "c" "d" "e" "f")
-                     (company-call-backend 'candidates "foo"))))))
diff --git a/packages/company/test/bbdb-tests.el 
b/packages/company/test/bbdb-tests.el
deleted file mode 100644
index 90af209..0000000
--- a/packages/company/test/bbdb-tests.el
+++ /dev/null
@@ -1,46 +0,0 @@
-;;; bbdb-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2016  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-(require 'company-bbdb)
-
-(provide 'bbdb-com)
-
-(ert-deftest company-bbdb-prefix-looks-in-header-value ()
-  (with-temp-buffer
-    (insert "To: J")
-    (setq-local major-mode 'message-mode)
-    (should (equal (company-bbdb 'prefix)
-                   "J"))))
-
-(ert-deftest company-bbdb-prefix-includes-space ()
-  (with-temp-buffer
-    (insert "To: John Sm")
-    (setq-local major-mode 'message-mode)
-    (should (equal (company-bbdb 'prefix)
-                   "John Sm"))))
-
-(ert-deftest company-bbdb-prefix-begins-after-comma-or-semi ()
-  (with-temp-buffer
-    (insert "To: John Smythe <jsm@y.the>, Jess C")
-    (setq-local major-mode 'message-mode)
-    (should (equal (company-bbdb 'prefix)
-                   "Jess C"))))
diff --git a/packages/company/test/capf-tests.el 
b/packages/company/test/capf-tests.el
deleted file mode 100644
index 80a204d..0000000
--- a/packages/company/test/capf-tests.el
+++ /dev/null
@@ -1,148 +0,0 @@
-;;; capf-tests.el --- company tests for the company-capf backend  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2018  Free Software Foundation, Inc.
-
-;; Author: João Távora <joaotavora@gmail.com>
-;; Keywords: 
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; 
-
-;;; Code:
-
-(require 'company-tests)
-(require 'company-capf)
-(require 'cl-lib)
-
-(defmacro company-capf-with-buffer (contents &rest body)
-  (declare (indent 0) (debug (sexp &rest form)))
-  `(with-temp-buffer
-     (insert ,contents)
-     (emacs-lisp-mode)
-     (re-search-backward "|")
-     (replace-match "")
-     (let ((completion-at-point-functions '(elisp-completion-at-point))
-           (company-backends '(company-capf)))
-       ,@body)))
-
-(ert-deftest company-basic-capf ()
-  "Test basic `company-capf' support."
-  (company-capf-with-buffer
-    "(with-current-buffer|)"
-    (company-mode)
-    (company-complete)
-    (should company-candidates)))
-
-(ert-deftest company-non-prefix-capf ()
-  "Test non-prefix `company-capf' in elisp"
-  (company-capf-with-buffer
-    "(w-c-b|)"
-    (company-mode)
-    (company-complete)
-    (should company-candidates)
-    (should (member "with-current-buffer" company-candidates))))
-
-(defun company--remove-but-these-properties (string keep)
-  "Remove from STRING all text properties but the ones in KEEP."
-  (remove-list-of-text-properties
-   0 (length string)
-   (cl-set-difference
-    (cl-loop for start = 0 then (next-property-change start string)
-             while start
-             append (cl-loop for (k _v) on (text-properties-at start string)
-                             by #'cddr collect k))
-    keep)
-   string)
-  string)
-
-(ert-deftest company-basic-capf-highlighting ()
-  "Test basic `company-capf' support, with basic prefix completion."
-  (company-capf-with-buffer
-    "(with|)"
-    (company-mode)
-    (company-complete)
-    (should company-candidates)
-    (let* ((cand (car (member "with-current-buffer" company-candidates)))
-           (render
-            (and cand
-                 (company-fill-propertize cand nil (length cand) nil nil 
nil))))
-      ;; remove text properties that aren't relevant to our test
-      (company--remove-but-these-properties render '(face))
-      (should
-       (ert-equal-including-properties
-        render
-        #("with-current-buffer"
-          0 4 (face (company-tooltip-common company-tooltip))   ; "with"
-          4 19 (face (company-tooltip))))))))
-
-
-
-;; Re. "perfect" highlighting of the non-prefix in company-capf matches, it is
-;; only working-out-of-the box (i.e. without the `:company-match' meta) in
-;; recent Emacsen containing the following commit.  The two tests that follow
-;; reflect that.
-;;
-;; commit 325ef57b0e3977f9509f1049c826999e8b7c226d
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; Date:   Tue Nov 7 12:17:34 2017 -0500
-
-(ert-deftest company-non-prefix-fancy-capf-highlighting ()
-  "Test highlighting for non-prefix `company-capf' in elisp"
-  (skip-unless (version<= "27.0" emacs-version))
-  (company-capf-with-buffer
-    "(w-c-b|)"
-    (company-mode)
-    (company-complete)
-    (let* ((cand (car (member "with-current-buffer" company-candidates)))
-           (render
-            (and cand
-                 (company-fill-propertize cand nil (length cand) nil nil 
nil))))
-      ;; remove text properties that aren't relevant to our test
-      (company--remove-but-these-properties render '(face))
-      (should
-       (ert-equal-including-properties
-        render
-        #("with-current-buffer"
-          0 1 (face (company-tooltip-common company-tooltip))   ; "w"
-          1 4 (face (company-tooltip))                          ; "ith"
-          4 6 (face (company-tooltip-common company-tooltip))   ; "-c"
-          6 12 (face (company-tooltip))                         ; "urrent"
-          12 14 (face (company-tooltip-common company-tooltip)) ; "-b"
-          14 19 (face (company-tooltip))))))))                  ; "uffer"
-
-(ert-deftest company-non-prefix-modest-capf-highlighting ()
-  "Test highlighting for non-prefix `company-capf' in elisp"
-  (skip-unless (version< emacs-version "27.0"))
-  (company-capf-with-buffer
-    "(w-c-b|)"
-    (company-mode)
-    (company-complete)
-    (let* ((cand (car (member "with-current-buffer" company-candidates)))
-           (render
-            (and cand
-                 (company-fill-propertize cand nil (length cand) nil nil 
nil))))
-      ;; remove text properties that aren't relevant to our test
-      (company--remove-but-these-properties render '(face))
-      (should
-       (ert-equal-including-properties
-        render
-        #("with-current-buffer"
-          0 14 (face (company-tooltip-common company-tooltip)); 
"with-current-b"
-          14 19 (face (company-tooltip))))))))                ; "uffer"
-
-(provide 'capf-tests)
-;;; capf-tests.el ends here
diff --git a/packages/company/test/clang-tests.el 
b/packages/company/test/clang-tests.el
deleted file mode 100644
index 028f57e..0000000
--- a/packages/company/test/clang-tests.el
+++ /dev/null
@@ -1,51 +0,0 @@
-;;; clang-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-(require 'company-clang)
-
-(ert-deftest company-clang-simple-annotation ()
-  (let ((str (propertize
-              "foo" 'meta
-              "wchar_t * wmemchr(wchar_t *__p, wchar_t __c, size_t __n)")))
-    (should (equal (company-clang 'annotation str)
-                   "(wchar_t *__p, wchar_t __c, size_t __n)"))))
-
-(ert-deftest company-clang-generic-annotation ()
-  (let ((str (propertize
-              "foo" 'meta
-              "shared_ptr<_Tp> make_shared<typename _Tp>(_Args &&__args...)")))
-    (should (equal (company-clang 'annotation str)
-                   "<typename _Tp>(_Args &&__args...)"))))
-
-(ert-deftest company-clang-func-ptr-annotation ()
-  (let ((str (propertize "foo" 'meta "void (*)(int) foo")))
-    (should (equal (company-clang 'annotation str) "(*)(int)"))))
-
-(ert-deftest company-clang-null-annotation ()
-  (let ((str "char"))
-    (should (null (company-clang 'annotation str)))))
-
-(ert-deftest company-clang-anon-union-annotation ()
-  (let ((u (propertize "u" 'meta "union (anonymous) u"))
-        (s (propertize "s" 'meta "struct (anonymous) s")))
-    (should (null (company-clang 'annotation u)))
-    (should (null (company-clang 'annotation s)))))
diff --git a/packages/company/test/cmake-tests.el 
b/packages/company/test/cmake-tests.el
deleted file mode 100644
index 83e5d64..0000000
--- a/packages/company/test/cmake-tests.el
+++ /dev/null
@@ -1,44 +0,0 @@
-;;; cmake-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2017  Free Software Foundation, Inc.
-
-;; Author: Zuogong Yue
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-(require 'company-cmake)
-
-(ert-deftest company-cmake-complete-in-string-prefix-quotes ()
-  (with-temp-buffer
-    (insert "set(MyFlags \"${CMAKE_CXX_FLAGS_R")
-    (setq-local major-mode 'cmake-mode)
-    (should (equal (company-cmake 'prefix)
-                   "CMAKE_CXX_FLAGS_R"))))
-
-(ert-deftest company-cmake-complete-in-string-more-prefix ()
-  (with-temp-buffer
-    (insert "set(MyFlags \"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_R")
-    (setq-local major-mode 'cmake-mode)
-    (should (equal (company-cmake 'prefix)
-                   "CMAKE_CXX_FLAGS_R"))))
-
-(ert-deftest company-cmake-complete-in-string-more-prefix-2 ()
-  (with-temp-buffer
-    (insert "set(MyFlags \"${CMAKE_CXX_FLAGS} CMAKE_CXX_FLAGS_R")
-    (setq-local major-mode 'cmake-mode)
-    (should (equal (company-cmake 'prefix)
-                   nil))))
diff --git a/packages/company/test/core-tests.el 
b/packages/company/test/core-tests.el
deleted file mode 100644
index 63feca2..0000000
--- a/packages/company/test/core-tests.el
+++ /dev/null
@@ -1,593 +0,0 @@
-;;; core-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015, 2016, 2017  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-
-(ert-deftest company-good-prefix ()
-  (let ((company-minimum-prefix-length 5)
-        company-abort-manual-when-too-short
-        company--manual-action            ;idle begin
-        (company-selection-changed t))    ;has no effect
-    (should (eq t (company--good-prefix-p "!@#$%")))
-    (should (eq nil (company--good-prefix-p "abcd")))
-    (should (eq nil (company--good-prefix-p 'stop)))
-    (should (eq t (company--good-prefix-p '("foo" . 5))))
-    (should (eq nil (company--good-prefix-p '("foo" . 4))))
-    (should (eq t (company--good-prefix-p '("foo" . t))))))
-
-(ert-deftest company--manual-prefix-set-and-unset ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc" "abd")))))))
-      (company-manual-begin)
-      (should (equal "ab" company--manual-prefix))
-      (company-abort)
-      (should (null company--manual-prefix)))))
-
-(ert-deftest company-auto-begin-unique-cancels ()
-  (with-temp-buffer
-    (insert "abc")
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc")))))))
-      (company-auto-begin)
-      (should (equal nil company-candidates)))))
-
-(ert-deftest company-manual-begin-unique-shows-completion ()
-  (with-temp-buffer
-    (insert "abc")
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc")))))))
-      (company-manual-begin)
-      (should (equal '("abc") company-candidates)))))
-
-(ert-deftest company-abort-manual-when-too-short ()
-  (let ((company-minimum-prefix-length 5)
-        (company-abort-manual-when-too-short t)
-        (company-selection-changed t))    ;has not effect
-    (let ((company--manual-action nil))   ;idle begin
-      (should (eq t (company--good-prefix-p "!@#$%")))
-      (should (eq t (company--good-prefix-p '("foo" . 5))))
-      (should (eq t (company--good-prefix-p '("foo" . t)))))
-    (let ((company--manual-action t)
-          (company--manual-prefix "abc")) ;manual begin from this prefix
-      (should (eq t (company--good-prefix-p "!@#$")))
-      (should (eq nil (company--good-prefix-p "ab")))
-      (should (eq nil (company--good-prefix-p 'stop)))
-      (should (eq t (company--good-prefix-p '("foo" . 4))))
-      (should (eq t (company--good-prefix-p "abcd")))
-      (should (eq t (company--good-prefix-p "abc")))
-      (should (eq t (company--good-prefix-p '("bar" . t)))))))
-
-(ert-deftest company-common-with-non-prefix-completion ()
-  (let ((company-backend #'ignore)
-        (company-prefix "abc")
-        company-candidates
-        company-candidates-length
-        company-candidates-cache
-        company-common)
-    (company-update-candidates '("abc" "def-abc"))
-    (should (null company-common))
-    (company-update-candidates '("abc" "abe-c"))
-    (should (null company-common))
-    (company-update-candidates '("abcd" "abcde" "abcdf"))
-    (should (equal "abcd" company-common))))
-
-(ert-deftest company-multi-backend-with-lambdas ()
-  (let ((company-backend
-         (list (lambda (command &optional _ &rest _r)
-                 (cl-case command
-                   (prefix "z")
-                   (candidates '("a" "b"))))
-               (lambda (command &optional _ &rest _r)
-                 (cl-case command
-                   (prefix "z")
-                   (candidates '("c" "d")))))))
-    (should (equal (company-call-backend 'candidates "z") '("a" "b" "c" 
"d")))))
-
-(ert-deftest company-multi-backend-filters-backends-by-prefix ()
-  (let ((company-backend
-         (list (lambda (command &optional _ &rest _r)
-                 (cl-case command
-                   (prefix (cons "z" t))
-                   (candidates '("a" "b"))))
-               (lambda (command &optional _ &rest _r)
-                 (cl-case command
-                   (prefix "t")
-                   (candidates '("c" "d"))))
-               (lambda (command &optional _ &rest _r)
-                 (cl-case command
-                   (prefix "z")
-                   (candidates '("e" "f")))))))
-    (should (equal (company-call-backend 'candidates "z") '("a" "b" "e" 
"f")))))
-
-(ert-deftest company-multi-backend-remembers-candidate-backend ()
-  (let ((company-backend
-         (list (lambda (command &optional _)
-                 (cl-case command
-                   (ignore-case nil)
-                   (annotation "1")
-                   (candidates '("a" "c"))
-                   (post-completion "13")))
-               (lambda (command &optional _)
-                 (cl-case command
-                   (ignore-case t)
-                   (annotation "2")
-                   (candidates '("b" "d"))
-                   (post-completion "42")))
-               (lambda (command &optional _)
-                 (cl-case command
-                   (annotation "3")
-                   (candidates '("e"))
-                   (post-completion "74"))))))
-    (let ((candidates (company-calculate-candidates nil nil)))
-      (should (equal candidates '("a" "b" "c" "d" "e")))
-      (should (equal t (company-call-backend 'ignore-case)))
-      (should (equal "1" (company-call-backend 'annotation (nth 0 
candidates))))
-      (should (equal "2" (company-call-backend 'annotation (nth 1 
candidates))))
-      (should (equal "13" (company-call-backend 'post-completion (nth 2 
candidates))))
-      (should (equal "42" (company-call-backend 'post-completion (nth 3 
candidates))))
-      (should (equal "3" (company-call-backend 'annotation (nth 4 
candidates))))
-      (should (equal "74" (company-call-backend 'post-completion (nth 4 
candidates)))))))
-
-(ert-deftest company-multi-backend-handles-keyword-with ()
-  (let ((primo (lambda (command &optional _)
-                 (cl-case command
-                   (prefix "a")
-                   (candidates '("abb" "abc" "abd")))))
-        (secundo (lambda (command &optional _)
-                   (cl-case command
-                     (prefix "a")
-                     (candidates '("acc" "acd"))))))
-    (let ((company-backend (list 'ignore 'ignore :with secundo)))
-      (should (null (company-call-backend 'prefix))))
-    (let ((company-backend (list 'ignore primo :with secundo)))
-      (should (equal "a" (company-call-backend 'prefix)))
-      (should (equal '("abb" "abc" "abd" "acc" "acd")
-                     (company-call-backend 'candidates "a"))))))
-
-(ert-deftest company-multi-backend-handles-keyword-separate ()
-  (let ((one (lambda (command &optional _)
-               (cl-case command
-                 (prefix "a")
-                 (candidates (list "aa" "ca" "ba")))))
-        (two (lambda (command &optional _)
-               (cl-case command
-                 (prefix "a")
-                 (candidates (list "bb" "ab")))))
-        (tri (lambda (command &optional _)
-               (cl-case command
-                 (prefix "a")
-                 (sorted t)
-                 (candidates (list "cc" "bc" "ac"))))))
-    (let ((company-backend (list one two tri :separate)))
-      (should (company-call-backend 'sorted))
-      (should-not (company-call-backend 'duplicates))
-      (should (equal '("aa" "ba" "ca" "ab" "bb" "cc" "bc" "ac")
-                     (company-call-backend 'candidates "a"))))))
-
-(ert-deftest company-begin-backend-failure-doesnt-break-company-backends ()
-  (with-temp-buffer
-    (insert "a")
-    (company-mode)
-    (should-error
-     (company-begin-backend #'ignore))
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix "a")
-                     (candidates '("a" "ab" "ac")))))))
-      (let (this-command)
-        (company-call 'complete))
-      (should (eq 3 company-candidates-length)))))
-
-(ert-deftest company-require-match-explicit ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          (company-require-match 'company-explicit-action-p)
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc" "abd")))))))
-      (let (this-command)
-        (company-complete))
-      (let ((last-command-event ?e))
-        (company-call 'self-insert-command 1))
-      (should (eq 2 company-candidates-length))
-      (should (eq 3 (point))))))
-
-(ert-deftest company-dont-require-match-when-idle ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          (company-minimum-prefix-length 2)
-          (company-require-match 'company-explicit-action-p)
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc" "abd")))))))
-      (company-idle-begin (current-buffer) (selected-window)
-                          (buffer-chars-modified-tick) (point))
-      (should (eq 2 company-candidates-length))
-      (let ((last-command-event ?e))
-        (company-call 'self-insert-command 1))
-      (should (eq nil company-candidates-length))
-      (should (eq 4 (point))))))
-
-(ert-deftest company-dont-require-match-if-was-a-match-and-old-prefix-ended ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          company-auto-complete
-          (company-require-match t)
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (company-grab-word))
-                     (candidates '("abc" "ab" "abd"))
-                     (sorted t))))))
-      (let (this-command)
-        (company-complete))
-      (let ((last-command-event ?e))
-        (company-call 'self-insert-command 1))
-      (should (eq 3 company-candidates-length))
-      (should (eq 3 (point)))
-      (let ((last-command-event ? ))
-        (company-call 'self-insert-command 1))
-      (should (null company-candidates-length))
-      (should (eq 4 (point))))))
-
-(ert-deftest company-dont-require-match-if-was-a-match-and-new-prefix-is-stop 
()
-  (with-temp-buffer
-    (company-mode)
-    (insert "c")
-    (let (company-frontends
-          (company-require-match t)
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (if (> (point) 2)
-                                 'stop
-                               (buffer-substring (point-min) (point))))
-                     (candidates '("a" "b" "c")))))))
-      (let (this-command)
-        (company-complete))
-      (should (eq 3 company-candidates-length))
-      (let ((last-command-event ?e))
-        (company-call 'self-insert-command 1))
-      (should (not company-candidates)))))
-
-(ert-deftest company-should-complete-whitelist ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          company-begin-commands
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc" "abd")))))))
-      (let ((company-continue-commands nil))
-        (let (this-command)
-          (company-complete))
-        (company-call 'backward-delete-char 1)
-        (should (null company-candidates-length)))
-      (let ((company-continue-commands '(backward-delete-char)))
-        (let (this-command)
-          (company-complete))
-        (company-call 'backward-delete-char 1)
-        (should (eq 2 company-candidates-length))))))
-
-(ert-deftest company-should-complete-blacklist ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          company-begin-commands
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abc" "abd")))))))
-      (let ((company-continue-commands '(not backward-delete-char)))
-        (let (this-command)
-          (company-complete))
-        (company-call 'backward-delete-char 1)
-        (should (null company-candidates-length)))
-      (let ((company-continue-commands '(not backward-delete-char-untabify)))
-        (let (this-command)
-          (company-complete))
-        (company-call 'backward-delete-char 1)
-        (should (eq 2 company-candidates-length))))))
-
-(ert-deftest company-backspace-into-bad-prefix ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          (company-minimum-prefix-length 2)
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abcd" "abef")))))))
-      (let ((company-idle-delay 'now))
-        (company-auto-begin))
-      (company-call 'backward-delete-char-untabify 1)
-      (should (string= "a" (buffer-string)))
-      (should (null company-candidates)))))
-
-(ert-deftest company-auto-complete-explicit ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          (company-auto-complete 'company-explicit-action-p)
-          (company-auto-complete-chars '(? ))
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abcd" "abef")))))))
-      (let (this-command)
-        (company-complete))
-      (let ((last-command-event ? ))
-        (company-call 'self-insert-command 1))
-      (should (string= "abcd " (buffer-string))))))
-
-(ert-deftest company-auto-complete-with-electric-pair ()
-  (with-temp-buffer
-    (insert "foo(ab)")
-    (forward-char -1)
-    (company-mode)
-    (let (company-frontends
-          (company-auto-complete t)
-          (company-auto-complete-chars '(? ?\)))
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring 5 (point)))
-                     (candidates '("abcd" "abef"))))))
-          (electric-pair electric-pair-mode))
-      (unwind-protect
-          (progn
-            (electric-pair-mode)
-            (let (this-command)
-              (company-complete))
-            (let ((last-command-event ?\)))
-              (company-call 'self-insert-command 1)))
-        (unless electric-pair
-          (electric-pair-mode -1)))
-      (should (string= "foo(abcd)" (buffer-string))))))
-
-(ert-deftest company-no-auto-complete-when-idle ()
-  (with-temp-buffer
-    (insert "ab")
-    (company-mode)
-    (let (company-frontends
-          (company-auto-complete 'company-explicit-action-p)
-          (company-auto-complete-chars '(? ))
-          (company-minimum-prefix-length 2)
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abcd" "abef")))))))
-      (company-idle-begin (current-buffer) (selected-window)
-                          (buffer-chars-modified-tick) (point))
-      (let ((last-command-event ? ))
-        (company-call 'self-insert-command 1))
-      (should (string= "ab " (buffer-string))))))
-
-(ert-deftest company-clears-explicit-action-when-no-matches ()
-  (with-temp-buffer
-    (company-mode)
-    (let (company-frontends
-          company-backends)
-      (company-call 'manual-begin) ;; fails
-      (should (null company-candidates))
-      (should (null (company-explicit-action-p))))))
-
-(ert-deftest company-ignore-case-replaces-prefix ()
-  (with-temp-buffer
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abcd" "abef"))
-                     (ignore-case t))))))
-      (insert "A")
-      (let (this-command)
-        (company-complete))
-      (should (string= "ab" (buffer-string)))
-      (delete-char -2)
-      (insert "A") ; hack, to keep it in one test
-      (company-complete-selection)
-      (should (string= "abcd" (buffer-string))))))
-
-(ert-deftest company-ignore-case-with-keep-prefix ()
-  (with-temp-buffer
-    (insert "AB")
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("abcd" "abef"))
-                     (ignore-case 'keep-prefix))))))
-      (let (this-command)
-        (company-complete))
-      (company-complete-selection)
-      (should (string= "ABcd" (buffer-string))))))
-
-(ert-deftest company-non-prefix-completion ()
-  (with-temp-buffer
-    (insert "tc")
-    (company-mode)
-    (let (company-frontends
-          (company-backends
-           (list (lambda (command &optional _)
-                   (cl-case command
-                     (prefix (buffer-substring (point-min) (point)))
-                     (candidates '("tea-cup" "teal-color")))))))
-      (let (this-command)
-        (company-complete))
-      (should (string= "tc" (buffer-string)))
-      (company-complete-selection)
-      (should (string= "tea-cup" (buffer-string))))))
-
-(defvar ct-sorted nil)
-
-(defun ct-equal-including-properties (list1 list2)
-  (or (and (not list1) (not list2))
-      (and (ert-equal-including-properties (car list1) (car list2))
-           (ct-equal-including-properties (cdr list1) (cdr list2)))))
-
-(ert-deftest company-strips-duplicates-returns-nil ()
-  (should (null (company--preprocess-candidates nil))))
-
-(ert-deftest company-strips-duplicates-within-groups ()
-  (let* ((kvs '(("a" . "b")
-                ("a" . nil)
-                ("a" . "b")
-                ("a" . "c")
-                ("a" . "b")
-                ("b" . "c")
-                ("b" . nil)
-                ("a" . "b")))
-         (fn (lambda (kvs)
-               (mapcar (lambda (kv) (propertize (car kv) 'ann (cdr kv)))
-                       kvs)))
-         (company-backend
-          (lambda (command &optional arg)
-            (pcase command
-              (`prefix "")
-              (`sorted ct-sorted)
-              (`duplicates t)
-              (`annotation (get-text-property 0 'ann arg)))))
-         (reference '(("a" . "b")
-                      ("a" . nil)
-                      ("a" . "c")
-                      ("b" . "c")
-                      ("b" . nil)
-                      ("a" . "b"))))
-    (let ((ct-sorted t))
-      (should (ct-equal-including-properties
-               (company--preprocess-candidates (funcall fn kvs))
-               (funcall fn reference))))
-    (should (ct-equal-including-properties
-             (company--preprocess-candidates (funcall fn kvs))
-             (funcall fn (butlast reference))))))
-
-;;; Row and column
-
-(ert-deftest company-column-with-composition ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "lambda ()")
-      (compose-region 1 (1+ (length "lambda")) "\\")
-      (should (= (company--column) 4)))))
-
-(ert-deftest company-column-with-line-prefix ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "foo")
-      (put-text-property (point-min) (point) 'line-prefix "  ")
-      (should (= (company--column) 5)))))
-
-(ert-deftest company-column-with-line-prefix-on-empty-line ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "\n")
-      (forward-char -1)
-      (put-text-property (point-min) (point-max) 'line-prefix "  ")
-      (should (= (company--column) 2)))))
-
-(ert-deftest company-column-with-tabs ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "|\t|\t|\t(")
-      (let ((tab-width 8))
-        (should (= (company--column) 25))))))
-
-(ert-deftest company-row-with-header-line-format ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (should (= (company--row) 0))
-      (setq header-line-format "aaaaaaa")
-      (should (= (company--row) 0)))))
-
-(ert-deftest company-column-with-line-numbers-display ()
-  :tags '(interactive)
-  (skip-unless (fboundp 'display-line-numbers-mode))
-  (with-temp-buffer
-    (display-line-numbers-mode)
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (should (= (company--column) 0)))))
-
-(ert-deftest company-row-and-column-with-line-numbers-display ()
-  :tags '(interactive)
-  (skip-unless (fboundp 'display-line-numbers-mode))
-  (with-temp-buffer
-    (display-line-numbers-mode)
-    (insert (make-string (+ (company--window-width) 
(line-number-display-width)) ?a))
-    (insert ?\n)
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (should (= (company--column) 0))
-      (should (= (company--row) 2)))))
diff --git a/packages/company/test/elisp-tests.el 
b/packages/company/test/elisp-tests.el
deleted file mode 100644
index 5cc9181..0000000
--- a/packages/company/test/elisp-tests.el
+++ /dev/null
@@ -1,190 +0,0 @@
-;;; elisp-tests.el --- company-elisp tests
-
-;; Copyright (C) 2013-2015  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'company-tests)
-(require 'company-elisp)
-
-(defmacro company-elisp-with-buffer (contents &rest body)
-  (declare (indent 0))
-  `(with-temp-buffer
-     (insert ,contents)
-     (setq major-mode 'emacs-lisp-mode)
-     (re-search-backward "|")
-     (replace-match "")
-     (let ((company-elisp-detect-function-context t))
-       ,@body)))
-
-(ert-deftest company-elisp-candidates-predicate ()
-  (company-elisp-with-buffer
-    "(foo ba|)"
-    (should (eq (company-elisp--candidates-predicate "ba")
-                'boundp))
-    (should (eq (let (company-elisp-detect-function-context)
-                  (company-elisp--candidates-predicate "ba"))
-                'company-elisp--predicate)))
-  (company-elisp-with-buffer
-    "(foo| )"
-    (should (eq (company-elisp--candidates-predicate "foo")
-                'fboundp))
-    (should (eq (let (company-elisp-detect-function-context)
-                  (company-elisp--candidates-predicate "foo"))
-                'company-elisp--predicate)))
-  (company-elisp-with-buffer
-    "(foo 'b|)"
-    (should (eq (company-elisp--candidates-predicate "b")
-                'company-elisp--predicate))))
-
-(ert-deftest company-elisp-candidates-predicate-in-docstring ()
-  (company-elisp-with-buffer
-   "(def foo () \"Doo be doo `ide|"
-   (should (eq 'company-elisp--predicate
-               (company-elisp--candidates-predicate "ide")))))
-
-;; This one's also an integration test.
-(ert-deftest company-elisp-candidates-recognizes-binding-form ()
-  (let ((company-elisp-detect-function-context t)
-        (obarray [when what whelp])
-        (what 1)
-        (whelp 2)
-        (wisp 3))
-    (company-elisp-with-buffer
-      "(let ((foo 7) (wh| )))"
-      (should (equal '("what" "whelp")
-                     (company-elisp-candidates "wh"))))
-    (company-elisp-with-buffer
-      "(cond ((null nil) (wh| )))"
-      (should (equal '("when")
-                     (company-elisp-candidates "wh"))))))
-
-(ert-deftest company-elisp-candidates-predicate-binding-without-value ()
-  (cl-loop for (text prefix predicate) in '(("(let (foo|" "foo" boundp)
-                                            ("(let (foo (bar|" "bar" boundp)
-                                            ("(let (foo) (bar|" "bar" fboundp))
-           do
-           (eval `(company-elisp-with-buffer
-                   ,text
-                   (should (eq ',predicate
-                               (company-elisp--candidates-predicate 
,prefix)))))))
-
-(ert-deftest company-elisp-finds-vars ()
-  (let ((obarray [boo bar baz backquote])
-        (boo t)
-        (bar t)
-        (baz t))
-    (should (equal '("bar" "baz")
-                   (company-elisp--globals "ba" 'boundp)))))
-
-(ert-deftest company-elisp-finds-functions ()
-  (let ((obarray [when what whelp])
-        (what t)
-        (whelp t))
-    (should (equal '("when")
-                   (company-elisp--globals "wh" 'fboundp)))))
-
-(ert-deftest company-elisp-finds-things ()
-  (let ((obarray [when what whelp])
-        (what t)
-        (whelp t))
-    (should (equal '("what" "whelp" "when")
-                   (sort (company-elisp--globals "wh" 
'company-elisp--predicate)
-                         'string<)))))
-
-(ert-deftest company-elisp-locals-vars ()
-  (company-elisp-with-buffer
-    "(let ((foo 5) (bar 6))
-       (cl-labels ((borg ()))
-         (lambda (boo baz)
-           b|)))"
-    (should (equal '("bar" "baz" "boo")
-                   (company-elisp--locals "b" nil)))))
-
-(ert-deftest company-elisp-locals-single-var ()
-  (company-elisp-with-buffer
-    "(dotimes (itk 100)
-       (dolist (item items)
-         it|))"
-    (should (equal '("itk" "item")
-                   (company-elisp--locals "it" nil)))))
-
-(ert-deftest company-elisp-locals-funs ()
-  (company-elisp-with-buffer
-    "(cl-labels ((foo ())
-                 (fee ()))
-       (let ((fun 4))
-         (f| )))"
-    (should (equal '("fee" "foo")
-                   (sort (company-elisp--locals "f" t) 'string<)))))
-
-(ert-deftest company-elisp-locals-skips-current-varlist ()
-  (company-elisp-with-buffer
-    "(let ((foo 1)
-           (f| )))"
-    (should (null (company-elisp--locals "f" nil)))))
-
-(ert-deftest company-elisp-show-locals-first ()
-  (company-elisp-with-buffer
-    "(let ((floo 1)
-           (flop 2)
-           (flee 3))
-       fl|)"
-    (let ((obarray [float-pi]))
-      (let (company-elisp-show-locals-first)
-        (should (eq nil (company-elisp 'sorted))))
-      (let ((company-elisp-show-locals-first t))
-        (should (eq t (company-elisp 'sorted)))
-        (should (equal '("flee" "floo" "flop" "float-pi")
-                       (company-elisp-candidates "fl")))))))
-
-(ert-deftest company-elisp-candidates-no-duplicates ()
-  (company-elisp-with-buffer
-    "(let ((float-pi 4))
-       f|)"
-    (let ((obarray [float-pi])
-          (company-elisp-show-locals-first t))
-      (should (equal '("float-pi") (company-elisp-candidates "f"))))))
-
-(ert-deftest company-elisp-shouldnt-complete-defun-name ()
-  (company-elisp-with-buffer
-    "(defun foob|)"
-    (should (null (company-elisp 'prefix)))))
-
-(ert-deftest company-elisp-should-complete-def-call ()
-  (company-elisp-with-buffer
-    "(defu|"
-    (should (equal "defu" (company-elisp 'prefix)))))
-
-(ert-deftest company-elisp-should-complete-in-defvar ()
-  ;; It will also complete the var name, at least for now.
-  (company-elisp-with-buffer
-    "(defvar abc de|"
-    (should (equal "de" (company-elisp 'prefix)))))
-
-(ert-deftest company-elisp-shouldnt-complete-in-defun-arglist ()
-  (company-elisp-with-buffer
-    "(defsubst foobar (ba|"
-    (should (null (company-elisp 'prefix)))))
-
-(ert-deftest company-elisp-prefix-in-defun-body ()
-  (company-elisp-with-buffer
-    "(defun foob ()|)"
-    (should (equal "" (company-elisp 'prefix)))))
diff --git a/packages/company/test/files-tests.el 
b/packages/company/test/files-tests.el
deleted file mode 100644
index b5dd484..0000000
--- a/packages/company/test/files-tests.el
+++ /dev/null
@@ -1,48 +0,0 @@
-;;; filtes-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2016  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-(require 'company-files)
-
-(ert-deftest company-files-candidates-normal ()
-  (let (company-files--completion-cache)
-    (should (member (expand-file-name "test/" company-dir)
-                    (company-files 'candidates
-                                   company-dir)))))
-
-(ert-deftest company-files-candidates-normal-root ()
-  (let (company-files--completion-cache)
-    (should (member "/bin/"
-                    (company-files 'candidates "/")))))
-
-(ert-deftest company-files-candidates-excluding-dir ()
-  (let ((company-files-exclusions '("test/"))
-        company-files--completion-cache)
-    (should-not (member (expand-file-name "test/" company-dir)
-                        (company-files 'candidates
-                                       company-dir)))))
-
-(ert-deftest company-files-candidates-excluding-files ()
-  (let ((company-files-exclusions '(".el"))
-        company-files--completion-cache)
-    (should-not (member (expand-file-name "company.el" company-dir)
-                        (company-files 'candidates
-                                       company-dir)))))
diff --git a/packages/company/test/frontends-tests.el 
b/packages/company/test/frontends-tests.el
deleted file mode 100644
index e74b024..0000000
--- a/packages/company/test/frontends-tests.el
+++ /dev/null
@@ -1,393 +0,0 @@
-;;; frontends-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015, 2016  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-
-(ert-deftest company-pseudo-tooltip-does-not-get-displaced ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (save-excursion (insert " ff"))
-      (company-mode)
-      (let ((company-frontends '(company-pseudo-tooltip-frontend))
-            (company-begin-commands '(self-insert-command))
-            (company-backends
-             (list (lambda (c &rest _)
-                     (cl-case c (prefix "") (candidates '("a" "b" "c")))))))
-        (let (this-command)
-          (company-call 'complete))
-        (company-call 'open-line 1)
-        (should (eq 2 (overlay-start company-pseudo-tooltip-overlay)))))))
-
-(ert-deftest company-pseudo-tooltip-show ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-    (set-window-buffer nil (current-buffer))
-    (insert "aaaa\n  bb\nccccccc\nddd")
-    (search-backward "bb")
-    (let ((col (company--column))
-          (company-candidates-length 2)
-          (company-candidates '("123" "45"))
-          (company-backend 'ignore))
-      (company-pseudo-tooltip-show (company--row) col 0)
-      (let ((ov company-pseudo-tooltip-overlay))
-        ;; With margins.
-        (should (eq (overlay-get ov 'company-width) 5))
-        ;; FIXME: Make it 2?
-        (should (eq (overlay-get ov 'company-height) company-tooltip-limit))
-        (should (eq (overlay-get ov 'company-column) col))
-        (should (string= (overlay-get ov 'company-display)
-                         "  123 \nc 45  c\nddd\n")))))))
-
-(ert-deftest company-pseudo-tooltip-edit-updates-width ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (set-window-buffer nil (current-buffer))
-    (let ((company-candidates-length 5)
-          (company-candidates '("123" "45" "67" "89" "1011"))
-          (company-backend 'ignore)
-          (company-tooltip-limit 4)
-          (company-tooltip-offset-display 'scrollbar))
-      (company-pseudo-tooltip-show (company--row)
-                                   (company--column)
-                                   0)
-      (should (eq (overlay-get company-pseudo-tooltip-overlay 'company-width)
-                  6))
-      (company-pseudo-tooltip-edit 4)
-      (should (eq (overlay-get company-pseudo-tooltip-overlay 'company-width)
-                  7)))))
-
-(ert-deftest company-preview-show-with-annotations ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (save-excursion (insert "\n"))
-      (let ((company-backend #'ignore))
-        (company-preview-show-at-point (point) "123")
-        (let* ((ov company-preview-overlay)
-               (str (overlay-get ov 'after-string)))
-          (should (string= str "123"))
-          (should (eq (get-text-property 0 'cursor str) 1)))))))
-
-(ert-deftest company-pseudo-tooltip-show-with-annotations ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert " ")
-      (save-excursion (insert "\n"))
-      (let ((company-candidates-length 2)
-            (company-backend (lambda (action &optional arg &rest _ignore)
-                               (when (eq action 'annotation)
-                                 (cdr (assoc arg '(("123" . "(4)")))))))
-            (company-candidates '("123" "45"))
-            company-tooltip-align-annotations)
-        (company-pseudo-tooltip-show-at-point (point) 0)
-        (let ((ov company-pseudo-tooltip-overlay))
-          ;; With margins.
-          (should (eq (overlay-get ov 'company-width) 8))
-          (should (string= (overlay-get ov 'company-display)
-                           " 123(4) \n 45     \n")))))))
-
-(ert-deftest company-pseudo-tooltip-show-with-annotations-right-aligned ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert " ")
-      (save-excursion (insert "\n"))
-      (let ((company-candidates-length 3)
-            (company-backend (lambda (action &optional arg &rest _ignore)
-                               (when (eq action 'annotation)
-                                 (cdr (assoc arg '(("123" . "(4)")
-                                                   ("67" . "(891011)")))))))
-            (company-candidates '("123" "45" "67"))
-            (company-tooltip-align-annotations t))
-        (company-pseudo-tooltip-show-at-point (point) 0)
-        (let ((ov company-pseudo-tooltip-overlay))
-          ;; With margins.
-          (should (eq (overlay-get ov 'company-width) 13))
-          (should (string= (overlay-get ov 'company-display)
-                           " 123     (4) \n 45          \n 67 (891011) 
\n")))))))
-
-(ert-deftest company-create-lines-shows-numbers ()
-  (let ((company-show-numbers t)
-        (company-candidates '("x" "y" "z"))
-        (company-candidates-length 3)
-        (company-backend 'ignore))
-    (should (equal '(" x 1 " " y 2 " " z 3 ")
-                   (company--create-lines 0 999)))))
-
-(ert-deftest company-create-lines-shows-numbers-on-the-left ()
-  (let ((company-show-numbers 'left)
-        (company-candidates '("x" "y" "z"))
-        (company-candidates-length 3)
-        (company-backend 'ignore))
-    (should (equal '(" 1 x " " 2 y " " 3 z ")
-                   (company--create-lines 0 999)))))
-
-(ert-deftest company-create-lines-truncates-annotations ()
-  (let* ((ww (company--window-width))
-         (data `(("1" . "(123)")
-                 ("2" . nil)
-                 ("3" . ,(concat "(" (make-string (- ww 2) ?4) ")"))
-                 (,(make-string ww ?4) . "<4>")))
-         (company-candidates (mapcar #'car data))
-         (company-candidates-length 4)
-         (company-tooltip-margin 1)
-         (company-backend (lambda (cmd &optional arg &rest _)
-                            (when (eq cmd 'annotation)
-                              (cdr (assoc arg data)))))
-         company-tooltip-align-annotations)
-    (should (equal (list (format " 1(123)%s " (company-space-string (- ww 8)))
-                         (format " 2%s " (company-space-string (- ww 3)))
-                         (format " 3(444%s " (make-string (- ww 7) ?4))
-                         (format " %s " (make-string (- ww 2) ?4)))
-                   (company--create-lines 0 999)))
-    (let ((company-tooltip-align-annotations t))
-      (should (equal (list (format " 1%s(123) " (company-space-string (- ww 
8)))
-                           (format " 2%s " (company-space-string (- ww 3)))
-                           (format " 3 (444%s " (make-string (- ww 8) ?4))
-                           (format " %s " (make-string (- ww 2) ?4)))
-                     (company--create-lines 0 999))))))
-
-(ert-deftest company-create-lines-truncates-common-part ()
-  (let* ((ww (company--window-width))
-         (company-candidates-length 2)
-         (company-tooltip-margin 1)
-         (company-backend #'ignore))
-    (let* ((company-common (make-string (- ww 3) ?1))
-           (company-candidates `(,(concat company-common "2")
-                                 ,(concat company-common "3"))))
-      (should (equal (list (format " %s2 " (make-string (- ww 3) ?1))
-                           (format " %s3 " (make-string (- ww 3) ?1)))
-                     (company--create-lines 0 999))))
-    (let* ((company-common (make-string (- ww 2) ?1))
-           (company-candidates `(,(concat company-common "2")
-                                 ,(concat company-common "3"))))
-      (should (equal (list (format " %s " company-common)
-                           (format " %s " company-common))
-                     (company--create-lines 0 999))))
-    (let* ((company-common (make-string ww ?1))
-           (company-candidates `(,(concat company-common "2")
-                                 ,(concat company-common "3")))
-           (res (company--create-lines 0 999)))
-      (should (equal (list (format " %s " (make-string (- ww 2) ?1))
-                           (format " %s " (make-string (- ww 2) ?1)))
-                     res))
-      (should (equal '(company-tooltip-common-selection
-                       company-tooltip-selection
-                       company-tooltip)
-                     (get-text-property (- ww 2) 'face
-                                        (car res))))
-      (should (equal '(company-tooltip-selection
-                       company-tooltip)
-                     (get-text-property (1- ww) 'face
-                                        (car res))))
-      )))
-
-(ert-deftest company-create-lines-clears-out-non-printables ()
-  :tags '(interactive)
-  (let (company-show-numbers
-        (company-candidates (list
-                             (decode-coding-string "avalis\351e" 'utf-8)
-                             "avatar"))
-        (company-candidates-length 2)
-        (company-backend 'ignore))
-    (should (equal '(" avalis‗e "
-                     " avatar   ")
-                   (company--create-lines 0 999)))))
-
-(ert-deftest company-create-lines-handles-multiple-width ()
-  :tags '(interactive)
-  (let (company-show-numbers
-        (company-candidates '("蛙蛙蛙蛙" "蛙abc"))
-        (company-candidates-length 2)
-        (company-backend 'ignore))
-    (should (equal '(" 蛙蛙蛙蛙 "
-                     " 蛙abc    ")
-                   (company--create-lines 0 999)))))
-
-(ert-deftest company-create-lines-handles-multiple-width-in-annotation ()
-  (let* (company-show-numbers
-         (alist '(("a" . " ︸") ("b" . " ︸︸")))
-         (company-candidates (mapcar #'car alist))
-         (company-candidates-length 2)
-         (company-backend (lambda (c &optional a &rest _)
-                            (when (eq c 'annotation)
-                              (assoc-default a alist)))))
-    (should (equal '(" a ︸   "
-                     " b ︸︸ ")
-                   (company--create-lines 0 999)))))
-
-(ert-deftest company-create-lines-with-multiple-width-and-keep-prefix ()
-  :tags '(interactive)
-  (let* (company-show-numbers
-         (company-candidates '("MIRAI発売1カ月"
-                               "MIRAI発売2カ月"))
-         (company-candidates-length 2)
-         (company-prefix "MIRAI発")
-         (company-backend (lambda (c &rest _)
-                            (pcase c
-                              (`ignore-case 'keep-prefix)))))
-    (should (equal '(" MIRAI発売1カ月 "
-                     " MIRAI発売2カ月 ")
-                   (company--create-lines 0 999)))))
-
-(ert-deftest company-fill-propertize-truncates-search-highlight ()
-  (let ((company-search-string "foo")
-        (company-backend #'ignore)
-        (company-prefix ""))
-    (should (ert-equal-including-properties
-             (company-fill-propertize "barfoo" nil 6 t nil nil)
-             #("barfoo"
-               0 3 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse))
-               3 6 (face (company-tooltip-search-selection 
company-tooltip-selection company-tooltip) mouse-face 
(company-tooltip-mouse)))))
-    (should (ert-equal-including-properties
-             (company-fill-propertize "barfoo" nil 5 t "" " ")
-             #("barfo "
-               0 3 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse))
-               3 5 (face (company-tooltip-search-selection 
company-tooltip-selection company-tooltip) mouse-face (company-tooltip-mouse))
-               5 6 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse)))))
-    (should (ert-equal-including-properties
-             (company-fill-propertize "barfoo" nil 3 t " " " ")
-             #(" bar "
-               0 5 (face (company-tooltip-selection company-tooltip) 
mouse-face (company-tooltip-mouse)))))))
-
-(ert-deftest company-fill-propertize-overrides-face-property ()
-  (let ((company-backend #'ignore)
-        (company-prefix "")
-        (str1 (propertize "str1" 'face 'foo))
-        (str2 (propertize "str2" 'face 'foo)))
-    (should (ert-equal-including-properties
-             (company-fill-propertize str1 str2 8 nil nil nil)
-             #("str1str2"
-               0 4 (face (company-tooltip) mouse-face (company-tooltip-mouse))
-               4 8 (face (company-tooltip-annotation company-tooltip)
-                         mouse-face (company-tooltip-mouse)))))))
-
-(ert-deftest company-fill-propertize-delegates-to-pre-render ()
-  (let ((company-backend
-         (lambda (command &rest args)
-           (pcase command
-             (`pre-render
-              (propertize (car args)
-                          'face (if (cadr args)
-                                    'annotation
-                                  'value))))))
-        (company-prefix "")
-        (str1 (propertize "str1" 'foo 'bar))
-        (str2 (propertize "str2" 'foo 'bar)))
-    (let ((res (company-fill-propertize str1 str2 8 nil nil nil)))
-      ;; Could use `ert-equal-including-properties' as well.
-      (should (eq (get-text-property 0 'foo res) 'bar))
-      (should (eq (get-text-property 4 'foo res) 'bar))
-      (should (equal (get-text-property 0 'face res)
-                     '(value company-tooltip)))
-      (should (equal (get-text-property 4 'face res)
-                     '(annotation company-tooltip-annotation 
company-tooltip))))))
-
-(ert-deftest company-column-with-composition ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "lambda ()")
-      (compose-region 1 (1+ (length "lambda")) "\\")
-      (should (= (company--column) 4)))))
-
-(ert-deftest company-plainify ()
-  (let ((tab-width 8))
-    (should (equal-including-properties
-             (company-plainify "\tabc\td\t")
-             (concat "        "
-                     "abc     "
-                     "d       "))))
-  (should (equal-including-properties
-           (company-plainify (propertize "foobar" 'line-prefix "-*-"))
-           "-*-foobar")))
-
-(ert-deftest company-buffer-lines-with-lines-folded ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (insert (propertize "aaa\nbbb\nccc\nddd\n" 'display "aaa+\n"))
-    (insert "eee\nfff\nggg")
-    (should (equal (company-buffer-lines (point-min) (point-max))
-                   '("aaa" "eee" "fff" "ggg")))))
-
-(ert-deftest company-buffer-lines-with-multiline-display ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (insert (propertize "a" 'display "bbb\nccc\ndddd\n"))
-    (insert "eee\nfff\nggg")
-    (should (equal (company-buffer-lines (point-min) (point-max))
-                   '("a" "" "" "eee" "fff" "ggg")))))
-
-(ert-deftest company-buffer-lines-with-multiline-after-string-at-eob ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (insert "a\nb\nc\n")
-    (let ((ov (make-overlay (point-max) (point-max) nil t t)))
-      (overlay-put ov 'after-string "~\n~\n~"))
-    (should (equal (company-buffer-lines (point-min) (point-max))
-                   '("a" "b" "c")))))
-
-(ert-deftest company-buffer-lines-with-line-wrapping ()
-  :tags '(interactive)
-  (with-temp-buffer
-    (let ((ww (company--window-width)))
-      (insert (make-string (* 3 ww) ?a))
-      (should (equal (company-buffer-lines (point-min) (point-max))
-                     (list (make-string ww ?a)
-                           (make-string ww ?a)
-                           (make-string ww ?a)))))))
-
-(ert-deftest company-modify-line ()
-  (let ((str "-*-foobar"))
-    (should (equal-including-properties
-             (company-modify-line str "zz" 4)
-             "-*-fzzbar"))
-    (should (equal-including-properties
-             (company-modify-line str "xx" 0)
-             "xx-foobar"))
-    (should (equal-including-properties
-             (company-modify-line str "zz" 10)
-             "-*-foobar zz"))))
-
-(ert-deftest company-modify-line-with-invisible-prop ()
-  (let ((str "-*-foobar")
-        (buffer-invisibility-spec '((outline . t) t)))
-    (put-text-property 1 2 'invisible 'foo str)
-    (should (equal
-             (company-modify-line str "zz" 4)
-             "-*-fzzbar"))))
-
-(ert-deftest company-scrollbar-bounds ()
-  (should (equal nil (company--scrollbar-bounds 0 3 3)))
-  (should (equal nil (company--scrollbar-bounds 0 4 3)))
-  (should (equal '(0 . 0) (company--scrollbar-bounds 0 1 2)))
-  (should (equal '(1 . 1) (company--scrollbar-bounds 2 2 4)))
-  (should (equal '(2 . 3) (company--scrollbar-bounds 7 4 12)))
-  (should (equal '(1 . 2) (company--scrollbar-bounds 3 4 12)))
-  (should (equal '(1 . 3) (company--scrollbar-bounds 4 5 11))))
diff --git a/packages/company/test/keywords-tests.el 
b/packages/company/test/keywords-tests.el
deleted file mode 100644
index 1c69f0f..0000000
--- a/packages/company/test/keywords-tests.el
+++ /dev/null
@@ -1,32 +0,0 @@
-;;; keywords-tests.el --- company-keywords tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011, 2013-2015  Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-keywords)
-
-(ert-deftest company-sorted-keywords ()
-  "Test that keywords in `company-keywords-alist' are in alphabetical order."
-  (dolist (pair company-keywords-alist)
-    (when (consp (cdr pair))
-      (let ((prev (cadr pair)))
-        (dolist (next (cddr pair))
-          (should (not (equal prev next)))
-          (should (string< prev next))
-          (setq prev next))))))
diff --git a/packages/company/test/template-tests.el 
b/packages/company/test/template-tests.el
deleted file mode 100644
index 975c3ff..0000000
--- a/packages/company/test/template-tests.el
+++ /dev/null
@@ -1,170 +0,0 @@
-;;; template-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-(require 'company-template)
-
-(defun company-template-field-assert-text (str &optional pos)
-  (let ((field (company-template-field-at pos)))
-    (should (equal (buffer-substring-no-properties
-                    (overlay-start field)
-                    (overlay-end field))
-                   str))))
-
-(ert-deftest company-template-removed-after-the-last-jump ()
-  (with-temp-buffer
-    (insert "{ }")
-    (goto-char 2)
-    (let ((tpl (company-template-declare-template (point) (1- (point-max)))))
-      (save-excursion
-        (dotimes (_ 2)
-          (insert " foo")
-          (company-template-add-field tpl (- (point) 3) (point))))
-      (company-call 'template-forward-field)
-      (should (= 3 (point)))
-      (company-call 'template-forward-field)
-      (should (= 7 (point)))
-      (company-call 'template-forward-field)
-      (should (= 11 (point)))
-      (should (zerop (length (overlay-get tpl 'company-template-fields))))
-      (should (null (overlay-buffer tpl))))))
-
-(ert-deftest company-template-removed-after-input-and-jump ()
-  (with-temp-buffer
-    (insert "{ }")
-    (goto-char 2)
-    (let ((tpl (company-template-declare-template (point) (1- (point-max)))))
-      (save-excursion
-        (insert " bar")
-        (company-template-add-field tpl (- (point) 3) (point)))
-      (company-call 'template-move-to-first tpl)
-      (should (= 3 (point)))
-      (dolist (c (string-to-list "tee"))
-        (let ((last-command-event c))
-          (company-call 'self-insert-command 1)))
-      (should (string= "{ tee }" (buffer-string)))
-      (should (overlay-buffer tpl))
-      (company-call 'template-forward-field)
-      (should (= 7 (point)))
-      (should (null (overlay-buffer tpl))))))
-
-(ert-deftest company-template-c-like-templatify ()
-  (with-temp-buffer
-    (let ((text "foo(int a, short b)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (should (equal "foo(int a, short b)" (buffer-string)))
-      (company-template-field-assert-text "int a"))))
-
-(ert-deftest company-template-c-like-templatify-trims-after-closing-paren ()
-  (with-temp-buffer
-    (let ((text "foo(int a, short b)!@ #1334 a"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (should (equal "foo(int a, short b)" (buffer-string)))
-      (company-template-field-assert-text "int a"))))
-
-(ert-deftest company-template-c-like-templatify-generics ()
-  (with-temp-buffer
-    (let ((text "foo<TKey, TValue>(int i, Dict<TKey, TValue>, long l)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (should (equal (buffer-string) text))
-      (company-template-field-assert-text "TKey")
-      (search-forward "Dict")
-      (forward-char -1)
-      (company-template-field-assert-text "Dict<TKey, TValue>"))))
-
-(ert-deftest company-template-c-like-func-ptr ()
-  (with-temp-buffer
-    (let ((text "foo(*)(int)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (should (equal (buffer-string) "foo(int)"))
-      (company-template-field-assert-text "int"))))
-
-(ert-deftest company-clang-objc-templatify-empty-args ()
-  (with-temp-buffer
-    (let ((text "createBookWithTitle:andAuthor:"))
-      (insert text)
-      (company-template-objc-templatify text)
-      (should (equal "createBookWithTitle:arg0 andAuthor:arg1" 
(buffer-string)))
-      (should (looking-at "arg0"))
-      (should (null (overlay-get (company-template-field-at) 'display))))))
-
-(ert-deftest company-template-objc-templatify ()
-  (with-temp-buffer
-    (let ((text "createBookWithTitle:(NSString) andAuthor:(id)"))
-      (insert text)
-      (company-template-objc-templatify text)
-      (should (equal (buffer-string) text))
-      (company-template-field-assert-text "(NSString)"))))
-
-(ert-deftest company-template-clear-field-c-like-first-arg ()
-  (with-temp-buffer
-    (let ((text "foo(int a, short b)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (company-template-clear-field)
-      (should (equal "foo(short b)" (buffer-string))))))
-
-(ert-deftest company-template-clear-field-c-like-last-arg ()
-  (with-temp-buffer
-    (let ((text "foo(int a, short b)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (insert "42")
-      (company-template-forward-field)
-      (company-template-clear-field)
-      (should (equal "foo(42)" (buffer-string))))))
-
-(ert-deftest company-template-clear-field-c-like-generic-1 ()
-  (with-temp-buffer
-    (let ((text "foo<TValue>(int a, short b)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (company-template-clear-field)
-      (should (equal "foo<>(int a, short b)" (buffer-string))))))
-
-(ert-deftest company-template-clear-field-c-like-generic-2 ()
-  (with-temp-buffer
-    (let ((text "foo<TKey, TValue>(int a, short b)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (company-template-clear-field)
-      (should (equal "foo<TValue>(int a, short b)" (buffer-string))))))
-
-(ert-deftest company-template-clear-field-objc-first-arg ()
-  (with-temp-buffer
-    (let ((text "createBookWithTitle:andAuthor:"))
-      (insert text)
-      (company-template-objc-templatify text)
-      (company-template-clear-field)
-      (should (equal "createBookWithTitle: andAuthor:arg1" (buffer-string))))))
-
-(ert-deftest company-template-insert-hook-c-like-field ()
-  (with-temp-buffer
-    (let ((text "foo(int a, short b)"))
-      (insert text)
-      (company-template-c-like-templatify text)
-      (let ((ovl (company-template-field-at (point))))
-        (company-template-insert-hook ovl nil)
-        (should (equal "foo(, short b)" (buffer-string)))))))
diff --git a/packages/company/test/transformers-tests.el 
b/packages/company/test/transformers-tests.el
deleted file mode 100644
index 9a3f9c6..0000000
--- a/packages/company/test/transformers-tests.el
+++ /dev/null
@@ -1,58 +0,0 @@
-;;; transformers-tests.el --- company-mode tests  -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015  Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-(require 'company-tests)
-
-(ert-deftest company-occurrence-prefer-closest-above ()
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "foo0
-foo1
-")
-      (save-excursion
-        (insert "
-foo3
-foo2"))
-      (let ((company-backend 'company-dabbrev)
-            (company-occurrence-weight-function
-             'company-occurrence-prefer-closest-above))
-        (should (equal '("foo1" "foo0" "foo3" "foo2" "foo4")
-                       (company-sort-by-occurrence
-                        '("foo0" "foo1" "foo2" "foo3" "foo4"))))))))
-
-(ert-deftest company-occurrence-prefer-any-closest ()
-  (with-temp-buffer
-    (save-window-excursion
-      (set-window-buffer nil (current-buffer))
-      (insert "foo0
-foo1
-")
-      (save-excursion
-        (insert "
-foo3
-foo2"))
-      (let ((company-backend 'company-dabbrev)
-            (company-occurrence-weight-function
-             'company-occurrence-prefer-any-closest))
-        (should (equal '("foo1" "foo3" "foo0" "foo2" "foo4")
-                       (company-sort-by-occurrence
-                        '("foo0" "foo1" "foo2" "foo3" "foo4"))))))))
diff --git a/packages/context-coloring/.elpaignore 
b/packages/context-coloring/.elpaignore
deleted file mode 100644
index bad5d87..0000000
--- a/packages/context-coloring/.elpaignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.elpaignore
-.gitignore
-.travis.yml
-Cask
-context-coloring-benchmark.el
-context-coloring-coverage.el
-context-coloring-test.el
-fixtures
-Makefile
-screenshot.png
diff --git a/packages/context-coloring/.gitignore 
b/packages/context-coloring/.gitignore
deleted file mode 100644
index b9fedca..0000000
--- a/packages/context-coloring/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*-autoloads.el
-*-pkg.el
-*.elc
-.cask/
-/benchmark/
-/coverage/
diff --git a/packages/context-coloring/.travis.yml 
b/packages/context-coloring/.travis.yml
deleted file mode 100644
index 70d1f6d..0000000
--- a/packages/context-coloring/.travis.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-sudo: false
-
-language: emacs-lisp
-
-env:
-  - EVM_EMACS=emacs-24.3-travis
-  - EVM_EMACS=emacs-24.4-travis
-  - EVM_EMACS=emacs-24.5-travis
-  - EVM_EMACS=emacs-25.1-travis
-
-before_install:
-  - export PATH="/home/travis/.evm/bin:$PATH"
-  - export PATH="/home/travis/.cask/bin:$PATH"
-  - git clone https://github.com/rejeep/evm.git /home/travis/.evm
-  - evm config path /tmp
-  - evm install ${EVM_EMACS} --use --skip
-  - curl -fsSkL https://raw.github.com/cask/cask/master/go | python
-
-install:
-  - cask
-
-script:
-  - emacs --version
-  - make test
diff --git a/packages/context-coloring/Cask b/packages/context-coloring/Cask
deleted file mode 100644
index 55ff4c5..0000000
--- a/packages/context-coloring/Cask
+++ /dev/null
@@ -1,7 +0,0 @@
-(source melpa)
-
-(package-file "context-coloring.el")
-
-(development
- (depends-on "js2-mode")
- (depends-on "undercover"))
diff --git a/packages/context-coloring/LICENSE 
b/packages/context-coloring/LICENSE
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/context-coloring/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/context-coloring/Makefile 
b/packages/context-coloring/Makefile
deleted file mode 100644
index 9763be1..0000000
--- a/packages/context-coloring/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-EMACS ?= emacs
-CASK ?= EMACS=${EMACS} cask
-DEPENDENCIES = .cask/
-SOURCE_FILES = \
-       context-coloring.el \
-       context-coloring-javascript.el \
-       context-coloring-emacs-lisp.el
-
-all: uncompile compile test
-
-bench: ${DEPENDENCIES}
-       ${CASK} exec ${EMACS} -Q \
-       -L . \
-       -l context-coloring \
-       -l context-coloring-benchmark \
-       -f context-coloring-benchmark-run
-
-compile: ${DEPENDENCIES}
-       ${CASK} exec ${EMACS} -Q -batch \
-       -L . \
-       -f batch-byte-compile ${SOURCE_FILES}
-
-uncompile:
-       rm -f *.elc
-
-clean: uncompile
-       rm -rf ${DEPENDENCIES}
-
-${DEPENDENCIES}:
-       ${CASK}
-
-test: ${DEPENDENCIES}
-       ${CASK} exec ${EMACS} -Q -batch \
-       -L . \
-       -l ert \
-       -l context-coloring-coverage \
-       -f context-coloring-coverage-ci-init \
-       -l context-coloring-test \
-       -f ert-run-tests-batch-and-exit
-
-cover: ${DEPENDENCIES}
-       ${CASK} exec ${EMACS} -Q -batch \
-       -L . \
-       -l ert \
-       -l context-coloring-coverage \
-       -f context-coloring-coverage-local-init \
-       -l context-coloring-test \
-       -f ert-run-tests-batch-and-exit
-
-.PHONY: all bench compile uncompile clean test cover
diff --git a/packages/context-coloring/README.md 
b/packages/context-coloring/README.md
deleted file mode 100644
index bfbb4fb..0000000
--- a/packages/context-coloring/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# Context Coloring [![Build 
Status](https://travis-ci.org/jacksonrayhamilton/context-coloring.png?branch=master)](https://travis-ci.org/jacksonrayhamilton/context-coloring)
 [![Coverage 
Status](https://coveralls.io/repos/jacksonrayhamilton/context-coloring/badge.svg?branch=master)](https://coveralls.io/r/jacksonrayhamilton/context-coloring?branch=master)
-
-<p align="center">
-  <img alt="Screenshot of JavaScript code highlighted by context." 
src="screenshot.png" title="Screenshot">
-</p>
-
-Highlights code by scope.  Top-level scopes are one color, second-level scopes
-are another color, and so on.  Variables retain the color of the scope in which
-they are defined.  A variable defined in an outer scope referenced by an inner
-scope is colored the same as the outer scope.
-
-By default, comments and strings are still highlighted syntactically.
-
-## Features
-
-- Light and dark customizable color schemes.
-- JavaScript support:
-  - Script, function and block scopes (and even `catch` block scopes).
-  - Node.js "file-level" scope detection.
-- Emacs Lisp support:
-  - `defun`, `lambda`, `let`, `let*`, `cond`, `condition-case`, `defadvice`,
-    `dolist`, `quote`, `backquote` and backquote splicing.
-  - Works in `eval-expression` too.
-
-## Installation
-
-Requires Emacs 24.3+.  JavaScript language support requires
-[js2-mode](https://github.com/mooz/js2-mode) (or, if you use
-[Tern](http://ternjs.net/), you may be interested in
-[tern-context-coloring](https://github.com/jacksonrayhamilton/tern-context-coloring)).
-
-To install, run the command `M-x package-install RET context-coloring RET`, and
-then add the following to your init file:
-
-```lisp
-;; JavaScript:
-(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
-(add-hook 'js2-mode-hook #'context-coloring-mode)
-
-;; Emacs Lisp:
-(add-hook 'emacs-lisp-mode-hook #'context-coloring-mode)
-
-;; eval-expression:
-(add-hook 'eval-expression-minibuffer-setup-hook #'context-coloring-mode) ; 
24.4+
-(add-hook 'minibuffer-setup-hook #'context-coloring-mode)                 ; 
24.3
-```
-
-## Color Schemes
-
-The [Zenburn](https://github.com/bbatsov/zenburn-emacs) theme, featured in the
-screenshot above, now supports context coloring.
-
-You can define your own colors by customizing faces like
-`context-coloring-level-N-face`, where N is a number starting from 0.
-
-[See here](https://gist.github.com/jacksonrayhamilton/6b89ca3b85182c490816) for
-some color schemes for popular custom themes.
-
-## Options
-
-- `context-coloring-syntactic-comments` (default: `t`): If non-nil, also color
-  comments using `font-lock`.
-- `context-coloring-syntactic-strings` (default: `t`): If non-nil, also color
-  strings using `font-lock`.
-- `context-coloring-javascript-block-scopes` (default: `nil`): If non-nil, also
-  color block scopes in the scope hierarchy in JavaScript.
-- `context-coloring-javascript-detect-top-level-scope` (default: `t`): If
-  non-nil, detect when to use file-level scope.
diff --git a/packages/context-coloring/context-coloring-benchmark.el 
b/packages/context-coloring/context-coloring-benchmark.el
deleted file mode 100644
index dafc959..0000000
--- a/packages/context-coloring/context-coloring-benchmark.el
+++ /dev/null
@@ -1,165 +0,0 @@
-;;; context-coloring-benchmark.el --- Benchmarks for context coloring  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2016  Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Benchmarks for context coloring.
-
-;; Use with `make bench'.
-
-;;; Code:
-
-(require 'context-coloring)
-(require 'context-coloring-javascript)
-(require 'context-coloring-emacs-lisp)
-(require 'elp)
-
-
-(defconst context-coloring-benchmark-path
-  (file-name-directory (or load-file-name buffer-file-name))
-  "This file's directory.")
-
-(defun context-coloring-benchmark-resolve-path (path)
-  "Resolve PATH from this file's directory."
-  (expand-file-name path context-coloring-benchmark-path))
-
-(defun context-coloring-benchmark-log-results (result-file fixture statistics)
-  "Log results to RESULT-FILE for FIXTURE with STATISTICS."
-  (let ((results (prog1
-                     (progn
-                       (elp-results)
-                       (buffer-substring-no-properties (point-min) 
(point-max)))
-                   (kill-buffer))))
-    (make-directory (context-coloring-benchmark-resolve-path "./benchmark") t)
-    (append-to-file
-     (with-temp-buffer
-       (goto-char (point-min))
-       (insert (format "For fixture \"%s\":\n" fixture))
-       (insert "\n")
-       (insert "General statistics:\n")
-       (insert (format "File size: %s bytes\n" (plist-get statistics 
:file-size)))
-       (insert (format "Lines: %s\n" (plist-get statistics :lines)))
-       (insert (format "Words: %s\n" (plist-get statistics :words)))
-       (insert (format "Colorization times: %s\n"
-                       (context-coloring-join
-                        (mapcar (lambda (number)
-                                  (format "%.4f" number))
-                                (plist-get statistics :colorization-times)) ", 
")))
-       (insert (format "Average colorization time: %.4f\n"
-                       (plist-get statistics :average-colorization-time)))
-       (insert "\n")
-       (insert "Function statistics:\n")
-       (insert "(Function Name / Call Count / Elapsed Time / Average Time):\n")
-       (insert results)
-       (insert "\n")
-       (buffer-substring-no-properties (point-min) (point-max)))
-     nil result-file)))
-
-(defun context-coloring-benchmark (title fixtures)
-  "Execute a benchmark titled TITLE against FIXTURES."
-  (let ((result-file (context-coloring-benchmark-resolve-path
-                      (format "./benchmark/results-%s-%s.log"
-                              title (format-time-string "%s")))))
-    (mapc
-     (lambda (path)
-       (let ((fixture (context-coloring-benchmark-resolve-path path))
-             colorization-start-time
-             (colorization-times '())
-             advice)
-         (setq
-          advice
-          (let ((count 0))
-            (lambda (original-function)
-              (funcall original-function)
-              (setq count (+ count 1))
-              ;; First 5 runs are for gathering real coloring times,
-              ;; unaffected by elp instrumentation.
-              (when (<= count 5)
-                (push (- (float-time) colorization-start-time) 
colorization-times))
-              (cond
-               ((= count 10)
-                (advice-remove #'context-coloring-colorize advice)
-                (context-coloring-benchmark-log-results
-                 result-file
-                 fixture
-                 (list
-                  :file-size (nth 7 (file-attributes fixture))
-                  :lines (count-lines (point-min) (point-max))
-                  :words (count-words (point-min) (point-max))
-                  :colorization-times colorization-times
-                  :average-colorization-time (/ (apply #'+ colorization-times) 
5)))
-                (elp-restore-all)
-                (kill-buffer))
-               ;; The last 5 runs are for gathering function call and
-               ;; duration statistics.
-               ((= count 5)
-                (elp-instrument-package "context-coloring-")
-                (context-coloring-colorize))
-               (t
-                (setq colorization-start-time (float-time))
-                (context-coloring-colorize))))))
-         (advice-add #'context-coloring-colorize :around advice)
-         (setq colorization-start-time (float-time))
-         (find-file fixture)))
-     fixtures)))
-
-(defconst context-coloring-benchmark-javascript-fixtures
-  '("./fixtures/benchmark/jquery-2.1.1.js"
-    "./fixtures/benchmark/lodash-2.4.1.js"
-    "./fixtures/benchmark/async-0.9.0.js"
-    "./fixtures/benchmark/mkdirp-0.5.0.js")
-  "Arbitrary JavaScript files for performance scrutiny.")
-
-(defun context-coloring-benchmark-js2-mode-run ()
-  "Benchmark `js2-mode'."
-  (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
-  (add-hook 'js2-mode-hook #'context-coloring-mode)
-  (let ((js2-mode-show-parse-errors nil)
-        (js2-mode-show-strict-warnings nil))
-    (context-coloring-benchmark
-     "js2-mode"
-     context-coloring-benchmark-javascript-fixtures))
-  (setq auto-mode-alist (delete '("\\.js\\'" . js2-mode)
-                                auto-mode-alist))
-  (remove-hook 'js2-mode-hook #'context-coloring-mode))
-
-(defconst context-coloring-benchmark-emacs-lisp-fixtures
-  '("./fixtures/benchmark/lisp.el"
-    "./fixtures/benchmark/faces.el"
-    "./fixtures/benchmark/subr.el"
-    "./fixtures/benchmark/simple.el")
-  "Arbitrary Emacs Lisp files for performance scrutiny.")
-
-(defun context-coloring-benchmark-emacs-lisp-mode-run ()
-  "Benchmark `emacs-lisp-mode', then call CALLBACK."
-  (add-hook 'emacs-lisp-mode-hook #'context-coloring-mode)
-  (context-coloring-benchmark
-   "emacs-lisp-mode"
-   context-coloring-benchmark-emacs-lisp-fixtures)
-  (remove-hook 'emacs-lisp-mode-hook #'context-coloring-mode))
-
-(defun context-coloring-benchmark-run ()
-  "Benchmark all modes, then exit."
-  (context-coloring-benchmark-js2-mode-run)
-  (context-coloring-benchmark-emacs-lisp-mode-run)
-  (kill-emacs))
-
-(provide 'context-coloring-benchmark)
-
-;;; context-coloring-benchmark.el ends here
diff --git a/packages/context-coloring/context-coloring-coverage.el 
b/packages/context-coloring/context-coloring-coverage.el
deleted file mode 100644
index e74024d..0000000
--- a/packages/context-coloring/context-coloring-coverage.el
+++ /dev/null
@@ -1,155 +0,0 @@
-;;; context-coloring-coverage.el --- Test coverage for context coloring  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2016  Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Test coverage support for context coloring.
-
-;; Use with `make cover'.
-
-;;; Code:
-
-(require 'json)
-(require 'undercover nil 'noerror)   ;Don't signal an error during compilation.
-
-
-(defconst context-coloring-coverage-directory
-  (file-name-directory (or load-file-name buffer-file-name))
-  "This file's directory.")
-
-(defun context-coloring-coverage-resolve-path (path)
-  "Resolve PATH from this file's directory."
-  (expand-file-name path context-coloring-coverage-directory))
-
-(defconst context-coloring-coverage-output-file-prefix
-  (format-time-string "%s"))
-
-(defconst context-coloring-coverage-output-directory
-  (context-coloring-coverage-resolve-path "./coverage/"))
-
-(defconst context-coloring-coverage-output-file
-  (concat context-coloring-coverage-output-directory
-          context-coloring-coverage-output-file-prefix ".json"))
-
-(defconst context-coloring-coverage-report-file
-  (concat context-coloring-coverage-output-directory
-          context-coloring-coverage-output-file-prefix ".txt"))
-
-(defun context-coloring-coverage-join (strings delimiter)
-  "Join a list of STRINGS with the string DELIMITER."
-  (mapconcat #'identity strings delimiter))
-
-(defun context-coloring-coverage-percentage (dividend divisor)
-  "Get the percentage of DIVIDEND / DIVISOR with precision 2."
-  (let ((percentage (/ (float (round (* (/ (float dividend) divisor) 10000))) 
100)))
-    (number-to-string
-     (cond
-      ((= (mod percentage 1) 0)
-       ;; Get an integer because we don't like dangling zeros.
-       (round percentage))
-      (t
-       percentage)))))
-
-(defun context-coloring-coverage-format-source-file (source-file)
-  "Generate a report for SOURCE-FILE's line coverage."
-  (let* ((source-lines (split-string (cdr (assq 'source source-file)) "\n"))
-         (coverage (cdr (assq 'coverage source-file)))
-         (results (list "Hits  | Source"
-                        (context-coloring-coverage-join (make-vector 80 "-") 
"")))
-         (lines-hit 0)
-         (lines-hittable 0)
-         hits
-         source-line)
-    (while coverage
-      (setq hits (car coverage))
-      (setq coverage (cdr coverage))
-      (setq source-line (car source-lines))
-      (setq source-lines (cdr source-lines))
-      (when (not (null hits))
-        (setq lines-hittable (+ lines-hittable 1))
-        (when (> hits 0)
-          (setq lines-hit (+ lines-hit 1))))
-      (setq results
-            (append results
-                    (list (format
-                           "%-5s %s %s"
-                           (if hits hits "N/A")
-                           (if (and hits (= hits 0)) "~" "|")
-                           source-line)))))
-    (setq results
-          (append results
-                  (list
-                   ""
-                   (format
-                    "Lines: %s / %s"
-                    lines-hit
-                    lines-hittable)
-                   (format
-                    "Coverage: %s%%"
-                    (context-coloring-coverage-percentage lines-hit 
lines-hittable)))))
-    (context-coloring-coverage-join results "\n")))
-
-(defun context-coloring-coverage-format (coverage-data)
-  "Generate reports for all files in COVERAGE-DATA."
-  (context-coloring-coverage-join
-   (mapcar
-    #'context-coloring-coverage-format-source-file
-    (cdr (assq 'source_files coverage-data)))
-   "\n\n"))
-
-(defun context-coloring-coverage-local-init ()
-  "Initialize test coverage for local viewing."
-  (make-directory context-coloring-coverage-output-directory t)
-  (setq undercover-force-coverage t)
-  (setenv "COVERALLS_REPO_TOKEN" "noop")
-  (undercover "*.el"
-              (:report-file context-coloring-coverage-output-file)
-              (:send-report nil))
-  (add-hook
-   'kill-emacs-hook
-   (lambda ()
-     (let (original-json-array-type
-           coverage-data
-           report)
-       (with-temp-buffer
-         (insert-file-contents-literally context-coloring-coverage-output-file)
-         (setq original-json-array-type json-array-type)
-         (setq json-array-type 'list)
-         (setq coverage-data
-               (json-read-from-string
-                (buffer-substring-no-properties (point-min) (point-max))))
-         (setq json-array-type original-json-array-type)
-         (setq report
-               (context-coloring-coverage-format coverage-data))
-         (setq report (concat report "\n")))
-       (princ report)
-       (with-temp-buffer
-         (insert report)
-         (write-file context-coloring-coverage-report-file))))
-   t)
-  (require 'context-coloring))
-
-(defun context-coloring-coverage-ci-init ()
-  "Initialize test coverage for continuous integration."
-  (undercover "*.el")
-  (require 'context-coloring))
-
-(provide 'context-coloring-coverage)
-
-;;; context-coloring-coverage.el ends here
diff --git a/packages/context-coloring/context-coloring-emacs-lisp.el 
b/packages/context-coloring/context-coloring-emacs-lisp.el
deleted file mode 100644
index 05caa5a..0000000
--- a/packages/context-coloring/context-coloring-emacs-lisp.el
+++ /dev/null
@@ -1,773 +0,0 @@
-;;; context-coloring-emacs-lisp.el --- Emacs Lisp support  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2016  Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Add Emacs Lisp context coloring support.
-
-;;; Code:
-
-(require 'context-coloring)
-
-
-;;; Emacs Lisp colorization
-
-(defconst context-coloring-WORD-CODE 2)
-(defconst context-coloring-SYMBOL-CODE 3)
-(defconst context-coloring-OPEN-PARENTHESIS-CODE 4)
-(defconst context-coloring-CLOSE-PARENTHESIS-CODE 5)
-(defconst context-coloring-EXPRESSION-PREFIX-CODE 6)
-(defconst context-coloring-STRING-QUOTE-CODE 7)
-(defconst context-coloring-ESCAPE-CODE 9)
-(defconst context-coloring-COMMENT-START-CODE 11)
-(defconst context-coloring-COMMENT-END-CODE 12)
-
-(defconst context-coloring-OCTOTHORPE-CHAR (string-to-char "#"))
-(defconst context-coloring-APOSTROPHE-CHAR (string-to-char "'"))
-(defconst context-coloring-OPEN-PARENTHESIS-CHAR (string-to-char "("))
-(defconst context-coloring-COMMA-CHAR (string-to-char ","))
-(defconst context-coloring-AT-CHAR (string-to-char "@"))
-(defconst context-coloring-BACKTICK-CHAR (string-to-char "`"))
-
-(defsubst context-coloring-get-syntax-code ()
-  "Get the syntax code at point."
-  (syntax-class
-   ;; Faster version of `syntax-after':
-   (aref (syntax-table) (char-after (point)))))
-
-(defsubst context-coloring-forward-sws ()
-  "Move forward through whitespace and comments."
-  (while (forward-comment 1)))
-
-(defsubst context-coloring-elisp-colorize-comments-and-strings
-  (&optional min max)
-  "Color comments and strings from MIN to MAX."
-  (context-coloring-colorize-comments-and-strings min max t))
-
-(defsubst context-coloring-elisp-forward-sws ()
-  "Move through whitespace and comments, coloring comments."
-  (let ((start (point)))
-    (context-coloring-forward-sws)
-    (context-coloring-elisp-colorize-comments-and-strings start (point))))
-
-(defsubst context-coloring-elisp-forward-sexp ()
-  "Skip/ignore missing sexps, coloring comments and strings."
-  (let ((start (point)))
-    (when (= (context-coloring-get-syntax-code)
-             context-coloring-EXPRESSION-PREFIX-CODE)
-      ;; `forward-sexp' does not skip an unfinished expression (e.g. when the
-      ;; name of a symbol or the parentheses of a list do not follow a single
-      ;; quote).
-      (forward-char))
-    (condition-case nil
-        (forward-sexp)
-      (scan-error (context-coloring-forward-sws)))
-    (context-coloring-elisp-colorize-comments-and-strings-in-region
-     start (point))))
-
-(defsubst context-coloring-exact-regexp (word)
-  "Create a regexp matching exactly WORD."
-  (concat "\\`" (regexp-quote word) "\\'"))
-
-(defsubst context-coloring-exact-or-regexp (words)
-  "Create a regexp matching any exact word in WORDS."
-  (context-coloring-join
-   (mapcar #'context-coloring-exact-regexp words) "\\|"))
-
-(defconst context-coloring-elisp-ignored-word-regexp
-  (context-coloring-join (list "\\`[-+]?[0-9]"
-                               "\\`[&:].+"
-                               (context-coloring-exact-or-regexp
-                                '("t" "nil" "." "?")))
-                         "\\|")
-  "Match symbols that can't be bound as variables.")
-
-(defsubst context-coloring-elisp-identifier-p (syntax-code)
-  "Check if SYNTAX-CODE is an elisp identifier constituent."
-  (or (= syntax-code context-coloring-WORD-CODE)
-      (= syntax-code context-coloring-SYMBOL-CODE)))
-
-(defconst context-coloring-elisp-sexps-per-pause 350
-  "Pause after this many iterations to check for user input.
-If user input is pending, stop the parse.  This makes for a
-smoother user experience for large files.
-
-This number should trigger pausing at about 60 frames per
-second.")
-
-(defvar context-coloring-elisp-sexp-count 0
-  "Current number of sexps leading up to the next pause.")
-
-(defsubst context-coloring-elisp-increment-sexp-count ()
-  "Maybe check if the user interrupted the current parse."
-  (setq context-coloring-elisp-sexp-count
-        (1+ context-coloring-elisp-sexp-count))
-  (when (and (zerop (% context-coloring-elisp-sexp-count
-                       context-coloring-elisp-sexps-per-pause))
-             context-coloring-interruptable-p
-             (input-pending-p))
-    (throw 'interrupted t)))
-
-(defvar context-coloring-elisp-scope-stack '()
-  "List of scopes in the current parse.")
-
-(defsubst context-coloring-elisp-make-scope (level)
-  "Make a scope object for LEVEL."
-  (list
-   :level level
-   :variables '()))
-
-(defsubst context-coloring-elisp-scope-get-level (scope)
-  "Get the level of SCOPE object."
-  (plist-get scope :level))
-
-(defsubst context-coloring-elisp-scope-add-variable (scope variable)
-  "Add to SCOPE a VARIABLE."
-  (plist-put scope :variables (cons variable (plist-get scope :variables))))
-
-(defsubst context-coloring-elisp-scope-has-variable (scope variable)
-  "Check if SCOPE has VARIABLE."
-  (member variable (plist-get scope :variables)))
-
-(defsubst context-coloring-elisp-get-variable-level (variable)
-  "Return the level of VARIABLE, or 0 if it isn't found."
-  (let* ((scope-stack context-coloring-elisp-scope-stack)
-         scope
-         level)
-    (while (and scope-stack (not level))
-      (setq scope (car scope-stack))
-      (cond
-       ((context-coloring-elisp-scope-has-variable scope variable)
-        (setq level (context-coloring-elisp-scope-get-level scope)))
-       (t
-        (setq scope-stack (cdr scope-stack)))))
-    ;; Assume a global variable.
-    (or level 0)))
-
-(defsubst context-coloring-elisp-get-current-scope-level ()
-  "Get the nesting level of the current scope."
-  (cond
-   ((car context-coloring-elisp-scope-stack)
-    (context-coloring-elisp-scope-get-level (car 
context-coloring-elisp-scope-stack)))
-   (t
-    0)))
-
-(defsubst context-coloring-elisp-push-scope ()
-  "Add a new scope to the bottom of the scope chain."
-  (push (context-coloring-elisp-make-scope
-         (1+ (context-coloring-elisp-get-current-scope-level)))
-        context-coloring-elisp-scope-stack))
-
-(defsubst context-coloring-elisp-pop-scope ()
-  "Remove the scope on the bottom of the scope chain."
-  (pop context-coloring-elisp-scope-stack))
-
-(defsubst context-coloring-elisp-add-variable (variable)
-  "Add VARIABLE to the current scope."
-  (context-coloring-elisp-scope-add-variable
-   (car context-coloring-elisp-scope-stack)
-   variable))
-
-(defsubst context-coloring-elisp-parse-bindable (callback)
-  "Parse the symbol at point.
-If the symbol can be bound, invoke CALLBACK with it."
-  (let* ((arg-string (buffer-substring-no-properties
-                      (point)
-                      (progn (context-coloring-elisp-forward-sexp)
-                             (point)))))
-    (when (not (string-match-p
-                context-coloring-elisp-ignored-word-regexp
-                arg-string))
-      (funcall callback arg-string))))
-
-(defun context-coloring-elisp-parse-let-varlist (type)
-  "Parse the list of variable initializers at point.
-If TYPE is `let', all the variables are bound after all their
-initializers are parsed; if TYPE is `let*', each variable is
-bound immediately after its own initializer is parsed."
-  (let ((varlist '())
-        syntax-code)
-    ;; Enter.
-    (forward-char)
-    (context-coloring-elisp-forward-sws)
-    (while (/= (setq syntax-code (context-coloring-get-syntax-code))
-               context-coloring-CLOSE-PARENTHESIS-CODE)
-      (cond
-       ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-        (forward-char)
-        (context-coloring-elisp-forward-sws)
-        (setq syntax-code (context-coloring-get-syntax-code))
-        (when (context-coloring-elisp-identifier-p syntax-code)
-          (context-coloring-elisp-parse-bindable
-           (lambda (var)
-             (push var varlist)))
-          (context-coloring-elisp-forward-sws)
-          (setq syntax-code (context-coloring-get-syntax-code))
-          (when (/= syntax-code context-coloring-CLOSE-PARENTHESIS-CODE)
-            (context-coloring-elisp-colorize-sexp)))
-        (context-coloring-elisp-forward-sws)
-        ;; Skip past the closing parenthesis.
-        (forward-char))
-       ((context-coloring-elisp-identifier-p syntax-code)
-        (context-coloring-elisp-parse-bindable
-         (lambda (var)
-           (push var varlist))))
-       (t
-        ;; Ignore artifacts.
-        (context-coloring-elisp-forward-sexp)))
-      (when (eq type 'let*)
-        (context-coloring-elisp-add-variable (pop varlist)))
-      (context-coloring-elisp-forward-sws))
-    (when (eq type 'let)
-      (while varlist
-        (context-coloring-elisp-add-variable (pop varlist))))
-    ;; Exit.
-    (forward-char)))
-
-(defun context-coloring-elisp-parse-arglist ()
-  "Parse the list of function arguments at point."
-  (let (syntax-code)
-    ;; Enter.
-    (forward-char)
-    (context-coloring-elisp-forward-sws)
-    (while (/= (setq syntax-code (context-coloring-get-syntax-code))
-               context-coloring-CLOSE-PARENTHESIS-CODE)
-      (cond
-       ((context-coloring-elisp-identifier-p syntax-code)
-        (context-coloring-elisp-parse-bindable
-         (lambda (arg)
-           (context-coloring-elisp-add-variable arg))))
-       (t
-        ;; Ignore artifacts.
-        (context-coloring-elisp-forward-sexp)))
-      (context-coloring-elisp-forward-sws))
-    ;; Exit.
-    (forward-char)))
-
-(defun context-coloring-elisp-skip-callee-name ()
-  "Skip past the opening parenthesis and name of a function."
-  ;; Enter.
-  (forward-char)
-  (context-coloring-elisp-forward-sws)
-  ;; Skip past the function name.
-  (forward-sexp)
-  (context-coloring-elisp-forward-sws))
-
-(defun context-coloring-elisp-colorize-scope (callback)
-  "Color the whole scope at point with its one color.
-Handle a header in CALLBACK."
-  (let ((start (point))
-        (end (progn (forward-sexp)
-                    (point))))
-    (context-coloring-elisp-push-scope)
-    ;; Splash the whole thing in one color.
-    (context-coloring-colorize-region
-     start
-     end
-     (context-coloring-elisp-get-current-scope-level))
-    ;; Even if the parse is interrupted, this region should still be colored
-    ;; syntactically.
-    (context-coloring-elisp-colorize-comments-and-strings-in-region
-     start
-     end)
-    (goto-char start)
-    (context-coloring-elisp-skip-callee-name)
-    (funcall callback)
-    (context-coloring-elisp-colorize-region (point) (1- end))
-    ;; Exit.
-    (forward-char)
-    (context-coloring-elisp-pop-scope)))
-
-(defun context-coloring-elisp-parse-header (callback)
-  "Parse a function header at point with CALLBACK."
-  (when (= (context-coloring-get-syntax-code) 
context-coloring-OPEN-PARENTHESIS-CODE)
-    (funcall callback)))
-
-(defun context-coloring-elisp-colorize-defun-like (callback)
-  "Color the defun-like function at point.
-Parse the header with CALLBACK."
-  (context-coloring-elisp-colorize-scope
-   (lambda ()
-     (when (context-coloring-elisp-identifier-p 
(context-coloring-get-syntax-code))
-       ;; Color the defun's name with the top-level color.
-       (context-coloring-colorize-region
-        (point)
-        (progn (forward-sexp)
-               (point))
-        0)
-       (context-coloring-elisp-forward-sws)
-       (context-coloring-elisp-parse-header callback)))))
-
-(defun context-coloring-elisp-colorize-defun ()
-  "Color the `defun' at point."
-  (context-coloring-elisp-colorize-defun-like
-   'context-coloring-elisp-parse-arglist))
-
-(defun context-coloring-elisp-colorize-defadvice ()
-  "Color the `defadvice' at point."
-  (context-coloring-elisp-colorize-defun-like
-   (lambda ()
-     (let (syntax-code)
-       ;; Enter.
-       (forward-char)
-       (context-coloring-elisp-forward-sws)
-       (while (/= (setq syntax-code (context-coloring-get-syntax-code))
-                  context-coloring-CLOSE-PARENTHESIS-CODE)
-         (cond
-          ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-           (context-coloring-elisp-parse-arglist))
-          (t
-           ;; Ignore artifacts.
-           (context-coloring-elisp-forward-sexp)))
-         (context-coloring-elisp-forward-sws))))))
-
-(defun context-coloring-elisp-colorize-lambda-like (callback)
-  "Color the lambda-like function at point.
-Parsing the header with CALLBACK."
-  (context-coloring-elisp-colorize-scope
-   (lambda ()
-     (context-coloring-elisp-parse-header callback))))
-
-(defun context-coloring-elisp-colorize-lambda ()
-  "Color the `lambda' at point."
-  (context-coloring-elisp-colorize-lambda-like
-   'context-coloring-elisp-parse-arglist))
-
-(defun context-coloring-elisp-colorize-let ()
-  "Color the `let' at point."
-  (context-coloring-elisp-colorize-lambda-like
-   (lambda ()
-     (context-coloring-elisp-parse-let-varlist 'let))))
-
-(defun context-coloring-elisp-colorize-let* ()
-  "Color the `let*' at point."
-  (context-coloring-elisp-colorize-lambda-like
-   (lambda ()
-     (context-coloring-elisp-parse-let-varlist 'let*))))
-
-(defun context-coloring-elisp-colorize-macroexp-let2 ()
-  "Color the `macroexp-let2' at point."
-  (let (syntax-code
-        variable)
-    (context-coloring-elisp-colorize-scope
-     (lambda ()
-       (and
-        (progn
-          (setq syntax-code (context-coloring-get-syntax-code))
-          (context-coloring-elisp-identifier-p syntax-code))
-        (progn
-          (context-coloring-elisp-colorize-sexp)
-          (context-coloring-elisp-forward-sws)
-          (setq syntax-code (context-coloring-get-syntax-code))
-          (context-coloring-elisp-identifier-p syntax-code))
-        (progn
-          (context-coloring-elisp-parse-bindable
-           (lambda (parsed-variable)
-             (setq variable parsed-variable)))
-          (context-coloring-elisp-forward-sws)
-          (when variable
-            (context-coloring-elisp-add-variable variable))))))))
-
-(defun context-coloring-elisp-colorize-cond ()
-  "Color the `cond' at point."
-  (let (syntax-code)
-    (context-coloring-elisp-skip-callee-name)
-    (while (/= (setq syntax-code (context-coloring-get-syntax-code))
-               context-coloring-CLOSE-PARENTHESIS-CODE)
-      (cond
-       ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-        ;; Colorize inside the parens.
-        (let ((start (point)))
-          (forward-sexp)
-          (context-coloring-elisp-colorize-region
-           (1+ start) (1- (point)))
-          ;; Exit.
-          (forward-char)))
-       (t
-        ;; Ignore artifacts.
-        (context-coloring-elisp-forward-sexp)))
-      (context-coloring-elisp-forward-sws))
-    ;; Exit.
-    (forward-char)))
-
-(defun context-coloring-elisp-colorize-condition-case ()
-  "Color the `condition-case' at point."
-  (let (syntax-code
-        variable
-        case-pos
-        case-end)
-    (context-coloring-elisp-colorize-scope
-     (lambda ()
-       (setq syntax-code (context-coloring-get-syntax-code))
-       ;; Gracefully ignore missing variables.
-       (when (context-coloring-elisp-identifier-p syntax-code)
-         (context-coloring-elisp-parse-bindable
-          (lambda (parsed-variable)
-            (setq variable parsed-variable)))
-         (context-coloring-elisp-forward-sws))
-       (context-coloring-elisp-colorize-sexp)
-       (context-coloring-elisp-forward-sws)
-       ;; Parse the handlers with the error variable in scope.
-       (when variable
-         (context-coloring-elisp-add-variable variable))
-       (while (/= (setq syntax-code (context-coloring-get-syntax-code))
-                  context-coloring-CLOSE-PARENTHESIS-CODE)
-         (cond
-          ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-           (setq case-pos (point))
-           (context-coloring-elisp-forward-sexp)
-           (setq case-end (point))
-           (goto-char case-pos)
-           ;; Enter.
-           (forward-char)
-           (context-coloring-elisp-forward-sws)
-           (setq syntax-code (context-coloring-get-syntax-code))
-           (when (/= syntax-code context-coloring-CLOSE-PARENTHESIS-CODE)
-             ;; Skip the condition name(s).
-             (context-coloring-elisp-forward-sexp)
-             ;; Color the remaining portion of the handler.
-             (context-coloring-elisp-colorize-region
-              (point)
-              (1- case-end)))
-           ;; Exit.
-           (forward-char))
-          (t
-           ;; Ignore artifacts.
-           (context-coloring-elisp-forward-sexp)))
-         (context-coloring-elisp-forward-sws))))))
-
-(defun context-coloring-elisp-colorize-dolist ()
-  "Color the `dolist' at point."
-  (let (syntax-code
-        (index 0))
-    (context-coloring-elisp-colorize-scope
-     (lambda ()
-       (setq syntax-code (context-coloring-get-syntax-code))
-       (when (= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-         (forward-char)
-         (context-coloring-elisp-forward-sws)
-         (while (/= (setq syntax-code (context-coloring-get-syntax-code))
-                    context-coloring-CLOSE-PARENTHESIS-CODE)
-           (cond
-            ((and
-              (or (= index 0) (= index 2))
-              (context-coloring-elisp-identifier-p syntax-code))
-             ;; Add the first or third name to the scope.
-             (context-coloring-elisp-parse-bindable
-              (lambda (variable)
-                (context-coloring-elisp-add-variable variable))))
-            (t
-             ;; Color artifacts.
-             (context-coloring-elisp-colorize-sexp)))
-           (context-coloring-elisp-forward-sws)
-           (setq index (1+ index)))
-         ;; Exit.
-         (forward-char))))))
-
-(defun context-coloring-elisp-colorize-quote ()
-  "Color the `quote' at point."
-  (let* ((start (point))
-         (end (progn (forward-sexp)
-                     (point))))
-    (context-coloring-colorize-region
-     start
-     end
-     (context-coloring-elisp-get-current-scope-level))
-    (context-coloring-elisp-colorize-comments-and-strings-in-region start 
end)))
-
-(defvar context-coloring-elisp-callee-dispatch-hash-table
-  (let ((table (make-hash-table :test 'equal)))
-    (dolist (callee '("defun" "defun*" "defsubst" "defmacro" "cl-defun" 
"cl-defsubst" "cl-defmacro"))
-      (puthash callee #'context-coloring-elisp-colorize-defun table))
-    (dolist (callee '("condition-case" "condition-case-unless-debug"))
-      (puthash callee #'context-coloring-elisp-colorize-condition-case table))
-    (dolist (callee '("dolist" "dotimes"))
-      (puthash callee #'context-coloring-elisp-colorize-dolist table))
-    (dolist (callee '("let" "gv-letplace"))
-      (puthash callee #'context-coloring-elisp-colorize-let table))
-    (puthash "let*" #'context-coloring-elisp-colorize-let* table)
-    (puthash "macroexp-let2" #'context-coloring-elisp-colorize-macroexp-let2 
table)
-    (puthash "lambda" #'context-coloring-elisp-colorize-lambda table)
-    (puthash "cond" #'context-coloring-elisp-colorize-cond table)
-    (puthash "defadvice" #'context-coloring-elisp-colorize-defadvice table)
-    (puthash "quote" #'context-coloring-elisp-colorize-quote table)
-    (puthash "backquote" #'context-coloring-elisp-colorize-backquote table)
-    table)
-  "Map function names to their coloring functions.")
-
-(defun context-coloring-elisp-colorize-parenthesized-sexp ()
-  "Color the sexp enclosed by parenthesis at point."
-  (context-coloring-elisp-increment-sexp-count)
-  (let* ((start (point))
-         (end (progn (forward-sexp)
-                     (point)))
-         (syntax-code (progn (goto-char start)
-                             (forward-char)
-                             ;; Coloring is unnecessary here, it'll happen
-                             ;; presently.
-                             (context-coloring-forward-sws)
-                             (context-coloring-get-syntax-code)))
-         dispatch-function)
-    ;; Figure out if the sexp is a special form.
-    (cond
-     ((and (context-coloring-elisp-identifier-p syntax-code)
-           (setq dispatch-function (gethash
-                                    (buffer-substring-no-properties
-                                     (point)
-                                     (progn (forward-sexp)
-                                            (point)))
-                                    
context-coloring-elisp-callee-dispatch-hash-table)))
-      (goto-char start)
-      (funcall dispatch-function))
-     ;; Not a special form; just colorize the remaining region.
-     (t
-      (context-coloring-colorize-region
-       start
-       end
-       (context-coloring-elisp-get-current-scope-level))
-      (context-coloring-elisp-colorize-region (point) (1- end))
-      (forward-char)))))
-
-(defun context-coloring-elisp-colorize-symbol ()
-  "Color the symbol at point."
-  (context-coloring-elisp-increment-sexp-count)
-  (let* ((symbol-pos (point))
-         (symbol-end (progn (forward-sexp)
-                            (point)))
-         (symbol-string (buffer-substring-no-properties
-                         symbol-pos
-                         symbol-end)))
-    (cond
-     ((string-match-p context-coloring-elisp-ignored-word-regexp 
symbol-string))
-     (t
-      (context-coloring-colorize-region
-       symbol-pos
-       symbol-end
-       (context-coloring-elisp-get-variable-level
-        symbol-string))))))
-
-(defun context-coloring-elisp-colorize-backquote-form ()
-  "Color the backquote form at point."
-  (let ((start (point))
-        (end (progn (forward-sexp)
-                    (point)))
-        char)
-    (goto-char start)
-    (while (> end (progn (forward-char)
-                         (point)))
-      (setq char (char-after))
-      (when (= char context-coloring-COMMA-CHAR)
-        (forward-char)
-        (when (= (char-after) context-coloring-AT-CHAR)
-          ;; If we don't do this "@" could be interpreted as a symbol.
-          (forward-char))
-        (context-coloring-elisp-forward-sws)
-        (context-coloring-elisp-colorize-sexp)))
-    ;; We could probably do this as part of the above loop but it'd be
-    ;; repetitive.
-    (context-coloring-elisp-colorize-comments-and-strings-in-region
-     start end)))
-
-(defun context-coloring-elisp-colorize-backquote ()
-  "Color the `backquote' at point."
-  (context-coloring-elisp-skip-callee-name)
-  (context-coloring-elisp-colorize-backquote-form)
-  ;; Exit.
-  (forward-char))
-
-(defun context-coloring-elisp-colorize-expression-prefix ()
-  "Color the expression prefix and expression at point.
-It could be a quoted or backquoted expression."
-  (context-coloring-elisp-increment-sexp-count)
-  (cond
-   ((/= (char-after) context-coloring-BACKTICK-CHAR)
-    (context-coloring-elisp-forward-sexp))
-   (t
-    (context-coloring-elisp-colorize-backquote-form))))
-
-(defun context-coloring-elisp-colorize-comment ()
-  "Color the comment at point."
-  (context-coloring-elisp-increment-sexp-count)
-  (context-coloring-elisp-forward-sws))
-
-(defun context-coloring-elisp-colorize-string ()
-  "Color the string at point."
-  (context-coloring-elisp-increment-sexp-count)
-  (let ((start (point)))
-    (forward-sexp)
-    (context-coloring-elisp-colorize-comments-and-strings start (point))))
-
-;; Elisp has whitespace, words, symbols, open/close parenthesis, expression
-;; prefix, string quote, comment starters/enders and escape syntax classes 
only.
-
-(defun context-coloring-elisp-colorize-sexp ()
-  "Color the sexp at point."
-  (let ((syntax-code (context-coloring-get-syntax-code)))
-    (cond
-     ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-      (context-coloring-elisp-colorize-parenthesized-sexp))
-     ((context-coloring-elisp-identifier-p syntax-code)
-      (context-coloring-elisp-colorize-symbol))
-     ((= syntax-code context-coloring-EXPRESSION-PREFIX-CODE)
-      (context-coloring-elisp-colorize-expression-prefix))
-     ((= syntax-code context-coloring-STRING-QUOTE-CODE)
-      (context-coloring-elisp-colorize-string))
-     ((= syntax-code context-coloring-ESCAPE-CODE)
-      (forward-char 2)))))
-
-(defun context-coloring-elisp-colorize-comments-and-strings-in-region (start 
end)
-  "Color comments and strings between START and END."
-  (let (syntax-code)
-    (goto-char start)
-    (while (> end (progn (skip-syntax-forward "^\"<\\" end)
-                         (point)))
-      (setq syntax-code (context-coloring-get-syntax-code))
-      (cond
-       ((= syntax-code context-coloring-STRING-QUOTE-CODE)
-        (context-coloring-elisp-colorize-string))
-       ((= syntax-code context-coloring-COMMENT-START-CODE)
-        (context-coloring-elisp-colorize-comment))
-       ((= syntax-code context-coloring-ESCAPE-CODE)
-        (forward-char 2))))))
-
-(defun context-coloring-elisp-colorize-region (start end)
-  "Color everything between START and END."
-  (let (syntax-code)
-    (goto-char start)
-    (while (> end (progn (skip-syntax-forward "^w_('\"<\\" end)
-                         (point)))
-      (setq syntax-code (context-coloring-get-syntax-code))
-      (cond
-       ((= syntax-code context-coloring-OPEN-PARENTHESIS-CODE)
-        (context-coloring-elisp-colorize-parenthesized-sexp))
-       ((context-coloring-elisp-identifier-p syntax-code)
-        (context-coloring-elisp-colorize-symbol))
-       ((= syntax-code context-coloring-EXPRESSION-PREFIX-CODE)
-        (context-coloring-elisp-colorize-expression-prefix))
-       ((= syntax-code context-coloring-STRING-QUOTE-CODE)
-        (context-coloring-elisp-colorize-string))
-       ((= syntax-code context-coloring-COMMENT-START-CODE)
-        (context-coloring-elisp-colorize-comment))
-       ((= syntax-code context-coloring-ESCAPE-CODE)
-        (forward-char 2))))))
-
-(defun context-coloring-elisp-colorize-region-initially (start end)
-  "Begin coloring everything between START and END."
-  (setq context-coloring-elisp-sexp-count 0)
-  (setq context-coloring-elisp-scope-stack '())
-  (let ((inhibit-point-motion-hooks t)
-        (case-fold-search nil)
-        ;; This is a recursive-descent parser, so give it a big stack.
-        (max-lisp-eval-depth (max max-lisp-eval-depth 3000))
-        (max-specpdl-size (max max-specpdl-size 3000)))
-    (context-coloring-elisp-colorize-region start end)))
-
-(defun context-coloring-elisp-colorize-guard (callback)
-  "Silently color in CALLBACK."
-  (with-silent-modifications
-    (save-excursion
-      (condition-case nil
-          (funcall callback)
-        ;; Scan errors can happen virtually anywhere if parenthesis are
-        ;; unbalanced.  Just swallow them.  (`progn' for test coverage.)
-        (scan-error (progn))))))
-
-;;;###autoload
-(defun context-coloring-elisp-colorize ()
-  "Color the current Emacs Lisp buffer."
-  (interactive)
-  (context-coloring-elisp-colorize-guard
-   (lambda ()
-     (cond
-      ;; Just colorize the changed region.
-      (context-coloring-changed-p
-       (let* (;; Prevent `beginning-of-defun' from making poor assumptions.
-              (open-paren-in-column-0-is-defun-start nil)
-              ;; Seek the beginning and end of the previous and next
-              ;; offscreen defuns, so just enough is colored.
-              (start (progn (goto-char context-coloring-changed-start)
-                            (while (and (< (point-min) (point))
-                                        (pos-visible-in-window-p))
-                              (end-of-line 0))
-                            (beginning-of-defun)
-                            (point)))
-              (end (progn (goto-char context-coloring-changed-end)
-                          (while (and (> (point-max) (point))
-                                      (pos-visible-in-window-p))
-                            (forward-line 1))
-                          (end-of-defun)
-                          (point))))
-         (context-coloring-elisp-colorize-region-initially start end)
-         ;; Fast coloring is nice, but if the code is not well-formed
-         ;; (e.g. an unclosed string literal is parsed at any time) then
-         ;; there could be leftover incorrectly-colored code offscreen.  So
-         ;; do a clean sweep as soon as appropriate.
-         (context-coloring-schedule-coloring context-coloring-default-delay)))
-      (t
-       (context-coloring-elisp-colorize-region-initially (point-min) 
(point-max)))))))
-
-;;;###autoload
-(puthash
- 'emacs-lisp
- (list :modes '(emacs-lisp-mode lisp-interaction-mode)
-       :colorizer #'context-coloring-elisp-colorize
-       :setup #'context-coloring-setup-idle-change-detection
-       :teardown #'context-coloring-teardown-idle-change-detection)
- context-coloring-dispatch-hash-table)
-
-
-;;; eval-expression colorization
-
-(defun context-coloring-eval-expression-match ()
-  "Determine expression start in `eval-expression'."
-  (string-match "\\`Eval: " (buffer-string)))
-
-;;;###autoload
-(defun context-coloring-eval-expression-colorize ()
-  "Color the `eval-expression' minibuffer prompt as elisp."
-  (interactive)
-  (context-coloring-elisp-colorize-guard
-   (lambda ()
-     (context-coloring-elisp-colorize-region-initially
-      (progn
-        (context-coloring-eval-expression-match)
-        (1+ (match-end 0)))
-      (point-max)))))
-
-;; `eval-expression-minibuffer-setup-hook' is not available in Emacs 24.3, so
-;; the backwards-compatible recommendation is to use `minibuffer-setup-hook' 
and
-;; rely on this predicate instead.
-;;;###autoload
-(defun context-coloring-eval-expression-predicate ()
-  "Non-nil if the minibuffer is for `eval-expression'."
-  ;; Kinda better than checking `this-command', because `this-command' changes.
-  (context-coloring-eval-expression-match))
-
-;;;###autoload
-(puthash
- 'eval-expression
- (list :predicate #'context-coloring-eval-expression-predicate
-       :colorizer #'context-coloring-eval-expression-colorize
-       :setup #'context-coloring-setup-idle-change-detection
-       :teardown #'context-coloring-teardown-idle-change-detection)
- context-coloring-dispatch-hash-table)
-
-(provide 'context-coloring-emacs-lisp)
-
-;;; context-coloring-emacs-lisp.el ends here
diff --git a/packages/context-coloring/context-coloring-javascript.el 
b/packages/context-coloring/context-coloring-javascript.el
deleted file mode 100644
index 29bafb8..0000000
--- a/packages/context-coloring/context-coloring-javascript.el
+++ /dev/null
@@ -1,239 +0,0 @@
-;;; context-coloring-javascript.el --- JavaScript support  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2016  Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Add JavaScript context coloring support with js2-mode.
-
-;;; Code:
-
-(require 'context-coloring)
-(require 'js2-mode)
-
-
-;;; JavaScript colorization
-
-(defvar-local context-coloring-js2-scope-level-hash-table nil
-  "Associate `js2-scope' structures and with their scope
-  levels.")
-
-(defcustom context-coloring-javascript-block-scopes nil
-  "If non-nil, also color block scopes in the scope hierarchy in JavaScript.
-
-The block-scoped `let' and `const' are introduced in ES6.  Enable
-this for ES6 code; disable it elsewhere."
-  :type 'boolean
-  :safe #'booleanp
-  :group 'context-coloring)
-
-(defsubst context-coloring-js2-scope-level (scope initial)
-  "Return the level of SCOPE, starting from INITIAL."
-  (cond ((gethash scope context-coloring-js2-scope-level-hash-table))
-        (t
-         (let ((level initial)
-               (current-scope scope)
-               enclosing-scope)
-           (while (and current-scope
-                       (js2-node-parent current-scope)
-                       (setq enclosing-scope
-                             (js2-node-get-enclosing-scope current-scope)))
-             (when (or context-coloring-javascript-block-scopes
-                       (let ((type (js2-scope-type current-scope)))
-                         (or (= type js2-SCRIPT)
-                             (= type js2-FUNCTION)
-                             (= type js2-CATCH))))
-               (setq level (+ level 1)))
-             (setq current-scope enclosing-scope))
-           (puthash scope level 
context-coloring-js2-scope-level-hash-table)))))
-
-(defsubst context-coloring-js2-local-name-node-p (node)
-  "Determine if NODE represents a local variable."
-  (and (js2-name-node-p node)
-       (let ((parent (js2-node-parent node)))
-         (not (or (and (js2-object-prop-node-p parent)
-                       (eq node (js2-object-prop-node-left parent)))
-                  (and (js2-prop-get-node-p parent)
-                       ;; For nested property lookup, the node on the left is a
-                       ;; `js2-prop-get-node', so this always works.
-                       (eq node (js2-prop-get-node-right parent))))))))
-
-(defvar-local context-coloring-point-min nil
-  "Cached value of `point-min'.")
-
-(defvar-local context-coloring-point-max nil
-  "Cached value of `point-max'.")
-
-(defsubst context-coloring-js2-bounded-point (point)
-  "Make POINT safe to set text properties.
-POINT may be unsafe if a JS2 node extends beyond the end of the
-buffer (in the case of an unterminated multiline comment).  The
-region could also be narrowed and the node thus obscured."
-  (min (max point context-coloring-point-min) context-coloring-point-max))
-
-(defsubst context-coloring-js2-colorize-node (node level)
-  "Color NODE with the color for LEVEL."
-  (let* ((start (js2-node-abs-pos node))
-         (end (+ start (js2-node-len node))))
-    (context-coloring-colorize-region
-     (context-coloring-js2-bounded-point start)
-     (context-coloring-js2-bounded-point end)
-     level)))
-
-(defun context-coloring-js2-colorize-ast ()
-  "Color the buffer using the `js2-mode' abstract syntax tree."
-  ;; Reset the hash table; the old one could be obsolete.
-  (setq context-coloring-js2-scope-level-hash-table (make-hash-table :test 
#'eq))
-  (setq context-coloring-point-min (point-min))
-  (setq context-coloring-point-max (point-max))
-  (with-silent-modifications
-    (js2-visit-ast
-     js2-mode-ast
-     (lambda (node end-p)
-       (when (null end-p)
-         (cond
-          ((js2-scope-p node)
-           (context-coloring-js2-colorize-node
-            node
-            (context-coloring-js2-scope-level node 
context-coloring-initial-level)))
-          ((context-coloring-js2-local-name-node-p node)
-           (let* ((enclosing-scope (js2-node-get-enclosing-scope node))
-                  (defining-scope (js2-get-defining-scope
-                                   enclosing-scope
-                                   (js2-name-node-name node))))
-             ;; The tree seems to be walked lexically, so an entire scope will
-             ;; be colored, including its name nodes, before they are reached.
-             ;; Coloring the nodes defined in that scope would be redundant, so
-             ;; don't do it.
-             (when (not (eq defining-scope enclosing-scope))
-               (context-coloring-js2-colorize-node
-                node
-                ;; Use `0' as an initial level so global variables are always 
at
-                ;; the highest level (even if `context-coloring-initial-level'
-                ;; specifies an initial level for the rest of the code).
-                (context-coloring-js2-scope-level defining-scope 0))))))
-         ;; The `t' indicates to search children.
-         t)))
-    (context-coloring-colorize-comments-and-strings)))
-
-(defconst context-coloring-node-comment-regexp
-  (concat
-   ;; Ensure the "//" or "/*" comment starts with the directive.
-   "\\(//[[:space:]]*\\|/\\*[[:space:]]*\\)"
-   ;; Support multiple directive formats.
-   "\\("
-   ;; JSLint and JSHint support a JSON-like format.
-   "\\(jslint\\|jshint\\)[[:space:]].*?node:[[:space:]]*true"
-   "\\|"
-   ;; ESLint just specifies the option name.
-   "eslint-env[[:space:]].*?node"
-   "\\)")
-  "Match a comment body hinting at a Node.js program.")
-
-(defun context-coloring-js2-top-level-local-p ()
-  "Guess whether top-level variables are local.
-For instance, the current file could be a Node.js program."
-  (or
-   ;; A shebang is a pretty obvious giveaway.
-   (string-equal
-    "node"
-    (save-excursion
-      (goto-char (point-min))
-      (when (looking-at auto-mode-interpreter-regexp)
-        (match-string 2))))
-   ;; Otherwise, perform static analysis.
-   (progn
-     (setq context-coloring-js2-scope-level-hash-table (make-hash-table :test 
#'eq))
-     (catch 'node-program-p
-       (js2-visit-ast
-        js2-mode-ast
-        (lambda (node end-p)
-          (when (null end-p)
-            (when
-                (cond
-                 ;; Infer based on inline linter configuration.
-                 ((js2-comment-node-p node)
-                  (string-match-p
-                   context-coloring-node-comment-regexp
-                   (js2-node-string node)))
-                 ;; Infer based on the prescence of certain variables.
-                 ((and (js2-name-node-p node)
-                       (let ((parent (js2-node-parent node)))
-                         (not (and (js2-object-prop-node-p parent)
-                                   (eq node (js2-object-prop-node-left 
parent))))))
-                  (let ((name (js2-name-node-name node))
-                        (parent (js2-node-parent node)))
-                    (and
-                     (cond
-                      ;; Check whether this is "exports.something" or
-                      ;; "module.exports".
-                      ((js2-prop-get-node-p parent)
-                       (and
-                        (eq node (js2-prop-get-node-left parent))
-                        (or (string-equal name "exports")
-                            (let* ((property (js2-prop-get-node-right parent))
-                                   (property-name (js2-name-node-name 
property)))
-                              (and (string-equal name "module")
-                                   (string-equal property-name "exports"))))))
-                      ;; Check whether it's a "require('module')" call.
-                      ((js2-call-node-p parent)
-                       (or (string-equal name "require"))))
-                     (let* ((enclosing-scope (js2-node-get-enclosing-scope 
node))
-                            (defining-scope (js2-get-defining-scope
-                                             enclosing-scope name)))
-                       ;; The variable also must be global.
-                       (null defining-scope))))))
-              (throw 'node-program-p t))
-            ;; The `t' indicates to search children.
-            t)))
-       ;; Default to returning nil from the catch body.
-       nil))))
-
-(defcustom context-coloring-javascript-detect-top-level-scope t
-  "If non-nil, detect when to use file-level scope."
-  :type 'boolean
-  :group 'context-coloring)
-
-;;;###autoload
-(defun context-coloring-js2-colorize ()
-  "Color the buffer using the `js2-mode'."
-  (cond
-   ;; Increase the initial level if we should.
-   ((and context-coloring-javascript-detect-top-level-scope
-         (context-coloring-js2-top-level-local-p))
-    (let ((context-coloring-initial-level 1))
-      (context-coloring-js2-colorize-ast)))
-   (t
-    (context-coloring-js2-colorize-ast))))
-
-;;;###autoload
-(puthash
- 'javascript
- (list :modes '(js2-mode js2-jsx-mode)
-       :colorizer #'context-coloring-js2-colorize
-       :setup
-       (lambda ()
-         (add-hook 'js2-post-parse-callbacks #'context-coloring-colorize nil 
t))
-       :teardown
-       (lambda ()
-         (remove-hook 'js2-post-parse-callbacks #'context-coloring-colorize 
t)))
- context-coloring-dispatch-hash-table)
-
-(provide 'context-coloring-javascript)
-
-;;; context-coloring-javascript.el ends here
diff --git a/packages/context-coloring/context-coloring-test.el 
b/packages/context-coloring/context-coloring-test.el
deleted file mode 100644
index fabf55b..0000000
--- a/packages/context-coloring/context-coloring-test.el
+++ /dev/null
@@ -1,931 +0,0 @@
-;;; context-coloring-test.el --- Tests for context coloring  -*- 
lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2016  Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Tests for context coloring.
-
-;; Use with `make test'.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'context-coloring)
-(require 'context-coloring-javascript)
-(require 'context-coloring-emacs-lisp)
-(require 'ert)
-
-
-;;; Test running utilities
-
-(defconst context-coloring-test-path
-  (file-name-directory (or load-file-name buffer-file-name))
-  "This file's directory.")
-
-(defun context-coloring-test-read-file (path)
-  "Return the file's contents from PATH as a string."
-  (with-temp-buffer
-    (insert-file-contents (expand-file-name path context-coloring-test-path))
-    (buffer-string)))
-
-(defmacro context-coloring-test-with-fixture (fixture &rest body)
-  "With relative FIXTURE, evaluate BODY in a temporary buffer."
-  `(with-temp-buffer
-     (progn
-       (insert (context-coloring-test-read-file ,fixture))
-       ,@body)))
-
-
-;;; Test defining utilities
-
-(cl-defmacro context-coloring-test-define-deftest (name
-                                                   &key mode
-                                                   &key extension
-                                                   &key no-fixture
-                                                   &key 
enable-context-coloring-mode
-                                                   &key before-each
-                                                   &key after-each)
-  "Define a deftest defmacro for tests prefixed with NAME.  MODE
-is called to set up tests' environments.  EXTENSION denotes the
-suffix for tests' fixture files.  If NO-FIXTURE is non-nil, don't
-use a fixture.  If ENABLE-CONTEXT-COLORING-MODE is non-nil,
-`context-coloring-mode' is activated before tests.  Functions
-BEFORE-EACH and AFTER-EACH run before the major mode is activated
-before each test, and after each test, even if an error is
-signaled."
-  (declare (indent defun))
-  (let ((macro-name (intern (format "context-coloring-test-deftest%s"
-                                    (cond
-                                     ;; No name means no dash.
-                                     ((eq name nil) "")
-                                     (t (format "-%s" name)))))))
-    `(cl-defmacro ,macro-name (name
-                               body
-                               &key fixture
-                               &key before
-                               &key after)
-       (declare (indent defun))
-       ;; Commas in nested backquotes are not evaluated.  Binding the variables
-       ;; here is probably the cleanest workaround.
-       (let ((mode ,mode)
-             (before-each ',before-each)
-             (after-each ',after-each)
-             (test-name (intern (format ,(format "%s-%%s"
-                                                 (cond
-                                                  (name)
-                                                  (t "generic"))) name)))
-             (fixture (cond
-                       (fixture (format "./fixtures/test/%s" fixture))
-                       (,no-fixture "./fixtures/test/empty")
-                       (t (format ,(format "./fixtures/test/%%s.%s" extension) 
name)))))
-         ,@`((let ((enable-context-coloring-mode 
,enable-context-coloring-mode))
-               `(ert-deftest ,test-name ()
-                  (context-coloring-test-with-fixture
-                   ,fixture
-                   (when ,before-each (funcall ,before-each))
-                   (,mode)
-                   (when ,before (funcall ,before))
-                   (when ,enable-context-coloring-mode (context-coloring-mode))
-                   (unwind-protect
-                       (progn
-                         (funcall ,body))
-                     (when ,after (funcall ,after))
-                     (when ,after-each (funcall ,after-each)))))))))))
-
-(context-coloring-test-define-deftest nil
-  :mode #'fundamental-mode
-  :no-fixture t)
-
-(defun context-coloring-test-js2-mode ()
-  "Enable js2-mode and parse synchronously."
-  (js2-mode)
-  (js2-reparse))
-
-(context-coloring-test-define-deftest javascript
-  :mode #'context-coloring-test-js2-mode
-  :extension "js"
-  :enable-context-coloring-mode t
-  :before-each (lambda ()
-                 (setq js2-mode-show-parse-errors nil)
-                 (setq js2-mode-show-strict-warnings nil)))
-
-(context-coloring-test-define-deftest emacs-lisp
-  :mode #'emacs-lisp-mode
-  :extension "el"
-  :enable-context-coloring-mode t)
-
-(context-coloring-test-define-deftest eval-expression
-  :mode #'fundamental-mode
-  :no-fixture t)
-
-
-;;; Assertion functions
-
-(defun context-coloring-test-get-last-message ()
-  "Get the last message in the current messages bufffer."
-  (let ((messages (split-string
-                   (buffer-substring-no-properties
-                    (point-min)
-                    (point-max))
-                   "\n")))
-    (car (nthcdr (- (length messages) 2) messages))))
-
-(defun context-coloring-test-assert-message (expected buffer)
-  "Assert that message EXPECTED is at the end of BUFFER."
-  (when (null (get-buffer buffer))
-    (ert-fail
-     (format
-      (concat
-       "Expected buffer `%s' to have message \"%s\", "
-       "but the buffer did not have any messages.")
-      buffer expected)))
-  (with-current-buffer buffer
-    (let ((message (context-coloring-test-get-last-message)))
-      (when (not (equal message expected))
-        (ert-fail
-         (format
-          (concat
-           "Expected buffer `%s' to have message \"%s\", "
-           "but instead it was \"%s\"")
-          buffer expected
-          message))))))
-
-(defun context-coloring-test-assert-not-message (expected buffer)
-  "Assert that message EXPECTED is not at the end of BUFFER."
-  (when (get-buffer buffer)
-    (with-current-buffer buffer
-      (let ((message (context-coloring-test-get-last-message)))
-        (when (equal message expected)
-          (ert-fail
-           (format
-            (concat
-             "Expected buffer `%s' not to have message \"%s\", "
-             "but it did")
-            buffer expected)))))))
-
-(defun context-coloring-test-assert-error (body error-message)
-  "Assert that BODY signals ERROR-MESSAGE."
-  (let ((error-signaled-p nil))
-    (condition-case err
-        (progn
-          (funcall body))
-      (error
-       (setq error-signaled-p t)
-       (when (not (string-equal (cadr err) error-message))
-         (ert-fail (format (concat "Expected the error \"%s\" to be thrown, "
-                                   "but instead it was \"%s\".")
-                           error-message
-                           (cadr err))))))
-    (when (not error-signaled-p)
-      (ert-fail "Expected an error to be thrown, but there wasn't."))))
-
-
-;;; Miscellaneous tests
-
-(defmacro context-coloring-test-define-derived-mode (name)
-  "Define a derived mode exclusively for any test with NAME."
-  (let ((name (intern (format "context-coloring-test-%s-mode" name))))
-    `(define-derived-mode ,name fundamental-mode "Testing")))
-
-(defvar context-coloring-test-caused-p nil
-  "If non-nil, coloring was caused.")
-
-(defmacro context-coloring-test-assert-causes-coloring (&rest body)
-  "Assert that BODY causes coloring."
-  `(progn
-     ;; Gross, but I want this to pass on 24.3.
-     (ad-add-advice #'context-coloring-colorize
-                    '(assert-causes-coloring
-                      nil t
-                      (advice . (lambda ()
-                                  (setq context-coloring-test-caused-p t))))
-                    'after
-                    0)
-     (ad-activate #'context-coloring-colorize)
-     ,@body
-     (when (not context-coloring-test-caused-p)
-       (ert-fail "Expected to have colorized, but it didn't."))))
-
-(defun context-coloring-test-cleanup-assert-causes-coloring ()
-  "Undo `context-coloring-test-assert-causes-coloring'."
-  (ad-unadvise #'context-coloring-colorize)
-  (setq context-coloring-test-caused-p nil))
-
-(context-coloring-test-define-derived-mode mode-startup)
-
-(context-coloring-test-deftest mode-startup
-  (lambda ()
-    (puthash
-     'mode-startup
-     (list :modes '(context-coloring-test-mode-startup-mode))
-     context-coloring-dispatch-hash-table)
-    (context-coloring-test-mode-startup-mode)
-    (context-coloring-test-assert-causes-coloring
-     (context-coloring-mode)))
-  :after (lambda ()
-           (context-coloring-test-cleanup-assert-causes-coloring)))
-
-(context-coloring-test-define-derived-mode change-detection)
-
-(context-coloring-test-deftest change-detection
-  (lambda ()
-    (puthash
-     'idle-change
-     (list :modes '(context-coloring-test-change-detection-mode)
-           :setup #'context-coloring-setup-idle-change-detection
-           :teardown #'context-coloring-teardown-idle-change-detection)
-     context-coloring-dispatch-hash-table)
-    (context-coloring-test-change-detection-mode)
-    (context-coloring-mode)
-    (context-coloring-test-assert-causes-coloring
-     (insert " ")
-     ;; Simply cannot figure out how to trigger an idle timer; would much 
rather
-     ;; test that.  But (current-idle-time) always returns nil in these tests.
-     (context-coloring-maybe-colorize-with-buffer (current-buffer))))
-  :after (lambda ()
-           (context-coloring-test-cleanup-assert-causes-coloring)))
-
-(context-coloring-test-deftest unsupported-mode
-  (lambda ()
-    (context-coloring-mode)
-    (context-coloring-test-assert-message
-     "Context coloring is unavailable here"
-     "*Messages*")))
-
-(context-coloring-test-deftest unavailable-message-ignored
-  (lambda ()
-    (minibuffer-with-setup-hook
-        (lambda ()
-          (context-coloring-mode)
-          (context-coloring-test-assert-not-message
-           "Context coloring is unavailable here"
-           "*Messages*"))
-      (execute-kbd-macro
-       (vconcat
-        [?\C-u]
-        [?\M-!])))))
-
-(context-coloring-test-define-derived-mode disable-mode)
-
-(context-coloring-test-deftest disable-mode
-  (lambda ()
-    (let (torn-down)
-      (puthash
-       'disable-mode
-       (list :modes '(context-coloring-test-disable-mode-mode)
-             :teardown (lambda ()
-                         (setq torn-down t)))
-       context-coloring-dispatch-hash-table)
-      (context-coloring-test-disable-mode-mode)
-      (context-coloring-mode)
-      (context-coloring-mode -1)
-      (when (not torn-down)
-        (ert-fail "Expected teardown function to have been called, but it 
wasn't.")))))
-
-(defun context-coloring-test-assert-maximum-face (expected)
-  "Assert that `context-coloring-maximum-face' is EXPECTED."
-  (when (not (= context-coloring-maximum-face expected))
-    (ert-fail (format "Expected maximum face to be %s, but it was %s"
-                      expected context-coloring-maximum-face))))
-
-(deftheme context-coloring-test-custom-theme)
-
-(context-coloring-test-define-derived-mode custom-theme)
-
-(context-coloring-test-deftest custom-theme
-  (lambda ()
-    (custom-theme-set-faces
-     'context-coloring-test-custom-theme
-     '(context-coloring-level-0-face ((t :foreground "#aaaaaa")))
-     '(context-coloring-level-1-face ((t :foreground "#bbbbbb"))))
-    (custom-set-faces
-     '(context-coloring-level-0-face ((t :foreground "#aaaaaa"))))
-    (enable-theme 'context-coloring-test-custom-theme)
-    (puthash
-     'theme
-     (list :modes '(context-coloring-test-custom-theme-mode))
-     context-coloring-dispatch-hash-table)
-    (context-coloring-test-custom-theme-mode)
-    (context-coloring-colorize)
-    (context-coloring-test-assert-maximum-face 1)
-    ;; This theme should now be ignored in favor of the `user' theme.
-    (custom-theme-reset-faces
-     'context-coloring-test-custom-theme
-     '(context-coloring-level-0-face nil)
-     '(context-coloring-level-1-face nil))
-    (context-coloring-colorize)
-    ;; Maximum face for `user'.
-    (context-coloring-test-assert-maximum-face 0)
-    ;; Now `user' should be ignored too.
-    (custom-reset-faces
-     '(context-coloring-level-0-face nil))
-    (context-coloring-colorize)
-    ;; Expect the package's defaults.
-    (context-coloring-test-assert-maximum-face
-     context-coloring-default-maximum-face))
-  :after (lambda ()
-           (custom-reset-faces
-            '(context-coloring-level-0-face nil))
-           (disable-theme 'context-coloring-test-custom-theme)))
-
-(when (fboundp 'prettify-symbols-mode)
-
-  (defun context-coloring-test-assert-prettify-symbols-coloring ()
-    (context-coloring-test-assert-coloring "
-(111111 () (222222 ()))"))
-
-  (defun context-coloring-test-assert-prettify-symbols-text-properties ()
-    (unless (cond
-             ((version< emacs-version "25.0")
-              (get-text-property 2 'composition))
-             (t
-              (and (get-text-property 2 'prettify-symbols-start)
-                   (get-text-property 2 'prettify-symbols-end))))
-      (ert-fail "Expected buffer to have it's symbols prettified, but it 
didn't.")))
-
-  (context-coloring-test-deftest prettify-symbols-enabled-before
-                                 (lambda ()
-                                   (context-coloring-test-with-fixture
-                                    "./fixtures/test/prettify-symbols.el"
-                                    (emacs-lisp-mode)
-                                    (prettify-symbols-mode)
-                                    (context-coloring-mode)
-                                    
(context-coloring-test-assert-prettify-symbols-text-properties)
-                                    
(context-coloring-test-assert-prettify-symbols-coloring))))
-
-  (context-coloring-test-deftest prettify-symbols-enabled-after
-                                 (lambda ()
-                                   (context-coloring-test-with-fixture
-                                    "./fixtures/test/prettify-symbols.el"
-                                    (emacs-lisp-mode)
-                                    (context-coloring-mode)
-                                    (prettify-symbols-mode)
-                                    
(context-coloring-test-assert-prettify-symbols-text-properties)
-                                    
(context-coloring-test-assert-prettify-symbols-coloring)))))
-
-
-;;; Coloring tests
-
-(defun context-coloring-test-face-to-level (face)
-  "Convert FACE symbol to its corresponding level, or nil."
-  (when face
-    (let* ((face-string (symbol-name face))
-           (matches (string-match
-                     context-coloring-level-face-regexp
-                     face-string)))
-      (when matches
-        (string-to-number (match-string 1 face-string))))))
-
-(defun context-coloring-test-assert-position-level (position level)
-  "Assert that POSITION has LEVEL."
-  (let* ((face (get-text-property position 'face))
-         (actual-level (context-coloring-test-face-to-level face)))
-    (when (not (= level actual-level))
-      (ert-fail (format (concat "Expected level at position %s, "
-                                "which is \"%s\", to be %s; "
-                                "but it was %s")
-                        position
-                        (buffer-substring-no-properties position (1+ 
position)) level
-                        actual-level)))))
-
-(defun context-coloring-test-assert-position-face (position face-regexp)
-  "Assert that the face at POSITION satisfies FACE-REGEXP."
-  (let ((face (get-text-property position 'face)))
-    (when (or
-           ;; Pass a non-string to do an `equal' check (against a symbol or 
nil).
-           (unless (stringp face-regexp)
-             (not (equal face-regexp face)))
-           ;; Otherwise do the matching.
-           (when (stringp face-regexp)
-             (not (string-match-p face-regexp (symbol-name face)))))
-      (ert-fail (format (concat "Expected face at position %s, "
-                                "which is \"%s\", to be %s; "
-                                "but it was %s")
-                        position
-                        (buffer-substring-no-properties position (1+ 
position)) face-regexp
-                        face)))))
-
-(defun context-coloring-test-assert-position-comment (position)
-  "Assert that the face at POSITION is a comment."
-  (context-coloring-test-assert-position-face
-   position "\\`font-lock-comment\\(-delimiter\\)?-face\\'"))
-
-(defun context-coloring-test-assert-position-constant-comment (position)
-  "Assert that the face at POSITION is a constant comment."
-  (context-coloring-test-assert-position-face position 
'(font-lock-constant-face
-                                                         
font-lock-comment-face)))
-
-(defun context-coloring-test-assert-position-string (position)
-  "Assert that the face at POSITION is a string."
-  (context-coloring-test-assert-position-face position 'font-lock-string-face))
-
-(defun context-coloring-test-assert-position-nil (position)
-  "Assert that the face at POSITION is nil."
-  (context-coloring-test-assert-position-face position nil))
-
-(defun context-coloring-test-assert-coloring (map)
-  "Assert that the current buffer's coloring will match MAP.
-
-MAP's newlines should correspond to the current fixture.
-
-The following characters appearing in MAP assert coloring for
-corresponding points in the fixture:
-
-0-9: Level equals number.
-C: Face is constant comment.
-c: Face is comment.
-n: Face is nil.
-s: Face is string.
-
-Any other characters are discarded.  Characters \"x\" and any
-other non-letters are guaranteed to always be discarded."
-  ;; Omit the superfluous, formatting-related leading newline.  Can't use
-  ;; `save-excursion' here because if an assertion fails it will cause future
-  ;; tests to get messed up.
-  (goto-char (point-min))
-  (let* ((map (substring map 1))
-         (index 0)
-         char-string
-         char)
-    (while (< index (length map))
-      (setq char-string (substring map index (1+ index)))
-      (setq char (string-to-char char-string))
-      (cond
-       ;; Newline
-       ((= char 10)
-        (forward-line)
-        (beginning-of-line))
-       ;; Number
-       ((and (>= char 48)
-             (<= char 57))
-        (context-coloring-test-assert-position-level
-         (point) (string-to-number char-string))
-        (forward-char))
-       ;; 'C' = Constant comment
-       ((= char 67)
-        (context-coloring-test-assert-position-constant-comment (point))
-        (forward-char))
-       ;; 'c' = Comment
-       ((= char 99)
-        (context-coloring-test-assert-position-comment (point))
-        (forward-char))
-       ;; 'n' = nil
-       ((= char 110)
-        (context-coloring-test-assert-position-nil (point))
-        (forward-char))
-       ;; 's' = String
-       ((= char 115)
-        (context-coloring-test-assert-position-string (point))
-        (forward-char))
-       (t
-        (forward-char)))
-      (setq index (1+ index)))))
-
-(context-coloring-test-deftest-javascript function-scopes
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-000 0 0 11111111 11 110
-11111111 011 1
-    111 1 1 22222222 22 221
-    22222222 122 22
-1")))
-
-(context-coloring-test-deftest-javascript global
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxxxx () {
-    111 1 1 0000001xxx11
-}());")))
-
-(context-coloring-test-deftest-javascript block-scopes
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxxxx () {
-    11 111 2
-        222 12
-        222 22
-        22222 22
-    2
-}());"))
-  :before (lambda ()
-            (setq context-coloring-javascript-block-scopes t))
-  :after (lambda ()
-           (setq context-coloring-javascript-block-scopes nil)))
-
-(context-coloring-test-deftest-javascript catch
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxxxx () {
-    111 11 22222 222 2
-        222 1 2 22
-        222 22 33333 333 3
-            333 1 3 33
-        3
-    2
-}());")))
-
-(context-coloring-test-deftest-javascript key-names
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxxxx () {
-    111111 1
-        11 11
-        1 1 1
-    11
-}());")))
-
-(context-coloring-test-deftest-javascript property-lookup
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxxxx () {
-    0000001111111
-    0000001 111111
-    00000011111111111
-}());")))
-
-(context-coloring-test-deftest-javascript key-values
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxxxx () {
-    xxx x;
-    (xxxxxxxx () {
-        xxxxxx {
-            x: 1
-        };
-    }());
-}());")))
-
-(context-coloring-test-deftest-javascript syntactic-comments-and-strings
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-0000 00
-ccccccc
-cccccccccc
-ssssssssssss0"))
-  :fixture "comments-and-strings.js")
-
-(context-coloring-test-deftest-javascript syntactic-comments
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-0000 00
-ccccccc
-cccccccccc
-0000000000000"))
-  :fixture "comments-and-strings.js"
-  :before (lambda ()
-            (setq context-coloring-syntactic-strings nil))
-  :after (lambda ()
-           (setq context-coloring-syntactic-strings t)))
-
-(context-coloring-test-deftest-javascript syntactic-strings
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-0000 00
-0000000
-0000000000
-ssssssssssss0"))
-  :fixture "comments-and-strings.js"
-  :before (lambda ()
-            (setq context-coloring-syntactic-comments nil))
-  :after (lambda ()
-           (setq context-coloring-syntactic-comments t)))
-
-(context-coloring-test-deftest-javascript unterminated-comment
-  ;; As long as `add-text-properties' doesn't signal an error, this test 
passes.
-  (lambda ()))
-
-(defun context-coloring-test-assert-javascript-elevated-level ()
-  "Assert that the \"initial-level.js\" file has elevated scope."
-  (context-coloring-test-assert-coloring "
-
-111 1 1 0000001xxx11"))
-
-(defun context-coloring-test-assert-javascript-global-level ()
-  "Assert that the \"initial-level.js\" file has global scope."
-  (context-coloring-test-assert-coloring "
-
-000 0 0 0000000xxx00"))
-
-(context-coloring-test-deftest-javascript initial-level
-  (lambda ()
-    (context-coloring-test-assert-javascript-elevated-level))
-  :fixture "initial-level.js"
-  :before (lambda ()
-            (setq context-coloring-initial-level 1))
-  :after (lambda ()
-           (setq context-coloring-initial-level 0)))
-
-(defun context-coloring-test-setup-top-level-scope (string)
-  "Make STRING the first line and colorize again."
-  (goto-char (point-min))
-  (kill-whole-line 0)
-  (insert string)
-  ;; Reparsing triggers recoloring.
-  (js2-reparse))
-
-(context-coloring-test-deftest-javascript top-level-scope
-  (lambda ()
-    (let ((positive-indicators
-           (list "#!/usr/bin/env node"
-                 "/*jslint node: true */"
-                 "// jshint node: true"
-                 "/*eslint-env node */"
-                 "module.exports"
-                 "module.exports.a"
-                 "exports.a"
-                 "require('a')"))
-          (negative-indicators
-           (list "// Blah blah jshint blah."
-                 "module"
-                 "exports"
-                 "var require; require('a')")))
-      (dolist (indicator positive-indicators)
-        (context-coloring-test-setup-top-level-scope indicator)
-        (context-coloring-test-assert-javascript-elevated-level))
-      (dolist (indicator negative-indicators)
-        (context-coloring-test-setup-top-level-scope indicator)
-        (context-coloring-test-assert-javascript-global-level))))
-  :fixture "initial-level.js")
-
-(context-coloring-test-deftest-javascript narrow-to-region
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111111 0 11 11
-11111111 0 11 11
-11111111 0 11 1"))
-  :before (lambda ()
-            (narrow-to-region (+ (point-min) 1) (- (point-max) 2))))
-
-(context-coloring-test-deftest-emacs-lisp defun
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-111111 000 1111 111 111111111 1111
-  11 111 111 111 000011
-
-0000 0 0 00
-
-111111 01
-111111 111
-111111 0 1sss11")))
-
-(context-coloring-test-deftest-emacs-lisp defadvice
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111111111 0 1111111 111111 11111 111 111111111
-  2222 222 122
-    22 1 2221")))
-
-(context-coloring-test-deftest-emacs-lisp lambda
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-00000000 1111111 1111
-           11111111 11 2222222 2222
-                         222 22 12 2221 111 0 00")))
-
-(context-coloring-test-deftest-emacs-lisp quote
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxx 0000000 00 00000)
-(xxx () (xxxxxxxxx (,0000)))
-
-(xxxxx x (x)
-  (xx (xx x 111
-      111111 1 111 111
-      111111 1 1111111111 11 111 1 111 1 00001 10000 11 00001 1 10000
-                 sss ccc
-                 1111
-
-(xxxxxx '(sss cc
-          sss cc
-          ))
-
-(xxxxxx () 111111 11111)")))
-
-(context-coloring-test-deftest-emacs-lisp splice
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxxx ()
-  111111 00001 100001)")))
-
-(context-coloring-test-deftest-emacs-lisp comment
-  (lambda ()
-    ;; Just check that the comment isn't parsed syntactically.
-    (context-coloring-test-assert-coloring "
-(xxxxx x ()
-  (xx (x xxxxx-xxxx xx)   cccccccccc
-      11 00000-0000 11))) cccccccccc")))
-
-(context-coloring-test-deftest-emacs-lisp string
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxx x (x)
-  (xxxxxx x x sss 1 0 sssss 0 1 sssssss11")))
-
-(context-coloring-test-deftest-emacs-lisp ignored
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxxxx x ()
-  (x x 1 11 11 111 111 11 11 11 1 111 (1 1 1)))")))
-
-(context-coloring-test-deftest-emacs-lisp sexp
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxx ()
-  `,@sss
-  `,@11
-  `,@11)")))
-
-(context-coloring-test-deftest-emacs-lisp let
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111 11
-      11 01
-      11 00001
-      11 2222 22
-               22 02
-               22 000022
-           2222 2 2 2 00002211
-  1111 1 1 1 000011
-
-1111 cc ccccccc
-    1sss11")))
-
-(context-coloring-test-deftest-emacs-lisp empty-varlist
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111111 1 11
-1111111 111
-
-1111 1cc
-      11
-1111111 111")))
-
-(context-coloring-test-deftest-emacs-lisp varlist-spacing
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(111 (
-      (1 (222222 ()))))
-
-(111111 ( 1 1 )
-  1 1)
-
-(111111111 0 ( (1) )
-  1)")))
-
-(context-coloring-test-deftest-emacs-lisp let*
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-11111 11
-       11 11
-       11 000011
-  1111 1 1 1 0 0 00001
-  22222 22
-         22 12
-         22 00002
-         22 02
-         22 222
-    2222 1 1 2 2 2 000022
-  1111 1 1 1 0 0 000011"))
-  :fixture "let-star.el")
-
-(context-coloring-test-deftest-emacs-lisp macroexp-let2
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111 11111
-  222222222-2222 00000000-00000000-0 2 111
-    2 11121
-
-(11111111-1111 00000000-00000000-0)
-(11111111-1111)")))
-
-(context-coloring-test-deftest-emacs-lisp cond
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-(xxx (x)
-  11111
-   11 11
-   10000 11
-   1111 1 00001 11
-   11 11111 1 000011
-   cc c
-   sss1)")))
-
-(context-coloring-test-deftest-emacs-lisp condition-case
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111111111-1111 111
-    111111 000 00001
-  111111 111 00001
-  1111111 111111 111 000011
-
-(111111111-1111-111111-11111 111
-    cc c
-    (xxx () 222)
-  (11111 (xxx () 222))
-  sss)")))
-
-(context-coloring-test-deftest-emacs-lisp dolist
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111111 111111
-  2222222 2222 1111 2222222
-    3333333 33 33 222 1111 2222223321")))
-
-(defun context-coloring-test-insert-unread-space ()
-  "Simulate the insertion of a space as if by a user."
-  (setq unread-command-events (cons '(t . 32)
-                                    unread-command-events)))
-
-(defun context-coloring-test-remove-faces ()
-  "Remove all faces in the current buffer."
-  (remove-text-properties (point-min) (point-max) '(face nil)))
-
-(context-coloring-test-deftest-emacs-lisp iteration
-  (lambda ()
-    (let ((context-coloring-elisp-sexps-per-pause 2))
-      (context-coloring-colorize)
-      (context-coloring-test-assert-coloring "
-cc `CC' `CC'
-(xxxxx x ())")
-      (context-coloring-test-remove-faces)
-      (context-coloring-test-insert-unread-space)
-      (context-coloring-colorize)
-      ;; Coloring is interrupted after the first "sexp" (the comment in this
-      ;; case).
-      (context-coloring-test-assert-coloring "
-cc `CC' `CC'
-nnnnnn n nnn"))))
-
-(context-coloring-test-deftest-emacs-lisp changed
-  (lambda ()
-    (context-coloring-test-remove-faces)
-    ;; Goto line 3.
-    (goto-char (point-min))
-    (forward-line (1- 3))
-    (insert " ")
-    ;; Mock `pos-visible-in-window-p' because in batch mode `get-buffer-window'
-    ;; returns nil.  Emacs must not have a window in that environment.
-    (cl-letf (((symbol-function 'pos-visible-in-window-p)
-               (let ((calls 0))
-                 (lambda ()
-                   (prog1
-                       ;; First and third calls start from center.  Second and
-                       ;; fourth calls are made immediately after moving past
-                       ;; the first defun in either direction "off screen".
-                       (cond
-                        ((= calls 0) t)
-                        ((= calls 1) nil)
-                        ((= calls 2) t)
-                        ((= calls 4) nil))
-                     (setq calls (1+ calls)))))))
-      (context-coloring-colorize))
-    (context-coloring-test-assert-coloring "
-nnnn  n nnn nnnnnnnn
-0000
-
-0000
-nnnnn n nnn nnnnnnnn")))
-
-(context-coloring-test-deftest-emacs-lisp unbalanced-parenthesis
-  (lambda ()
-    (context-coloring-test-assert-coloring "
-1111 111
-nnnn nn")))
-
-(context-coloring-test-deftest-eval-expression let
-  (lambda ()
-    (minibuffer-with-setup-hook
-        (lambda ()
-          ;; Perform the test in a hook as it's the only way I know of 
examining
-          ;; the minibuffer's contents.  The contents are implicitly submitted,
-          ;; so we have to ignore the errors in the arbitrary test subject 
code.
-          (insert "(ignore-errors (let (a) (message a free)))")
-          (context-coloring-mode)
-          (context-coloring-test-assert-coloring "
-xxxx: 0000000-000000 1111 111 11111111 1 0000110"))
-      ;; Simulate user input because `call-interactively' is blocking and
-      ;; doesn't seem to run the hook.
-      (execute-kbd-macro
-       (vconcat
-        [?\C-u] ;; Don't output the result of the arbitrary test subject code.
-        [?\M-:])))))
-
-(provide 'context-coloring-test)
-
-;;; context-coloring-test.el ends here
diff --git a/packages/context-coloring/context-coloring.el 
b/packages/context-coloring/context-coloring.el
deleted file mode 100644
index ac24364..0000000
--- a/packages/context-coloring/context-coloring.el
+++ /dev/null
@@ -1,494 +0,0 @@
-;;; context-coloring.el --- Highlight by scope  -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2016  Free Software Foundation, Inc.
-
-;; Author: Jackson Ray Hamilton <jackson@jacksonrayhamilton.com>
-;; Version: 8.1.0
-;; Keywords: convenience faces tools
-;; Package-Requires: ((emacs "24.3"))
-;; URL: https://github.com/jacksonrayhamilton/context-coloring
-
-;; This file is part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Highlights code by scope.  Top-level scopes are one color, second-level
-;; scopes are another color, and so on.  Variables retain the color of the 
scope
-;; in which they are defined.  A variable defined in an outer scope referenced
-;; by an inner scope is colored the same as the outer scope.
-
-;; By default, comments and strings are still highlighted syntactically.
-
-;;; Code:
-
-
-;;; Utilities
-
-(defun context-coloring-join (strings delimiter)
-  "Join a list of STRINGS with the string DELIMITER."
-  (mapconcat #'identity strings delimiter))
-
-(defun context-coloring-check-predicates (predicates)
-  "Call PREDICATES until one returns t, otherwise return nil."
-  (let ((satisfied-p nil))
-    (while (and predicates
-                (not satisfied-p))
-      (setq satisfied-p (funcall (pop predicates))))
-    satisfied-p))
-
-
-;;; Faces
-
-(defun context-coloring-defface (level light dark tty)
-  "Define a face for LEVEL with LIGHT, DARK and TTY colors."
-  (let ((face (intern (format "context-coloring-level-%s-face" level)))
-        (doc (format "Context coloring face, level %s." level)))
-    (custom-declare-face
-     face
-     `((((type tty)) (:foreground ,tty))
-       (((background light)) (:foreground ,light))
-       (((background dark)) (:foreground ,dark)))
-     doc
-     :group 'context-coloring)))
-
-;; Provide some default colors based off Emacs's defaults.
-(context-coloring-defface 0 "#000000" "#ffffff" nil)
-(context-coloring-defface 1 "#008b8b" "#00ffff" "yellow")
-(context-coloring-defface 2 "#0000ff" "#87cefa" "green")
-(context-coloring-defface 3 "#483d8b" "#b0c4de" "cyan")
-(context-coloring-defface 4 "#a020f0" "#eedd82" "blue")
-(context-coloring-defface 5 "#a0522d" "#98fb98" "magenta")
-(context-coloring-defface 6 "#228b22" "#7fffd4" "red")
-(context-coloring-defface 7 "#3f3f3f" "#cdcdcd" nil)
-
-(defconst context-coloring-default-maximum-face 7
-  "Maximum face when there are no custom faces.")
-
-;; Create placeholder faces for users and theme authors.
-(dotimes (level 18)
-  (let* ((level (+ level 8))
-         (face (intern (format "context-coloring-level-%s-face" level)))
-         (doc (format "Context coloring face, level %s." level)))
-    (custom-declare-face face nil doc :group 'context-coloring)))
-
-(defvar-local context-coloring-maximum-face nil
-  "Dynamic index of the highest face available for coloring.")
-
-(defsubst context-coloring-level-face (level)
-  "Return symbol for face with LEVEL."
-  ;; `concat' is faster than `format' here.
-  (intern-soft
-   (concat "context-coloring-level-" (number-to-string level) "-face")))
-
-(defsubst context-coloring-bounded-level-face (level)
-  "Return symbol for face with LEVEL, bounded by the maximum."
-  (context-coloring-level-face (min level context-coloring-maximum-face)))
-
-(defconst context-coloring-level-face-regexp
-  "context-coloring-level-\\([[:digit:]]+\\)-face"
-  "Extract a level from a face.")
-
-(defun context-coloring-theme-highest-level (theme)
-  "Return the highest coloring level for THEME, or -1."
-  (let* ((settings (get theme 'theme-settings))
-         (tail settings)
-         face-string
-         number
-         (found -1))
-    (while tail
-      (and (eq (nth 0 (car tail)) 'theme-face)
-           (setq face-string (symbol-name (nth 1 (car tail))))
-           (string-match
-            context-coloring-level-face-regexp
-            face-string)
-           (setq number (string-to-number
-                         (substring face-string
-                                    (match-beginning 1)
-                                    (match-end 1))))
-           (> number found)
-           (setq found number))
-      (setq tail (cdr tail)))
-    found))
-
-(defun context-coloring-update-maximum-face ()
-  "Save the highest possible face for the current theme."
-  (let ((themes (append custom-enabled-themes '(user)))
-        (continue t)
-        theme
-        highest-level)
-    (while continue
-      (setq theme (car themes))
-      (setq themes (cdr themes))
-      (setq highest-level (context-coloring-theme-highest-level theme))
-      (setq continue (and themes (= highest-level -1))))
-    (setq context-coloring-maximum-face
-          (cond
-           ((= highest-level -1)
-            context-coloring-default-maximum-face)
-           (t
-            highest-level)))))
-
-
-;;; Change detection
-
-(defvar-local context-coloring-changed-p nil
-  "Indication that the buffer has changed recently, which implies
-that it should be colored again by
-`context-coloring-maybe-colorize-idle-timer' if that timer is
-being used.")
-
-(defvar-local context-coloring-changed-start nil
-  "Beginning of last text that changed.")
-
-(defvar-local context-coloring-changed-end nil
-  "End of last text that changed.")
-
-(defvar-local context-coloring-changed-length nil
-  "Length of last text that changed.")
-
-(defun context-coloring-change-function (start end length)
-  "Register a change so that a buffer can be colorized soon.
-
-START, END and LENGTH are recorded for later use."
-  ;; Tokenization is obsolete if there was a change.
-  (setq context-coloring-changed-start start)
-  (setq context-coloring-changed-end end)
-  (setq context-coloring-changed-length length)
-  (setq context-coloring-changed-p t))
-
-(defun context-coloring-maybe-colorize-with-buffer (buffer)
-  "Color BUFFER and if it has changed."
-  (when (and (eq buffer (current-buffer))
-             context-coloring-changed-p)
-    (context-coloring-colorize-with-buffer buffer)
-    (setq context-coloring-changed-p nil)
-    (setq context-coloring-changed-start nil)
-    (setq context-coloring-changed-end nil)
-    (setq context-coloring-changed-length nil)))
-
-(defvar-local context-coloring-maybe-colorize-idle-timer nil
-  "The currently-running idle timer for conditional coloring.")
-
-(defvar-local context-coloring-colorize-idle-timer nil
-  "The currently-running idle timer for unconditional coloring.")
-
-(defcustom context-coloring-default-delay 0.25
-  "Default delay between a buffer update and colorization.
-
-Increase this if your machine is high-performing.  Decrease it if
-it ain't."
-  :type 'float
-  :group 'context-coloring)
-
-(defun context-coloring-cancel-timer (timer)
-  "Cancel TIMER."
-  (when timer
-    (cancel-timer timer)))
-
-(defun context-coloring-schedule-coloring (time)
-  "Schedule coloring to occur once after Emacs is idle for TIME."
-  (context-coloring-cancel-timer context-coloring-colorize-idle-timer)
-  (setq context-coloring-colorize-idle-timer
-        (run-with-idle-timer
-         time
-         nil
-         #'context-coloring-colorize-with-buffer
-         (current-buffer))))
-
-(defun context-coloring-setup-idle-change-detection ()
-  "Setup idle change detection."
-  (let ((dispatch (context-coloring-get-current-dispatch)))
-    (add-hook
-     'after-change-functions #'context-coloring-change-function nil t)
-    (add-hook
-     'kill-buffer-hook #'context-coloring-teardown-idle-change-detection nil t)
-    (setq context-coloring-maybe-colorize-idle-timer
-          (run-with-idle-timer
-           (or (plist-get dispatch :delay) context-coloring-default-delay)
-           t
-           #'context-coloring-maybe-colorize-with-buffer
-           (current-buffer)))))
-
-(defun context-coloring-teardown-idle-change-detection ()
-  "Teardown idle change detection."
-  (dolist (timer (list context-coloring-colorize-idle-timer
-                       context-coloring-maybe-colorize-idle-timer))
-    (context-coloring-cancel-timer timer))
-  (remove-hook
-   'kill-buffer-hook #'context-coloring-teardown-idle-change-detection t)
-  (remove-hook
-   'after-change-functions #'context-coloring-change-function t))
-
-
-;;; Colorization utilities
-
-(defsubst context-coloring-colorize-region (start end level)
-  "Color from START (inclusive) to END (exclusive) with LEVEL."
-  (add-text-properties
-   start
-   end
-   `(face ,(context-coloring-bounded-level-face level))))
-
-(defcustom context-coloring-syntactic-comments t
-  "If non-nil, also color comments using `font-lock'."
-  :type 'boolean
-  :group 'context-coloring)
-
-(defcustom context-coloring-syntactic-strings t
-  "If non-nil, also color strings using `font-lock'."
-  :type 'boolean
-  :group 'context-coloring)
-
-(defun context-coloring-font-lock-syntactic-comment-function (state)
-  "Color a comment according to STATE."
-  (if (nth 3 state) nil font-lock-comment-face))
-
-(defun context-coloring-font-lock-syntactic-string-function (state)
-  "Color a string according to STATE."
-  (if (nth 3 state) font-lock-string-face nil))
-
-(defsubst context-coloring-colorize-comments-and-strings (&optional min max 
keywords-p)
-  "Maybe color comments and strings in buffer from MIN to MAX.
-MIN defaults to beginning of buffer.  MAX defaults to end.  If
-KEYWORDS-P is non-nil, also color keywords from MIN to MAX."
-  (when (or context-coloring-syntactic-comments
-            context-coloring-syntactic-strings)
-    (let ((min (or min (point-min)))
-          (max (or max (point-max)))
-          (font-lock-syntactic-face-function
-           (cond
-            ((and context-coloring-syntactic-comments
-                  (not context-coloring-syntactic-strings))
-             #'context-coloring-font-lock-syntactic-comment-function)
-            ((and context-coloring-syntactic-strings
-                  (not context-coloring-syntactic-comments))
-             #'context-coloring-font-lock-syntactic-string-function)
-            (t
-             font-lock-syntactic-face-function))))
-      (save-excursion
-        (font-lock-fontify-syntactically-region min max)
-        (when keywords-p
-          (font-lock-fontify-keywords-region min max))))))
-
-(defcustom context-coloring-initial-level 0
-  "Scope level at which to start coloring.
-
-If top-level variables and functions do not become global, but
-are scoped to a file (as in Node.js), set this to 1."
-  :type 'integer
-  :safe #'integerp
-  :group 'context-coloring)
-
-
-;;; Dispatch
-
-;;;###autoload
-(defvar context-coloring-dispatch-hash-table (make-hash-table :test #'eq)
-  "Map dispatch strategy names to their property lists.
-
-A \"dispatch\" is a property list describing a strategy for
-coloring a buffer.
-
-Its properties must include one of `:modes' or `:predicate', and
-a `:colorizer'.
-
-`:modes' - List of major modes this dispatch is valid for.
-
-`:predicate' - Function that determines if the dispatch is valid
-for any given state.
-
-`:colorizer' - Function that parses and colors the buffer.
-
-`:delay' - Delay between buffer update and colorization, to
-override `context-coloring-default-delay'.
-
-`:setup' - Arbitrary code to set up this dispatch when
-`context-coloring-mode' is enabled.
-
-`:teardown' - Arbitrary code to tear down this dispatch when
-`context-coloring-mode' is disabled.
-
-`:async-p' - Hint that code will be colorized asynchronously.
-Please call `context-coloring-after-colorize' when colorization
-completes.")
-
-(defun context-coloring-find-dispatch (predicate)
-  "Find the first dispatch satisfying PREDICATE."
-  (let (found)
-    (maphash
-     (lambda (_ dispatch)
-       (when (and (not found)
-                  (funcall predicate dispatch))
-         (setq found dispatch)))
-     context-coloring-dispatch-hash-table)
-    found))
-
-(defun context-coloring-get-current-dispatch ()
-  "Return the first dispatch appropriate for the current state."
-  (cond
-   ;; Maybe a predicate will be satisfied.
-   ((context-coloring-find-dispatch
-     (lambda (dispatch)
-       (let ((predicate (plist-get dispatch :predicate)))
-         (and predicate (funcall predicate))))))
-   ;; If not, maybe a major mode (or a derivative) will.
-   ((context-coloring-find-dispatch
-     (lambda (dispatch)
-       (let ((modes (plist-get dispatch :modes))
-             match)
-         (while (and modes (not match))
-           (setq match (eq (pop modes) major-mode)))
-         match))))))
-
-(defun context-coloring-before-colorize ()
-  "Set up environment for colorization."
-  (context-coloring-update-maximum-face))
-
-(defvar context-coloring-after-colorize-hook nil
-  "Functions to run after colorizing.")
-
-(defun context-coloring-after-colorize ()
-  "Do final business after colorization."
-  (run-hooks 'context-coloring-after-colorize-hook))
-
-(defun context-coloring-dispatch ()
-  "Determine how to color the current buffer, and color it."
-  (let* ((dispatch (context-coloring-get-current-dispatch))
-         (colorizer (plist-get dispatch :colorizer))
-         (async-p (plist-get dispatch :async-p)))
-    (context-coloring-before-colorize)
-    (when colorizer
-      (catch 'interrupted
-        (funcall colorizer)))
-    (unless async-p
-      (context-coloring-after-colorize))))
-
-
-;;; Colorization
-
-(defvar context-coloring-fontify-keywords-predicates
-  (list
-   (lambda () (and (boundp 'prettify-symbols-mode) prettify-symbols-mode)))
-  "Cases where the whole buffer should have keywords fontified.
-Necessary in cases where a mode relies on fontifications in
-regions where Context Coloring doesn't happen to touch.")
-
-(defun context-coloring-maybe-fontify-keywords ()
-  "Determine if the buffer ought to have keywords fontified."
-  (when (context-coloring-check-predicates
-         context-coloring-fontify-keywords-predicates)
-    (with-silent-modifications
-      (save-excursion
-        (font-lock-fontify-keywords-region (point-min) (point-max))))))
-
-(add-hook 'context-coloring-after-colorize-hook
-          #'context-coloring-maybe-fontify-keywords)
-
-(defun context-coloring-colorize ()
-  "Color the current buffer by function context."
-  (interactive)
-  (context-coloring-dispatch))
-
-(defun context-coloring-colorize-with-buffer (buffer)
-  "Color BUFFER."
-  ;; Don't select deleted buffers.
-  (when (get-buffer buffer)
-    (with-current-buffer buffer
-      (context-coloring-colorize))))
-
-
-;;; Minor mode
-
-(defvar context-coloring-ignore-unavailable-predicates
-  (list
-   #'minibufferp)
-  "Cases when \"unavailable\" messages are silenced.
-Necessary in editing states where coloring is only sometimes
-permissible.")
-
-(defun context-coloring-ignore-unavailable-message-p ()
-  "Determine if the unavailable message should be silenced."
-  (context-coloring-check-predicates
-   context-coloring-ignore-unavailable-predicates))
-
-(defvar context-coloring-interruptable-p t
-  "When non-nil, coloring may be interrupted by user input.")
-
-;;;###autoload
-(define-minor-mode context-coloring-mode
-  "Toggle contextual code coloring.
-With a prefix argument ARG, enable Context Coloring mode if ARG
-is positive, and disable it otherwise.  If called from Lisp,
-enable the mode if ARG is omitted or nil.
-
-Context Coloring mode is a buffer-local minor mode.  When
-enabled, code is colored by scope.  Scopes are colored
-hierarchically.  Variables referenced from nested scopes retain
-the color of their defining scopes.  Certain syntax, like
-comments and strings, is still colored with `font-lock'.
-
-The entire buffer is colored initially.  Changes to the buffer
-trigger recoloring.
-
-Define your own colors by customizing faces like
-`context-coloring-level-N-face', where N is a number starting
-from 0.  If no face is found on a custom theme nor the `user'
-theme, the defaults are used.
-
-New language / major mode support can be added with
-`context-coloring-define-dispatch', which see.
-
-Feature inspired by Douglas Crockford."
-  nil " Context" nil
-  (cond
-   (context-coloring-mode
-    (let ((dispatch (context-coloring-get-current-dispatch)))
-      (cond
-       (dispatch
-        ;; Font lock is incompatible with this mode; the converse is also true.
-        (font-lock-mode 0)
-        ;; ...but we do use font-lock functions here.
-        (font-lock-set-defaults)
-        ;; Safely change the value of this function as necessary.
-        (make-local-variable 'font-lock-syntactic-face-function)
-        ;; Improve integration with `prettify-symbols-mode'.  It relies on Font
-        ;; Lock's automatic fontification to apply it's changes on mode change,
-        ;; so Context Coloring has to make those changes manually.
-        (add-hook 'prettify-symbols-mode-hook 
#'context-coloring-maybe-fontify-keywords nil t)
-        ;; Furthermore, on Emacs < 25.0, `prettify-symbols-mode' calls
-        ;; `font-lock-fontify-buffer-function' which would overwrite context
-        ;; coloring, so make it a no-op.
-        (set (make-local-variable 'font-lock-fontify-buffer-function) (lambda 
()))
-        (let ((setup (plist-get dispatch :setup)))
-          (when setup
-            (funcall setup))
-          ;; Colorize once initially.
-          (let ((context-coloring-interruptable-p nil))
-            (context-coloring-colorize))))
-       ((not (context-coloring-ignore-unavailable-message-p))
-        (message "Context coloring is unavailable here")))))
-   (t
-    (let ((dispatch (context-coloring-get-current-dispatch)))
-      (when dispatch
-        (let ((teardown (plist-get dispatch :teardown)))
-          (when teardown
-            (funcall teardown)))))
-    (remove-hook 'prettify-symbols-mode-hook 
#'context-coloring-maybe-fontify-keywords t)
-    (turn-on-font-lock-if-desired))))
-
-(provide 'context-coloring)
-
-;;; context-coloring.el ends here
diff --git a/packages/context-coloring/fixtures/.nosearch 
b/packages/context-coloring/fixtures/.nosearch
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/context-coloring/fixtures/benchmark/.dir-locals.el 
b/packages/context-coloring/fixtures/benchmark/.dir-locals.el
deleted file mode 100644
index f3d5e97..0000000
--- a/packages/context-coloring/fixtures/benchmark/.dir-locals.el
+++ /dev/null
@@ -1 +0,0 @@
-((nil . ((buffer-read-only . t))))
diff --git a/packages/context-coloring/fixtures/benchmark/async-0.9.0.js 
b/packages/context-coloring/fixtures/benchmark/async-0.9.0.js
deleted file mode 100644
index 01e8afc..0000000
--- a/packages/context-coloring/fixtures/benchmark/async-0.9.0.js
+++ /dev/null
@@ -1,1123 +0,0 @@
-/*!
- * async
- * https://github.com/caolan/async
- *
- * Copyright 2010-2014 Caolan McMahon
- * Released under the MIT license
- */
-/*jshint onevar: false, indent:4 */
-/*global setImmediate: false, setTimeout: false, console: false */
-(function () {
-
-    var async = {};
-
-    // global on the server, window in the browser
-    var root, previous_async;
-
-    root = this;
-    if (root != null) {
-      previous_async = root.async;
-    }
-
-    async.noConflict = function () {
-        root.async = previous_async;
-        return async;
-    };
-
-    function only_once(fn) {
-        var called = false;
-        return function() {
-            if (called) throw new Error("Callback was already called.");
-            called = true;
-            fn.apply(root, arguments);
-        }
-    }
-
-    //// cross-browser compatiblity functions ////
-
-    var _toString = Object.prototype.toString;
-
-    var _isArray = Array.isArray || function (obj) {
-        return _toString.call(obj) === '[object Array]';
-    };
-
-    var _each = function (arr, iterator) {
-        if (arr.forEach) {
-            return arr.forEach(iterator);
-        }
-        for (var i = 0; i < arr.length; i += 1) {
-            iterator(arr[i], i, arr);
-        }
-    };
-
-    var _map = function (arr, iterator) {
-        if (arr.map) {
-            return arr.map(iterator);
-        }
-        var results = [];
-        _each(arr, function (x, i, a) {
-            results.push(iterator(x, i, a));
-        });
-        return results;
-    };
-
-    var _reduce = function (arr, iterator, memo) {
-        if (arr.reduce) {
-            return arr.reduce(iterator, memo);
-        }
-        _each(arr, function (x, i, a) {
-            memo = iterator(memo, x, i, a);
-        });
-        return memo;
-    };
-
-    var _keys = function (obj) {
-        if (Object.keys) {
-            return Object.keys(obj);
-        }
-        var keys = [];
-        for (var k in obj) {
-            if (obj.hasOwnProperty(k)) {
-                keys.push(k);
-            }
-        }
-        return keys;
-    };
-
-    //// exported async module functions ////
-
-    //// nextTick implementation with browser-compatible fallback ////
-    if (typeof process === 'undefined' || !(process.nextTick)) {
-        if (typeof setImmediate === 'function') {
-            async.nextTick = function (fn) {
-                // not a direct alias for IE10 compatibility
-                setImmediate(fn);
-            };
-            async.setImmediate = async.nextTick;
-        }
-        else {
-            async.nextTick = function (fn) {
-                setTimeout(fn, 0);
-            };
-            async.setImmediate = async.nextTick;
-        }
-    }
-    else {
-        async.nextTick = process.nextTick;
-        if (typeof setImmediate !== 'undefined') {
-            async.setImmediate = function (fn) {
-              // not a direct alias for IE10 compatibility
-              setImmediate(fn);
-            };
-        }
-        else {
-            async.setImmediate = async.nextTick;
-        }
-    }
-
-    async.each = function (arr, iterator, callback) {
-        callback = callback || function () {};
-        if (!arr.length) {
-            return callback();
-        }
-        var completed = 0;
-        _each(arr, function (x) {
-            iterator(x, only_once(done) );
-        });
-        function done(err) {
-          if (err) {
-              callback(err);
-              callback = function () {};
-          }
-          else {
-              completed += 1;
-              if (completed >= arr.length) {
-                  callback();
-              }
-          }
-        }
-    };
-    async.forEach = async.each;
-
-    async.eachSeries = function (arr, iterator, callback) {
-        callback = callback || function () {};
-        if (!arr.length) {
-            return callback();
-        }
-        var completed = 0;
-        var iterate = function () {
-            iterator(arr[completed], function (err) {
-                if (err) {
-                    callback(err);
-                    callback = function () {};
-                }
-                else {
-                    completed += 1;
-                    if (completed >= arr.length) {
-                        callback();
-                    }
-                    else {
-                        iterate();
-                    }
-                }
-            });
-        };
-        iterate();
-    };
-    async.forEachSeries = async.eachSeries;
-
-    async.eachLimit = function (arr, limit, iterator, callback) {
-        var fn = _eachLimit(limit);
-        fn.apply(null, [arr, iterator, callback]);
-    };
-    async.forEachLimit = async.eachLimit;
-
-    var _eachLimit = function (limit) {
-
-        return function (arr, iterator, callback) {
-            callback = callback || function () {};
-            if (!arr.length || limit <= 0) {
-                return callback();
-            }
-            var completed = 0;
-            var started = 0;
-            var running = 0;
-
-            (function replenish () {
-                if (completed >= arr.length) {
-                    return callback();
-                }
-
-                while (running < limit && started < arr.length) {
-                    started += 1;
-                    running += 1;
-                    iterator(arr[started - 1], function (err) {
-                        if (err) {
-                            callback(err);
-                            callback = function () {};
-                        }
-                        else {
-                            completed += 1;
-                            running -= 1;
-                            if (completed >= arr.length) {
-                                callback();
-                            }
-                            else {
-                                replenish();
-                            }
-                        }
-                    });
-                }
-            })();
-        };
-    };
-
-
-    var doParallel = function (fn) {
-        return function () {
-            var args = Array.prototype.slice.call(arguments);
-            return fn.apply(null, [async.each].concat(args));
-        };
-    };
-    var doParallelLimit = function(limit, fn) {
-        return function () {
-            var args = Array.prototype.slice.call(arguments);
-            return fn.apply(null, [_eachLimit(limit)].concat(args));
-        };
-    };
-    var doSeries = function (fn) {
-        return function () {
-            var args = Array.prototype.slice.call(arguments);
-            return fn.apply(null, [async.eachSeries].concat(args));
-        };
-    };
-
-
-    var _asyncMap = function (eachfn, arr, iterator, callback) {
-        arr = _map(arr, function (x, i) {
-            return {index: i, value: x};
-        });
-        if (!callback) {
-            eachfn(arr, function (x, callback) {
-                iterator(x.value, function (err) {
-                    callback(err);
-                });
-            });
-        } else {
-            var results = [];
-            eachfn(arr, function (x, callback) {
-                iterator(x.value, function (err, v) {
-                    results[x.index] = v;
-                    callback(err);
-                });
-            }, function (err) {
-                callback(err, results);
-            });
-        }
-    };
-    async.map = doParallel(_asyncMap);
-    async.mapSeries = doSeries(_asyncMap);
-    async.mapLimit = function (arr, limit, iterator, callback) {
-        return _mapLimit(limit)(arr, iterator, callback);
-    };
-
-    var _mapLimit = function(limit) {
-        return doParallelLimit(limit, _asyncMap);
-    };
-
-    // reduce only has a series version, as doing reduce in parallel won't
-    // work in many situations.
-    async.reduce = function (arr, memo, iterator, callback) {
-        async.eachSeries(arr, function (x, callback) {
-            iterator(memo, x, function (err, v) {
-                memo = v;
-                callback(err);
-            });
-        }, function (err) {
-            callback(err, memo);
-        });
-    };
-    // inject alias
-    async.inject = async.reduce;
-    // foldl alias
-    async.foldl = async.reduce;
-
-    async.reduceRight = function (arr, memo, iterator, callback) {
-        var reversed = _map(arr, function (x) {
-            return x;
-        }).reverse();
-        async.reduce(reversed, memo, iterator, callback);
-    };
-    // foldr alias
-    async.foldr = async.reduceRight;
-
-    var _filter = function (eachfn, arr, iterator, callback) {
-        var results = [];
-        arr = _map(arr, function (x, i) {
-            return {index: i, value: x};
-        });
-        eachfn(arr, function (x, callback) {
-            iterator(x.value, function (v) {
-                if (v) {
-                    results.push(x);
-                }
-                callback();
-            });
-        }, function (err) {
-            callback(_map(results.sort(function (a, b) {
-                return a.index - b.index;
-            }), function (x) {
-                return x.value;
-            }));
-        });
-    };
-    async.filter = doParallel(_filter);
-    async.filterSeries = doSeries(_filter);
-    // select alias
-    async.select = async.filter;
-    async.selectSeries = async.filterSeries;
-
-    var _reject = function (eachfn, arr, iterator, callback) {
-        var results = [];
-        arr = _map(arr, function (x, i) {
-            return {index: i, value: x};
-        });
-        eachfn(arr, function (x, callback) {
-            iterator(x.value, function (v) {
-                if (!v) {
-                    results.push(x);
-                }
-                callback();
-            });
-        }, function (err) {
-            callback(_map(results.sort(function (a, b) {
-                return a.index - b.index;
-            }), function (x) {
-                return x.value;
-            }));
-        });
-    };
-    async.reject = doParallel(_reject);
-    async.rejectSeries = doSeries(_reject);
-
-    var _detect = function (eachfn, arr, iterator, main_callback) {
-        eachfn(arr, function (x, callback) {
-            iterator(x, function (result) {
-                if (result) {
-                    main_callback(x);
-                    main_callback = function () {};
-                }
-                else {
-                    callback();
-                }
-            });
-        }, function (err) {
-            main_callback();
-        });
-    };
-    async.detect = doParallel(_detect);
-    async.detectSeries = doSeries(_detect);
-
-    async.some = function (arr, iterator, main_callback) {
-        async.each(arr, function (x, callback) {
-            iterator(x, function (v) {
-                if (v) {
-                    main_callback(true);
-                    main_callback = function () {};
-                }
-                callback();
-            });
-        }, function (err) {
-            main_callback(false);
-        });
-    };
-    // any alias
-    async.any = async.some;
-
-    async.every = function (arr, iterator, main_callback) {
-        async.each(arr, function (x, callback) {
-            iterator(x, function (v) {
-                if (!v) {
-                    main_callback(false);
-                    main_callback = function () {};
-                }
-                callback();
-            });
-        }, function (err) {
-            main_callback(true);
-        });
-    };
-    // all alias
-    async.all = async.every;
-
-    async.sortBy = function (arr, iterator, callback) {
-        async.map(arr, function (x, callback) {
-            iterator(x, function (err, criteria) {
-                if (err) {
-                    callback(err);
-                }
-                else {
-                    callback(null, {value: x, criteria: criteria});
-                }
-            });
-        }, function (err, results) {
-            if (err) {
-                return callback(err);
-            }
-            else {
-                var fn = function (left, right) {
-                    var a = left.criteria, b = right.criteria;
-                    return a < b ? -1 : a > b ? 1 : 0;
-                };
-                callback(null, _map(results.sort(fn), function (x) {
-                    return x.value;
-                }));
-            }
-        });
-    };
-
-    async.auto = function (tasks, callback) {
-        callback = callback || function () {};
-        var keys = _keys(tasks);
-        var remainingTasks = keys.length
-        if (!remainingTasks) {
-            return callback();
-        }
-
-        var results = {};
-
-        var listeners = [];
-        var addListener = function (fn) {
-            listeners.unshift(fn);
-        };
-        var removeListener = function (fn) {
-            for (var i = 0; i < listeners.length; i += 1) {
-                if (listeners[i] === fn) {
-                    listeners.splice(i, 1);
-                    return;
-                }
-            }
-        };
-        var taskComplete = function () {
-            remainingTasks--
-            _each(listeners.slice(0), function (fn) {
-                fn();
-            });
-        };
-
-        addListener(function () {
-            if (!remainingTasks) {
-                var theCallback = callback;
-                // prevent final callback from calling itself if it errors
-                callback = function () {};
-
-                theCallback(null, results);
-            }
-        });
-
-        _each(keys, function (k) {
-            var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]];
-            var taskCallback = function (err) {
-                var args = Array.prototype.slice.call(arguments, 1);
-                if (args.length <= 1) {
-                    args = args[0];
-                }
-                if (err) {
-                    var safeResults = {};
-                    _each(_keys(results), function(rkey) {
-                        safeResults[rkey] = results[rkey];
-                    });
-                    safeResults[k] = args;
-                    callback(err, safeResults);
-                    // stop subsequent errors hitting callback multiple times
-                    callback = function () {};
-                }
-                else {
-                    results[k] = args;
-                    async.setImmediate(taskComplete);
-                }
-            };
-            var requires = task.slice(0, Math.abs(task.length - 1)) || [];
-            var ready = function () {
-                return _reduce(requires, function (a, x) {
-                    return (a && results.hasOwnProperty(x));
-                }, true) && !results.hasOwnProperty(k);
-            };
-            if (ready()) {
-                task[task.length - 1](taskCallback, results);
-            }
-            else {
-                var listener = function () {
-                    if (ready()) {
-                        removeListener(listener);
-                        task[task.length - 1](taskCallback, results);
-                    }
-                };
-                addListener(listener);
-            }
-        });
-    };
-
-    async.retry = function(times, task, callback) {
-        var DEFAULT_TIMES = 5;
-        var attempts = [];
-        // Use defaults if times not passed
-        if (typeof times === 'function') {
-            callback = task;
-            task = times;
-            times = DEFAULT_TIMES;
-        }
-        // Make sure times is a number
-        times = parseInt(times, 10) || DEFAULT_TIMES;
-        var wrappedTask = function(wrappedCallback, wrappedResults) {
-            var retryAttempt = function(task, finalAttempt) {
-                return function(seriesCallback) {
-                    task(function(err, result){
-                        seriesCallback(!err || finalAttempt, {err: err, 
result: result});
-                    }, wrappedResults);
-                };
-            };
-            while (times) {
-                attempts.push(retryAttempt(task, !(times-=1)));
-            }
-            async.series(attempts, function(done, data){
-                data = data[data.length - 1];
-                (wrappedCallback || callback)(data.err, data.result);
-            });
-        }
-        // If a callback is passed, run this as a controll flow
-        return callback ? wrappedTask() : wrappedTask
-    };
-
-    async.waterfall = function (tasks, callback) {
-        callback = callback || function () {};
-        if (!_isArray(tasks)) {
-          var err = new Error('First argument to waterfall must be an array of 
functions');
-          return callback(err);
-        }
-        if (!tasks.length) {
-            return callback();
-        }
-        var wrapIterator = function (iterator) {
-            return function (err) {
-                if (err) {
-                    callback.apply(null, arguments);
-                    callback = function () {};
-                }
-                else {
-                    var args = Array.prototype.slice.call(arguments, 1);
-                    var next = iterator.next();
-                    if (next) {
-                        args.push(wrapIterator(next));
-                    }
-                    else {
-                        args.push(callback);
-                    }
-                    async.setImmediate(function () {
-                        iterator.apply(null, args);
-                    });
-                }
-            };
-        };
-        wrapIterator(async.iterator(tasks))();
-    };
-
-    var _parallel = function(eachfn, tasks, callback) {
-        callback = callback || function () {};
-        if (_isArray(tasks)) {
-            eachfn.map(tasks, function (fn, callback) {
-                if (fn) {
-                    fn(function (err) {
-                        var args = Array.prototype.slice.call(arguments, 1);
-                        if (args.length <= 1) {
-                            args = args[0];
-                        }
-                        callback.call(null, err, args);
-                    });
-                }
-            }, callback);
-        }
-        else {
-            var results = {};
-            eachfn.each(_keys(tasks), function (k, callback) {
-                tasks[k](function (err) {
-                    var args = Array.prototype.slice.call(arguments, 1);
-                    if (args.length <= 1) {
-                        args = args[0];
-                    }
-                    results[k] = args;
-                    callback(err);
-                });
-            }, function (err) {
-                callback(err, results);
-            });
-        }
-    };
-
-    async.parallel = function (tasks, callback) {
-        _parallel({ map: async.map, each: async.each }, tasks, callback);
-    };
-
-    async.parallelLimit = function(tasks, limit, callback) {
-        _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, 
callback);
-    };
-
-    async.series = function (tasks, callback) {
-        callback = callback || function () {};
-        if (_isArray(tasks)) {
-            async.mapSeries(tasks, function (fn, callback) {
-                if (fn) {
-                    fn(function (err) {
-                        var args = Array.prototype.slice.call(arguments, 1);
-                        if (args.length <= 1) {
-                            args = args[0];
-                        }
-                        callback.call(null, err, args);
-                    });
-                }
-            }, callback);
-        }
-        else {
-            var results = {};
-            async.eachSeries(_keys(tasks), function (k, callback) {
-                tasks[k](function (err) {
-                    var args = Array.prototype.slice.call(arguments, 1);
-                    if (args.length <= 1) {
-                        args = args[0];
-                    }
-                    results[k] = args;
-                    callback(err);
-                });
-            }, function (err) {
-                callback(err, results);
-            });
-        }
-    };
-
-    async.iterator = function (tasks) {
-        var makeCallback = function (index) {
-            var fn = function () {
-                if (tasks.length) {
-                    tasks[index].apply(null, arguments);
-                }
-                return fn.next();
-            };
-            fn.next = function () {
-                return (index < tasks.length - 1) ? makeCallback(index + 1): 
null;
-            };
-            return fn;
-        };
-        return makeCallback(0);
-    };
-
-    async.apply = function (fn) {
-        var args = Array.prototype.slice.call(arguments, 1);
-        return function () {
-            return fn.apply(
-                null, args.concat(Array.prototype.slice.call(arguments))
-            );
-        };
-    };
-
-    var _concat = function (eachfn, arr, fn, callback) {
-        var r = [];
-        eachfn(arr, function (x, cb) {
-            fn(x, function (err, y) {
-                r = r.concat(y || []);
-                cb(err);
-            });
-        }, function (err) {
-            callback(err, r);
-        });
-    };
-    async.concat = doParallel(_concat);
-    async.concatSeries = doSeries(_concat);
-
-    async.whilst = function (test, iterator, callback) {
-        if (test()) {
-            iterator(function (err) {
-                if (err) {
-                    return callback(err);
-                }
-                async.whilst(test, iterator, callback);
-            });
-        }
-        else {
-            callback();
-        }
-    };
-
-    async.doWhilst = function (iterator, test, callback) {
-        iterator(function (err) {
-            if (err) {
-                return callback(err);
-            }
-            var args = Array.prototype.slice.call(arguments, 1);
-            if (test.apply(null, args)) {
-                async.doWhilst(iterator, test, callback);
-            }
-            else {
-                callback();
-            }
-        });
-    };
-
-    async.until = function (test, iterator, callback) {
-        if (!test()) {
-            iterator(function (err) {
-                if (err) {
-                    return callback(err);
-                }
-                async.until(test, iterator, callback);
-            });
-        }
-        else {
-            callback();
-        }
-    };
-
-    async.doUntil = function (iterator, test, callback) {
-        iterator(function (err) {
-            if (err) {
-                return callback(err);
-            }
-            var args = Array.prototype.slice.call(arguments, 1);
-            if (!test.apply(null, args)) {
-                async.doUntil(iterator, test, callback);
-            }
-            else {
-                callback();
-            }
-        });
-    };
-
-    async.queue = function (worker, concurrency) {
-        if (concurrency === undefined) {
-            concurrency = 1;
-        }
-        function _insert(q, data, pos, callback) {
-          if (!q.started){
-            q.started = true;
-          }
-          if (!_isArray(data)) {
-              data = [data];
-          }
-          if(data.length == 0) {
-             // call drain immediately if there are no tasks
-             return async.setImmediate(function() {
-                 if (q.drain) {
-                     q.drain();
-                 }
-             });
-          }
-          _each(data, function(task) {
-              var item = {
-                  data: task,
-                  callback: typeof callback === 'function' ? callback : null
-              };
-
-              if (pos) {
-                q.tasks.unshift(item);
-              } else {
-                q.tasks.push(item);
-              }
-
-              if (q.saturated && q.tasks.length === q.concurrency) {
-                  q.saturated();
-              }
-              async.setImmediate(q.process);
-          });
-        }
-
-        var workers = 0;
-        var q = {
-            tasks: [],
-            concurrency: concurrency,
-            saturated: null,
-            empty: null,
-            drain: null,
-            started: false,
-            paused: false,
-            push: function (data, callback) {
-              _insert(q, data, false, callback);
-            },
-            kill: function () {
-              q.drain = null;
-              q.tasks = [];
-            },
-            unshift: function (data, callback) {
-              _insert(q, data, true, callback);
-            },
-            process: function () {
-                if (!q.paused && workers < q.concurrency && q.tasks.length) {
-                    var task = q.tasks.shift();
-                    if (q.empty && q.tasks.length === 0) {
-                        q.empty();
-                    }
-                    workers += 1;
-                    var next = function () {
-                        workers -= 1;
-                        if (task.callback) {
-                            task.callback.apply(task, arguments);
-                        }
-                        if (q.drain && q.tasks.length + workers === 0) {
-                            q.drain();
-                        }
-                        q.process();
-                    };
-                    var cb = only_once(next);
-                    worker(task.data, cb);
-                }
-            },
-            length: function () {
-                return q.tasks.length;
-            },
-            running: function () {
-                return workers;
-            },
-            idle: function() {
-                return q.tasks.length + workers === 0;
-            },
-            pause: function () {
-                if (q.paused === true) { return; }
-                q.paused = true;
-                q.process();
-            },
-            resume: function () {
-                if (q.paused === false) { return; }
-                q.paused = false;
-                q.process();
-            }
-        };
-        return q;
-    };
-    
-    async.priorityQueue = function (worker, concurrency) {
-        
-        function _compareTasks(a, b){
-          return a.priority - b.priority;
-        };
-        
-        function _binarySearch(sequence, item, compare) {
-          var beg = -1,
-              end = sequence.length - 1;
-          while (beg < end) {
-            var mid = beg + ((end - beg + 1) >>> 1);
-            if (compare(item, sequence[mid]) >= 0) {
-              beg = mid;
-            } else {
-              end = mid - 1;
-            }
-          }
-          return beg;
-        }
-        
-        function _insert(q, data, priority, callback) {
-          if (!q.started){
-            q.started = true;
-          }
-          if (!_isArray(data)) {
-              data = [data];
-          }
-          if(data.length == 0) {
-             // call drain immediately if there are no tasks
-             return async.setImmediate(function() {
-                 if (q.drain) {
-                     q.drain();
-                 }
-             });
-          }
-          _each(data, function(task) {
-              var item = {
-                  data: task,
-                  priority: priority,
-                  callback: typeof callback === 'function' ? callback : null
-              };
-              
-              q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 
0, item);
-
-              if (q.saturated && q.tasks.length === q.concurrency) {
-                  q.saturated();
-              }
-              async.setImmediate(q.process);
-          });
-        }
-        
-        // Start with a normal queue
-        var q = async.queue(worker, concurrency);
-        
-        // Override push to accept second parameter representing priority
-        q.push = function (data, priority, callback) {
-          _insert(q, data, priority, callback);
-        };
-        
-        // Remove unshift function
-        delete q.unshift;
-
-        return q;
-    };
-
-    async.cargo = function (worker, payload) {
-        var working     = false,
-            tasks       = [];
-
-        var cargo = {
-            tasks: tasks,
-            payload: payload,
-            saturated: null,
-            empty: null,
-            drain: null,
-            drained: true,
-            push: function (data, callback) {
-                if (!_isArray(data)) {
-                    data = [data];
-                }
-                _each(data, function(task) {
-                    tasks.push({
-                        data: task,
-                        callback: typeof callback === 'function' ? callback : 
null
-                    });
-                    cargo.drained = false;
-                    if (cargo.saturated && tasks.length === payload) {
-                        cargo.saturated();
-                    }
-                });
-                async.setImmediate(cargo.process);
-            },
-            process: function process() {
-                if (working) return;
-                if (tasks.length === 0) {
-                    if(cargo.drain && !cargo.drained) cargo.drain();
-                    cargo.drained = true;
-                    return;
-                }
-
-                var ts = typeof payload === 'number'
-                            ? tasks.splice(0, payload)
-                            : tasks.splice(0, tasks.length);
-
-                var ds = _map(ts, function (task) {
-                    return task.data;
-                });
-
-                if(cargo.empty) cargo.empty();
-                working = true;
-                worker(ds, function () {
-                    working = false;
-
-                    var args = arguments;
-                    _each(ts, function (data) {
-                        if (data.callback) {
-                            data.callback.apply(null, args);
-                        }
-                    });
-
-                    process();
-                });
-            },
-            length: function () {
-                return tasks.length;
-            },
-            running: function () {
-                return working;
-            }
-        };
-        return cargo;
-    };
-
-    var _console_fn = function (name) {
-        return function (fn) {
-            var args = Array.prototype.slice.call(arguments, 1);
-            fn.apply(null, args.concat([function (err) {
-                var args = Array.prototype.slice.call(arguments, 1);
-                if (typeof console !== 'undefined') {
-                    if (err) {
-                        if (console.error) {
-                            console.error(err);
-                        }
-                    }
-                    else if (console[name]) {
-                        _each(args, function (x) {
-                            console[name](x);
-                        });
-                    }
-                }
-            }]));
-        };
-    };
-    async.log = _console_fn('log');
-    async.dir = _console_fn('dir');
-    /*async.info = _console_fn('info');
-    async.warn = _console_fn('warn');
-    async.error = _console_fn('error');*/
-
-    async.memoize = function (fn, hasher) {
-        var memo = {};
-        var queues = {};
-        hasher = hasher || function (x) {
-            return x;
-        };
-        var memoized = function () {
-            var args = Array.prototype.slice.call(arguments);
-            var callback = args.pop();
-            var key = hasher.apply(null, args);
-            if (key in memo) {
-                async.nextTick(function () {
-                    callback.apply(null, memo[key]);
-                });
-            }
-            else if (key in queues) {
-                queues[key].push(callback);
-            }
-            else {
-                queues[key] = [callback];
-                fn.apply(null, args.concat([function () {
-                    memo[key] = arguments;
-                    var q = queues[key];
-                    delete queues[key];
-                    for (var i = 0, l = q.length; i < l; i++) {
-                      q[i].apply(null, arguments);
-                    }
-                }]));
-            }
-        };
-        memoized.memo = memo;
-        memoized.unmemoized = fn;
-        return memoized;
-    };
-
-    async.unmemoize = function (fn) {
-      return function () {
-        return (fn.unmemoized || fn).apply(null, arguments);
-      };
-    };
-
-    async.times = function (count, iterator, callback) {
-        var counter = [];
-        for (var i = 0; i < count; i++) {
-            counter.push(i);
-        }
-        return async.map(counter, iterator, callback);
-    };
-
-    async.timesSeries = function (count, iterator, callback) {
-        var counter = [];
-        for (var i = 0; i < count; i++) {
-            counter.push(i);
-        }
-        return async.mapSeries(counter, iterator, callback);
-    };
-
-    async.seq = function (/* functions... */) {
-        var fns = arguments;
-        return function () {
-            var that = this;
-            var args = Array.prototype.slice.call(arguments);
-            var callback = args.pop();
-            async.reduce(fns, args, function (newargs, fn, cb) {
-                fn.apply(that, newargs.concat([function () {
-                    var err = arguments[0];
-                    var nextargs = Array.prototype.slice.call(arguments, 1);
-                    cb(err, nextargs);
-                }]))
-            },
-            function (err, results) {
-                callback.apply(that, [err].concat(results));
-            });
-        };
-    };
-
-    async.compose = function (/* functions... */) {
-      return async.seq.apply(null, Array.prototype.reverse.call(arguments));
-    };
-
-    var _applyEach = function (eachfn, fns /*args...*/) {
-        var go = function () {
-            var that = this;
-            var args = Array.prototype.slice.call(arguments);
-            var callback = args.pop();
-            return eachfn(fns, function (fn, cb) {
-                fn.apply(that, args.concat([cb]));
-            },
-            callback);
-        };
-        if (arguments.length > 2) {
-            var args = Array.prototype.slice.call(arguments, 2);
-            return go.apply(this, args);
-        }
-        else {
-            return go;
-        }
-    };
-    async.applyEach = doParallel(_applyEach);
-    async.applyEachSeries = doSeries(_applyEach);
-
-    async.forever = function (fn, callback) {
-        function next(err) {
-            if (err) {
-                if (callback) {
-                    return callback(err);
-                }
-                throw err;
-            }
-            fn(next);
-        }
-        next();
-    };
-
-    // Node.js
-    if (typeof module !== 'undefined' && module.exports) {
-        module.exports = async;
-    }
-    // AMD / RequireJS
-    else if (typeof define !== 'undefined' && define.amd) {
-        define([], function () {
-            return async;
-        });
-    }
-    // included directly via <script> tag
-    else {
-        root.async = async;
-    }
-
-}());
diff --git a/packages/context-coloring/fixtures/benchmark/faces.el 
b/packages/context-coloring/fixtures/benchmark/faces.el
deleted file mode 100644
index 5176bed..0000000
--- a/packages/context-coloring/fixtures/benchmark/faces.el
+++ /dev/null
@@ -1,2764 +0,0 @@
-;;; faces.el --- Lisp faces
-
-;; Copyright (C) 1992-1996, 1998-2015 Free Software Foundation, Inc.
-
-;; Maintainer: emacs-devel@gnu.org
-;; Keywords: internal
-;; Package: emacs
-
-;; 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:
-
-(defcustom term-file-prefix (purecopy "term/")
-  "If non-nil, Emacs startup performs terminal-specific initialization.
-It does this by: (load (concat term-file-prefix (getenv \"TERM\")))
-
-You may set this variable to nil in your init file if you do not wish
-the terminal-initialization file to be loaded."
-  :type '(choice (const :tag "No terminal-specific initialization" nil)
-                (string :tag "Name of directory with term files"))
-  :group 'terminals)
-
-(declare-function xw-defined-colors "term/common-win" (&optional frame))
-
-(defvar help-xref-stack-item)
-
-(defvar face-name-history nil
-  "History list for some commands that read face names.
-Maximum length of the history list is determined by the value
-of `history-length', which see.")
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Font selection.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defgroup font-selection nil
-  "Influencing face font selection."
-  :group 'faces)
-
-
-(defcustom face-font-selection-order
-  '(:width :height :weight :slant)
-  "A list specifying how face font selection chooses fonts.
-Each of the four symbols `:width', `:height', `:weight', and `:slant'
-must appear once in the list, and the list must not contain any other
-elements.  Font selection first tries to find a best matching font
-for those face attributes that appear before in the list.  For
-example, if `:slant' appears before `:height', font selection first
-tries to find a font with a suitable slant, even if this results in
-a font height that isn't optimal."
-  :tag "Font selection order"
-  :type '(list symbol symbol symbol symbol)
-  :group 'font-selection
-  :set #'(lambda (symbol value)
-          (set-default symbol value)
-          (internal-set-font-selection-order value)))
-
-
-;; In the absence of Fontconfig support, Monospace and Sans Serif are
-;; unavailable, and we fall back on the courier and helv families,
-;; which are generally available.
-(defcustom face-font-family-alternatives
-  (mapcar (lambda (arg) (mapcar 'purecopy arg))
-  '(("Monospace" "courier" "fixed")
-    ("courier" "CMU Typewriter Text" "fixed")
-    ("Sans Serif" "helv" "helvetica" "arial" "fixed")
-    ("helv" "helvetica" "arial" "fixed")))
-  "Alist of alternative font family names.
-Each element has the form (FAMILY ALTERNATIVE1 ALTERNATIVE2 ...).
-If fonts of family FAMILY can't be loaded, try ALTERNATIVE1, then
-ALTERNATIVE2 etc."
-  :tag "Alternative font families to try"
-  :type '(repeat (repeat string))
-  :group 'font-selection
-  :set #'(lambda (symbol value)
-          (set-default symbol value)
-          (internal-set-alternative-font-family-alist value)))
-
-
-;; This is defined originally in xfaces.c.
-(defcustom face-font-registry-alternatives
-  (mapcar (lambda (arg) (mapcar 'purecopy arg))
-  (if (featurep 'w32)
-      '(("iso8859-1" "ms-oemlatin")
-       ("gb2312.1980" "gb2312" "gbk" "gb18030")
-       ("jisx0208.1990" "jisx0208.1983" "jisx0208.1978")
-       ("ksc5601.1989" "ksx1001.1992" "ksc5601.1987")
-       ("muletibetan-2" "muletibetan-0"))
-    '(("gb2312.1980" "gb2312.80&gb8565.88" "gbk" "gb18030")
-      ("jisx0208.1990" "jisx0208.1983" "jisx0208.1978")
-      ("ksc5601.1989" "ksx1001.1992" "ksc5601.1987")
-      ("muletibetan-2" "muletibetan-0"))))
-  "Alist of alternative font registry names.
-Each element has the form (REGISTRY ALTERNATIVE1 ALTERNATIVE2 ...).
-If fonts of registry REGISTRY can be loaded, font selection
-tries to find a best matching font among all fonts of registry
-REGISTRY, ALTERNATIVE1, ALTERNATIVE2, and etc."
-  :tag "Alternative font registries to try"
-  :type '(repeat (repeat string))
-  :version "21.1"
-  :group 'font-selection
-  :set #'(lambda (symbol value)
-          (set-default symbol value)
-          (internal-set-alternative-font-registry-alist value)))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Creation, copying.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-(defun face-list ()
-  "Return a list of all defined faces."
-  (mapcar #'car face-new-frame-defaults))
-
-(defun make-face (face &optional no-init-from-resources)
-  "Define a new face with name FACE, a symbol.
-Do not call this directly from Lisp code; use `defface' instead.
-
-If FACE is already known as a face, leave it unmodified.  Return FACE.
-
-NO-INIT-FROM-RESOURCES has been deprecated and is no longer used
-and will go away.  Handling of conditional X resources application
-has been pushed down to make-x-resource-internal itself."
-  (interactive (list (read-from-minibuffer
-                     "Make face: " nil nil t 'face-name-history)))
-  (unless (facep face)
-    ;; Make frame-local faces (this also makes the global one).
-    (dolist (frame (frame-list))
-      (internal-make-lisp-face face frame))
-    ;; Add the face to the face menu.
-    (when (fboundp 'facemenu-add-new-face)
-      (facemenu-add-new-face face))
-    ;; Define frame-local faces for all frames from X resources.
-    (make-face-x-resource-internal face))
-  face)
-
-;; Handling of whether to apply X resources or not, has been pushed down
-;; to make-face-x-resource-internal itself, thus the optional arg is no
-;; longer evaluated at all and going away.
-(set-advertised-calling-convention 'make-face '(face) "24.4")
-
-(defun make-empty-face (face)
-  "Define a new, empty face with name FACE.
-Do not call this directly from Lisp code; use `defface' instead."
-  (interactive (list (read-from-minibuffer
-                     "Make empty face: " nil nil t 'face-name-history)))
-  (make-face face))
-
-(defun copy-face (old-face new-face &optional frame new-frame)
-  "Define a face named NEW-FACE, which is a copy of OLD-FACE.
-This function does not copy face customization data, so NEW-FACE
-will not be made customizable.  Most Lisp code should not call
-this function; use `defface' with :inherit instead.
-
-If NEW-FACE already exists as a face, modify it to be like
-OLD-FACE.  If NEW-FACE doesn't already exist, create it.
-
-If the optional argument FRAME is a frame, change NEW-FACE on
-FRAME only.  If FRAME is t, copy the frame-independent default
-specification for OLD-FACE to NEW-FACE.  If FRAME is nil, copy
-the defaults as well as the faces on each existing frame.
-
-If the optional fourth argument NEW-FRAME is given, copy the
-information from face OLD-FACE on frame FRAME to NEW-FACE on
-frame NEW-FRAME.  In this case, FRAME must not be nil."
-  (let ((inhibit-quit t))
-    (if (null frame)
-       (progn
-         (when new-frame
-           (error "Copying face %s from all frames to one frame"
-                  old-face))
-         (make-empty-face new-face)
-         (dolist (frame (frame-list))
-           (copy-face old-face new-face frame))
-         (copy-face old-face new-face t))
-      (make-empty-face new-face)
-      (internal-copy-lisp-face old-face new-face frame new-frame))
-    new-face))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Predicates, type checks.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun facep (face)
-  "Return non-nil if FACE is a face name; nil otherwise.
-A face name can be a string or a symbol."
-  (internal-lisp-face-p face))
-
-
-(defun check-face (face)
-  "Signal an error if FACE doesn't name a face.
-Value is FACE."
-  (unless (facep face)
-    (error "Not a face: %s" face))
-  face)
-
-
-;; The ID returned is not to be confused with the internally used IDs
-;; of realized faces.  The ID assigned to Lisp faces is used to
-;; support faces in display table entries.
-
-(defun face-id (face &optional _frame)
-  "Return the internal ID of face with name FACE.
-If FACE is a face-alias, return the ID of the target face.
-The optional argument FRAME is ignored, since the internal face ID
-of a face name is the same for all frames."
-  (check-face face)
-  (or (get face 'face)
-      (face-id (get face 'face-alias))))
-
-(defun face-equal (face1 face2 &optional frame)
-  "Non-nil if faces FACE1 and FACE2 are equal.
-Faces are considered equal if all their attributes are equal.
-If the optional argument FRAME is given, report on FACE1 and FACE2 in that 
frame.
-If FRAME is t, report on the defaults for FACE1 and FACE2 (for new frames).
-If FRAME is omitted or nil, use the selected frame."
-  (internal-lisp-face-equal-p face1 face2 frame))
-
-
-(defun face-differs-from-default-p (face &optional frame)
-  "Return non-nil if FACE displays differently from the default face.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame."
-  (let ((attrs
-        (delq :inherit (mapcar 'car face-attribute-name-alist)))
-       (differs nil))
-    (while (and attrs (not differs))
-      (let* ((attr (pop attrs))
-            (attr-val (face-attribute face attr frame t)))
-       (when (and
-              (not (eq attr-val 'unspecified))
-              (display-supports-face-attributes-p (list attr attr-val)
-                                                  frame))
-         (setq differs attr))))
-    differs))
-
-
-(defun face-nontrivial-p (face &optional frame)
-  "True if face FACE has some non-nil attribute.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame."
-  (not (internal-lisp-face-empty-p face frame)))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Setting face attributes from X resources.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defcustom face-x-resources
-  (mapcar
-   (lambda (arg)
-     ;; FIXME; can we purecopy some of the conses too?
-     (cons (car arg)
-          (cons (purecopy (car (cdr arg))) (purecopy (cdr (cdr arg))))))
-  '((:family (".attributeFamily" . "Face.AttributeFamily"))
-    (:foundry (".attributeFoundry" . "Face.AttributeFoundry"))
-    (:width (".attributeWidth" . "Face.AttributeWidth"))
-    (:height (".attributeHeight" . "Face.AttributeHeight"))
-    (:weight (".attributeWeight" . "Face.AttributeWeight"))
-    (:slant (".attributeSlant" . "Face.AttributeSlant"))
-    (:foreground (".attributeForeground" . "Face.AttributeForeground"))
-    (:distant-foreground
-     (".attributeDistantForeground" . "Face.AttributeDistantForeground"))
-    (:background (".attributeBackground" . "Face.AttributeBackground"))
-    (:overline (".attributeOverline" . "Face.AttributeOverline"))
-    (:strike-through (".attributeStrikeThrough" . 
"Face.AttributeStrikeThrough"))
-    (:box (".attributeBox" . "Face.AttributeBox"))
-    (:underline (".attributeUnderline" . "Face.AttributeUnderline"))
-    (:inverse-video (".attributeInverse" . "Face.AttributeInverse"))
-    (:stipple
-     (".attributeStipple" . "Face.AttributeStipple")
-     (".attributeBackgroundPixmap" . "Face.AttributeBackgroundPixmap"))
-    (:bold (".attributeBold" . "Face.AttributeBold"))
-    (:italic (".attributeItalic" . "Face.AttributeItalic"))
-    (:font (".attributeFont" . "Face.AttributeFont"))
-    (:inherit (".attributeInherit" . "Face.AttributeInherit"))))
-  "List of X resources and classes for face attributes.
-Each element has the form (ATTRIBUTE ENTRY1 ENTRY2...) where ATTRIBUTE is
-the name of a face attribute, and each ENTRY is a cons of the form
-\(RESOURCE . CLASS) with RESOURCE being the resource and CLASS being the
-X resource class for the attribute."
-  :type '(repeat (cons symbol (repeat (cons string string))))
-  :group 'faces)
-
-
-(declare-function internal-face-x-get-resource "xfaces.c"
-                 (resource class &optional frame))
-
-(declare-function internal-set-lisp-face-attribute-from-resource "xfaces.c"
-                 (face attr value &optional frame))
-
-(defun set-face-attribute-from-resource (face attribute resource class frame)
-  "Set FACE's ATTRIBUTE from X resource RESOURCE, class CLASS on FRAME.
-Value is the attribute value specified by the resource, or nil
-if not present.  This function displays a message if the resource
-specifies an invalid attribute."
-  (let* ((face-name (face-name face))
-        (value (internal-face-x-get-resource (concat face-name resource)
-                                             class frame)))
-    (when value
-      (condition-case ()
-         (internal-set-lisp-face-attribute-from-resource
-          face attribute (downcase value) frame)
-       (error
-        (message "Face %s, frame %s: invalid attribute %s %s from X resource"
-                 face-name frame attribute value))))
-    value))
-
-
-(defun set-face-attributes-from-resources (face frame)
-  "Set attributes of FACE from X resources for FRAME."
-  (when (memq (framep frame) '(x w32))
-    (dolist (definition face-x-resources)
-      (let ((attribute (car definition)))
-       (dolist (entry (cdr definition))
-         (set-face-attribute-from-resource face attribute (car entry)
-                                           (cdr entry) frame))))))
-
-
-(defun make-face-x-resource-internal (face &optional frame)
-  "Fill frame-local FACE on FRAME from X resources.
-FRAME nil or not specified means do it for all frames.
-
-If `inhibit-x-resources' is non-nil, this function does nothing."
-  (unless inhibit-x-resources
-    (dolist (frame (if (null frame) (frame-list) (list frame)))
-      ;; `x-create-frame' already took care of correctly handling
-      ;; the reverse video case-- do _not_ touch the default face
-      (unless (and (eq face 'default)
-                  (frame-parameter frame 'reverse))
-        (set-face-attributes-from-resources face frame)))))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Retrieving face attributes.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun face-name (face)
-  "Return the name of face FACE."
-  (symbol-name (check-face face)))
-
-
-(defun face-all-attributes (face &optional frame)
-  "Return an alist stating the attributes of FACE.
-Each element of the result has the form (ATTR-NAME . ATTR-VALUE).
-If FRAME is omitted or nil the value describes the default attributes,
-but if you specify FRAME, the value describes the attributes
-of FACE on FRAME."
-  (mapcar (lambda (pair)
-           (let ((attr (car pair)))
-             (cons attr (face-attribute face attr (or frame t)))))
-         face-attribute-name-alist))
-
-(defun face-attribute (face attribute &optional frame inherit)
-  "Return the value of FACE's ATTRIBUTE on FRAME.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-
-If INHERIT is nil, only attributes directly defined by FACE are considered,
-  so the return value may be `unspecified', or a relative value.
-If INHERIT is non-nil, FACE's definition of ATTRIBUTE is merged with the
-  faces specified by its `:inherit' attribute; however the return value
-  may still be `unspecified' or relative.
-If INHERIT is a face or a list of faces, then the result is further merged
-  with that face (or faces), until it becomes specified and absolute.
-
-To ensure that the return value is always specified and absolute, use a
-value of `default' for INHERIT; this will resolve any unspecified or
-relative values by merging with the `default' face (which is always
-completely specified)."
-  (let ((value (internal-get-lisp-face-attribute face attribute frame)))
-    (when (and inherit (face-attribute-relative-p attribute value))
-      ;; VALUE is relative, so merge with inherited faces
-      (let ((inh-from (face-attribute face :inherit frame)))
-       (unless (or (null inh-from) (eq inh-from 'unspecified))
-          (condition-case nil
-              (setq value
-                    (face-attribute-merged-with attribute value inh-from 
frame))
-            ;; The `inherit' attribute may point to non existent faces.
-            (error nil)))))
-    (when (and inherit
-              (not (eq inherit t))
-              (face-attribute-relative-p attribute value))
-      ;; We should merge with INHERIT as well
-      (setq value (face-attribute-merged-with attribute value inherit frame)))
-    value))
-
-(defun face-attribute-merged-with (attribute value faces &optional frame)
-  "Merges ATTRIBUTE, initially VALUE, with faces from FACES until absolute.
-FACES may be either a single face or a list of faces.
-\[This is an internal function.]"
-  (cond ((not (face-attribute-relative-p attribute value))
-        value)
-       ((null faces)
-        value)
-       ((consp faces)
-        (face-attribute-merged-with
-         attribute
-         (face-attribute-merged-with attribute value (car faces) frame)
-         (cdr faces)
-         frame))
-       (t
-        (merge-face-attribute attribute
-                              value
-                              (face-attribute faces attribute frame t)))))
-
-
-(defmacro face-attribute-specified-or (value &rest body)
-  "Return VALUE, unless it's `unspecified', in which case evaluate BODY and 
return the result."
-  (let ((temp (make-symbol "value")))
-    `(let ((,temp ,value))
-       (if (not (eq ,temp 'unspecified))
-          ,temp
-        ,@body))))
-
-(defun face-foreground (face &optional frame inherit)
-  "Return the foreground color name of FACE, or nil if unspecified.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-
-If INHERIT is nil, only a foreground color directly defined by FACE is
-  considered, so the return value may be nil.
-If INHERIT is t, and FACE doesn't define a foreground color, then any
-  foreground color that FACE inherits through its `:inherit' attribute
-  is considered as well; however the return value may still be nil.
-If INHERIT is a face or a list of faces, then it is used to try to
-  resolve an unspecified foreground color.
-
-To ensure that a valid color is always returned, use a value of
-`default' for INHERIT; this will resolve any unspecified values by
-merging with the `default' face (which is always completely specified)."
-  (face-attribute-specified-or (face-attribute face :foreground frame inherit)
-                              nil))
-
-(defun face-background (face &optional frame inherit)
-  "Return the background color name of FACE, or nil if unspecified.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-
-If INHERIT is nil, only a background color directly defined by FACE is
-  considered, so the return value may be nil.
-If INHERIT is t, and FACE doesn't define a background color, then any
-  background color that FACE inherits through its `:inherit' attribute
-  is considered as well; however the return value may still be nil.
-If INHERIT is a face or a list of faces, then it is used to try to
-  resolve an unspecified background color.
-
-To ensure that a valid color is always returned, use a value of
-`default' for INHERIT; this will resolve any unspecified values by
-merging with the `default' face (which is always completely specified)."
-  (face-attribute-specified-or (face-attribute face :background frame inherit)
-                              nil))
-
-(defun face-stipple (face &optional frame inherit)
- "Return the stipple pixmap name of FACE, or nil if unspecified.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-
-If INHERIT is nil, only a stipple directly defined by FACE is
-  considered, so the return value may be nil.
-If INHERIT is t, and FACE doesn't define a stipple, then any stipple
-  that FACE inherits through its `:inherit' attribute is considered as
-  well; however the return value may still be nil.
-If INHERIT is a face or a list of faces, then it is used to try to
-  resolve an unspecified stipple.
-
-To ensure that a valid stipple or nil is always returned, use a value of
-`default' for INHERIT; this will resolve any unspecified values by merging
-with the `default' face (which is always completely specified)."
-  (face-attribute-specified-or (face-attribute face :stipple frame inherit)
-                              nil))
-
-
-(defalias 'face-background-pixmap 'face-stipple)
-
-
-(defun face-underline-p (face &optional frame inherit)
- "Return non-nil if FACE specifies a non-nil underlining.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-Optional argument INHERIT is passed to `face-attribute'."
- (face-attribute-specified-or
-  (face-attribute face :underline frame inherit) nil))
-
-
-(defun face-inverse-video-p (face &optional frame inherit)
- "Return non-nil if FACE specifies a non-nil inverse-video.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-Optional argument INHERIT is passed to `face-attribute'."
- (eq (face-attribute face :inverse-video frame inherit) t))
-
-
-(defun face-bold-p (face &optional frame inherit)
-  "Return non-nil if the font of FACE is bold on FRAME.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-Optional argument INHERIT is passed to `face-attribute'.
-Use `face-attribute' for finer control."
-  (let ((bold (face-attribute face :weight frame inherit)))
-    (memq bold '(semi-bold bold extra-bold ultra-bold))))
-
-
-(defun face-italic-p (face &optional frame inherit)
-  "Return non-nil if the font of FACE is italic on FRAME.
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame.
-Optional argument INHERIT is passed to `face-attribute'.
-Use `face-attribute' for finer control."
-  (let ((italic (face-attribute face :slant frame inherit)))
-    (memq italic '(italic oblique))))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Face documentation.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun face-documentation (face)
-  "Get the documentation string for FACE.
-If FACE is a face-alias, get the documentation for the target face."
-  (let ((alias (get face 'face-alias)))
-    (if alias
-        (let ((doc (get alias 'face-documentation)))
-         (format "%s is an alias for the face `%s'.%s" face alias
-                  (if doc (format "\n%s" doc)
-                    "")))
-      (get face 'face-documentation))))
-
-
-(defun set-face-documentation (face string)
-  "Set the documentation string for FACE to STRING."
-  ;; Perhaps the text should go in DOC.
-  (put face 'face-documentation (purecopy string)))
-
-
-(defalias 'face-doc-string 'face-documentation)
-(defalias 'set-face-doc-string 'set-face-documentation)
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Setting face attributes.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-(defun set-face-attribute (face frame &rest args)
-  "Set attributes of FACE on FRAME from ARGS.
-This function overrides the face attributes specified by FACE's
-face spec.  It is mostly intended for internal use only.
-
-If FRAME is nil, set the attributes for all existing frames, as
-well as the default for new frames.  If FRAME is t, change the
-default for new frames only.
-
-ARGS must come in pairs ATTRIBUTE VALUE.  ATTRIBUTE must be a
-valid face attribute name.  All attributes can be set to
-`unspecified'; this fact is not further mentioned below.
-
-The following attributes are recognized:
-
-`:family'
-
-VALUE must be a string specifying the font family
-\(e.g. \"Monospace\") or a fontset.
-
-`:foundry'
-
-VALUE must be a string specifying the font foundry,
-e.g. ``adobe''.  If a font foundry is specified, wild-cards `*'
-and `?' are allowed.
-
-`:width'
-
-VALUE specifies the relative proportionate width of the font to use.
-It must be one of the symbols `ultra-condensed', `extra-condensed',
-`condensed', `semi-condensed', `normal', `semi-expanded', `expanded',
-`extra-expanded', or `ultra-expanded'.
-
-`:height'
-
-VALUE specifies the relative or absolute height of the font.  An
-absolute height is an integer, and specifies font height in units
-of 1/10 pt.  A relative height is either a floating point number,
-which specifies a scaling factor for the underlying face height;
-or a function that takes a single argument (the underlying face
-height) and returns the new height.  Note that for the `default'
-face, you must specify an absolute height (since there is nothing
-for it to be relative to).
-
-`:weight'
-
-VALUE specifies the weight of the font to use.  It must be one of the
-symbols `ultra-bold', `extra-bold', `bold', `semi-bold', `normal',
-`semi-light', `light', `extra-light', `ultra-light'.
-
-`:slant'
-
-VALUE specifies the slant of the font to use.  It must be one of the
-symbols `italic', `oblique', `normal', `reverse-italic', or
-`reverse-oblique'.
-
-`:foreground', `:background'
-
-VALUE must be a color name, a string.
-
-`:underline'
-
-VALUE specifies whether characters in FACE should be underlined.
-If VALUE is t, underline with foreground color of the face.
-If VALUE is a string, underline with that color.
-If VALUE is nil, explicitly don't underline.
-
-Otherwise, VALUE must be a property list of the form:
-
-`(:color COLOR :style STYLE)'.
-
-COLOR can be a either a color name string or `foreground-color'.
-STYLE can be either `line' or `wave'.
-If a keyword/value pair is missing from the property list, a
-default value will be used for the value.
-The default value of COLOR is the foreground color of the face.
-The default value of STYLE is `line'.
-
-`:overline'
-
-VALUE specifies whether characters in FACE should be overlined.  If
-VALUE is t, overline with foreground color of the face.  If VALUE is a
-string, overline with that color.  If VALUE is nil, explicitly don't
-overline.
-
-`:strike-through'
-
-VALUE specifies whether characters in FACE should be drawn with a line
-striking through them.  If VALUE is t, use the foreground color of the
-face.  If VALUE is a string, strike-through with that color.  If VALUE
-is nil, explicitly don't strike through.
-
-`:box'
-
-VALUE specifies whether characters in FACE should have a box drawn
-around them.  If VALUE is nil, explicitly don't draw boxes.  If
-VALUE is t, draw a box with lines of width 1 in the foreground color
-of the face.  If VALUE is a string, the string must be a color name,
-and the box is drawn in that color with a line width of 1.  Otherwise,
-VALUE must be a property list of the form `(:line-width WIDTH
-:color COLOR :style STYLE)'.  If a keyword/value pair is missing from
-the property list, a default value will be used for the value, as
-specified below.  WIDTH specifies the width of the lines to draw; it
-defaults to 1.  If WIDTH is negative, the absolute value is the width
-of the lines, and draw top/bottom lines inside the characters area,
-not around it.  COLOR is the name of the color to draw in, default is
-the foreground color of the face for simple boxes, and the background
-color of the face for 3D boxes.  STYLE specifies whether a 3D box
-should be draw.  If STYLE is `released-button', draw a box looking
-like a released 3D button.  If STYLE is `pressed-button' draw a box
-that appears like a pressed button.  If STYLE is nil, the default if
-the property list doesn't contain a style specification, draw a 2D
-box.
-
-`:inverse-video'
-
-VALUE specifies whether characters in FACE should be displayed in
-inverse video.  VALUE must be one of t or nil.
-
-`:stipple'
-
-If VALUE is a string, it must be the name of a file of pixmap data.
-The directories listed in the `x-bitmap-file-path' variable are
-searched.  Alternatively, VALUE may be a list of the form (WIDTH
-HEIGHT DATA) where WIDTH and HEIGHT are the size in pixels, and DATA
-is a string containing the raw bits of the bitmap.  VALUE nil means
-explicitly don't use a stipple pattern.
-
-For convenience, attributes `:family', `:foundry', `:width',
-`:height', `:weight', and `:slant' may also be set in one step
-from an X font name:
-
-`:font'
-
-Set font-related face attributes from VALUE.  VALUE must be a
-valid font name or font object.  Setting this attribute will also
-set the `:family', `:foundry', `:width', `:height', `:weight',
-and `:slant' attributes.
-
-`:inherit'
-
-VALUE is the name of a face from which to inherit attributes, or
-a list of face names.  Attributes from inherited faces are merged
-into the face like an underlying face would be, with higher
-priority than underlying faces.
-
-For backward compatibility, the keywords `:bold' and `:italic'
-can be used to specify weight and slant respectively.  This usage
-is considered obsolete.  For these two keywords, the VALUE must
-be either t or nil.  A value of t for `:bold' is equivalent to
-setting `:weight' to `bold', and a value of t for `:italic' is
-equivalent to setting `:slant' to `italic'.  But if `:weight' is
-specified in the face spec, `:bold' is ignored, and if `:slant'
-is specified, `:italic' is ignored."
-  (setq args (purecopy args))
-  (let ((where (if (null frame) 0 frame))
-       (spec args)
-       family foundry)
-    ;; If we set the new-frame defaults, this face is modified outside Custom.
-    (if (memq where '(0 t))
-       (put (or (get face 'face-alias) face) 'face-modified t))
-    ;; If family and/or foundry are specified, set it first.  Certain
-    ;; face attributes, e.g. :weight semi-condensed, are not supported
-    ;; in every font.  See bug#1127.
-    (while spec
-      (cond ((eq (car spec) :family)
-            (setq family (cadr spec)))
-           ((eq (car spec) :foundry)
-            (setq foundry (cadr spec))))
-      (setq spec (cddr spec)))
-    (when (or family foundry)
-      (when (and (stringp family)
-                (string-match "\\([^-]*\\)-\\([^-]*\\)" family))
-       (unless foundry
-         (setq foundry (match-string 1 family)))
-       (setq family (match-string 2 family)))
-      (when (or (stringp family) (eq family 'unspecified))
-       (internal-set-lisp-face-attribute face :family (purecopy family)
-                                         where))
-      (when (or (stringp foundry) (eq foundry 'unspecified))
-       (internal-set-lisp-face-attribute face :foundry (purecopy foundry)
-                                         where)))
-    (while args
-      (unless (memq (car args) '(:family :foundry))
-       (internal-set-lisp-face-attribute face (car args)
-                                         (purecopy (cadr args))
-                                         where))
-      (setq args (cddr args)))))
-
-(defun make-face-bold (face &optional frame _noerror)
-  "Make the font of FACE be bold, if possible.
-FRAME nil or not specified means change face on all frames.
-Argument NOERROR is ignored and retained for compatibility.
-Use `set-face-attribute' for finer control of the font weight."
-  (interactive (list (read-face-name "Make which face bold"
-                                     (face-at-point t))))
-  (set-face-attribute face frame :weight 'bold))
-
-
-(defun make-face-unbold (face &optional frame _noerror)
-  "Make the font of FACE be non-bold, if possible.
-FRAME nil or not specified means change face on all frames.
-Argument NOERROR is ignored and retained for compatibility."
-  (interactive (list (read-face-name "Make which face non-bold"
-                                     (face-at-point t))))
-  (set-face-attribute face frame :weight 'normal))
-
-
-(defun make-face-italic (face &optional frame _noerror)
-  "Make the font of FACE be italic, if possible.
-FRAME nil or not specified means change face on all frames.
-Argument NOERROR is ignored and retained for compatibility.
-Use `set-face-attribute' for finer control of the font slant."
-  (interactive (list (read-face-name "Make which face italic"
-                                     (face-at-point t))))
-  (set-face-attribute face frame :slant 'italic))
-
-
-(defun make-face-unitalic (face &optional frame _noerror)
-  "Make the font of FACE be non-italic, if possible.
-FRAME nil or not specified means change face on all frames.
-Argument NOERROR is ignored and retained for compatibility."
-  (interactive (list (read-face-name "Make which face non-italic"
-                                     (face-at-point t))))
-  (set-face-attribute face frame :slant 'normal))
-
-
-(defun make-face-bold-italic (face &optional frame _noerror)
-  "Make the font of FACE be bold and italic, if possible.
-FRAME nil or not specified means change face on all frames.
-Argument NOERROR is ignored and retained for compatibility.
-Use `set-face-attribute' for finer control of font weight and slant."
-  (interactive (list (read-face-name "Make which face bold-italic"
-                                     (face-at-point t))))
-  (set-face-attribute face frame :weight 'bold :slant 'italic))
-
-
-(defun set-face-font (face font &optional frame)
-  "Change font-related attributes of FACE to those of FONT (a string).
-FRAME nil or not specified means change face on all frames.
-This sets the attributes `:family', `:foundry', `:width',
-`:height', `:weight', and `:slant'.  When called interactively,
-prompt for the face and font."
-  (interactive (read-face-and-attribute :font))
-  (set-face-attribute face frame :font font))
-
-
-;; Implementation note: Emulating gray background colors with a
-;; stipple pattern is now part of the face realization process, and is
-;; done in C depending on the frame on which the face is realized.
-
-(defun set-face-background (face color &optional frame)
-  "Change the background color of face FACE to COLOR (a string).
-FRAME nil or not specified means change face on all frames.
-COLOR can be a system-defined color name (see `list-colors-display')
-or a hex spec of the form #RRGGBB.
-When called interactively, prompts for the face and color."
-  (interactive (read-face-and-attribute :background))
-  (set-face-attribute face frame :background (or color 'unspecified)))
-
-
-(defun set-face-foreground (face color &optional frame)
-  "Change the foreground color of face FACE to COLOR (a string).
-FRAME nil or not specified means change face on all frames.
-COLOR can be a system-defined color name (see `list-colors-display')
-or a hex spec of the form #RRGGBB.
-When called interactively, prompts for the face and color."
-  (interactive (read-face-and-attribute :foreground))
-  (set-face-attribute face frame :foreground (or color 'unspecified)))
-
-
-(defun set-face-stipple (face stipple &optional frame)
-  "Change the stipple pixmap of face FACE to STIPPLE.
-FRAME nil or not specified means change face on all frames.
-STIPPLE should be a string, the name of a file of pixmap data.
-The directories listed in the `x-bitmap-file-path' variable are searched.
-
-Alternatively, STIPPLE may be a list of the form (WIDTH HEIGHT DATA)
-where WIDTH and HEIGHT are the size in pixels,
-and DATA is a string, containing the raw bits of the bitmap."
-  (interactive (read-face-and-attribute :stipple))
-  (set-face-attribute face frame :stipple (or stipple 'unspecified)))
-
-
-(defun set-face-underline (face underline &optional frame)
-  "Specify whether face FACE is underlined.
-UNDERLINE nil means FACE explicitly doesn't underline.
-UNDERLINE t means FACE underlines with its foreground color.
-If UNDERLINE is a string, underline with that color.
-
-UNDERLINE may also be a list of the form (:color COLOR :style STYLE),
-where COLOR is a string or `foreground-color', and STYLE is either
-`line' or `wave'.  :color may be omitted, which means to use the
-foreground color.  :style may be omitted, which means to use a line.
-
-FRAME nil or not specified means change face on all frames.
-Use `set-face-attribute' to ``unspecify'' underlining."
-  (interactive (read-face-and-attribute :underline))
-  (set-face-attribute face frame :underline underline))
-
-(define-obsolete-function-alias 'set-face-underline-p
-                                'set-face-underline "24.3")
-
-
-(defun set-face-inverse-video (face inverse-video-p &optional frame)
-  "Specify whether face FACE is in inverse video.
-INVERSE-VIDEO-P non-nil means FACE displays explicitly in inverse video.
-INVERSE-VIDEO-P nil means FACE explicitly is not in inverse video.
-FRAME nil or not specified means change face on all frames.
-Use `set-face-attribute' to ``unspecify'' the inverse video attribute."
-  (interactive
-   (let ((list (read-face-and-attribute :inverse-video)))
-     (list (car list) (if (cadr list) t))))
-  (set-face-attribute face frame :inverse-video inverse-video-p))
-
-(define-obsolete-function-alias 'set-face-inverse-video-p
-                                'set-face-inverse-video "24.4")
-
-(defun set-face-bold (face bold-p &optional frame)
-  "Specify whether face FACE is bold.
-BOLD-P non-nil means FACE should explicitly display bold.
-BOLD-P nil means FACE should explicitly display non-bold.
-FRAME nil or not specified means change face on all frames.
-Use `set-face-attribute' or `modify-face' for finer control."
-  (if (null bold-p)
-      (make-face-unbold face frame)
-    (make-face-bold face frame)))
-
-(define-obsolete-function-alias 'set-face-bold-p 'set-face-bold "24.4")
-
-
-(defun set-face-italic (face italic-p &optional frame)
-  "Specify whether face FACE is italic.
-ITALIC-P non-nil means FACE should explicitly display italic.
-ITALIC-P nil means FACE should explicitly display non-italic.
-FRAME nil or not specified means change face on all frames.
-Use `set-face-attribute' or `modify-face' for finer control."
-  (if (null italic-p)
-      (make-face-unitalic face frame)
-    (make-face-italic face frame)))
-
-(define-obsolete-function-alias 'set-face-italic-p 'set-face-italic "24.4")
-
-
-(defalias 'set-face-background-pixmap 'set-face-stipple)
-
-
-(defun invert-face (face &optional frame)
-  "Swap the foreground and background colors of FACE.
-If FRAME is omitted or nil, it means change face on all frames.
-If FACE specifies neither foreground nor background color,
-set its foreground and background to the background and foreground
-of the default face.  Value is FACE."
-  (interactive (list (read-face-name "Invert face" (face-at-point t))))
-  (let ((fg (face-attribute face :foreground frame))
-       (bg (face-attribute face :background frame)))
-    (if (not (and (eq fg 'unspecified) (eq bg 'unspecified)))
-       (set-face-attribute face frame :foreground bg :background fg)
-      (set-face-attribute face frame
-                         :foreground
-                         (face-attribute 'default :background frame)
-                         :background
-                         (face-attribute 'default :foreground frame))))
-  face)
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Interactively modifying faces.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar crm-separator) ; from crm.el
-
-(defun read-face-name (prompt &optional default multiple)
-  "Read one or more face names, prompting with PROMPT.
-PROMPT should not end in a space or a colon.
-
-Return DEFAULT if the user enters the empty string.
-If DEFAULT is non-nil, it should be a single face or a list of face names
-\(symbols or strings).  In the latter case, return the `car' of DEFAULT
-\(if MULTIPLE is nil, see below), or DEFAULT (if MULTIPLE is non-nil).
-
-If MULTIPLE is non-nil, this function uses `completing-read-multiple'
-to read multiple faces with \"[ \\t]*,[ \\t]*\" as the separator regexp
-and it returns a list of face names.  Otherwise, it reads and returns
-a single face name."
-  (if (and default (not (stringp default)))
-      (setq default
-            (cond ((symbolp default)
-                   (symbol-name default))
-                  (multiple
-                   (mapconcat (lambda (f) (if (symbolp f) (symbol-name f) f))
-                              default ", "))
-                  ;; If we only want one, and the default is more than one,
-                  ;; discard the unwanted ones.
-                  (t (symbol-name (car default))))))
-  (when (and default (not multiple))
-    (require 'crm)
-    ;; For compatibility with `completing-read-multiple' use `crm-separator'
-    ;; to define DEFAULT if MULTIPLE is nil.
-    (setq default (car (split-string default crm-separator t))))
-
-  (let ((prompt (if default
-                    (format "%s (default `%s'): " prompt default)
-                  (format "%s: " prompt)))
-        aliasfaces nonaliasfaces faces)
-    ;; Build up the completion tables.
-    (mapatoms (lambda (s)
-                (if (facep s)
-                    (if (get s 'face-alias)
-                        (push (symbol-name s) aliasfaces)
-                      (push (symbol-name s) nonaliasfaces)))))
-    (if multiple
-        (progn
-          (dolist (face (completing-read-multiple
-                         prompt
-                         (completion-table-in-turn nonaliasfaces aliasfaces)
-                         nil t nil 'face-name-history default))
-            ;; Ignore elements that are not faces
-            ;; (for example, because DEFAULT was "all faces")
-            (if (facep face) (push (intern face) faces)))
-          (nreverse faces))
-      (let ((face (completing-read
-                   prompt
-                   (completion-table-in-turn nonaliasfaces aliasfaces)
-                   nil t nil 'face-name-history default)))
-        (if (facep face) (intern face))))))
-
-;; Not defined without X, but behind window-system test.
-(defvar x-bitmap-file-path)
-
-(defun face-valid-attribute-values (attribute &optional frame)
-  "Return valid values for face attribute ATTRIBUTE.
-The optional argument FRAME is used to determine available fonts
-and colors.  If it is nil or not specified, the selected frame is used.
-Value is an alist of (NAME . VALUE) if ATTRIBUTE expects a value out
-of a set of discrete values.  Value is `integerp' if ATTRIBUTE expects
-an integer value."
-  (let ((valid
-         (pcase attribute
-           (`:family
-            (if (window-system frame)
-                (mapcar (lambda (x) (cons x x))
-                        (font-family-list))
-             ;; Only one font on TTYs.
-             (list (cons "default" "default"))))
-           (`:foundry
-           (list nil))
-          (`:width
-           (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
-                   font-width-table))
-           (`:weight
-           (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
-                   font-weight-table))
-          (`:slant
-           (mapcar #'(lambda (x) (cons (symbol-name (aref x 1)) (aref x 1)))
-                   font-slant-table))
-          (`:inverse-video
-           (mapcar #'(lambda (x) (cons (symbol-name x) x))
-                   (internal-lisp-face-attribute-values attribute)))
-           ((or `:underline `:overline `:strike-through `:box)
-            (if (window-system frame)
-                (nconc (mapcar #'(lambda (x) (cons (symbol-name x) x))
-                               (internal-lisp-face-attribute-values attribute))
-                       (mapcar #'(lambda (c) (cons c c))
-                               (defined-colors frame)))
-             (mapcar #'(lambda (x) (cons (symbol-name x) x))
-                     (internal-lisp-face-attribute-values attribute))))
-           ((or `:foreground `:background)
-            (mapcar #'(lambda (c) (cons c c))
-                    (defined-colors frame)))
-           (`:height
-            'integerp)
-           (`:stipple
-            (and (memq (window-system frame) '(x ns)) ; No stipple on w32
-                 (mapcar #'list
-                         (apply #'nconc
-                                (mapcar (lambda (dir)
-                                          (and (file-readable-p dir)
-                                               (file-directory-p dir)
-                                               (directory-files dir)))
-                                        x-bitmap-file-path)))))
-           (`:inherit
-            (cons '("none" . nil)
-                  (mapcar #'(lambda (c) (cons (symbol-name c) c))
-                          (face-list))))
-           (_
-            (error "Internal error")))))
-    (if (and (listp valid) (not (memq attribute '(:inherit))))
-       (nconc (list (cons "unspecified" 'unspecified)) valid)
-      valid)))
-
-
-(defconst face-attribute-name-alist
-  '((:family . "font family")
-    (:foundry . "font foundry")
-    (:width . "character set width")
-    (:height . "height in 1/10 pt")
-    (:weight . "weight")
-    (:slant . "slant")
-    (:underline . "underline")
-    (:overline . "overline")
-    (:strike-through . "strike-through")
-    (:box . "box")
-    (:inverse-video . "inverse-video display")
-    (:foreground . "foreground color")
-    (:background . "background color")
-    (:stipple . "background stipple")
-    (:inherit . "inheritance"))
-  "An alist of descriptive names for face attributes.
-Each element has the form (ATTRIBUTE-NAME . DESCRIPTION) where
-ATTRIBUTE-NAME is a face attribute name (a keyword symbol), and
-DESCRIPTION is a descriptive name for ATTRIBUTE-NAME.")
-
-
-(defun face-descriptive-attribute-name (attribute)
-  "Return a descriptive name for ATTRIBUTE."
-  (cdr (assq attribute face-attribute-name-alist)))
-
-
-(defun face-read-string (face default name &optional completion-alist)
-  "Interactively read a face attribute string value.
-FACE is the face whose attribute is read.  If non-nil, DEFAULT is the
-default string to return if no new value is entered.  NAME is a
-descriptive name of the attribute for prompting.  COMPLETION-ALIST is an
-alist of valid values, if non-nil.
-
-Entering nothing accepts the default string DEFAULT.
-Value is the new attribute value."
-  ;; Capitalize NAME (we don't use `capitalize' because that capitalizes
-  ;; each word in a string separately).
-  (setq name (concat (upcase (substring name 0 1)) (substring name 1)))
-  (let* ((completion-ignore-case t)
-        (value (completing-read
-                (if default
-                    (format "%s for face `%s' (default %s): "
-                            name face default)
-                  (format "%s for face `%s': " name face))
-                completion-alist nil nil nil nil default)))
-    (if (equal value "") default value)))
-
-
-(defun face-read-integer (face default name)
-  "Interactively read an integer face attribute value.
-FACE is the face whose attribute is read.  DEFAULT is the default
-value to return if no new value is entered.  NAME is a descriptive
-name of the attribute for prompting.  Value is the new attribute value."
-  (let ((new-value
-        (face-read-string face
-                          (format "%s" default)
-                          name
-                          (list (cons "unspecified" 'unspecified)))))
-    (cond ((equal new-value "unspecified")
-          'unspecified)
-         ((member new-value '("unspecified-fg" "unspecified-bg"))
-          new-value)
-         (t
-          (string-to-number new-value)))))
-
-
-;; FIXME this does allow you to enter the list forms of :box,
-;; :stipple, or :underline, because face-valid-attribute-values does
-;; not return those forms.
-(defun read-face-attribute (face attribute &optional frame)
-  "Interactively read a new value for FACE's ATTRIBUTE.
-Optional argument FRAME nil or unspecified means read an attribute value
-of a global face.  Value is the new attribute value."
-  (let* ((old-value (face-attribute face attribute frame))
-        (attribute-name (face-descriptive-attribute-name attribute))
-        (valid (face-valid-attribute-values attribute frame))
-        new-value)
-    ;; Represent complex attribute values as strings by printing them
-    ;; out.  Stipple can be a vector; (WIDTH HEIGHT DATA).  Box can be
-    ;; a list `(:width WIDTH :color COLOR)' or `(:width WIDTH :shadow
-    ;; SHADOW)'.  Underline can be `(:color COLOR :style STYLE)'.
-    (and (memq attribute '(:box :stipple :underline))
-        (or (consp old-value)
-            (vectorp old-value))
-        (setq old-value (prin1-to-string old-value)))
-    (cond ((listp valid)
-          (let ((default
-                  (or (car (rassoc old-value valid))
-                      (format "%s" old-value))))
-            (setq new-value
-                  (face-read-string face default attribute-name valid))
-            (if (equal new-value default)
-                ;; Nothing changed, so don't bother with all the stuff
-                ;; below.  In particular, this avoids a non-tty color
-                ;; from being canonicalized for a tty when the user
-                ;; just uses the default.
-                (setq new-value old-value)
-              ;; Terminal frames can support colors that don't appear
-              ;; explicitly in VALID, using color approximation code
-              ;; in tty-colors.el.
-              (when (and (memq attribute '(:foreground :background))
-                         (not (memq (window-system frame) '(x w32 ns)))
-                         (not (member new-value
-                                      '("unspecified"
-                                        "unspecified-fg" "unspecified-bg"))))
-                (setq new-value (car (tty-color-desc new-value frame))))
-              (when (assoc new-value valid)
-                (setq new-value (cdr (assoc new-value valid)))))))
-         ((eq valid 'integerp)
-          (setq new-value (face-read-integer face old-value attribute-name)))
-         (t (error "Internal error")))
-    ;; Convert stipple and box value text we read back to a list or
-    ;; vector if it looks like one.  This makes the assumption that a
-    ;; pixmap file name won't start with an open-paren.
-    (and (memq attribute '(:stipple :box :underline))
-        (stringp new-value)
-        (string-match-p "^[[(]" new-value)
-        (setq new-value (read new-value)))
-    new-value))
-
-(declare-function fontset-list "fontset.c" ())
-(declare-function x-list-fonts "xfaces.c"
-                 (pattern &optional face frame maximum width))
-
-(defun read-face-font (face &optional frame)
-  "Read the name of a font for FACE on FRAME.
-If optional argument FRAME is nil or omitted, use the selected frame."
-  (let ((completion-ignore-case t))
-    (completing-read (format "Set font attributes of face `%s' from font: " 
face)
-                    (append (fontset-list) (x-list-fonts "*" nil frame)))))
-
-
-(defun read-all-face-attributes (face &optional frame)
-  "Interactively read all attributes for FACE.
-If optional argument FRAME is nil or omitted, use the selected frame.
-Value is a property list of attribute names and new values."
-  (let (result)
-    (dolist (attribute face-attribute-name-alist result)
-      (setq result (cons (car attribute)
-                        (cons (read-face-attribute face (car attribute) frame)
-                              result))))))
-
-(defun modify-face (&optional face foreground background stipple
-                             bold-p italic-p underline inverse-p frame)
-  "Modify attributes of faces interactively.
-If optional argument FRAME is nil or omitted, modify the face used
-for newly created frame, i.e. the global face.
-For non-interactive use, `set-face-attribute' is preferred.
-When called from Lisp, if FACE is nil, all arguments but FRAME are ignored
-and the face and its settings are obtained by querying the user."
-  (interactive)
-  (if face
-      (set-face-attribute face frame
-                         :foreground (or foreground 'unspecified)
-                         :background (or background 'unspecified)
-                         :stipple stipple
-                         :weight (if bold-p 'bold 'normal)
-                         :slant (if italic-p 'italic 'normal)
-                         :underline underline
-                         :inverse-video inverse-p)
-    (setq face (read-face-name "Modify face" (face-at-point t)))
-    (apply #'set-face-attribute face frame
-          (read-all-face-attributes face frame))))
-
-(defun read-face-and-attribute (attribute &optional frame)
-  "Read face name and face attribute value.
-ATTRIBUTE is the attribute whose new value is read.
-FRAME nil or unspecified means read attribute value of global face.
-Value is a list (FACE NEW-VALUE) where FACE is the face read
-\(a symbol), and NEW-VALUE is value read."
-  (cond ((eq attribute :font)
-        (let* ((prompt "Set font-related attributes of face")
-               (face (read-face-name prompt (face-at-point t)))
-               (font (read-face-font face frame)))
-          (list face font)))
-       (t
-        (let* ((attribute-name (face-descriptive-attribute-name attribute))
-               (prompt (format "Set %s of face" attribute-name))
-               (face (read-face-name prompt (face-at-point t)))
-               (new-value (read-face-attribute face attribute frame)))
-          (list face new-value)))))
-
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Listing faces.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst list-faces-sample-text
-  "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-  "Text string to display as the sample text for `list-faces-display'.")
-
-
-;; The name list-faces would be more consistent, but let's avoid a
-;; conflict with Lucid, which uses that name differently.
-
-(defvar help-xref-stack)
-(defun list-faces-display (&optional regexp)
-  "List all faces, using the same sample text in each.
-The sample text is a string that comes from the variable
-`list-faces-sample-text'.
-
-If REGEXP is non-nil, list only those faces with names matching
-this regular expression.  When called interactively with a prefix
-argument, prompt for a regular expression using `read-regexp'."
-  (interactive (list (and current-prefix-arg
-                          (read-regexp "List faces matching regexp"))))
-  (let ((all-faces (zerop (length regexp)))
-       (frame (selected-frame))
-       (max-length 0)
-       faces line-format
-       disp-frame window face-name)
-    ;; We filter and take the max length in one pass
-    (setq faces
-         (delq nil
-               (mapcar (lambda (f)
-                         (let ((s (symbol-name f)))
-                           (when (or all-faces (string-match-p regexp s))
-                             (setq max-length (max (length s) max-length))
-                             f)))
-                       (sort (face-list) #'string-lessp))))
-    (unless faces
-      (error "No faces matching \"%s\"" regexp))
-    (setq max-length (1+ max-length)
-         line-format (format "%%-%ds" max-length))
-    (with-help-window "*Faces*"
-      (with-current-buffer standard-output
-       (setq truncate-lines t)
-       (insert
-        (substitute-command-keys
-         (concat
-          "\\<help-mode-map>Use "
-          (if (display-mouse-p) "\\[help-follow-mouse] or ")
-          "\\[help-follow] on a face name to customize it\n"
-          "or on its sample text for a description of the face.\n\n")))
-       (setq help-xref-stack nil)
-       (dolist (face faces)
-         (setq face-name (symbol-name face))
-         (insert (format line-format face-name))
-         ;; Hyperlink to a customization buffer for the face.  Using
-         ;; the help xref mechanism may not be the best way.
-         (save-excursion
-           (save-match-data
-             (search-backward face-name)
-             (setq help-xref-stack-item `(list-faces-display ,regexp))
-             (help-xref-button 0 'help-customize-face face)))
-         (let ((beg (point))
-               (line-beg (line-beginning-position)))
-           (insert list-faces-sample-text)
-           ;; Hyperlink to a help buffer for the face.
-           (save-excursion
-             (save-match-data
-               (search-backward list-faces-sample-text)
-               (help-xref-button 0 'help-face face)))
-           (insert "\n")
-           (put-text-property beg (1- (point)) 'face face)
-           ;; Make all face commands default to the proper face
-           ;; anywhere in the line.
-           (put-text-property line-beg (1- (point)) 'read-face-name face)
-           ;; If the sample text has multiple lines, line up all of them.
-           (goto-char beg)
-           (forward-line 1)
-           (while (not (eobp))
-             (insert-char ?\s max-length)
-             (forward-line 1))))
-       (goto-char (point-min))))
-    ;; If the *Faces* buffer appears in a different frame,
-    ;; copy all the face definitions from FRAME,
-    ;; so that the display will reflect the frame that was selected.
-    (setq window (get-buffer-window (get-buffer "*Faces*") t))
-    (setq disp-frame (if window (window-frame window)
-                      (car (frame-list))))
-    (or (eq frame disp-frame)
-       (dolist (face (face-list))
-         (copy-face face face frame disp-frame)))))
-
-
-(defun describe-face (face &optional frame)
-  "Display the properties of face FACE on FRAME.
-Interactively, FACE defaults to the faces of the character after point
-and FRAME defaults to the selected frame.
-
-If the optional argument FRAME is given, report on face FACE in that frame.
-If FRAME is t, report on the defaults for face FACE (for new frames).
-If FRAME is omitted or nil, use the selected frame."
-  (interactive (list (read-face-name "Describe face"
-                                     (or (face-at-point t) 'default)
-                                     t)))
-  (let* ((attrs '((:family . "Family")
-                 (:foundry . "Foundry")
-                 (:width . "Width")
-                 (:height . "Height")
-                 (:weight . "Weight")
-                 (:slant . "Slant")
-                 (:foreground . "Foreground")
-                 (:distant-foreground . "DistantForeground")
-                 (:background . "Background")
-                 (:underline . "Underline")
-                 (:overline . "Overline")
-                 (:strike-through . "Strike-through")
-                 (:box . "Box")
-                 (:inverse-video . "Inverse")
-                 (:stipple . "Stipple")
-                 (:font . "Font")
-                 (:fontset . "Fontset")
-                 (:inherit . "Inherit")))
-       (max-width (apply #'max (mapcar #'(lambda (x) (length (cdr x)))
-                                       attrs))))
-    (help-setup-xref (list #'describe-face face)
-                    (called-interactively-p 'interactive))
-    (unless face
-      (setq face 'default))
-    (if (not (listp face))
-       (setq face (list face)))
-    (with-help-window (help-buffer)
-      (with-current-buffer standard-output
-       (dolist (f face)
-         (if (stringp f) (setq f (intern f)))
-         ;; We may get called for anonymous faces (i.e., faces
-         ;; expressed using prop-value plists).  Those can't be
-         ;; usefully customized, so ignore them.
-         (when (symbolp f)
-           (insert "Face: " (symbol-name f))
-           (if (not (facep f))
-               (insert "   undefined face.\n")
-             (let ((customize-label "customize this face")
-                   file-name)
-               (insert (concat " (" (propertize "sample" 'font-lock-face f) 
")"))
-               (princ (concat " (" customize-label ")\n"))
-               ;; FIXME not sure how much of this belongs here, and
-               ;; how much in `face-documentation'.  The latter is
-               ;; not used much, but needs to return nil for
-               ;; undocumented faces.
-               (let ((alias (get f 'face-alias))
-                     (face f)
-                     obsolete)
-                 (when alias
-                   (setq face alias)
-                   (insert
-                    (format "\n  %s is an alias for the face `%s'.\n%s"
-                            f alias
-                            (if (setq obsolete (get f 'obsolete-face))
-                                (format "  This face is obsolete%s; use `%s' 
instead.\n"
-                                        (if (stringp obsolete)
-                                            (format " since %s" obsolete)
-                                          "")
-                                        alias)
-                              ""))))
-                 (insert "\nDocumentation:\n"
-                         (or (face-documentation face)
-                             "Not documented as a face.")
-                         "\n\n"))
-               (with-current-buffer standard-output
-                 (save-excursion
-                   (re-search-backward
-                    (concat "\\(" customize-label "\\)") nil t)
-                   (help-xref-button 1 'help-customize-face f)))
-               (setq file-name (find-lisp-object-file-name f 'defface))
-               (when file-name
-                 (princ "Defined in `")
-                 (princ (file-name-nondirectory file-name))
-                 (princ "'")
-                 ;; Make a hyperlink to the library.
-                 (save-excursion
-                   (re-search-backward "`\\([^`']+\\)'" nil t)
-                   (help-xref-button 1 'help-face-def f file-name))
-                 (princ ".")
-                 (terpri)
-                 (terpri))
-               (dolist (a attrs)
-                 (let ((attr (face-attribute f (car a) frame)))
-                   (insert (make-string (- max-width (length (cdr a))) ?\s)
-                           (cdr a) ": " (format "%s" attr))
-                   (if (and (eq (car a) :inherit)
-                            (not (eq attr 'unspecified)))
-                       ;; Make a hyperlink to the parent face.
-                       (save-excursion
-                         (re-search-backward ": \\([^:]+\\)" nil t)
-                         (help-xref-button 1 'help-face attr)))
-                   (insert "\n")))))
-           (terpri)))))))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Face specifications (defface).
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; Parameter FRAME Is kept for call compatibility to with previous
-;; face implementation.
-
-(defun face-attr-construct (face &optional _frame)
-  "Return a `defface'-style attribute list for FACE.
-Value is a property list of pairs ATTRIBUTE VALUE for all specified
-face attributes of FACE where ATTRIBUTE is the attribute name and
-VALUE is the specified value of that attribute.
-Argument FRAME is ignored and retained for compatibility."
-  (let (result)
-    (dolist (entry face-attribute-name-alist result)
-      (let* ((attribute (car entry))
-            (value (face-attribute face attribute)))
-       (unless (eq value 'unspecified)
-         (setq result (nconc (list attribute value) result)))))))
-
-
-(defun face-spec-set-match-display (display frame)
-  "Non-nil if DISPLAY matches FRAME.
-DISPLAY is part of a spec such as can be used in `defface'.
-If FRAME is nil, the current FRAME is used."
-  (let* ((conjuncts display)
-        conjunct req options
-        ;; t means we have succeeded against all the conjuncts in
-        ;; DISPLAY that have been tested so far.
-        (match t))
-    (if (eq conjuncts t)
-       (setq conjuncts nil))
-    (while (and conjuncts match)
-      (setq conjunct (car conjuncts)
-           conjuncts (cdr conjuncts)
-           req (car conjunct)
-           options (cdr conjunct)
-           match (cond ((eq req 'type)
-                        (or (memq (window-system frame) options)
-                            (and (memq 'graphic options)
-                                 (memq (window-system frame) '(x w32 ns)))
-                            ;; FIXME: This should be revisited to use
-                            ;; display-graphic-p, provided that the
-                            ;; color selection depends on the number
-                            ;; of supported colors, and all defface's
-                            ;; are changed to look at number of colors
-                            ;; instead of (type graphic) etc.
-                            (if (null (window-system frame))
-                                (memq 'tty options)
-                              (or (and (memq 'motif options)
-                                       (featurep 'motif))
-                                  (and (memq 'gtk options)
-                                       (featurep 'gtk))
-                                  (and (memq 'lucid options)
-                                       (featurep 'x-toolkit)
-                                       (not (featurep 'motif))
-                                       (not (featurep 'gtk)))
-                                  (and (memq 'x-toolkit options)
-                                       (featurep 'x-toolkit))))))
-                       ((eq req 'min-colors)
-                        (>= (display-color-cells frame) (car options)))
-                       ((eq req 'class)
-                        (memq (frame-parameter frame 'display-type) options))
-                       ((eq req 'background)
-                        (memq (frame-parameter frame 'background-mode)
-                              options))
-                       ((eq req 'supports)
-                        (display-supports-face-attributes-p options frame))
-                       (t (error "Unknown req `%S' with options `%S'"
-                                 req options)))))
-    match))
-
-
-(defun face-spec-choose (spec &optional frame no-match-retval)
-  "Return the proper attributes for FRAME, out of SPEC.
-
-If no match is found or SPEC is nil, return nil, unless NO-MATCH-RETVAL
-is given, in which case return its value instead."
-  (unless frame
-    (setq frame (selected-frame)))
-  (let ((tail spec)
-       result defaults match-found)
-    (while tail
-      (let* ((entry (pop tail))
-            (display (car entry))
-            (attrs (cdr entry))
-            thisval)
-       ;; Get the attributes as actually specified by this alternative.
-       (setq thisval
-             (if (null (cdr attrs)) ;; was (listp (car attrs))
-                 ;; Old-style entry, the attribute list is the
-                 ;; first element.
-                 (car attrs)
-               attrs))
-
-       ;; If the condition is `default', that sets the default
-       ;; for following conditions.
-       (if (eq display 'default)
-           (setq defaults thisval)
-         ;; Otherwise, if it matches, use it.
-         (when (face-spec-set-match-display display frame)
-           (setq result thisval
-                 tail nil
-                 match-found t)))))
-    ;; If defaults have been found, it's safe to just append those to the 
result
-    ;; list (which at this point will be either nil or contain actual specs) 
and
-    ;; return it to the caller. Since there will most definitely be something 
to
-    ;; return in this case, there's no need to know/check if a match was found.
-    (if defaults
-       (append result defaults)
-      (if match-found
-         result
-       no-match-retval))))
-
-
-(defun face-spec-reset-face (face &optional frame)
-  "Reset all attributes of FACE on FRAME to unspecified."
-  (apply 'set-face-attribute face frame
-        (if (eq face 'default)
-            ;; For the default face, avoid making any attribute
-            ;; unspecified.  Instead, set attributes to default values
-            ;; (see also realize_default_face in xfaces.c).
-            (append
-             '(:underline nil :overline nil :strike-through nil
-               :box nil :inverse-video nil :stipple nil :inherit nil)
-             ;; `display-graphic-p' is unavailable when running
-             ;; temacs, prior to loading frame.el.
-             (when (fboundp 'display-graphic-p)
-               (unless (display-graphic-p frame)
-                 `(:family "default" :foundry "default" :width normal
-                   :height 1 :weight normal :slant normal
-                   :foreground ,(if (frame-parameter nil 'reverse)
-                                    "unspecified-bg"
-                                  "unspecified-fg")
-                   :background ,(if (frame-parameter nil 'reverse)
-                                    "unspecified-fg"
-                                  "unspecified-bg")))))
-          ;; For all other faces, unspecify all attributes.
-          (apply 'append
-                 (mapcar (lambda (x) (list (car x) 'unspecified))
-                         face-attribute-name-alist)))))
-
-(defun face-spec-set (face spec &optional spec-type)
-  "Set the face spec SPEC for FACE.
-See `defface' for the format of SPEC.
-
-The appearance of each face is controlled by its specs (set via
-this function), and by the internal frame-specific face
-attributes (set via `set-face-attribute').
-
-This function also defines FACE as a valid face name if it is not
-already one, and (re)calculates its attributes on existing
-frames.
-
-The argument SPEC-TYPE determines which spec to set:
-  nil or `face-override-spec' means the override spec (which is
-    usually what you want if calling this function outside of
-    Custom code);
-  `customized-face' or `saved-face' means the customized spec or
-    the saved custom spec;
-  `face-defface-spec' means the default spec
-    (usually set only via `defface');
-  `reset' means to ignore SPEC, but clear the `customized-face'
-    and `face-override-spec' specs;
-Any other value means not to set any spec, but to run the
-function for its other effects."
-  (if (get face 'face-alias)
-      (setq face (get face 'face-alias)))
-  ;; Save SPEC to the relevant symbol property.
-  (unless spec-type
-    (setq spec-type 'face-override-spec))
-  (if (memq spec-type '(face-defface-spec face-override-spec
-                       customized-face saved-face))
-      (put face spec-type spec))
-  (if (memq spec-type '(reset saved-face))
-      (put face 'customized-face nil))
-  ;; Setting the face spec via Custom empties out any override spec,
-  ;; similar to how setting a variable via Custom changes its values.
-  (if (memq spec-type '(customized-face saved-face reset))
-      (put face 'face-override-spec nil))
-  ;; If we reset the face based on its custom spec, it is unmodified
-  ;; as far as Custom is concerned.
-  (unless (eq face 'face-override-spec)
-    (put face 'face-modified nil))
-  ;; Initialize the face if it does not exist, then recalculate.
-  (make-empty-face face)
-  (dolist (frame (frame-list))
-    (face-spec-recalc face frame)))
-
-(defun face-spec-recalc (face frame)
-  "Reset the face attributes of FACE on FRAME according to its specs.
-The following sources are applied in this order:
-
-  face reset to default values if it's the default face, otherwise set
-  to unspecified (through `face-spec-reset-face')
-   |
-  (theme and user customization)
-    or: if none of the above exist, and none match the current frame or
-        inherited from the defface spec instead of overwriting it
-        entirely, the following is applied instead:
-  (defface default spec)
-  (X resources (if applicable))
-   |
-  defface override spec"
-  (while (get face 'face-alias)
-    (setq face (get face 'face-alias)))
-  (face-spec-reset-face face frame)
-  ;; If FACE is customized or themed, set the custom spec from
-  ;; `theme-face' records.
-  (let ((theme-faces (get face 'theme-face))
-       (no-match-found 0)
-       spec theme-face-applied)
-    (if theme-faces
-       (dolist (elt (reverse theme-faces))
-         (setq spec (face-spec-choose (cadr elt) frame no-match-found))
-         (unless (eq spec no-match-found)
-           (face-spec-set-2 face frame spec)
-           (setq theme-face-applied t))))
-    ;; If there was a spec applicable to FRAME, that overrides the
-    ;; defface spec entirely (rather than inheriting from it).  If
-    ;; there was no spec applicable to FRAME, apply the defface spec
-    ;; as well as any applicable X resources.
-    (unless theme-face-applied
-      (setq spec (face-spec-choose (face-default-spec face) frame))
-      (face-spec-set-2 face frame spec)
-      (make-face-x-resource-internal face frame))
-    (setq spec (face-spec-choose (get face 'face-override-spec) frame))
-    (face-spec-set-2 face frame spec)))
-
-(defun face-spec-set-2 (face frame spec)
-  "Set the face attributes of FACE on FRAME according to SPEC."
-  (let (attrs)
-    (while spec
-      (when (assq (car spec) face-x-resources)
-       (push (car spec) attrs)
-       (push (cadr spec) attrs))
-      (setq spec (cddr spec)))
-    (apply 'set-face-attribute face frame (nreverse attrs))))
-
-(defun face-attr-match-p (face attrs &optional frame)
-  "Return t if attributes of FACE match values in plist ATTRS.
-Optional parameter FRAME is the frame whose definition of FACE
-is used.  If nil or omitted, use the selected frame."
-  (unless frame
-    (setq frame (selected-frame)))
-  (let* ((list face-attribute-name-alist)
-        (match t)
-        (bold (and (plist-member attrs :bold)
-                   (not (plist-member attrs :weight))))
-        (italic (and (plist-member attrs :italic)
-                     (not (plist-member attrs :slant))))
-        (plist (if (or bold italic)
-                   (copy-sequence attrs)
-                 attrs)))
-    ;; Handle the Emacs 20 :bold and :italic properties.
-    (if bold
-       (plist-put plist :weight (if bold 'bold 'normal)))
-    (if italic
-       (plist-put plist :slant (if italic 'italic 'normal)))
-    (while (and match list)
-      (let* ((attr (caar list))
-            (specified-value
-             (if (plist-member plist attr)
-                 (plist-get plist attr)
-               'unspecified))
-            (value-now (face-attribute face attr frame)))
-       (setq match (equal specified-value value-now))
-       (setq list (cdr list))))
-    match))
-
-(defsubst face-spec-match-p (face spec &optional frame)
-  "Return t if FACE, on FRAME, matches what SPEC says it should look like."
-  (face-attr-match-p face (face-spec-choose spec frame) frame))
-
-(defsubst face-default-spec (face)
-  "Return the default face-spec for FACE, ignoring any user customization.
-If there is no default for FACE, return nil."
-  (get face 'face-defface-spec))
-
-(defsubst face-user-default-spec (face)
-  "Return the user's customized face-spec for FACE, or the default if none.
-If there is neither a user setting nor a default for FACE, return nil."
-  (or (get face 'customized-face)
-      (get face 'saved-face)
-      (face-default-spec face)))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Frame-type independent color support.
-;;; We keep the old x-* names as aliases for back-compatibility.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun defined-colors (&optional frame)
-  "Return a list of colors supported for a particular frame.
-The argument FRAME specifies which frame to try.
-The value may be different for frames on different display types.
-If FRAME doesn't support colors, the value is nil.
-If FRAME is nil, that stands for the selected frame."
-  (if (memq (framep (or frame (selected-frame))) '(x w32 ns))
-      (xw-defined-colors frame)
-    (mapcar 'car (tty-color-alist frame))))
-(defalias 'x-defined-colors 'defined-colors)
-
-(declare-function xw-color-defined-p "xfns.c" (color &optional frame))
-
-(defun color-defined-p (color &optional frame)
-  "Return non-nil if COLOR is supported on frame FRAME.
-COLOR should be a string naming a color (e.g. \"white\"), or a
-string specifying a color's RGB components (e.g. \"#ff12ec\"), or
-the symbol `unspecified'.
-
-This function returns nil if COLOR is the symbol `unspecified',
-or one of the strings \"unspecified-fg\" or \"unspecified-bg\".
-
-If FRAME is omitted or nil, use the selected frame."
-  (unless (member color '(unspecified "unspecified-bg" "unspecified-fg"))
-    (if (member (framep (or frame (selected-frame))) '(x w32 ns))
-       (xw-color-defined-p color frame)
-      (numberp (tty-color-translate color frame)))))
-(defalias 'x-color-defined-p 'color-defined-p)
-
-(declare-function xw-color-values "xfns.c" (color &optional frame))
-
-(defun color-values (color &optional frame)
-  "Return a description of the color named COLOR on frame FRAME.
-COLOR should be a string naming a color (e.g. \"white\"), or a
-string specifying a color's RGB components (e.g. \"#ff12ec\").
-
-Return a list of three integers, (RED GREEN BLUE), each between 0
-and either 65280 or 65535 (the maximum depends on the system).
-Use `color-name-to-rgb' if you want RGB floating-point values
-normalized to 1.0.
-
-If FRAME is omitted or nil, use the selected frame.
-If FRAME cannot display COLOR, the value is nil.
-
-COLOR can also be the symbol `unspecified' or one of the strings
-\"unspecified-fg\" or \"unspecified-bg\", in which case the
-return value is nil."
-  (cond
-   ((member color '(unspecified "unspecified-fg" "unspecified-bg"))
-    nil)
-   ((memq (framep (or frame (selected-frame))) '(x w32 ns))
-    (xw-color-values color frame))
-   (t
-    (tty-color-values color frame))))
-
-(defalias 'x-color-values 'color-values)
-
-(declare-function xw-display-color-p "xfns.c" (&optional terminal))
-
-(defun display-color-p (&optional display)
-  "Return t if DISPLAY supports color.
-The optional argument DISPLAY specifies which display to ask about.
-DISPLAY should be either a frame or a display name (a string).
-If omitted or nil, that stands for the selected frame's display."
-  (if (memq (framep-on-display display) '(x w32 ns))
-      (xw-display-color-p display)
-    (tty-display-color-p display)))
-(defalias 'x-display-color-p 'display-color-p)
-
-(declare-function x-display-grayscale-p "xfns.c" (&optional terminal))
-
-(defun display-grayscale-p (&optional display)
-  "Return non-nil if frames on DISPLAY can display shades of gray.
-DISPLAY should be either a frame or a display name (a string).
-If omitted or nil, that stands for the selected frame's display."
-  (let ((frame-type (framep-on-display display)))
-    (cond
-     ((memq frame-type '(x w32 ns))
-      (x-display-grayscale-p display))
-     (t
-      (> (tty-color-gray-shades display) 2)))))
-
-(defun read-color (&optional prompt convert-to-RGB allow-empty-name msg)
-  "Read a color name or RGB triplet.
-Completion is available for color names, but not for RGB triplets.
-
-RGB triplets have the form \"#RRGGBB\".  Each of the R, G, and B
-components can have one to four digits, but all three components
-must have the same number of digits.  Each digit is a hex value
-between 0 and F; either upper case or lower case for A through F
-are acceptable.
-
-In addition to standard color names and RGB hex values, the
-following are available as color candidates.  In each case, the
-corresponding color is used.
-
- * `foreground at point'   - foreground under the cursor
- * `background at point'   - background under the cursor
-
-Optional arg PROMPT is the prompt; if nil, use a default prompt.
-
-Interactively, or with optional arg CONVERT-TO-RGB-P non-nil,
-convert an input color name to an RGB hex string.  Return the RGB
-hex string.
-
-If optional arg ALLOW-EMPTY-NAME is non-nil, the user is allowed
-to enter an empty color name (the empty string).
-
-Interactively, or with optional arg MSG non-nil, print the
-resulting color name in the echo area."
-  (interactive "i\np\ni\np")    ; Always convert to RGB interactively.
-  (let* ((completion-ignore-case t)
-        (colors (or facemenu-color-alist
-                    (append '("foreground at point" "background at point")
-                            (if allow-empty-name '(""))
-                            (defined-colors))))
-        (color (completing-read
-                (or prompt "Color (name or #RGB triplet): ")
-                ;; Completing function for reading colors, accepting
-                ;; both color names and RGB triplets.
-                (lambda (string pred flag)
-                  (cond
-                   ((null flag) ; Try completion.
-                    (or (try-completion string colors pred)
-                        (if (color-defined-p string)
-                            string)))
-                   ((eq flag t) ; List all completions.
-                    (or (all-completions string colors pred)
-                        (if (color-defined-p string)
-                            (list string))))
-                   ((eq flag 'lambda) ; Test completion.
-                    (or (member string colors)
-                        (color-defined-p string)))))
-                nil t)))
-
-    ;; Process named colors.
-    (when (member color colors)
-      (cond ((string-equal color "foreground at point")
-            (setq color (foreground-color-at-point)))
-           ((string-equal color "background at point")
-            (setq color (background-color-at-point))))
-      (when (and convert-to-RGB
-                (not (string-equal color "")))
-       (let ((components (x-color-values color)))
-         (unless (string-match-p 
"^#\\(?:[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color)
-           (setq color (format "#%04X%04X%04X"
-                               (logand 65535 (nth 0 components))
-                               (logand 65535 (nth 1 components))
-                               (logand 65535 (nth 2 components))))))))
-    (when msg (message "Color: `%s'" color))
-    color))
-
-(defun face-at-point (&optional thing multiple)
-  "Return the face of the character after point.
-If it has more than one face, return the first one.
-If THING is non-nil try first to get a face name from the buffer.
-IF MULTIPLE is non-nil, return a list of all faces.
-Return nil if there is no face."
-  (let (faces)
-    (if thing
-        ;; Try to get a face name from the buffer.
-        (let ((face (intern-soft (thing-at-point 'symbol))))
-          (if (facep face)
-              (push face faces))))
-    ;; Add the named faces that the `read-face-name' or `face' property uses.
-    (let ((faceprop (or (get-char-property (point) 'read-face-name)
-                        (get-char-property (point) 'face))))
-      (cond ((facep faceprop)
-             (push faceprop faces))
-            ((and (listp faceprop)
-                  ;; Don't treat an attribute spec as a list of faces.
-                  (not (keywordp (car faceprop)))
-                  (not (memq (car faceprop)
-                             '(foreground-color background-color))))
-             (dolist (face faceprop)
-               (if (facep face)
-                   (push face faces))))))
-    (setq faces (delete-dups (nreverse faces)))
-    (if multiple faces (car faces))))
-
-(defun foreground-color-at-point ()
-  "Return the foreground color of the character after point."
-  ;; `face-at-point' alone is not sufficient.  It only gets named faces.
-  ;; Need also pick up any face properties that are not associated with named 
faces.
-  (let ((face (or (face-at-point)
-                 (get-char-property (point) 'read-face-name)
-                 (get-char-property (point) 'face))))
-    (cond ((and face (symbolp face))
-          (let ((value (face-foreground face nil 'default)))
-            (if (member value '("unspecified-fg" "unspecified-bg"))
-                nil
-              value)))
-         ((consp face)
-          (cond ((memq 'foreground-color face) (cdr (memq 'foreground-color 
face)))
-                ((memq ':foreground face) (cadr (memq ':foreground face)))))
-         (t nil))))                    ; Invalid face value.
-
-(defun background-color-at-point ()
-  "Return the background color of the character after point."
-  ;; `face-at-point' alone is not sufficient.  It only gets named faces.
-  ;; Need also pick up any face properties that are not associated with named 
faces.
-  (let ((face (or (face-at-point)
-                 (get-char-property (point) 'read-face-name)
-                 (get-char-property (point) 'face))))
-    (cond ((and face (symbolp face))
-          (let ((value (face-background face nil 'default)))
-            (if (member value '("unspecified-fg" "unspecified-bg"))
-                nil
-              value)))
-         ((consp face)
-          (cond ((memq 'background-color face) (cdr (memq 'background-color 
face)))
-                ((memq ':background face) (cadr (memq ':background face)))))
-         (t nil))))                    ; Invalid face value.
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Frame creation.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(declare-function x-display-list "xfns.c" ())
-(declare-function x-open-connection "xfns.c"
-                 (display &optional xrm-string must-succeed))
-(declare-function x-get-resource "frame.c"
-                 (attribute class &optional component subclass))
-(declare-function x-parse-geometry "frame.c" (string))
-(defvar x-display-name)
-
-(defun x-handle-named-frame-geometry (parameters)
-  "Add geometry parameters for a named frame to parameter list PARAMETERS.
-Value is the new parameter list."
-  ;; Note that `x-resource-name' has a global meaning.
-  (let ((x-resource-name (cdr (assq 'name parameters))))
-    (when x-resource-name
-      ;; Before checking X resources, we must have an X connection.
-      (or (window-system)
-         (x-display-list)
-         (x-open-connection (or (cdr (assq 'display parameters))
-                                x-display-name)))
-      (let (res-geometry parsed)
-       (and (setq res-geometry (x-get-resource "geometry" "Geometry"))
-            (setq parsed (x-parse-geometry res-geometry))
-            (setq parameters
-                  (append parameters parsed
-                          ;; If the resource specifies a position,
-                          ;; take note of that.
-                          (if (or (assq 'top parsed) (assq 'left parsed))
-                              '((user-position . t) (user-size . t)))))))))
-  parameters)
-
-
-(defun x-handle-reverse-video (frame parameters)
-  "Handle the reverse-video frame parameter and X resource.
-`x-create-frame' does not handle this one."
-  (when (cdr (or (assq 'reverse parameters)
-                (let ((resource (x-get-resource "reverseVideo"
-                                                "ReverseVideo")))
-                  (if resource
-                      (cons nil (member (downcase resource)
-                                        '("on" "true")))))))
-      (let* ((params (frame-parameters frame))
-            (bg (cdr (assq 'foreground-color params)))
-            (fg (cdr (assq 'background-color params))))
-       (modify-frame-parameters frame
-                                (list (cons 'foreground-color fg)
-                                      (cons 'background-color bg)))
-       (if (equal bg (cdr (assq 'border-color params)))
-           (modify-frame-parameters frame
-                                    (list (cons 'border-color fg))))
-       (if (equal bg (cdr (assq 'mouse-color params)))
-           (modify-frame-parameters frame
-                                    (list (cons 'mouse-color fg))))
-       (if (equal bg (cdr (assq 'cursor-color params)))
-           (modify-frame-parameters frame
-                                    (list (cons 'cursor-color fg)))))))
-
-(declare-function x-create-frame "xfns.c" (parms))
-(declare-function x-setup-function-keys "term/common-win" (frame))
-
-(defun x-create-frame-with-faces (&optional parameters)
-  "Create and return a frame with frame parameters PARAMETERS.
-If PARAMETERS specify a frame name, handle X geometry resources
-for that name.  If PARAMETERS includes a `reverse' parameter, or
-the X resource ``reverseVideo'' is present, handle that."
-  (setq parameters (x-handle-named-frame-geometry parameters))
-  (let* ((params (copy-tree parameters))
-        (visibility-spec (assq 'visibility parameters))
-        (delayed-params '(foreground-color background-color font
-                          border-color cursor-color mouse-color
-                          visibility scroll-bar-foreground
-                          scroll-bar-background))
-        frame success)
-    (dolist (param delayed-params)
-      (setq params (assq-delete-all param params)))
-    (setq frame (x-create-frame `((visibility . nil) . ,params)))
-    (unwind-protect
-       (progn
-         (x-setup-function-keys frame)
-         (x-handle-reverse-video frame parameters)
-         (frame-set-background-mode frame t)
-         (face-set-after-frame-default frame parameters)
-         (if (null visibility-spec)
-             (make-frame-visible frame)
-           (modify-frame-parameters frame (list visibility-spec)))
-         (setq success t))
-      (unless success
-       (delete-frame frame)))
-    frame))
-
-(defun face-set-after-frame-default (frame &optional parameters)
-  "Initialize the frame-local faces of FRAME.
-Calculate the face definitions using the face specs, custom theme
-settings, X resources, and `face-new-frame-defaults'.
-Finally, apply any relevant face attributes found amongst the
-frame parameters in PARAMETERS."
-  (let ((window-system-p (memq (window-system frame) '(x w32))))
-    ;; The `reverse' is so that `default' goes first.
-    (dolist (face (nreverse (face-list)))
-      (condition-case ()
-         (progn
-           ;; Initialize faces from face spec and custom theme.
-           (face-spec-recalc face frame)
-           ;; Apply attributes specified by face-new-frame-defaults
-           (internal-merge-in-global-face face frame))
-       ;; Don't let invalid specs prevent frame creation.
-       (error nil))))
-
-  ;; Apply attributes specified by frame parameters.
-  (let ((face-params '((foreground-color default :foreground)
-                      (background-color default :background)
-                       (font default :font)
-                      (border-color border :background)
-                      (cursor-color cursor :background)
-                      (scroll-bar-foreground scroll-bar :foreground)
-                      (scroll-bar-background scroll-bar :background)
-                      (mouse-color mouse :background))))
-    (dolist (param face-params)
-      (let* ((param-name (nth 0 param))
-            (value (cdr (assq param-name parameters))))
-       (if value
-           (set-face-attribute (nth 1 param) frame
-                               (nth 2 param) value))))))
-
-(defun tty-handle-reverse-video (frame parameters)
-  "Handle the reverse-video frame parameter for terminal frames."
-  (when (cdr (assq 'reverse parameters))
-    (let* ((params (frame-parameters frame))
-          (bg (cdr (assq 'foreground-color params)))
-          (fg (cdr (assq 'background-color params))))
-      (modify-frame-parameters frame
-                              (list (cons 'foreground-color fg)
-                                    (cons 'background-color bg)))
-      (if (equal bg (cdr (assq 'mouse-color params)))
-         (modify-frame-parameters frame
-                                  (list (cons 'mouse-color fg))))
-      (if (equal bg (cdr (assq 'cursor-color params)))
-         (modify-frame-parameters frame
-                                  (list (cons 'cursor-color fg)))))))
-
-
-(defun tty-create-frame-with-faces (&optional parameters)
-  "Create and return a frame from optional frame parameters PARAMETERS.
-If PARAMETERS contains a `reverse' parameter, handle that."
-  (let ((frame (make-terminal-frame parameters))
-       success)
-    (unwind-protect
-       (with-selected-frame frame
-         (tty-handle-reverse-video frame (frame-parameters frame))
-
-          (unless (terminal-parameter frame 'terminal-initted)
-            (set-terminal-parameter frame 'terminal-initted t)
-            (set-locale-environment nil frame)
-            (tty-run-terminal-initialization frame nil t))
-         (frame-set-background-mode frame t)
-         (face-set-after-frame-default frame parameters)
-         (setq success t))
-      (unless success
-       (delete-frame frame)))
-    frame))
-
-(defun tty-find-type (pred type)
-  "Return the longest prefix of TYPE to which PRED returns non-nil.
-TYPE should be a tty type name such as \"xterm-16color\".
-
-The function tries only those prefixes that are followed by a
-dash or underscore in the original type name, like \"xterm\" in
-the above example."
-  (let (hyphend)
-    (while (and type
-               (not (funcall pred type)))
-      ;; Strip off last hyphen and what follows, then try again
-      (setq type
-           (if (setq hyphend (string-match-p "[-_][^-_]+$" type))
-               (substring type 0 hyphend)
-             nil))))
-  type)
-
-(defvar tty-setup-hook nil
-  "Hook run after running the initialization function of a new text terminal.
-Specifically, `tty-run-terminal-initialization' runs this.
-This can be used to fine tune the `input-decode-map', for example.")
-
-(defun tty-run-terminal-initialization (frame &optional type run-hook)
-  "Run the special initialization code for the terminal type of FRAME.
-The optional TYPE parameter may be used to override the autodetected
-terminal type to a different value.
-
-If optional argument RUN-HOOK is non-nil, then as a final step,
-this runs the hook `tty-setup-hook'.
-
-If you set `term-file-prefix' to nil, this function does nothing."
-  (setq type (or type (tty-type frame)))
-  ;; Load library for our terminal type.
-  ;; User init file can set term-file-prefix to nil to prevent this.
-  (with-selected-frame frame
-    (unless (null term-file-prefix)
-      (let* (term-init-func)
-       ;; First, load the terminal initialization file, if it is
-       ;; available and it hasn't been loaded already.
-       (tty-find-type #'(lambda (type)
-                          (let ((file (locate-library (concat term-file-prefix 
type))))
-                            (and file
-                                 (or (assoc file load-history)
-                                     (load file t t)))))
-                      type)
-       ;; Next, try to find a matching initialization function, and call it.
-       (tty-find-type #'(lambda (type)
-                          (fboundp (setq term-init-func
-                                         (intern (concat "terminal-init-" 
type)))))
-                      type)
-       (when (fboundp term-init-func)
-         (funcall term-init-func))
-       (set-terminal-parameter frame 'terminal-initted term-init-func)
-       (if run-hook (run-hooks 'tty-setup-hook))))))
-
-;; Called from C function init_display to initialize faces of the
-;; dumped terminal frame on startup.
-
-(defun tty-set-up-initial-frame-faces ()
-  (let ((frame (selected-frame)))
-    (frame-set-background-mode frame t)
-    (face-set-after-frame-default frame)))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Standard faces.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defgroup basic-faces nil
-  "The standard faces of Emacs."
-  :group 'faces)
-
-(defface default
-  '((t nil)) ; If this were nil, face-defface-spec would not be set.
-  "Basic default face."
-  :group 'basic-faces)
-
-(defface bold
-  '((t :weight bold))
-  "Basic bold face."
-  :group 'basic-faces)
-
-(defface italic
-  '((((supports :slant italic))
-     :slant italic)
-    (((supports :underline t))
-     :underline t)
-    (t
-     ;; Default to italic, even if it doesn't appear to be supported,
-     ;; because in some cases the display engine will do its own
-     ;; workaround (to `dim' on ttys).
-     :slant italic))
-  "Basic italic face."
-  :group 'basic-faces)
-
-(defface bold-italic
-  '((t :weight bold :slant italic))
-  "Basic bold-italic face."
-  :group 'basic-faces)
-
-(defface underline
-  '((((supports :underline t))
-     :underline t)
-    (((supports :weight bold))
-     :weight bold)
-    (t :underline t))
-  "Basic underlined face."
-  :group 'basic-faces)
-
-(defface fixed-pitch
-  '((t :family "Monospace"))
-  "The basic fixed-pitch face."
-  :group 'basic-faces)
-
-(defface variable-pitch
-  '((t :family "Sans Serif"))
-  "The basic variable-pitch face."
-  :group 'basic-faces)
-
-(defface shadow
-  '((((class color grayscale) (min-colors 88) (background light))
-     :foreground "grey50")
-    (((class color grayscale) (min-colors 88) (background dark))
-     :foreground "grey70")
-    (((class color) (min-colors 8) (background light))
-     :foreground "green")
-    (((class color) (min-colors 8) (background dark))
-     :foreground "yellow"))
-  "Basic face for shadowed text."
-  :group 'basic-faces
-  :version "22.1")
-
-(defface link
-  '((((class color) (min-colors 88) (background light))
-     :foreground "RoyalBlue3" :underline t)
-    (((class color) (background light))
-     :foreground "blue" :underline t)
-    (((class color) (min-colors 88) (background dark))
-     :foreground "cyan1" :underline t)
-    (((class color) (background dark))
-     :foreground "cyan" :underline t)
-    (t :inherit underline))
-  "Basic face for unvisited links."
-  :group 'basic-faces
-  :version "22.1")
-
-(defface link-visited
-  '((default :inherit link)
-    (((class color) (background light)) :foreground "magenta4")
-    (((class color) (background dark)) :foreground "violet"))
-  "Basic face for visited links."
-  :group 'basic-faces
-  :version "22.1")
-
-(defface highlight
-  '((((class color) (min-colors 88) (background light))
-     :background "darkseagreen2")
-    (((class color) (min-colors 88) (background dark))
-     :background "darkolivegreen")
-    (((class color) (min-colors 16) (background light))
-     :background "darkseagreen2")
-    (((class color) (min-colors 16) (background dark))
-     :background "darkolivegreen")
-    (((class color) (min-colors 8))
-     :background "green" :foreground "black")
-    (t :inverse-video t))
-  "Basic face for highlighting."
-  :group 'basic-faces)
-
-;; Region face: under NS, default to the system-defined selection
-;; color (optimized for the fixed white background of other apps),
-;; if background is light.
-(defface region
-  '((((class color) (min-colors 88) (background dark))
-     :background "blue3")
-    (((class color) (min-colors 88) (background light) (type gtk))
-     :distant-foreground "gtk_selection_fg_color"
-     :background "gtk_selection_bg_color")
-    (((class color) (min-colors 88) (background light) (type ns))
-     :distant-foreground "ns_selection_fg_color"
-     :background "ns_selection_bg_color")
-    (((class color) (min-colors 88) (background light))
-     :background "lightgoldenrod2")
-    (((class color) (min-colors 16) (background dark))
-     :background "blue3")
-    (((class color) (min-colors 16) (background light))
-     :background "lightgoldenrod2")
-    (((class color) (min-colors 8))
-     :background "blue" :foreground "white")
-    (((type tty) (class mono))
-     :inverse-video t)
-    (t :background "gray"))
-  "Basic face for highlighting the region."
-  :version "21.1"
-  :group 'basic-faces)
-
-(defface secondary-selection
-  '((((class color) (min-colors 88) (background light))
-     :background "yellow1")
-    (((class color) (min-colors 88) (background dark))
-     :background "SkyBlue4")
-    (((class color) (min-colors 16) (background light))
-     :background "yellow")
-    (((class color) (min-colors 16) (background dark))
-     :background "SkyBlue4")
-    (((class color) (min-colors 8))
-     :background "cyan" :foreground "black")
-    (t :inverse-video t))
-  "Basic face for displaying the secondary selection."
-  :group 'basic-faces)
-
-(defface trailing-whitespace
-  '((((class color) (background light))
-     :background "red1")
-    (((class color) (background dark))
-     :background "red1")
-    (t :inverse-video t))
-  "Basic face for highlighting trailing whitespace."
-  :version "21.1"
-  :group 'basic-faces)
-
-(defface escape-glyph
-  '((((background dark)) :foreground "cyan")
-    ;; See the comment in minibuffer-prompt for
-    ;; the reason not to use blue on MS-DOS.
-    (((type pc)) :foreground "magenta")
-    ;; red4 is too dark, but some say blue is too loud.
-    ;; brown seems to work ok. -- rms.
-    (t :foreground "brown"))
-  "Face for characters displayed as sequences using `^' or `\\'."
-  :group 'basic-faces
-  :version "22.1")
-
-(defface nobreak-space
-  '((((class color) (min-colors 88)) :inherit escape-glyph :underline t)
-    (((class color) (min-colors 8)) :background "magenta")
-    (t :inverse-video t))
-  "Face for displaying nobreak space."
-  :group 'basic-faces
-  :version "22.1")
-
-(defgroup mode-line-faces nil
-  "Faces used in the mode line."
-  :group 'mode-line
-  :group 'faces
-  :version "22.1")
-
-(defface mode-line
-  '((((class color) (min-colors 88))
-     :box (:line-width -1 :style released-button)
-     :background "grey75" :foreground "black")
-    (t
-     :inverse-video t))
-  "Basic mode line face for selected window."
-  :version "21.1"
-  :group 'mode-line-faces
-  :group 'basic-faces)
-
-(defface mode-line-inactive
-  '((default
-     :inherit mode-line)
-    (((class color) (min-colors 88) (background light))
-     :weight light
-     :box (:line-width -1 :color "grey75" :style nil)
-     :foreground "grey20" :background "grey90")
-    (((class color) (min-colors 88) (background dark) )
-     :weight light
-     :box (:line-width -1 :color "grey40" :style nil)
-     :foreground "grey80" :background "grey30"))
-  "Basic mode line face for non-selected windows."
-  :version "22.1"
-  :group 'mode-line-faces
-  :group 'basic-faces)
-(define-obsolete-face-alias 'modeline-inactive 'mode-line-inactive "22.1")
-
-(defface mode-line-highlight
-  '((((class color) (min-colors 88))
-     :box (:line-width 2 :color "grey40" :style released-button))
-    (t
-     :inherit highlight))
-  "Basic mode line face for highlighting."
-  :version "22.1"
-  :group 'mode-line-faces
-  :group 'basic-faces)
-(define-obsolete-face-alias 'modeline-highlight 'mode-line-highlight "22.1")
-
-(defface mode-line-emphasis
-  '((t (:weight bold)))
-  "Face used to emphasize certain mode line features.
-Use the face `mode-line-highlight' for features that can be selected."
-  :version "23.1"
-  :group 'mode-line-faces
-  :group 'basic-faces)
-
-(defface mode-line-buffer-id
-  '((t (:weight bold)))
-  "Face used for buffer identification parts of the mode line."
-  :version "22.1"
-  :group 'mode-line-faces
-  :group 'basic-faces)
-(define-obsolete-face-alias 'modeline-buffer-id 'mode-line-buffer-id "22.1")
-
-(defface header-line
-  '((default
-     :inherit mode-line)
-    (((type tty))
-     ;; This used to be `:inverse-video t', but that doesn't look very
-     ;; good when combined with inverse-video mode-lines and multiple
-     ;; windows.  Underlining looks better, and is more consistent with
-     ;; the window-system face variants, which deemphasize the
-     ;; header-line in relation to the mode-line face.  If a terminal
-     ;; can't underline, then the header-line will end up without any
-     ;; highlighting; this may be too confusing in general, although it
-     ;; happens to look good with the only current use of header-lines,
-     ;; the info browser. XXX
-     :inverse-video nil               ;Override the value inherited from 
mode-line.
-     :underline t)
-    (((class color grayscale) (background light))
-     :background "grey90" :foreground "grey20"
-     :box nil)
-    (((class color grayscale) (background dark))
-     :background "grey20" :foreground "grey90"
-     :box nil)
-    (((class mono) (background light))
-     :background "white" :foreground "black"
-     :inverse-video nil
-     :box nil
-     :underline t)
-    (((class mono) (background dark))
-     :background "black" :foreground "white"
-     :inverse-video nil
-     :box nil
-     :underline t))
-  "Basic header-line face."
-  :version "21.1"
-  :group 'basic-faces)
-
-(defface vertical-border
-  '((((type tty)) :inherit mode-line-inactive))
-  "Face used for vertical window dividers on ttys."
-  :version "22.1"
-  :group 'basic-faces)
-
-(defface window-divider '((t :foreground "gray60"))
-  "Basic face for window dividers.
-When a divider is less than 3 pixels wide, it is drawn solidly
-with the foreground of this face.  For larger dividers this face
-is used for the inner part while the first pixel line/column is
-drawn with the `window-divider-first-pixel' face and the last
-pixel line/column with the `window-divider-last-pixel' face."
-  :version "24.4"
-  :group 'frames
-  :group 'basic-faces)
-
-(defface window-divider-first-pixel
-  '((t :foreground "gray80"))
-  "Basic face for first pixel line/column of window dividers.
-When a divider is at least 3 pixels wide, its first pixel
-line/column is drawn with the foreground of this face.  If you do
-not want to accentuate the first pixel line/column, set this to
-the same as `window-divider' face."
-  :version "24.4"
-  :group 'frames
-  :group 'basic-faces)
-
-(defface window-divider-last-pixel
-  '((t :foreground "gray40"))
-  "Basic face for last pixel line/column of window dividers.
-When a divider is at least 3 pixels wide, its last pixel
-line/column is drawn with the foreground of this face.  If you do
-not want to accentuate the last pixel line/column, set this to
-the same as `window-divider' face."
-  :version "24.4"
-  :group 'frames
-  :group 'basic-faces)
-
-(defface minibuffer-prompt
-  '((((background dark)) :foreground "cyan")
-    ;; Don't use blue because many users of the MS-DOS port customize
-    ;; their foreground color to be blue.
-    (((type pc)) :foreground "magenta")
-    (t :foreground "medium blue"))
-  "Face for minibuffer prompts.
-By default, Emacs automatically adds this face to the value of
-`minibuffer-prompt-properties', which is a list of text properties
-used to display the prompt text."
-  :version "22.1"
-  :group 'basic-faces)
-
-(setq minibuffer-prompt-properties
-      (append minibuffer-prompt-properties (list 'face 'minibuffer-prompt)))
-
-(defface fringe
-  '((((class color) (background light))
-     :background "grey95")
-    (((class color) (background dark))
-     :background "grey10")
-    (t
-     :background "gray"))
-  "Basic face for the fringes to the left and right of windows under X."
-  :version "21.1"
-  :group 'frames
-  :group 'basic-faces)
-
-(defface scroll-bar '((t nil))
-  "Basic face for the scroll bar colors under X."
-  :version "21.1"
-  :group 'frames
-  :group 'basic-faces)
-
-(defface border '((t nil))
-  "Basic face for the frame border under X."
-  :version "21.1"
-  :group 'frames
-  :group 'basic-faces)
-
-(defface cursor
-  '((((background light)) :background "black")
-    (((background dark))  :background "white"))
-  "Basic face for the cursor color under X.
-Currently, only the `:background' attribute is meaningful; all
-other attributes are ignored.  The cursor foreground color is
-taken from the background color of the underlying text.
-
-Note: Other faces cannot inherit from the cursor face."
-  :version "21.1"
-  :group 'cursor
-  :group 'basic-faces)
-
-(put 'cursor 'face-no-inherit t)
-
-(defface mouse '((t nil))
-  "Basic face for the mouse color under X."
-  :version "21.1"
-  :group 'mouse
-  :group 'basic-faces)
-
-(defface tool-bar
-  '((default
-     :box (:line-width 1 :style released-button)
-     :foreground "black")
-    (((type x w32 ns) (class color))
-     :background "grey75")
-    (((type x) (class mono))
-     :background "grey"))
-  "Basic tool-bar face."
-  :version "21.1"
-  :group 'basic-faces)
-
-(defface menu
-  '((((type tty))
-     :inverse-video t)
-    (((type x-toolkit))
-     )
-    (t
-     :inverse-video t))
-  "Basic face for the font and colors of the menu bar and popup menus."
-  :version "21.1"
-  :group 'menu
-  :group 'basic-faces)
-
-(defface help-argument-name '((t :inherit italic))
-  "Face to highlight argument names in *Help* buffers."
-  :group 'help)
-
-(defface glyphless-char
-  '((((type tty)) :inherit underline)
-    (((type pc)) :inherit escape-glyph)
-    (t :height 0.6))
-  "Face for displaying non-graphic characters (e.g. U+202A (LRE)).
-It is used for characters of no fonts too."
-  :version "24.1"
-  :group 'basic-faces)
-
-(defface error
-  '((default :weight bold)
-    (((class color) (min-colors 88) (background light)) :foreground "Red1")
-    (((class color) (min-colors 88) (background dark))  :foreground "Pink")
-    (((class color) (min-colors 16) (background light)) :foreground "Red1")
-    (((class color) (min-colors 16) (background dark))  :foreground "Pink")
-    (((class color) (min-colors 8)) :foreground "red")
-    (t :inverse-video t))
-  "Basic face used to highlight errors and to denote failure."
-  :version "24.1"
-  :group 'basic-faces)
-
-(defface warning
-  '((default :weight bold)
-    (((class color) (min-colors 16)) :foreground "DarkOrange")
-    (((class color)) :foreground "yellow"))
-  "Basic face used to highlight warnings."
-  :version "24.1"
-  :group 'basic-faces)
-
-(defface success
-  '((default :weight bold)
-    (((class color) (min-colors 16) (background light)) :foreground 
"ForestGreen")
-    (((class color) (min-colors 88) (background dark))  :foreground "Green1")
-    (((class color) (min-colors 16) (background dark))  :foreground "Green")
-    (((class color)) :foreground "green"))
-  "Basic face used to indicate successful operation."
-  :version "24.1"
-  :group 'basic-faces)
-
-;; Faces for TTY menus.
-(defface tty-menu-enabled-face
-  '((t
-     :foreground "yellow" :background "blue" :weight bold))
-  "Face for displaying enabled items in TTY menus."
-  :group 'basic-faces)
-
-(defface tty-menu-disabled-face
-  '((((class color) (min-colors 16))
-     :foreground "lightgray" :background "blue")
-    (t
-     :foreground "white" :background "blue"))
-  "Face for displaying disabled items in TTY menus."
-  :group 'basic-faces)
-
-(defface tty-menu-selected-face
-  '((t :background "red"))
-  "Face for displaying the currently selected item in TTY menus."
-  :group 'basic-faces)
-
-(defgroup paren-showing-faces nil
-  "Faces used to highlight paren matches."
-  :group 'paren-showing
-  :group 'faces
-  :version "22.1")
-
-(defface show-paren-match
-  '((((class color) (background light))
-     :background "turquoise")          ; looks OK on tty (becomes cyan)
-    (((class color) (background dark))
-     :background "steelblue3")         ; looks OK on tty (becomes blue)
-    (((background dark))
-     :background "grey50")
-    (t
-     :background "gray"))
-  "Face used for a matching paren."
-  :group 'paren-showing-faces)
-
-(defface show-paren-mismatch
-  '((((class color)) (:foreground "white" :background "purple"))
-    (t (:inverse-video t)))
-  "Face used for a mismatching paren."
-  :group 'paren-showing-faces)
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Manipulating font names.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; This is here for compatibility with Emacs 20.2.  For example,
-;; international/fontset.el uses x-resolve-font-name.  The following
-;; functions are not used in the face implementation itself.
-
-(defvar x-font-regexp nil)
-(defvar x-font-regexp-head nil)
-(defvar x-font-regexp-weight nil)
-(defvar x-font-regexp-slant nil)
-
-(defconst x-font-regexp-weight-subnum 1)
-(defconst x-font-regexp-slant-subnum 2)
-(defconst x-font-regexp-swidth-subnum 3)
-(defconst x-font-regexp-adstyle-subnum 4)
-
-;;; Regexps matching font names in "Host Portable Character Representation."
-;;;
-(let ((-               "[-?]")
-      (foundry         "[^-]+")
-      (family          "[^-]+")
-      (weight          "\\(bold\\|demibold\\|medium\\)")               ; 1
-;     (weight\?                "\\(\\*\\|bold\\|demibold\\|medium\\|\\)")      
; 1
-      (weight\?                "\\([^-]*\\)")                                  
; 1
-      (slant           "\\([ior]\\)")                                  ; 2
-;     (slant\?         "\\([ior?*]?\\)")                               ; 2
-      (slant\?         "\\([^-]?\\)")                                  ; 2
-;     (swidth          "\\(\\*\\|normal\\|semicondensed\\|\\)")        ; 3
-      (swidth          "\\([^-]*\\)")                                  ; 3
-;     (adstyle         "\\(\\*\\|sans\\|\\)")                          ; 4
-      (adstyle         "\\([^-]*\\)")                                  ; 4
-      (pixelsize       "[0-9]+")
-      (pointsize       "[0-9][0-9]+")
-      (resx            "[0-9][0-9]+")
-      (resy            "[0-9][0-9]+")
-      (spacing         "[cmp?*]")
-      (avgwidth                "[0-9]+")
-      (registry                "[^-]+")
-      (encoding                "[^-]+")
-      )
-  (setq x-font-regexp
-       (purecopy (concat "\\`\\*?[-?*]"
-               foundry - family - weight\? - slant\? - swidth - adstyle -
-               pixelsize - pointsize - resx - resy - spacing - avgwidth -
-               registry - encoding "\\*?\\'"
-               )))
-  (setq x-font-regexp-head
-       (purecopy (concat "\\`[-?*]" foundry - family - weight\? - slant\?
-               "\\([-*?]\\|\\'\\)")))
-  (setq x-font-regexp-slant (purecopy (concat - slant -)))
-  (setq x-font-regexp-weight (purecopy (concat - weight -)))
-  nil)
-
-
-(defun x-resolve-font-name (pattern &optional face frame)
-  "Return a font name matching PATTERN.
-All wildcards in PATTERN are instantiated.
-If PATTERN is nil, return the name of the frame's base font, which never
-contains wildcards.
-Given optional arguments FACE and FRAME, return a font which is
-also the same size as FACE on FRAME, or fail."
-  (and (eq frame t)
-       (setq frame nil))
-  (if pattern
-      ;; Note that x-list-fonts has code to handle a face with nil as its font.
-      (let ((fonts (x-list-fonts pattern face frame 1)))
-       (or fonts
-           (if face
-               (if (string-match-p "\\*" pattern)
-                   (if (null (face-font face))
-                       (error "No matching fonts are the same height as the 
frame default font")
-                     (error "No matching fonts are the same height as face 
`%s'" face))
-                 (if (null (face-font face))
-                     (error "Height of font `%s' doesn't match the frame 
default font"
-                            pattern)
-                   (error "Height of font `%s' doesn't match face `%s'"
-                          pattern face)))
-             (error "No fonts match `%s'" pattern)))
-       (car fonts))
-    (cdr (assq 'font (frame-parameters (selected-frame))))))
-
-(defcustom font-list-limit 100
-  "This variable is obsolete and has no effect."
-  :type 'integer
-  :group 'display)
-(make-obsolete-variable 'font-list-limit nil "24.3")
-
-(provide 'faces)
-
-;;; faces.el ends here
diff --git a/packages/context-coloring/fixtures/benchmark/jquery-2.1.1.js 
b/packages/context-coloring/fixtures/benchmark/jquery-2.1.1.js
deleted file mode 100644
index 9f7b3d3..0000000
--- a/packages/context-coloring/fixtures/benchmark/jquery-2.1.1.js
+++ /dev/null
@@ -1,9190 +0,0 @@
-/*!
- * jQuery JavaScript Library v2.1.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-05-01T17:11Z
- */
-
-(function( global, factory ) {
-
-       if ( typeof module === "object" && typeof module.exports === "object" ) 
{
-               // For CommonJS and CommonJS-like environments where a proper 
window is present,
-               // execute the factory and get jQuery
-               // For environments that do not inherently posses a window with 
a document
-               // (such as Node.js), expose a jQuery-making factory as 
module.exports
-               // This accentuates the need for the creation of a real window
-               // e.g. var jQuery = require("jquery")(window);
-               // See ticket #14549 for more info
-               module.exports = global.document ?
-                       factory( global, true ) :
-                       function( w ) {
-                               if ( !w.document ) {
-                                       throw new Error( "jQuery requires a 
window with a document" );
-                               }
-                               return factory( w );
-                       };
-       } else {
-               factory( global );
-       }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
-
-var arr = [];
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
-       // Use the correct document accordingly with window argument (sandbox)
-       document = window.document,
-
-       version = "2.1.1",
-
-       // Define a local copy of jQuery
-       jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 
'enhanced'
-               // Need init if jQuery is called (just allow error to be thrown 
if not included)
-               return new jQuery.fn.init( selector, context );
-       },
-
-       // Support: Android<4.1
-       // Make sure we trim BOM and NBSP
-       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-       // Matches dashed string for camelizing
-       rmsPrefix = /^-ms-/,
-       rdashAlpha = /-([\da-z])/gi,
-
-       // Used by jQuery.camelCase as callback to replace()
-       fcamelCase = function( all, letter ) {
-               return letter.toUpperCase();
-       };
-
-jQuery.fn = jQuery.prototype = {
-       // The current version of jQuery being used
-       jquery: version,
-
-       constructor: jQuery,
-
-       // Start with an empty selector
-       selector: "",
-
-       // The default length of a jQuery object is 0
-       length: 0,
-
-       toArray: function() {
-               return slice.call( this );
-       },
-
-       // Get the Nth element in the matched element set OR
-       // Get the whole matched element set as a clean array
-       get: function( num ) {
-               return num != null ?
-
-                       // Return just the one element from the set
-                       ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
-                       // Return all the elements in a clean array
-                       slice.call( this );
-       },
-
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems ) {
-
-               // Build a new jQuery matched element set
-               var ret = jQuery.merge( this.constructor(), elems );
-
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
-               ret.context = this.context;
-
-               // Return the newly-formed element set
-               return ret;
-       },
-
-       // Execute a callback for every element in the matched set.
-       // (You can seed the arguments with an array of args, but this is
-       // only used internally.)
-       each: function( callback, args ) {
-               return jQuery.each( this, callback, args );
-       },
-
-       map: function( callback ) {
-               return this.pushStack( jQuery.map(this, function( elem, i ) {
-                       return callback.call( elem, i, elem );
-               }));
-       },
-
-       slice: function() {
-               return this.pushStack( slice.apply( this, arguments ) );
-       },
-
-       first: function() {
-               return this.eq( 0 );
-       },
-
-       last: function() {
-               return this.eq( -1 );
-       },
-
-       eq: function( i ) {
-               var len = this.length,
-                       j = +i + ( i < 0 ? len : 0 );
-               return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
-       },
-
-       end: function() {
-               return this.prevObject || this.constructor(null);
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: push,
-       sort: arr.sort,
-       splice: arr.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-       var options, name, src, copy, copyIsArray, clone,
-               target = arguments[0] || {},
-               i = 1,
-               length = arguments.length,
-               deep = false;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-
-               // skip the boolean and the target
-               target = arguments[ i ] || {};
-               i++;
-       }
-
-       // Handle case when target is a string or something (possible in deep 
copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-               target = {};
-       }
-
-       // extend jQuery itself if only one argument is passed
-       if ( i === length ) {
-               target = this;
-               i--;
-       }
-
-       for ( ; i < length; i++ ) {
-               // Only deal with non-null/undefined values
-               if ( (options = arguments[ i ]) != null ) {
-                       // Extend the base object
-                       for ( name in options ) {
-                               src = target[ name ];
-                               copy = options[ name ];
-
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
-
-                               // Recurse if we're merging plain objects or 
arrays
-                               if ( deep && copy && ( 
jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && 
jQuery.isArray(src) ? src : [];
-
-                                       } else {
-                                               clone = src && 
jQuery.isPlainObject(src) ? src : {};
-                                       }
-
-                                       // Never move original objects, clone 
them
-                                       target[ name ] = jQuery.extend( deep, 
clone, copy );
-
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
-                               }
-                       }
-               }
-       }
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend({
-       // Unique for each copy of jQuery on the page
-       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
-       // Assume jQuery is ready without the ready module
-       isReady: true,
-
-       error: function( msg ) {
-               throw new Error( msg );
-       },
-
-       noop: function() {},
-
-       // See test/unit/core.js for details concerning isFunction.
-       // Since version 1.3, DOM methods and functions like alert
-       // aren't supported. They return false on IE (#2968).
-       isFunction: function( obj ) {
-               return jQuery.type(obj) === "function";
-       },
-
-       isArray: Array.isArray,
-
-       isWindow: function( obj ) {
-               return obj != null && obj === obj.window;
-       },
-
-       isNumeric: function( obj ) {
-               // parseFloat NaNs numeric-cast false positives 
(null|true|false|"")
-               // ...but misinterprets leading-number strings, particularly 
hex literals ("0x...")
-               // subtraction forces infinities to NaN
-               return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
-       },
-
-       isPlainObject: function( obj ) {
-               // Not plain objects:
-               // - Any object or value whose internal [[Class]] property is 
not "[object Object]"
-               // - DOM nodes
-               // - window
-               if ( jQuery.type( obj ) !== "object" || obj.nodeType || 
jQuery.isWindow( obj ) ) {
-                       return false;
-               }
-
-               if ( obj.constructor &&
-                               !hasOwn.call( obj.constructor.prototype, 
"isPrototypeOf" ) ) {
-                       return false;
-               }
-
-               // If the function hasn't returned already, we're confident that
-               // |obj| is a plain object, created by {} or constructed with 
new Object
-               return true;
-       },
-
-       isEmptyObject: function( obj ) {
-               var name;
-               for ( name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-
-       type: function( obj ) {
-               if ( obj == null ) {
-                       return obj + "";
-               }
-               // Support: Android < 4.0, iOS < 6 (functionish RegExp)
-               return typeof obj === "object" || typeof obj === "function" ?
-                       class2type[ toString.call(obj) ] || "object" :
-                       typeof obj;
-       },
-
-       // Evaluates a script in a global context
-       globalEval: function( code ) {
-               var script,
-                       indirect = eval;
-
-               code = jQuery.trim( code );
-
-               if ( code ) {
-                       // If the code includes a valid, prologue position
-                       // strict mode pragma, execute code by injecting a
-                       // script tag into the document.
-                       if ( code.indexOf("use strict") === 1 ) {
-                               script = document.createElement("script");
-                               script.text = code;
-                               document.head.appendChild( script 
).parentNode.removeChild( script );
-                       } else {
-                       // Otherwise, avoid the DOM node creation, insertion
-                       // and removal by using an indirect global eval
-                               indirect( code );
-                       }
-               }
-       },
-
-       // Convert dashed to camelCase; used by the css and data modules
-       // Microsoft forgot to hump their vendor prefix (#9572)
-       camelCase: function( string ) {
-               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, 
fcamelCase );
-       },
-
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toLowerCase() === 
name.toLowerCase();
-       },
-
-       // args is for internal usage only
-       each: function( obj, callback, args ) {
-               var value,
-                       i = 0,
-                       length = obj.length,
-                       isArray = isArraylike( obj );
-
-               if ( args ) {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.apply( obj[ i ], args 
);
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.apply( obj[ i ], args 
);
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-
-               // A special, fast, case for the most common use of each
-               } else {
-                       if ( isArray ) {
-                               for ( ; i < length; i++ ) {
-                                       value = callback.call( obj[ i ], i, 
obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( i in obj ) {
-                                       value = callback.call( obj[ i ], i, 
obj[ i ] );
-
-                                       if ( value === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               return obj;
-       },
-
-       // Support: Android<4.1
-       trim: function( text ) {
-               return text == null ?
-                       "" :
-                       ( text + "" ).replace( rtrim, "" );
-       },
-
-       // results is for internal usage only
-       makeArray: function( arr, results ) {
-               var ret = results || [];
-
-               if ( arr != null ) {
-                       if ( isArraylike( Object(arr) ) ) {
-                               jQuery.merge( ret,
-                                       typeof arr === "string" ?
-                                       [ arr ] : arr
-                               );
-                       } else {
-                               push.call( ret, arr );
-                       }
-               }
-
-               return ret;
-       },
-
-       inArray: function( elem, arr, i ) {
-               return arr == null ? -1 : indexOf.call( arr, elem, i );
-       },
-
-       merge: function( first, second ) {
-               var len = +second.length,
-                       j = 0,
-                       i = first.length;
-
-               for ( ; j < len; j++ ) {
-                       first[ i++ ] = second[ j ];
-               }
-
-               first.length = i;
-
-               return first;
-       },
-
-       grep: function( elems, callback, invert ) {
-               var callbackInverse,
-                       matches = [],
-                       i = 0,
-                       length = elems.length,
-                       callbackExpect = !invert;
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( ; i < length; i++ ) {
-                       callbackInverse = !callback( elems[ i ], i );
-                       if ( callbackInverse !== callbackExpect ) {
-                               matches.push( elems[ i ] );
-                       }
-               }
-
-               return matches;
-       },
-
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var value,
-                       i = 0,
-                       length = elems.length,
-                       isArray = isArraylike( elems ),
-                       ret = [];
-
-               // Go through the array, translating each of the items to their 
new values
-               if ( isArray ) {
-                       for ( ; i < length; i++ ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret.push( value );
-                               }
-                       }
-
-               // Go through every key on the object,
-               } else {
-                       for ( i in elems ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret.push( value );
-                               }
-                       }
-               }
-
-               // Flatten any nested arrays
-               return concat.apply( [], ret );
-       },
-
-       // A global GUID counter for objects
-       guid: 1,
-
-       // Bind a function to a context, optionally partially applying any
-       // arguments.
-       proxy: function( fn, context ) {
-               var tmp, args, proxy;
-
-               if ( typeof context === "string" ) {
-                       tmp = fn[ context ];
-                       context = fn;
-                       fn = tmp;
-               }
-
-               // Quick check to determine if target is callable, in the spec
-               // this throws a TypeError, but we will just return undefined.
-               if ( !jQuery.isFunction( fn ) ) {
-                       return undefined;
-               }
-
-               // Simulated bind
-               args = slice.call( arguments, 2 );
-               proxy = function() {
-                       return fn.apply( context || this, args.concat( 
slice.call( arguments ) ) );
-               };
-
-               // Set the guid of unique handler to the same of original 
handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-               return proxy;
-       },
-
-       now: Date.now,
-
-       // jQuery.support is not used in Core but other projects attach their
-       // properties to it so it needs to exist.
-       support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object 
Error".split(" "), function(i, name) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
-       var length = obj.length,
-               type = jQuery.type( obj );
-
-       if ( type === "function" || jQuery.isWindow( obj ) ) {
-               return false;
-       }
-
-       if ( obj.nodeType === 1 && length ) {
-               return true;
-       }
-
-       return type === "array" || length === 0 ||
-               typeof length === "number" && length > 0 && ( length - 1 ) in 
obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
-(function( window ) {
-
-var i,
-       support,
-       Expr,
-       getText,
-       isXML,
-       tokenize,
-       compile,
-       select,
-       outermostContext,
-       sortInput,
-       hasDuplicate,
-
-       // Local document vars
-       setDocument,
-       document,
-       docElem,
-       documentIsHTML,
-       rbuggyQSA,
-       rbuggyMatches,
-       matches,
-       contains,
-
-       // Instance-specific data
-       expando = "sizzle" + -(new Date()),
-       preferredDoc = window.document,
-       dirruns = 0,
-       done = 0,
-       classCache = createCache(),
-       tokenCache = createCache(),
-       compilerCache = createCache(),
-       sortOrder = function( a, b ) {
-               if ( a === b ) {
-                       hasDuplicate = true;
-               }
-               return 0;
-       },
-
-       // General-purpose constants
-       strundefined = typeof undefined,
-       MAX_NEGATIVE = 1 << 31,
-
-       // Instance methods
-       hasOwn = ({}).hasOwnProperty,
-       arr = [],
-       pop = arr.pop,
-       push_native = arr.push,
-       push = arr.push,
-       slice = arr.slice,
-       // Use a stripped-down indexOf if we can't use a native one
-       indexOf = arr.indexOf || function( elem ) {
-               var i = 0,
-                       len = this.length;
-               for ( ; i < len; i++ ) {
-                       if ( this[i] === elem ) {
-                               return i;
-                       }
-               }
-               return -1;
-       },
-
-       booleans = 
"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-       // Regular expressions
-
-       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
-       whitespace = "[\\x20\\t\\r\\n\\f]",
-       // http://www.w3.org/TR/css3-syntax/#characters
-       characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-       // Loosely modeled on CSS identifier characters
-       // An unquoted value should be a CSS identifier 
http://www.w3.org/TR/css3-selectors/#attribute-selectors
-       // Proper syntax: 
http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-       identifier = characterEncoding.replace( "w", "w#" ),
-
-       // Attribute selectors: 
http://www.w3.org/TR/selectors/#attribute-selectors
-       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + 
whitespace +
-               // Operator (capture 2)
-               "*([*^$|!~]?=)" + whitespace +
-               // "Attribute values must be CSS identifiers [capture 5] or 
strings [capture 3 or capture 4]"
-               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + 
identifier + "))|)" + whitespace +
-               "*\\]",
-
-       pseudos = ":(" + characterEncoding + ")(?:\\((" +
-               // To reduce the number of selectors needing tokenize in the 
preFilter, prefer arguments:
-               // 1. quoted (capture 3; capture 4 or capture 5)
-               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-               // 2. simple (capture 6)
-               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-               // 3. anything else (capture 2)
-               ".*" +
-               ")\\)|)",
-
-       // Leading and non-escaped trailing whitespace, capturing some 
non-whitespace characters preceding the latter
-       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + 
whitespace + "+$", "g" ),
-
-       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + 
")" + whitespace + "*" ),
-
-       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + 
whitespace + "*\\]", "g" ),
-
-       rpseudo = new RegExp( pseudos ),
-       ridentifier = new RegExp( "^" + identifier + "$" ),
-
-       matchExpr = {
-               "ID": new RegExp( "^#(" + characterEncoding + ")" ),
-               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
-               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" 
) + ")" ),
-               "ATTR": new RegExp( "^" + attributes ),
-               "PSEUDO": new RegExp( "^" + pseudos ),
-               "CHILD": new RegExp( 
"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + 
"*(?:([+-]|)" + whitespace +
-                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-               // For use in libraries implementing .is()
-               // We use this for POS matching in `select`
-               "needsContext": new RegExp( "^" + whitespace + 
"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + 
"*\\)|)(?=[^-]|$)", "i" )
-       },
-
-       rinputs = /^(?:input|select|textarea|button)$/i,
-       rheader = /^h\d$/i,
-
-       rnative = /^[^{]+\{\s*\[native \w/,
-
-       // Easily-parseable/retrievable ID or TAG or CLASS selectors
-       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-       rsibling = /[+~]/,
-       rescape = /'|\\/g,
-
-       // CSS escapes 
http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + 
whitespace + ")|.)", "ig" ),
-       funescape = function( _, escaped, escapedWhitespace ) {
-               var high = "0x" + escaped - 0x10000;
-               // NaN means non-codepoint
-               // Support: Firefox<24
-               // Workaround erroneous numeric interpretation of +"0x"
-               return high !== high || escapedWhitespace ?
-                       escaped :
-                       high < 0 ?
-                               // BMP codepoint
-                               String.fromCharCode( high + 0x10000 ) :
-                               // Supplemental Plane codepoint (surrogate pair)
-                               String.fromCharCode( high >> 10 | 0xD800, high 
& 0x3FF | 0xDC00 );
-       };
-
-// Optimize for push.apply( _, NodeList )
-try {
-       push.apply(
-               (arr = slice.call( preferredDoc.childNodes )),
-               preferredDoc.childNodes
-       );
-       // Support: Android<4.0
-       // Detect silently failing push.apply
-       arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-       push = { apply: arr.length ?
-
-               // Leverage slice if possible
-               function( target, els ) {
-                       push_native.apply( target, slice.call(els) );
-               } :
-
-               // Support: IE<9
-               // Otherwise append directly
-               function( target, els ) {
-                       var j = target.length,
-                               i = 0;
-                       // Can't trust NodeList.length
-                       while ( (target[j++] = els[i++]) ) {}
-                       target.length = j - 1;
-               }
-       };
-}
-
-function Sizzle( selector, context, results, seed ) {
-       var match, elem, m, nodeType,
-               // QSA vars
-               i, groups, old, nid, newContext, newSelector;
-
-       if ( ( context ? context.ownerDocument || context : preferredDoc ) !== 
document ) {
-               setDocument( context );
-       }
-
-       context = context || document;
-       results = results || [];
-
-       if ( !selector || typeof selector !== "string" ) {
-               return results;
-       }
-
-       if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
-               return [];
-       }
-
-       if ( documentIsHTML && !seed ) {
-
-               // Shortcuts
-               if ( (match = rquickExpr.exec( selector )) ) {
-                       // Speed-up: Sizzle("#ID")
-                       if ( (m = match[1]) ) {
-                               if ( nodeType === 9 ) {
-                                       elem = context.getElementById( m );
-                                       // Check parentNode to catch when 
Blackberry 4.6 returns
-                                       // nodes that are no longer in the 
document (jQuery #6963)
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE, 
Opera, and Webkit return items
-                                               // by name instead of ID
-                                               if ( elem.id === m ) {
-                                                       results.push( elem );
-                                                       return results;
-                                               }
-                                       } else {
-                                               return results;
-                                       }
-                               } else {
-                                       // Context is not a document
-                                       if ( context.ownerDocument && (elem = 
context.ownerDocument.getElementById( m )) &&
-                                               contains( context, elem ) && 
elem.id === m ) {
-                                               results.push( elem );
-                                               return results;
-                                       }
-                               }
-
-                       // Speed-up: Sizzle("TAG")
-                       } else if ( match[2] ) {
-                               push.apply( results, 
context.getElementsByTagName( selector ) );
-                               return results;
-
-                       // Speed-up: Sizzle(".CLASS")
-                       } else if ( (m = match[3]) && 
support.getElementsByClassName && context.getElementsByClassName ) {
-                               push.apply( results, 
context.getElementsByClassName( m ) );
-                               return results;
-                       }
-               }
-
-               // QSA path
-               if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) 
) {
-                       nid = old = expando;
-                       newContext = context;
-                       newSelector = nodeType === 9 && selector;
-
-                       // qSA works strangely on Element-rooted queries
-                       // We can work around this by specifying an extra ID on 
the root
-                       // and working up from there (Thanks to Andrew Dupont 
for the technique)
-                       // IE 8 doesn't work on object elements
-                       if ( nodeType === 1 && context.nodeName.toLowerCase() 
!== "object" ) {
-                               groups = tokenize( selector );
-
-                               if ( (old = context.getAttribute("id")) ) {
-                                       nid = old.replace( rescape, "\\$&" );
-                               } else {
-                                       context.setAttribute( "id", nid );
-                               }
-                               nid = "[id='" + nid + "'] ";
-
-                               i = groups.length;
-                               while ( i-- ) {
-                                       groups[i] = nid + toSelector( groups[i] 
);
-                               }
-                               newContext = rsibling.test( selector ) && 
testContext( context.parentNode ) || context;
-                               newSelector = groups.join(",");
-                       }
-
-                       if ( newSelector ) {
-                               try {
-                                       push.apply( results,
-                                               newContext.querySelectorAll( 
newSelector )
-                                       );
-                                       return results;
-                               } catch(qsaError) {
-                               } finally {
-                                       if ( !old ) {
-                                               context.removeAttribute("id");
-                                       }
-                               }
-                       }
-               }
-       }
-
-       // All others
-       return select( selector.replace( rtrim, "$1" ), context, results, seed 
);
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing 
it on itself with
- *     property name the (space-suffixed) string and (if the cache is larger 
than Expr.cacheLength)
- *     deleting the oldest entry
- */
-function createCache() {
-       var keys = [];
-
-       function cache( key, value ) {
-               // Use (key + " ") to avoid collision with native prototype 
properties (see Issue #157)
-               if ( keys.push( key + " " ) > Expr.cacheLength ) {
-                       // Only keep the most recent entries
-                       delete cache[ keys.shift() ];
-               }
-               return (cache[ key + " " ] = value);
-       }
-       return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-       fn[ expando ] = true;
-       return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
-       var div = document.createElement("div");
-
-       try {
-               return !!fn( div );
-       } catch (e) {
-               return false;
-       } finally {
-               // Remove from its parent by default
-               if ( div.parentNode ) {
-                       div.parentNode.removeChild( div );
-               }
-               // release memory in IE
-               div = null;
-       }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
-       var arr = attrs.split("|"),
-               i = attrs.length;
-
-       while ( i-- ) {
-               Expr.attrHandle[ arr[i] ] = handler;
-       }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a 
follows b
- */
-function siblingCheck( a, b ) {
-       var cur = b && a,
-               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-                       ( ~b.sourceIndex || MAX_NEGATIVE ) -
-                       ( ~a.sourceIndex || MAX_NEGATIVE );
-
-       // Use IE sourceIndex if available on both nodes
-       if ( diff ) {
-               return diff;
-       }
-
-       // Check if b follows a
-       if ( cur ) {
-               while ( (cur = cur.nextSibling) ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-               }
-       }
-
-       return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return name === "input" && elem.type === type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return (name === "input" || name === "button") && elem.type === 
type;
-       };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-       return markFunction(function( argument ) {
-               argument = +argument;
-               return markFunction(function( seed, matches ) {
-                       var j,
-                               matchIndexes = fn( [], seed.length, argument ),
-                               i = matchIndexes.length;
-
-                       // Match elements found at the specified indexes
-                       while ( i-- ) {
-                               if ( seed[ (j = matchIndexes[i]) ] ) {
-                                       seed[j] = !(matches[j] = seed[j]);
-                               }
-                       }
-               });
-       });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a 
falsy value
- */
-function testContext( context ) {
-       return context && typeof context.getElementsByTagName !== strundefined 
&& context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833)
-       var documentElement = elem && (elem.ownerDocument || 
elem).documentElement;
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set 
the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-       var hasCompare,
-               doc = node ? node.ownerDocument || node : preferredDoc,
-               parent = doc.defaultView;
-
-       // If no document and documentElement is available, return
-       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-               return document;
-       }
-
-       // Set our document
-       document = doc;
-       docElem = doc.documentElement;
-
-       // Support tests
-       documentIsHTML = !isXML( doc );
-
-       // Support: IE>8
-       // If iframe document is assigned to "document" variable and if iframe 
has been reloaded,
-       // IE will throw "permission denied" error when accessing "document" 
variable, see jQuery #13936
-       // IE6-8 do not support the defaultView property so parent will be 
undefined
-       if ( parent && parent !== parent.top ) {
-               // IE11 does not have attachEvent, so all must suffer
-               if ( parent.addEventListener ) {
-                       parent.addEventListener( "unload", function() {
-                               setDocument();
-                       }, false );
-               } else if ( parent.attachEvent ) {
-                       parent.attachEvent( "onunload", function() {
-                               setDocument();
-                       });
-               }
-       }
-
-       /* Attributes
-       ---------------------------------------------------------------------- 
*/
-
-       // Support: IE<8
-       // Verify that getAttribute really returns attributes and not 
properties (excepting IE8 booleans)
-       support.attributes = assert(function( div ) {
-               div.className = "i";
-               return !div.getAttribute("className");
-       });
-
-       /* getElement(s)By*
-       ---------------------------------------------------------------------- 
*/
-
-       // Check if getElementsByTagName("*") returns only elements
-       support.getElementsByTagName = assert(function( div ) {
-               div.appendChild( doc.createComment("") );
-               return !div.getElementsByTagName("*").length;
-       });
-
-       // Check if getElementsByClassName can be trusted
-       support.getElementsByClassName = rnative.test( 
doc.getElementsByClassName ) && assert(function( div ) {
-               div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
-               // Support: Safari<4
-               // Catch class over-caching
-               div.firstChild.className = "i";
-               // Support: Opera<10
-               // Catch gEBCN failure to find non-leading classes
-               return div.getElementsByClassName("i").length === 2;
-       });
-
-       // Support: IE<10
-       // Check if getElementById returns elements by name
-       // The broken getElementById methods don't pick up programatically-set 
names,
-       // so use a roundabout getElementsByName test
-       support.getById = assert(function( div ) {
-               docElem.appendChild( div ).id = expando;
-               return !doc.getElementsByName || !doc.getElementsByName( 
expando ).length;
-       });
-
-       // ID find and filter
-       if ( support.getById ) {
-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== strundefined && 
documentIsHTML ) {
-                               var m = context.getElementById( id );
-                               // Check parentNode to catch when Blackberry 
4.6 returns
-                               // nodes that are no longer in the document 
#6963
-                               return m && m.parentNode ? [ m ] : [];
-                       }
-               };
-               Expr.filter["ID"] = function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               return elem.getAttribute("id") === attrId;
-                       };
-               };
-       } else {
-               // Support: IE6/7
-               // getElementById is not reliable as a find shortcut
-               delete Expr.find["ID"];
-
-               Expr.filter["ID"] =  function( id ) {
-                       var attrId = id.replace( runescape, funescape );
-                       return function( elem ) {
-                               var node = typeof elem.getAttributeNode !== 
strundefined && elem.getAttributeNode("id");
-                               return node && node.value === attrId;
-                       };
-               };
-       }
-
-       // Tag
-       Expr.find["TAG"] = support.getElementsByTagName ?
-               function( tag, context ) {
-                       if ( typeof context.getElementsByTagName !== 
strundefined ) {
-                               return context.getElementsByTagName( tag );
-                       }
-               } :
-               function( tag, context ) {
-                       var elem,
-                               tmp = [],
-                               i = 0,
-                               results = context.getElementsByTagName( tag );
-
-                       // Filter out possible comments
-                       if ( tag === "*" ) {
-                               while ( (elem = results[i++]) ) {
-                                       if ( elem.nodeType === 1 ) {
-                                               tmp.push( elem );
-                                       }
-                               }
-
-                               return tmp;
-                       }
-                       return results;
-               };
-
-       // Class
-       Expr.find["CLASS"] = support.getElementsByClassName && function( 
className, context ) {
-               if ( typeof context.getElementsByClassName !== strundefined && 
documentIsHTML ) {
-                       return context.getElementsByClassName( className );
-               }
-       };
-
-       /* QSA/matchesSelector
-       ---------------------------------------------------------------------- 
*/
-
-       // QSA and matchesSelector support
-
-       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-       rbuggyMatches = [];
-
-       // qSa(:focus) reports false when true (Chrome 21)
-       // We allow this because of a bug in IE8/9 that throws an error
-       // whenever `document.activeElement` is accessed on an iframe
-       // So, we allow :focus to pass through QSA all the time to avoid the IE 
error
-       // See http://bugs.jquery.com/ticket/13378
-       rbuggyQSA = [];
-
-       if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
-               // Build QSA regex
-               // Regex strategy adopted from Diego Perini
-               assert(function( div ) {
-                       // Select is set to empty string on purpose
-                       // This is to test IE's treatment of not explicitly
-                       // setting a boolean content attribute,
-                       // since its presence should be enough
-                       // http://bugs.jquery.com/ticket/12359
-                       div.innerHTML = "<select msallowclip=''><option 
selected=''></option></select>";
-
-                       // Support: IE8, Opera 11-12.16
-                       // Nothing should be selected when empty strings follow 
^= or $= or *=
-                       // The test attribute must be unknown in Opera but 
"safe" for WinRT
-                       // 
http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-                       if ( div.querySelectorAll("[msallowclip^='']").length ) 
{
-                               rbuggyQSA.push( "[*^$]=" + whitespace + 
"*(?:''|\"\")" );
-                       }
-
-                       // Support: IE8
-                       // Boolean attributes and "value" are not treated 
correctly
-                       if ( !div.querySelectorAll("[selected]").length ) {
-                               rbuggyQSA.push( "\\[" + whitespace + 
"*(?:value|" + booleans + ")" );
-                       }
-
-                       // Webkit/Opera - :checked should return selected 
option elements
-                       // 
http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":checked").length ) {
-                               rbuggyQSA.push(":checked");
-                       }
-               });
-
-               assert(function( div ) {
-                       // Support: Windows 8 Native Apps
-                       // The type and name attributes are restricted during 
.innerHTML assignment
-                       var input = doc.createElement("input");
-                       input.setAttribute( "type", "hidden" );
-                       div.appendChild( input ).setAttribute( "name", "D" );
-
-                       // Support: IE8
-                       // Enforce case-sensitivity of name attribute
-                       if ( div.querySelectorAll("[name=d]").length ) {
-                               rbuggyQSA.push( "name" + whitespace + 
"*[*^$|!~]?=" );
-                       }
-
-                       // FF 3.5 - :enabled/:disabled and hidden elements 
(hidden elements are still enabled)
-                       // IE8 throws error here and will not see later tests
-                       if ( !div.querySelectorAll(":enabled").length ) {
-                               rbuggyQSA.push( ":enabled", ":disabled" );
-                       }
-
-                       // Opera 10-11 does not throw on post-comma invalid 
pseudos
-                       div.querySelectorAll("*,:x");
-                       rbuggyQSA.push(",.*:");
-               });
-       }
-
-       if ( (support.matchesSelector = rnative.test( (matches = 
docElem.matches ||
-               docElem.webkitMatchesSelector ||
-               docElem.mozMatchesSelector ||
-               docElem.oMatchesSelector ||
-               docElem.msMatchesSelector) )) ) {
-
-               assert(function( div ) {
-                       // Check to see if it's possible to do matchesSelector
-                       // on a disconnected node (IE 9)
-                       support.disconnectedMatch = matches.call( div, "div" );
-
-                       // This should fail with an exception
-                       // Gecko does not error, returns false instead
-                       matches.call( div, "[s!='']:x" );
-                       rbuggyMatches.push( "!=", pseudos );
-               });
-       }
-
-       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-       rbuggyMatches = rbuggyMatches.length && new RegExp( 
rbuggyMatches.join("|") );
-
-       /* Contains
-       ---------------------------------------------------------------------- 
*/
-       hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-       // Element contains another
-       // Purposefully does not implement inclusive descendent
-       // As in, an element does not contain itself
-       contains = hasCompare || rnative.test( docElem.contains ) ?
-               function( a, b ) {
-                       var adown = a.nodeType === 9 ? a.documentElement : a,
-                               bup = b && b.parentNode;
-                       return a === bup || !!( bup && bup.nodeType === 1 && (
-                               adown.contains ?
-                                       adown.contains( bup ) :
-                                       a.compareDocumentPosition && 
a.compareDocumentPosition( bup ) & 16
-                       ));
-               } :
-               function( a, b ) {
-                       if ( b ) {
-                               while ( (b = b.parentNode) ) {
-                                       if ( b === a ) {
-                                               return true;
-                                       }
-                               }
-                       }
-                       return false;
-               };
-
-       /* Sorting
-       ---------------------------------------------------------------------- 
*/
-
-       // Document order sorting
-       sortOrder = hasCompare ?
-       function( a, b ) {
-
-               // Flag for duplicate removal
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               // Sort on method existence if only one input has 
compareDocumentPosition
-               var compare = !a.compareDocumentPosition - 
!b.compareDocumentPosition;
-               if ( compare ) {
-                       return compare;
-               }
-
-               // Calculate position if both inputs belong to the same document
-               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) 
?
-                       a.compareDocumentPosition( b ) :
-
-                       // Otherwise we know they are disconnected
-                       1;
-
-               // Disconnected nodes
-               if ( compare & 1 ||
-                       (!support.sortDetached && b.compareDocumentPosition( a 
) === compare) ) {
-
-                       // Choose the first element that is related to our 
preferred document
-                       if ( a === doc || a.ownerDocument === preferredDoc && 
contains(preferredDoc, a) ) {
-                               return -1;
-                       }
-                       if ( b === doc || b.ownerDocument === preferredDoc && 
contains(preferredDoc, b) ) {
-                               return 1;
-                       }
-
-                       // Maintain original order
-                       return sortInput ?
-                               ( indexOf.call( sortInput, a ) - indexOf.call( 
sortInput, b ) ) :
-                               0;
-               }
-
-               return compare & 4 ? -1 : 1;
-       } :
-       function( a, b ) {
-               // Exit early if the nodes are identical
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               var cur,
-                       i = 0,
-                       aup = a.parentNode,
-                       bup = b.parentNode,
-                       ap = [ a ],
-                       bp = [ b ];
-
-               // Parentless nodes are either documents or disconnected
-               if ( !aup || !bup ) {
-                       return a === doc ? -1 :
-                               b === doc ? 1 :
-                               aup ? -1 :
-                               bup ? 1 :
-                               sortInput ?
-                               ( indexOf.call( sortInput, a ) - indexOf.call( 
sortInput, b ) ) :
-                               0;
-
-               // If the nodes are siblings, we can do a quick check
-               } else if ( aup === bup ) {
-                       return siblingCheck( a, b );
-               }
-
-               // Otherwise we need full lists of their ancestors for 
comparison
-               cur = a;
-               while ( (cur = cur.parentNode) ) {
-                       ap.unshift( cur );
-               }
-               cur = b;
-               while ( (cur = cur.parentNode) ) {
-                       bp.unshift( cur );
-               }
-
-               // Walk down the tree looking for a discrepancy
-               while ( ap[i] === bp[i] ) {
-                       i++;
-               }
-
-               return i ?
-                       // Do a sibling check if the nodes have a common 
ancestor
-                       siblingCheck( ap[i], bp[i] ) :
-
-                       // Otherwise nodes in our document sort first
-                       ap[i] === preferredDoc ? -1 :
-                       bp[i] === preferredDoc ? 1 :
-                       0;
-       };
-
-       return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
-       return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       // Make sure that attribute selectors are quoted
-       expr = expr.replace( rattributeQuotes, "='$1']" );
-
-       if ( support.matchesSelector && documentIsHTML &&
-               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-               try {
-                       var ret = matches.call( elem, expr );
-
-                       // IE 9's matchesSelector returns false on disconnected 
nodes
-                       if ( ret || support.disconnectedMatch ||
-                                       // As well, disconnected nodes are said 
to be in a document
-                                       // fragment in IE 9
-                                       elem.document && elem.document.nodeType 
!== 11 ) {
-                               return ret;
-                       }
-               } catch(e) {}
-       }
-
-       return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-       // Set document vars if needed
-       if ( ( context.ownerDocument || context ) !== document ) {
-               setDocument( context );
-       }
-       return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-       // Set document vars if needed
-       if ( ( elem.ownerDocument || elem ) !== document ) {
-               setDocument( elem );
-       }
-
-       var fn = Expr.attrHandle[ name.toLowerCase() ],
-               // Don't get fooled by Object.prototype properties (jQuery 
#13807)
-               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-                       fn( elem, name, !documentIsHTML ) :
-                       undefined;
-
-       return val !== undefined ?
-               val :
-               support.attributes || !documentIsHTML ?
-                       elem.getAttribute( name ) :
-                       (val = elem.getAttributeNode(name)) && val.specified ?
-                               val.value :
-                               null;
-};
-
-Sizzle.error = function( msg ) {
-       throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-       var elem,
-               duplicates = [],
-               j = 0,
-               i = 0;
-
-       // Unless we *know* we can detect duplicates, assume their presence
-       hasDuplicate = !support.detectDuplicates;
-       sortInput = !support.sortStable && results.slice( 0 );
-       results.sort( sortOrder );
-
-       if ( hasDuplicate ) {
-               while ( (elem = results[i++]) ) {
-                       if ( elem === results[ i ] ) {
-                               j = duplicates.push( i );
-                       }
-               }
-               while ( j-- ) {
-                       results.splice( duplicates[ j ], 1 );
-               }
-       }
-
-       // Clear input after sorting to release objects
-       // See https://github.com/jquery/sizzle/pull/225
-       sortInput = null;
-
-       return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-       var node,
-               ret = "",
-               i = 0,
-               nodeType = elem.nodeType;
-
-       if ( !nodeType ) {
-               // If no nodeType, this is expected to be an array
-               while ( (node = elem[i++]) ) {
-                       // Do not traverse comment nodes
-                       ret += getText( node );
-               }
-       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-               // Use textContent for elements
-               // innerText usage removed for consistency of new lines (jQuery 
#11153)
-               if ( typeof elem.textContent === "string" ) {
-                       return elem.textContent;
-               } else {
-                       // Traverse its children
-                       for ( elem = elem.firstChild; elem; elem = 
elem.nextSibling ) {
-                               ret += getText( elem );
-                       }
-               }
-       } else if ( nodeType === 3 || nodeType === 4 ) {
-               return elem.nodeValue;
-       }
-       // Do not include comment or processing instruction nodes
-
-       return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-       // Can be adjusted by the user
-       cacheLength: 50,
-
-       createPseudo: markFunction,
-
-       match: matchExpr,
-
-       attrHandle: {},
-
-       find: {},
-
-       relative: {
-               ">": { dir: "parentNode", first: true },
-               " ": { dir: "parentNode" },
-               "+": { dir: "previousSibling", first: true },
-               "~": { dir: "previousSibling" }
-       },
-
-       preFilter: {
-               "ATTR": function( match ) {
-                       match[1] = match[1].replace( runescape, funescape );
-
-                       // Move the given value to match[3] whether quoted or 
unquoted
-                       match[3] = ( match[3] || match[4] || match[5] || "" 
).replace( runescape, funescape );
-
-                       if ( match[2] === "~=" ) {
-                               match[3] = " " + match[3] + " ";
-                       }
-
-                       return match.slice( 0, 4 );
-               },
-
-               "CHILD": function( match ) {
-                       /* matches from matchExpr["CHILD"]
-                               1 type (only|nth|...)
-                               2 what (child|of-type)
-                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-                               4 xn-component of xn+y argument ([+-]?\d*n|)
-                               5 sign of xn-component
-                               6 x of xn-component
-                               7 sign of y-component
-                               8 y of y-component
-                       */
-                       match[1] = match[1].toLowerCase();
-
-                       if ( match[1].slice( 0, 3 ) === "nth" ) {
-                               // nth-* requires argument
-                               if ( !match[3] ) {
-                                       Sizzle.error( match[0] );
-                               }
-
-                               // numeric x and y parameters for 
Expr.filter.CHILD
-                               // remember that false/true cast respectively 
to 0/1
-                               match[4] = +( match[4] ? match[5] + (match[6] 
|| 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-                               match[5] = +( ( match[7] + match[8] ) || 
match[3] === "odd" );
-
-                       // other types prohibit arguments
-                       } else if ( match[3] ) {
-                               Sizzle.error( match[0] );
-                       }
-
-                       return match;
-               },
-
-               "PSEUDO": function( match ) {
-                       var excess,
-                               unquoted = !match[6] && match[2];
-
-                       if ( matchExpr["CHILD"].test( match[0] ) ) {
-                               return null;
-                       }
-
-                       // Accept quoted arguments as-is
-                       if ( match[3] ) {
-                               match[2] = match[4] || match[5] || "";
-
-                       // Strip excess characters from unquoted arguments
-                       } else if ( unquoted && rpseudo.test( unquoted ) &&
-                               // Get excess from tokenize (recursively)
-                               (excess = tokenize( unquoted, true )) &&
-                               // advance to the next closing parenthesis
-                               (excess = unquoted.indexOf( ")", 
unquoted.length - excess ) - unquoted.length) ) {
-
-                               // excess is a negative index
-                               match[0] = match[0].slice( 0, excess );
-                               match[2] = unquoted.slice( 0, excess );
-                       }
-
-                       // Return only captures needed by the pseudo filter 
method (type and argument)
-                       return match.slice( 0, 3 );
-               }
-       },
-
-       filter: {
-
-               "TAG": function( nodeNameSelector ) {
-                       var nodeName = nodeNameSelector.replace( runescape, 
funescape ).toLowerCase();
-                       return nodeNameSelector === "*" ?
-                               function() { return true; } :
-                               function( elem ) {
-                                       return elem.nodeName && 
elem.nodeName.toLowerCase() === nodeName;
-                               };
-               },
-
-               "CLASS": function( className ) {
-                       var pattern = classCache[ className + " " ];
-
-                       return pattern ||
-                               (pattern = new RegExp( "(^|" + whitespace + ")" 
+ className + "(" + whitespace + "|$)" )) &&
-                               classCache( className, function( elem ) {
-                                       return pattern.test( typeof 
elem.className === "string" && elem.className || typeof elem.getAttribute !== 
strundefined && elem.getAttribute("class") || "" );
-                               });
-               },
-
-               "ATTR": function( name, operator, check ) {
-                       return function( elem ) {
-                               var result = Sizzle.attr( elem, name );
-
-                               if ( result == null ) {
-                                       return operator === "!=";
-                               }
-                               if ( !operator ) {
-                                       return true;
-                               }
-
-                               result += "";
-
-                               return operator === "=" ? result === check :
-                                       operator === "!=" ? result !== check :
-                                       operator === "^=" ? check && 
result.indexOf( check ) === 0 :
-                                       operator === "*=" ? check && 
result.indexOf( check ) > -1 :
-                                       operator === "$=" ? check && 
result.slice( -check.length ) === check :
-                                       operator === "~=" ? ( " " + result + " 
" ).indexOf( check ) > -1 :
-                                       operator === "|=" ? result === check || 
result.slice( 0, check.length + 1 ) === check + "-" :
-                                       false;
-                       };
-               },
-
-               "CHILD": function( type, what, argument, first, last ) {
-                       var simple = type.slice( 0, 3 ) !== "nth",
-                               forward = type.slice( -4 ) !== "last",
-                               ofType = what === "of-type";
-
-                       return first === 1 && last === 0 ?
-
-                               // Shortcut for :nth-*(n)
-                               function( elem ) {
-                                       return !!elem.parentNode;
-                               } :
-
-                               function( elem, context, xml ) {
-                                       var cache, outerCache, node, diff, 
nodeIndex, start,
-                                               dir = simple !== forward ? 
"nextSibling" : "previousSibling",
-                                               parent = elem.parentNode,
-                                               name = ofType && 
elem.nodeName.toLowerCase(),
-                                               useCache = !xml && !ofType;
-
-                                       if ( parent ) {
-
-                                               // 
:(first|last|only)-(child|of-type)
-                                               if ( simple ) {
-                                                       while ( dir ) {
-                                                               node = elem;
-                                                               while ( (node = 
node[ dir ]) ) {
-                                                                       if ( 
ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
-                                                                               
return false;
-                                                                       }
-                                                               }
-                                                               // Reverse 
direction for :only-* (if we haven't yet done so)
-                                                               start = dir = 
type === "only" && !start && "nextSibling";
-                                                       }
-                                                       return true;
-                                               }
-
-                                               start = [ forward ? 
parent.firstChild : parent.lastChild ];
-
-                                               // non-xml :nth-child(...) 
stores cache data on `parent`
-                                               if ( forward && useCache ) {
-                                                       // Seek `elem` from a 
previously-cached index
-                                                       outerCache = parent[ 
expando ] || (parent[ expando ] = {});
-                                                       cache = outerCache[ 
type ] || [];
-                                                       nodeIndex = cache[0] 
=== dirruns && cache[1];
-                                                       diff = cache[0] === 
dirruns && cache[2];
-                                                       node = nodeIndex && 
parent.childNodes[ nodeIndex ];
-
-                                                       while ( (node = 
++nodeIndex && node && node[ dir ] ||
-
-                                                               // Fallback to 
seeking `elem` from the start
-                                                               (diff = 
nodeIndex = 0) || start.pop()) ) {
-
-                                                               // When found, 
cache indexes on `parent` and break
-                                                               if ( 
node.nodeType === 1 && ++diff && node === elem ) {
-                                                                       
outerCache[ type ] = [ dirruns, nodeIndex, diff ];
-                                                                       break;
-                                                               }
-                                                       }
-
-                                               // Use previously-cached 
element index if available
-                                               } else if ( useCache && (cache 
= (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns 
) {
-                                                       diff = cache[1];
-
-                                               // xml :nth-child(...) or 
:nth-last-child(...) or :nth(-last)?-of-type(...)
-                                               } else {
-                                                       // Use the same loop as 
above to seek `elem` from the start
-                                                       while ( (node = 
++nodeIndex && node && node[ dir ] ||
-                                                               (diff = 
nodeIndex = 0) || start.pop()) ) {
-
-                                                               if ( ( ofType ? 
node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
-                                                                       // 
Cache the index of each encountered element
-                                                                       if ( 
useCache ) {
-                                                                               
(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
-                                                                       }
-
-                                                                       if ( 
node === elem ) {
-                                                                               
break;
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-
-                                               // Incorporate the offset, then 
check against cycle size
-                                               diff -= last;
-                                               return diff === first || ( diff 
% first === 0 && diff / first >= 0 );
-                                       }
-                               };
-               },
-
-               "PSEUDO": function( pseudo, argument ) {
-                       // pseudo-class names are case-insensitive
-                       // http://www.w3.org/TR/selectors/#pseudo-classes
-                       // Prioritize by case sensitivity in case custom 
pseudos are added with uppercase letters
-                       // Remember that setFilters inherits from pseudos
-                       var args,
-                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ 
pseudo.toLowerCase() ] ||
-                                       Sizzle.error( "unsupported pseudo: " + 
pseudo );
-
-                       // The user may use createPseudo to indicate that
-                       // arguments are needed to create the filter function
-                       // just as Sizzle does
-                       if ( fn[ expando ] ) {
-                               return fn( argument );
-                       }
-
-                       // But maintain support for old signatures
-                       if ( fn.length > 1 ) {
-                               args = [ pseudo, pseudo, "", argument ];
-                               return Expr.setFilters.hasOwnProperty( 
pseudo.toLowerCase() ) ?
-                                       markFunction(function( seed, matches ) {
-                                               var idx,
-                                                       matched = fn( seed, 
argument ),
-                                                       i = matched.length;
-                                               while ( i-- ) {
-                                                       idx = indexOf.call( 
seed, matched[i] );
-                                                       seed[ idx ] = !( 
matches[ idx ] = matched[i] );
-                                               }
-                                       }) :
-                                       function( elem ) {
-                                               return fn( elem, 0, args );
-                                       };
-                       }
-
-                       return fn;
-               }
-       },
-
-       pseudos: {
-               // Potentially complex pseudos
-               "not": markFunction(function( selector ) {
-                       // Trim the selector passed to compile
-                       // to avoid treating leading and trailing
-                       // spaces as combinators
-                       var input = [],
-                               results = [],
-                               matcher = compile( selector.replace( rtrim, 
"$1" ) );
-
-                       return matcher[ expando ] ?
-                               markFunction(function( seed, matches, context, 
xml ) {
-                                       var elem,
-                                               unmatched = matcher( seed, 
null, xml, [] ),
-                                               i = seed.length;
-
-                                       // Match elements unmatched by `matcher`
-                                       while ( i-- ) {
-                                               if ( (elem = unmatched[i]) ) {
-                                                       seed[i] = !(matches[i] 
= elem);
-                                               }
-                                       }
-                               }) :
-                               function( elem, context, xml ) {
-                                       input[0] = elem;
-                                       matcher( input, null, xml, results );
-                                       return !results.pop();
-                               };
-               }),
-
-               "has": markFunction(function( selector ) {
-                       return function( elem ) {
-                               return Sizzle( selector, elem ).length > 0;
-                       };
-               }),
-
-               "contains": markFunction(function( text ) {
-                       return function( elem ) {
-                               return ( elem.textContent || elem.innerText || 
getText( elem ) ).indexOf( text ) > -1;
-                       };
-               }),
-
-               // "Whether an element is represented by a :lang() selector
-               // is based solely on the element's language value
-               // being equal to the identifier C,
-               // or beginning with the identifier C immediately followed by 
"-".
-               // The matching of C against the element's language value is 
performed case-insensitively.
-               // The identifier C does not have to be a valid language name."
-               // http://www.w3.org/TR/selectors/#lang-pseudo
-               "lang": markFunction( function( lang ) {
-                       // lang value must be a valid identifier
-                       if ( !ridentifier.test(lang || "") ) {
-                               Sizzle.error( "unsupported lang: " + lang );
-                       }
-                       lang = lang.replace( runescape, funescape 
).toLowerCase();
-                       return function( elem ) {
-                               var elemLang;
-                               do {
-                                       if ( (elemLang = documentIsHTML ?
-                                               elem.lang :
-                                               elem.getAttribute("xml:lang") 
|| elem.getAttribute("lang")) ) {
-
-                                               elemLang = 
elemLang.toLowerCase();
-                                               return elemLang === lang || 
elemLang.indexOf( lang + "-" ) === 0;
-                                       }
-                               } while ( (elem = elem.parentNode) && 
elem.nodeType === 1 );
-                               return false;
-                       };
-               }),
-
-               // Miscellaneous
-               "target": function( elem ) {
-                       var hash = window.location && window.location.hash;
-                       return hash && hash.slice( 1 ) === elem.id;
-               },
-
-               "root": function( elem ) {
-                       return elem === docElem;
-               },
-
-               "focus": function( elem ) {
-                       return elem === document.activeElement && 
(!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || 
~elem.tabIndex);
-               },
-
-               // Boolean properties
-               "enabled": function( elem ) {
-                       return elem.disabled === false;
-               },
-
-               "disabled": function( elem ) {
-                       return elem.disabled === true;
-               },
-
-               "checked": function( elem ) {
-                       // In CSS3, :checked should return both checked and 
selected elements
-                       // 
http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-                       var nodeName = elem.nodeName.toLowerCase();
-                       return (nodeName === "input" && !!elem.checked) || 
(nodeName === "option" && !!elem.selected);
-               },
-
-               "selected": function( elem ) {
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       if ( elem.parentNode ) {
-                               elem.parentNode.selectedIndex;
-                       }
-
-                       return elem.selected === true;
-               },
-
-               // Contents
-               "empty": function( elem ) {
-                       // http://www.w3.org/TR/selectors/#empty-pseudo
-                       // :empty is negated by element (1) or content nodes 
(text: 3; cdata: 4; entity ref: 5),
-                       //   but not by others (comment: 8; processing 
instruction: 7; etc.)
-                       // nodeType < 6 works because attributes (2) do not 
appear as children
-                       for ( elem = elem.firstChild; elem; elem = 
elem.nextSibling ) {
-                               if ( elem.nodeType < 6 ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               },
-
-               "parent": function( elem ) {
-                       return !Expr.pseudos["empty"]( elem );
-               },
-
-               // Element/input types
-               "header": function( elem ) {
-                       return rheader.test( elem.nodeName );
-               },
-
-               "input": function( elem ) {
-                       return rinputs.test( elem.nodeName );
-               },
-
-               "button": function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return name === "input" && elem.type === "button" || 
name === "button";
-               },
-
-               "text": function( elem ) {
-                       var attr;
-                       return elem.nodeName.toLowerCase() === "input" &&
-                               elem.type === "text" &&
-
-                               // Support: IE<8
-                               // New HTML5 attribute values (e.g., "search") 
appear with elem.type === "text"
-                               ( (attr = elem.getAttribute("type")) == null || 
attr.toLowerCase() === "text" );
-               },
-
-               // Position-in-collection
-               "first": createPositionalPseudo(function() {
-                       return [ 0 ];
-               }),
-
-               "last": createPositionalPseudo(function( matchIndexes, length ) 
{
-                       return [ length - 1 ];
-               }),
-
-               "eq": createPositionalPseudo(function( matchIndexes, length, 
argument ) {
-                       return [ argument < 0 ? argument + length : argument ];
-               }),
-
-               "even": createPositionalPseudo(function( matchIndexes, length ) 
{
-                       var i = 0;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "odd": createPositionalPseudo(function( matchIndexes, length ) {
-                       var i = 1;
-                       for ( ; i < length; i += 2 ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "lt": createPositionalPseudo(function( matchIndexes, length, 
argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; --i >= 0; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               }),
-
-               "gt": createPositionalPseudo(function( matchIndexes, length, 
argument ) {
-                       var i = argument < 0 ? argument + length : argument;
-                       for ( ; ++i < length; ) {
-                               matchIndexes.push( i );
-                       }
-                       return matchIndexes;
-               })
-       }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: 
true } ) {
-       Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-       Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
-       var matched, match, tokens, type,
-               soFar, groups, preFilters,
-               cached = tokenCache[ selector + " " ];
-
-       if ( cached ) {
-               return parseOnly ? 0 : cached.slice( 0 );
-       }
-
-       soFar = selector;
-       groups = [];
-       preFilters = Expr.preFilter;
-
-       while ( soFar ) {
-
-               // Comma and first run
-               if ( !matched || (match = rcomma.exec( soFar )) ) {
-                       if ( match ) {
-                               // Don't consume trailing commas as valid
-                               soFar = soFar.slice( match[0].length ) || soFar;
-                       }
-                       groups.push( (tokens = []) );
-               }
-
-               matched = false;
-
-               // Combinators
-               if ( (match = rcombinators.exec( soFar )) ) {
-                       matched = match.shift();
-                       tokens.push({
-                               value: matched,
-                               // Cast descendant combinators to space
-                               type: match[0].replace( rtrim, " " )
-                       });
-                       soFar = soFar.slice( matched.length );
-               }
-
-               // Filters
-               for ( type in Expr.filter ) {
-                       if ( (match = matchExpr[ type ].exec( soFar )) && 
(!preFilters[ type ] ||
-                               (match = preFilters[ type ]( match ))) ) {
-                               matched = match.shift();
-                               tokens.push({
-                                       value: matched,
-                                       type: type,
-                                       matches: match
-                               });
-                               soFar = soFar.slice( matched.length );
-                       }
-               }
-
-               if ( !matched ) {
-                       break;
-               }
-       }
-
-       // Return the length of the invalid excess
-       // if we're just parsing
-       // Otherwise, throw an error or return tokens
-       return parseOnly ?
-               soFar.length :
-               soFar ?
-                       Sizzle.error( selector ) :
-                       // Cache the tokens
-                       tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
-       var i = 0,
-               len = tokens.length,
-               selector = "";
-       for ( ; i < len; i++ ) {
-               selector += tokens[i].value;
-       }
-       return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-       var dir = combinator.dir,
-               checkNonElements = base && dir === "parentNode",
-               doneName = done++;
-
-       return combinator.first ?
-               // Check against closest ancestor/preceding element
-               function( elem, context, xml ) {
-                       while ( (elem = elem[ dir ]) ) {
-                               if ( elem.nodeType === 1 || checkNonElements ) {
-                                       return matcher( elem, context, xml );
-                               }
-                       }
-               } :
-
-               // Check against all ancestor/preceding elements
-               function( elem, context, xml ) {
-                       var oldCache, outerCache,
-                               newCache = [ dirruns, doneName ];
-
-                       // We can't set arbitrary data on XML nodes, so they 
don't benefit from dir caching
-                       if ( xml ) {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || 
checkNonElements ) {
-                                               if ( matcher( elem, context, 
xml ) ) {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                       } else {
-                               while ( (elem = elem[ dir ]) ) {
-                                       if ( elem.nodeType === 1 || 
checkNonElements ) {
-                                               outerCache = elem[ expando ] || 
(elem[ expando ] = {});
-                                               if ( (oldCache = outerCache[ 
dir ]) &&
-                                                       oldCache[ 0 ] === 
dirruns && oldCache[ 1 ] === doneName ) {
-
-                                                       // Assign to newCache 
so results back-propagate to previous elements
-                                                       return (newCache[ 2 ] = 
oldCache[ 2 ]);
-                                               } else {
-                                                       // Reuse newcache so 
results back-propagate to previous elements
-                                                       outerCache[ dir ] = 
newCache;
-
-                                                       // A match means we're 
done; a fail means we have to keep checking
-                                                       if ( (newCache[ 2 ] = 
matcher( elem, context, xml )) ) {
-                                                               return true;
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               };
-}
-
-function elementMatcher( matchers ) {
-       return matchers.length > 1 ?
-               function( elem, context, xml ) {
-                       var i = matchers.length;
-                       while ( i-- ) {
-                               if ( !matchers[i]( elem, context, xml ) ) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               } :
-               matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
-       var i = 0,
-               len = contexts.length;
-       for ( ; i < len; i++ ) {
-               Sizzle( selector, contexts[i], results );
-       }
-       return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-       var elem,
-               newUnmatched = [],
-               i = 0,
-               len = unmatched.length,
-               mapped = map != null;
-
-       for ( ; i < len; i++ ) {
-               if ( (elem = unmatched[i]) ) {
-                       if ( !filter || filter( elem, context, xml ) ) {
-                               newUnmatched.push( elem );
-                               if ( mapped ) {
-                                       map.push( i );
-                               }
-                       }
-               }
-       }
-
-       return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, 
postSelector ) {
-       if ( postFilter && !postFilter[ expando ] ) {
-               postFilter = setMatcher( postFilter );
-       }
-       if ( postFinder && !postFinder[ expando ] ) {
-               postFinder = setMatcher( postFinder, postSelector );
-       }
-       return markFunction(function( seed, results, context, xml ) {
-               var temp, i, elem,
-                       preMap = [],
-                       postMap = [],
-                       preexisting = results.length,
-
-                       // Get initial elements from seed or context
-                       elems = seed || multipleContexts( selector || "*", 
context.nodeType ? [ context ] : context, [] ),
-
-                       // Prefilter to get matcher input, preserving a map for 
seed-results synchronization
-                       matcherIn = preFilter && ( seed || !selector ) ?
-                               condense( elems, preMap, preFilter, context, 
xml ) :
-                               elems,
-
-                       matcherOut = matcher ?
-                               // If we have a postFinder, or filtered seed, 
or non-seed postFilter or preexisting results,
-                               postFinder || ( seed ? preFilter : preexisting 
|| postFilter ) ?
-
-                                       // ...intermediate processing is 
necessary
-                                       [] :
-
-                                       // ...otherwise use results directly
-                                       results :
-                               matcherIn;
-
-               // Find primary matches
-               if ( matcher ) {
-                       matcher( matcherIn, matcherOut, context, xml );
-               }
-
-               // Apply postFilter
-               if ( postFilter ) {
-                       temp = condense( matcherOut, postMap );
-                       postFilter( temp, [], context, xml );
-
-                       // Un-match failing elements by moving them back to 
matcherIn
-                       i = temp.length;
-                       while ( i-- ) {
-                               if ( (elem = temp[i]) ) {
-                                       matcherOut[ postMap[i] ] = !(matcherIn[ 
postMap[i] ] = elem);
-                               }
-                       }
-               }
-
-               if ( seed ) {
-                       if ( postFinder || preFilter ) {
-                               if ( postFinder ) {
-                                       // Get the final matcherOut by 
condensing this intermediate into postFinder contexts
-                                       temp = [];
-                                       i = matcherOut.length;
-                                       while ( i-- ) {
-                                               if ( (elem = matcherOut[i]) ) {
-                                                       // Restore matcherIn 
since elem is not yet a final match
-                                                       temp.push( 
(matcherIn[i] = elem) );
-                                               }
-                                       }
-                                       postFinder( null, (matcherOut = []), 
temp, xml );
-                               }
-
-                               // Move matched elements from seed to results 
to keep them synchronized
-                               i = matcherOut.length;
-                               while ( i-- ) {
-                                       if ( (elem = matcherOut[i]) &&
-                                               (temp = postFinder ? 
indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
-                                               seed[temp] = !(results[temp] = 
elem);
-                                       }
-                               }
-                       }
-
-               // Add elements to results, through postFinder if defined
-               } else {
-                       matcherOut = condense(
-                               matcherOut === results ?
-                                       matcherOut.splice( preexisting, 
matcherOut.length ) :
-                                       matcherOut
-                       );
-                       if ( postFinder ) {
-                               postFinder( null, results, matcherOut, xml );
-                       } else {
-                               push.apply( results, matcherOut );
-                       }
-               }
-       });
-}
-
-function matcherFromTokens( tokens ) {
-       var checkContext, matcher, j,
-               len = tokens.length,
-               leadingRelative = Expr.relative[ tokens[0].type ],
-               implicitRelative = leadingRelative || Expr.relative[" "],
-               i = leadingRelative ? 1 : 0,
-
-               // The foundational matcher ensures that elements are reachable 
from top-level context(s)
-               matchContext = addCombinator( function( elem ) {
-                       return elem === checkContext;
-               }, implicitRelative, true ),
-               matchAnyContext = addCombinator( function( elem ) {
-                       return indexOf.call( checkContext, elem ) > -1;
-               }, implicitRelative, true ),
-               matchers = [ function( elem, context, xml ) {
-                       return ( !leadingRelative && ( xml || context !== 
outermostContext ) ) || (
-                               (checkContext = context).nodeType ?
-                                       matchContext( elem, context, xml ) :
-                                       matchAnyContext( elem, context, xml ) );
-               } ];
-
-       for ( ; i < len; i++ ) {
-               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-                       matchers = [ addCombinator(elementMatcher( matchers ), 
matcher) ];
-               } else {
-                       matcher = Expr.filter[ tokens[i].type ].apply( null, 
tokens[i].matches );
-
-                       // Return special upon seeing a positional matcher
-                       if ( matcher[ expando ] ) {
-                               // Find the next relative operator (if any) for 
proper handling
-                               j = ++i;
-                               for ( ; j < len; j++ ) {
-                                       if ( Expr.relative[ tokens[j].type ] ) {
-                                               break;
-                                       }
-                               }
-                               return setMatcher(
-                                       i > 1 && elementMatcher( matchers ),
-                                       i > 1 && toSelector(
-                                               // If the preceding token was a 
descendant combinator, insert an implicit any-element `*`
-                                               tokens.slice( 0, i - 1 
).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-                                       ).replace( rtrim, "$1" ),
-                                       matcher,
-                                       i < j && matcherFromTokens( 
tokens.slice( i, j ) ),
-                                       j < len && matcherFromTokens( (tokens = 
tokens.slice( j )) ),
-                                       j < len && toSelector( tokens )
-                               );
-                       }
-                       matchers.push( matcher );
-               }
-       }
-
-       return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-       var bySet = setMatchers.length > 0,
-               byElement = elementMatchers.length > 0,
-               superMatcher = function( seed, context, xml, results, outermost 
) {
-                       var elem, j, matcher,
-                               matchedCount = 0,
-                               i = "0",
-                               unmatched = seed && [],
-                               setMatched = [],
-                               contextBackup = outermostContext,
-                               // We must always have either seed elements or 
outermost context
-                               elems = seed || byElement && Expr.find["TAG"]( 
"*", outermost ),
-                               // Use integer dirruns iff this is the 
outermost matcher
-                               dirrunsUnique = (dirruns += contextBackup == 
null ? 1 : Math.random() || 0.1),
-                               len = elems.length;
-
-                       if ( outermost ) {
-                               outermostContext = context !== document && 
context;
-                       }
-
-                       // Add elements passing elementMatchers directly to 
results
-                       // Keep `i` a string if there are no elements so 
`matchedCount` will be "00" below
-                       // Support: IE<9, Safari
-                       // Tolerate NodeList properties (IE: "length"; Safari: 
<number>) matching elements by id
-                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
-                               if ( byElement && elem ) {
-                                       j = 0;
-                                       while ( (matcher = 
elementMatchers[j++]) ) {
-                                               if ( matcher( elem, context, 
xml ) ) {
-                                                       results.push( elem );
-                                                       break;
-                                               }
-                                       }
-                                       if ( outermost ) {
-                                               dirruns = dirrunsUnique;
-                                       }
-                               }
-
-                               // Track unmatched elements for set filters
-                               if ( bySet ) {
-                                       // They will have gone through all 
possible matchers
-                                       if ( (elem = !matcher && elem) ) {
-                                               matchedCount--;
-                                       }
-
-                                       // Lengthen the array for every 
element, matched or not
-                                       if ( seed ) {
-                                               unmatched.push( elem );
-                                       }
-                               }
-                       }
-
-                       // Apply set filters to unmatched elements
-                       matchedCount += i;
-                       if ( bySet && i !== matchedCount ) {
-                               j = 0;
-                               while ( (matcher = setMatchers[j++]) ) {
-                                       matcher( unmatched, setMatched, 
context, xml );
-                               }
-
-                               if ( seed ) {
-                                       // Reintegrate element matches to 
eliminate the need for sorting
-                                       if ( matchedCount > 0 ) {
-                                               while ( i-- ) {
-                                                       if ( !(unmatched[i] || 
setMatched[i]) ) {
-                                                               setMatched[i] = 
pop.call( results );
-                                                       }
-                                               }
-                                       }
-
-                                       // Discard index placeholder values to 
get only actual matches
-                                       setMatched = condense( setMatched );
-                               }
-
-                               // Add matches to results
-                               push.apply( results, setMatched );
-
-                               // Seedless set matches succeeding multiple 
successful matchers stipulate sorting
-                               if ( outermost && !seed && setMatched.length > 
0 &&
-                                       ( matchedCount + setMatchers.length ) > 
1 ) {
-
-                                       Sizzle.uniqueSort( results );
-                               }
-                       }
-
-                       // Override manipulation of globals by nested matchers
-                       if ( outermost ) {
-                               dirruns = dirrunsUnique;
-                               outermostContext = contextBackup;
-                       }
-
-                       return unmatched;
-               };
-
-       return bySet ?
-               markFunction( superMatcher ) :
-               superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) 
{
-       var i,
-               setMatchers = [],
-               elementMatchers = [],
-               cached = compilerCache[ selector + " " ];
-
-       if ( !cached ) {
-               // Generate a function of recursive functions that can be used 
to check each element
-               if ( !match ) {
-                       match = tokenize( selector );
-               }
-               i = match.length;
-               while ( i-- ) {
-                       cached = matcherFromTokens( match[i] );
-                       if ( cached[ expando ] ) {
-                               setMatchers.push( cached );
-                       } else {
-                               elementMatchers.push( cached );
-                       }
-               }
-
-               // Cache the compiled function
-               cached = compilerCache( selector, matcherFromGroupMatchers( 
elementMatchers, setMatchers ) );
-
-               // Save selector and tokenization
-               cached.selector = selector;
-       }
-       return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- *  selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- *  selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
-       var i, tokens, token, type, find,
-               compiled = typeof selector === "function" && selector,
-               match = !seed && tokenize( (selector = compiled.selector || 
selector) );
-
-       results = results || [];
-
-       // Try to minimize operations if there is no seed and only one group
-       if ( match.length === 1 ) {
-
-               // Take a shortcut and set the context if the root selector is 
an ID
-               tokens = match[0] = match[0].slice( 0 );
-               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-                               support.getById && context.nodeType === 9 && 
documentIsHTML &&
-                               Expr.relative[ tokens[1].type ] ) {
-
-                       context = ( Expr.find["ID"]( 
token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-                       if ( !context ) {
-                               return results;
-
-                       // Precompiled matchers will still verify ancestry, so 
step up a level
-                       } else if ( compiled ) {
-                               context = context.parentNode;
-                       }
-
-                       selector = selector.slice( tokens.shift().value.length 
);
-               }
-
-               // Fetch a seed set for right-to-left matching
-               i = matchExpr["needsContext"].test( selector ) ? 0 : 
tokens.length;
-               while ( i-- ) {
-                       token = tokens[i];
-
-                       // Abort if we hit a combinator
-                       if ( Expr.relative[ (type = token.type) ] ) {
-                               break;
-                       }
-                       if ( (find = Expr.find[ type ]) ) {
-                               // Search, expanding context for leading 
sibling combinators
-                               if ( (seed = find(
-                                       token.matches[0].replace( runescape, 
funescape ),
-                                       rsibling.test( tokens[0].type ) && 
testContext( context.parentNode ) || context
-                               )) ) {
-
-                                       // If seed is empty or no tokens 
remain, we can return early
-                                       tokens.splice( i, 1 );
-                                       selector = seed.length && toSelector( 
tokens );
-                                       if ( !selector ) {
-                                               push.apply( results, seed );
-                                               return results;
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       // Compile and execute a filtering function if one is not provided
-       // Provide `match` to avoid retokenization if we modified the selector 
above
-       ( compiled || compile( selector, match ) )(
-               seed,
-               context,
-               !documentIsHTML,
-               results,
-               rsibling.test( selector ) && testContext( context.parentNode ) 
|| context
-       );
-       return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome<14
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
-       // Should return 1, but returns 4 (following)
-       return div1.compareDocumentPosition( document.createElement("div") ) & 
1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
-       div.innerHTML = "<a href='#'></a>";
-       return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
-       addHandle( "type|href|height|width", function( elem, name, isXML ) {
-               if ( !isXML ) {
-                       return elem.getAttribute( name, name.toLowerCase() === 
"type" ? 1 : 2 );
-               }
-       });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
-       div.innerHTML = "<input/>";
-       div.firstChild.setAttribute( "value", "" );
-       return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
-       addHandle( "value", function( elem, name, isXML ) {
-               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
-                       return elem.defaultValue;
-               }
-       });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
-       return div.getAttribute("disabled") == null;
-}) ) {
-       addHandle( booleans, function( elem, name, isXML ) {
-               var val;
-               if ( !isXML ) {
-                       return elem[ name ] === true ? name.toLowerCase() :
-                                       (val = elem.getAttributeNode( name )) 
&& val.specified ?
-                                       val.value :
-                               null;
-               }
-       });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep( elements, function( elem, i ) {
-                       /* jshint -W018 */
-                       return !!qualifier.call( elem, i, elem ) !== not;
-               });
-
-       }
-
-       if ( qualifier.nodeType ) {
-               return jQuery.grep( elements, function( elem ) {
-                       return ( elem === qualifier ) !== not;
-               });
-
-       }
-
-       if ( typeof qualifier === "string" ) {
-               if ( risSimple.test( qualifier ) ) {
-                       return jQuery.filter( qualifier, elements, not );
-               }
-
-               qualifier = jQuery.filter( qualifier, elements );
-       }
-
-       return jQuery.grep( elements, function( elem ) {
-               return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
-       });
-}
-
-jQuery.filter = function( expr, elems, not ) {
-       var elem = elems[ 0 ];
-
-       if ( not ) {
-               expr = ":not(" + expr + ")";
-       }
-
-       return elems.length === 1 && elem.nodeType === 1 ?
-               jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
-               jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) 
{
-                       return elem.nodeType === 1;
-               }));
-};
-
-jQuery.fn.extend({
-       find: function( selector ) {
-               var i,
-                       len = this.length,
-                       ret = [],
-                       self = this;
-
-               if ( typeof selector !== "string" ) {
-                       return this.pushStack( jQuery( selector 
).filter(function() {
-                               for ( i = 0; i < len; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) 
) {
-                                               return true;
-                                       }
-                               }
-                       }) );
-               }
-
-               for ( i = 0; i < len; i++ ) {
-                       jQuery.find( selector, self[ i ], ret );
-               }
-
-               // Needed because $( selector, context ) becomes $( context 
).find( selector )
-               ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
-               ret.selector = this.selector ? this.selector + " " + selector : 
selector;
-               return ret;
-       },
-       filter: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], false) );
-       },
-       not: function( selector ) {
-               return this.pushStack( winnow(this, selector || [], true) );
-       },
-       is: function( selector ) {
-               return !!winnow(
-                       this,
-
-                       // If this is a positional/relative selector, check 
membership in the returned set
-                       // so $("p:first").is("p:last") won't return true for a 
doc with two "p".
-                       typeof selector === "string" && rneedsContext.test( 
selector ) ?
-                               jQuery( selector ) :
-                               selector || [],
-                       false
-               ).length;
-       }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
-       // A simple way to check for HTML strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       // Strict HTML recognition (#11290: must start with <)
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
-       init = jQuery.fn.init = function( selector, context ) {
-               var match, elem;
-
-               // HANDLE: $(""), $(null), $(undefined), $(false)
-               if ( !selector ) {
-                       return this;
-               }
-
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       if ( selector[0] === "<" && selector[ selector.length - 
1 ] === ">" && selector.length >= 3 ) {
-                               // Assume that strings that start and end with 
<> are HTML and skip the regex check
-                               match = [ null, selector, null ];
-
-                       } else {
-                               match = rquickExpr.exec( selector );
-                       }
-
-                       // Match html or make sure no context is specified for 
#id
-                       if ( match && (match[1] || !context) ) {
-
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       context = context instanceof jQuery ? 
context[0] : context;
-
-                                       // scripts is true for back-compat
-                                       // Intentionally let the error be 
thrown if parseHTML is not present
-                                       jQuery.merge( this, jQuery.parseHTML(
-                                               match[1],
-                                               context && context.nodeType ? 
context.ownerDocument || context : document,
-                                               true
-                                       ) );
-
-                                       // HANDLE: $(html, props)
-                                       if ( rsingleTag.test( match[1] ) && 
jQuery.isPlainObject( context ) ) {
-                                               for ( match in context ) {
-                                                       // Properties of 
context are called as methods if possible
-                                                       if ( jQuery.isFunction( 
this[ match ] ) ) {
-                                                               this[ match ]( 
context[ match ] );
-
-                                                       // ...and otherwise set 
as attributes
-                                                       } else {
-                                                               this.attr( 
match, context[ match ] );
-                                                       }
-                                               }
-                                       }
-
-                                       return this;
-
-                               // HANDLE: $(#id)
-                               } else {
-                                       elem = document.getElementById( 
match[2] );
-
-                                       // Check parentNode to catch when 
Blackberry 4.6 returns
-                                       // nodes that are no longer in the 
document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Inject the element directly 
into the jQuery object
-                                               this.length = 1;
-                                               this[0] = elem;
-                                       }
-
-                                       this.context = document;
-                                       this.selector = selector;
-                                       return this;
-                               }
-
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return ( context || rootjQuery ).find( selector 
);
-
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return this.constructor( context ).find( 
selector );
-                       }
-
-               // HANDLE: $(DOMElement)
-               } else if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
-                       this.length = 1;
-                       return this;
-
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return typeof rootjQuery.ready !== "undefined" ?
-                               rootjQuery.ready( selector ) :
-                               // Execute immediately if ready is not present
-                               selector( jQuery );
-               }
-
-               if ( selector.selector !== undefined ) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
-
-               return jQuery.makeArray( selector, this );
-       };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-       // methods guaranteed to produce a unique set when starting from a 
unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
-
-jQuery.extend({
-       dir: function( elem, dir, until ) {
-               var matched = [],
-                       truncate = until !== undefined;
-
-               while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
-                       if ( elem.nodeType === 1 ) {
-                               if ( truncate && jQuery( elem ).is( until ) ) {
-                                       break;
-                               }
-                               matched.push( elem );
-                       }
-               }
-               return matched;
-       },
-
-       sibling: function( n, elem ) {
-               var matched = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               matched.push( n );
-                       }
-               }
-
-               return matched;
-       }
-});
-
-jQuery.fn.extend({
-       has: function( target ) {
-               var targets = jQuery( target, this ),
-                       l = targets.length;
-
-               return this.filter(function() {
-                       var i = 0;
-                       for ( ; i < l; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
-                                       return true;
-                               }
-                       }
-               });
-       },
-
-       closest: function( selectors, context ) {
-               var cur,
-                       i = 0,
-                       l = this.length,
-                       matched = [],
-                       pos = rneedsContext.test( selectors ) || typeof 
selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
-
-               for ( ; i < l; i++ ) {
-                       for ( cur = this[i]; cur && cur !== context; cur = 
cur.parentNode ) {
-                               // Always skip document fragments
-                               if ( cur.nodeType < 11 && (pos ?
-                                       pos.index(cur) > -1 :
-
-                                       // Don't pass non-elements to Sizzle
-                                       cur.nodeType === 1 &&
-                                               
jQuery.find.matchesSelector(cur, selectors)) ) {
-
-                                       matched.push( cur );
-                                       break;
-                               }
-                       }
-               }
-
-               return this.pushStack( matched.length > 1 ? jQuery.unique( 
matched ) : matched );
-       },
-
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
-
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? 
this.first().prevAll().length : -1;
-               }
-
-               // index in selector
-               if ( typeof elem === "string" ) {
-                       return indexOf.call( jQuery( elem ), this[ 0 ] );
-               }
-
-               // Locate the position of the desired element
-               return indexOf.call( this,
-
-                       // If it receives a jQuery object, the first element is 
used
-                       elem.jquery ? elem[ 0 ] : elem
-               );
-       },
-
-       add: function( selector, context ) {
-               return this.pushStack(
-                       jQuery.unique(
-                               jQuery.merge( this.get(), jQuery( selector, 
context ) )
-                       )
-               );
-       },
-
-       addBack: function( selector ) {
-               return this.add( selector == null ?
-                       this.prevObject : this.prevObject.filter(selector)
-               );
-       }
-});
-
-function sibling( cur, dir ) {
-       while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
-       return cur;
-}
-
-jQuery.each({
-       parent: function( elem ) {
-               var parent = elem.parentNode;
-               return parent && parent.nodeType !== 11 ? parent : null;
-       },
-       parents: function( elem ) {
-               return jQuery.dir( elem, "parentNode" );
-       },
-       parentsUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "parentNode", until );
-       },
-       next: function( elem ) {
-               return sibling( elem, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return sibling( elem, "previousSibling" );
-       },
-       nextAll: function( elem ) {
-               return jQuery.dir( elem, "nextSibling" );
-       },
-       prevAll: function( elem ) {
-               return jQuery.dir( elem, "previousSibling" );
-       },
-       nextUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "nextSibling", until );
-       },
-       prevUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "previousSibling", until );
-       },
-       siblings: function( elem ) {
-               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, 
elem );
-       },
-       children: function( elem ) {
-               return jQuery.sibling( elem.firstChild );
-       },
-       contents: function( elem ) {
-               return elem.contentDocument || jQuery.merge( [], 
elem.childNodes );
-       }
-}, function( name, fn ) {
-       jQuery.fn[ name ] = function( until, selector ) {
-               var matched = jQuery.map( this, fn, until );
-
-               if ( name.slice( -5 ) !== "Until" ) {
-                       selector = until;
-               }
-
-               if ( selector && typeof selector === "string" ) {
-                       matched = jQuery.filter( selector, matched );
-               }
-
-               if ( this.length > 1 ) {
-                       // Remove duplicates
-                       if ( !guaranteedUnique[ name ] ) {
-                               jQuery.unique( matched );
-                       }
-
-                       // Reverse order for parents* and prev-derivatives
-                       if ( rparentsprev.test( name ) ) {
-                               matched.reverse();
-                       }
-               }
-
-               return this.pushStack( matched );
-       };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in 
cache
-function createOptions( options ) {
-       var object = optionsCache[ options ] = {};
-       jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
-               object[ flag ] = true;
-       });
-       return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *     options: an optional list of space-separated options that will change 
how
- *                     the callback list behaves or a more traditional option 
object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *     once:                   will ensure the callback list can only be fired 
once (like a Deferred)
- *
- *     memory:                 will keep track of previous values and will 
call any callback added
- *                                     after the list has been fired right 
away with the latest "memorized"
- *                                     values (like a Deferred)
- *
- *     unique:                 will ensure a callback can only be added once 
(no duplicate in the list)
- *
- *     stopOnFalse:    interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-       // Convert options from String-formatted to Object-formatted if needed
-       // (we check in cache first)
-       options = typeof options === "string" ?
-               ( optionsCache[ options ] || createOptions( options ) ) :
-               jQuery.extend( {}, options );
-
-       var // Last fire value (for non-forgettable lists)
-               memory,
-               // Flag to know if list was already fired
-               fired,
-               // Flag to know if list is currently firing
-               firing,
-               // First callback to fire (used internally by add and fireWith)
-               firingStart,
-               // End of the loop when firing
-               firingLength,
-               // Index of currently firing callback (modified by remove if 
needed)
-               firingIndex,
-               // Actual callback list
-               list = [],
-               // Stack of fire calls for repeatable lists
-               stack = !options.once && [],
-               // Fire callbacks
-               fire = function( data ) {
-                       memory = options.memory && data;
-                       fired = true;
-                       firingIndex = firingStart || 0;
-                       firingStart = 0;
-                       firingLength = list.length;
-                       firing = true;
-                       for ( ; list && firingIndex < firingLength; 
firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( data[ 0 ], 
data[ 1 ] ) === false && options.stopOnFalse ) {
-                                       memory = false; // To prevent further 
calls using add
-                                       break;
-                               }
-                       }
-                       firing = false;
-                       if ( list ) {
-                               if ( stack ) {
-                                       if ( stack.length ) {
-                                               fire( stack.shift() );
-                                       }
-                               } else if ( memory ) {
-                                       list = [];
-                               } else {
-                                       self.disable();
-                               }
-                       }
-               },
-               // Actual Callbacks object
-               self = {
-                       // Add a callback or a collection of callbacks to the 
list
-                       add: function() {
-                               if ( list ) {
-                                       // First, we save the current length
-                                       var start = list.length;
-                                       (function add( args ) {
-                                               jQuery.each( args, function( _, 
arg ) {
-                                                       var type = jQuery.type( 
arg );
-                                                       if ( type === 
"function" ) {
-                                                               if ( 
!options.unique || !self.has( arg ) ) {
-                                                                       
list.push( arg );
-                                                               }
-                                                       } else if ( arg && 
arg.length && type !== "string" ) {
-                                                               // Inspect 
recursively
-                                                               add( arg );
-                                                       }
-                                               });
-                                       })( arguments );
-                                       // Do we need to add the callbacks to 
the
-                                       // current firing batch?
-                                       if ( firing ) {
-                                               firingLength = list.length;
-                                       // With memory, if we're not firing then
-                                       // we should call right away
-                                       } else if ( memory ) {
-                                               firingStart = start;
-                                               fire( memory );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Remove a callback from the list
-                       remove: function() {
-                               if ( list ) {
-                                       jQuery.each( arguments, function( _, 
arg ) {
-                                               var index;
-                                               while ( ( index = 
jQuery.inArray( arg, list, index ) ) > -1 ) {
-                                                       list.splice( index, 1 );
-                                                       // Handle firing indexes
-                                                       if ( firing ) {
-                                                               if ( index <= 
firingLength ) {
-                                                                       
firingLength--;
-                                                               }
-                                                               if ( index <= 
firingIndex ) {
-                                                                       
firingIndex--;
-                                                               }
-                                                       }
-                                               }
-                                       });
-                               }
-                               return this;
-                       },
-                       // Check if a given callback is in the list.
-                       // If no argument is given, return whether or not list 
has callbacks attached.
-                       has: function( fn ) {
-                               return fn ? jQuery.inArray( fn, list ) > -1 : 
!!( list && list.length );
-                       },
-                       // Remove all callbacks from the list
-                       empty: function() {
-                               list = [];
-                               firingLength = 0;
-                               return this;
-                       },
-                       // Have the list do nothing anymore
-                       disable: function() {
-                               list = stack = memory = undefined;
-                               return this;
-                       },
-                       // Is it disabled?
-                       disabled: function() {
-                               return !list;
-                       },
-                       // Lock the list in its current state
-                       lock: function() {
-                               stack = undefined;
-                               if ( !memory ) {
-                                       self.disable();
-                               }
-                               return this;
-                       },
-                       // Is it locked?
-                       locked: function() {
-                               return !stack;
-                       },
-                       // Call all callbacks with the given context and 
arguments
-                       fireWith: function( context, args ) {
-                               if ( list && ( !fired || stack ) ) {
-                                       args = args || [];
-                                       args = [ context, args.slice ? 
args.slice() : args ];
-                                       if ( firing ) {
-                                               stack.push( args );
-                                       } else {
-                                               fire( args );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Call all the callbacks with the given arguments
-                       fire: function() {
-                               self.fireWith( this, arguments );
-                               return this;
-                       },
-                       // To know if the callbacks have already been called at 
least once
-                       fired: function() {
-                               return !!fired;
-                       }
-               };
-
-       return self;
-};
-
-
-jQuery.extend({
-
-       Deferred: function( func ) {
-               var tuples = [
-                               // action, add listener, listener list, final 
state
-                               [ "resolve", "done", jQuery.Callbacks("once 
memory"), "resolved" ],
-                               [ "reject", "fail", jQuery.Callbacks("once 
memory"), "rejected" ],
-                               [ "notify", "progress", 
jQuery.Callbacks("memory") ]
-                       ],
-                       state = "pending",
-                       promise = {
-                               state: function() {
-                                       return state;
-                               },
-                               always: function() {
-                                       deferred.done( arguments ).fail( 
arguments );
-                                       return this;
-                               },
-                               then: function( /* fnDone, fnFail, fnProgress 
*/ ) {
-                                       var fns = arguments;
-                                       return jQuery.Deferred(function( 
newDefer ) {
-                                               jQuery.each( tuples, function( 
i, tuple ) {
-                                                       var fn = 
jQuery.isFunction( fns[ i ] ) && fns[ i ];
-                                                       // deferred[ done | 
fail | progress ] for forwarding actions to newDefer
-                                                       deferred[ tuple[1] 
](function() {
-                                                               var returned = 
fn && fn.apply( this, arguments );
-                                                               if ( returned 
&& jQuery.isFunction( returned.promise ) ) {
-                                                                       
returned.promise()
-                                                                               
.done( newDefer.resolve )
-                                                                               
.fail( newDefer.reject )
-                                                                               
.progress( newDefer.notify );
-                                                               } else {
-                                                                       
newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, 
fn ? [ returned ] : arguments );
-                                                               }
-                                                       });
-                                               });
-                                               fns = null;
-                                       }).promise();
-                               },
-                               // Get a promise for this deferred
-                               // If obj is provided, the promise aspect is 
added to the object
-                               promise: function( obj ) {
-                                       return obj != null ? jQuery.extend( 
obj, promise ) : promise;
-                               }
-                       },
-                       deferred = {};
-
-               // Keep pipe for back-compat
-               promise.pipe = promise.then;
-
-               // Add list-specific methods
-               jQuery.each( tuples, function( i, tuple ) {
-                       var list = tuple[ 2 ],
-                               stateString = tuple[ 3 ];
-
-                       // promise[ done | fail | progress ] = list.add
-                       promise[ tuple[1] ] = list.add;
-
-                       // Handle state
-                       if ( stateString ) {
-                               list.add(function() {
-                                       // state = [ resolved | rejected ]
-                                       state = stateString;
-
-                               // [ reject_list | resolve_list ].disable; 
progress_list.lock
-                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 
].lock );
-                       }
-
-                       // deferred[ resolve | reject | notify ]
-                       deferred[ tuple[0] ] = function() {
-                               deferred[ tuple[0] + "With" ]( this === 
deferred ? promise : this, arguments );
-                               return this;
-                       };
-                       deferred[ tuple[0] + "With" ] = list.fireWith;
-               });
-
-               // Make the deferred a promise
-               promise.promise( deferred );
-
-               // Call given func if any
-               if ( func ) {
-                       func.call( deferred, deferred );
-               }
-
-               // All done!
-               return deferred;
-       },
-
-       // Deferred helper
-       when: function( subordinate /* , ..., subordinateN */ ) {
-               var i = 0,
-                       resolveValues = slice.call( arguments ),
-                       length = resolveValues.length,
-
-                       // the count of uncompleted subordinates
-                       remaining = length !== 1 || ( subordinate && 
jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
-                       // the master Deferred. If resolveValues consist of 
only a single Deferred, just use that.
-                       deferred = remaining === 1 ? subordinate : 
jQuery.Deferred(),
-
-                       // Update function for both resolve and progress values
-                       updateFunc = function( i, contexts, values ) {
-                               return function( value ) {
-                                       contexts[ i ] = this;
-                                       values[ i ] = arguments.length > 1 ? 
slice.call( arguments ) : value;
-                                       if ( values === progressValues ) {
-                                               deferred.notifyWith( contexts, 
values );
-                                       } else if ( !( --remaining ) ) {
-                                               deferred.resolveWith( contexts, 
values );
-                                       }
-                               };
-                       },
-
-                       progressValues, progressContexts, resolveContexts;
-
-               // add listeners to Deferred subordinates; treat others as 
resolved
-               if ( length > 1 ) {
-                       progressValues = new Array( length );
-                       progressContexts = new Array( length );
-                       resolveContexts = new Array( length );
-                       for ( ; i < length; i++ ) {
-                               if ( resolveValues[ i ] && jQuery.isFunction( 
resolveValues[ i ].promise ) ) {
-                                       resolveValues[ i ].promise()
-                                               .done( updateFunc( i, 
resolveContexts, resolveValues ) )
-                                               .fail( deferred.reject )
-                                               .progress( updateFunc( i, 
progressContexts, progressValues ) );
-                               } else {
-                                       --remaining;
-                               }
-                       }
-               }
-
-               // if we're not waiting on anything, resolve the master
-               if ( !remaining ) {
-                       deferred.resolveWith( resolveContexts, resolveValues );
-               }
-
-               return deferred.promise();
-       }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
-       // Add the callback
-       jQuery.ready.promise().done( fn );
-
-       return this;
-};
-
-jQuery.extend({
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
-
-       // A counter to track how many items to wait for before
-       // the ready event fires. See #6781
-       readyWait: 1,
-
-       // Hold (or release) the ready event
-       holdReady: function( hold ) {
-               if ( hold ) {
-                       jQuery.readyWait++;
-               } else {
-                       jQuery.ready( true );
-               }
-       },
-
-       // Handle when the DOM is ready
-       ready: function( wait ) {
-
-               // Abort if there are pending holds or we're already ready
-               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-                       return;
-               }
-
-               // Remember that the DOM is ready
-               jQuery.isReady = true;
-
-               // If a normal DOM Ready event fired, decrement, and wait if 
need be
-               if ( wait !== true && --jQuery.readyWait > 0 ) {
-                       return;
-               }
-
-               // If there are functions bound, to execute
-               readyList.resolveWith( document, [ jQuery ] );
-
-               // Trigger any bound ready events
-               if ( jQuery.fn.triggerHandler ) {
-                       jQuery( document ).triggerHandler( "ready" );
-                       jQuery( document ).off( "ready" );
-               }
-       }
-});
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
-       document.removeEventListener( "DOMContentLoaded", completed, false );
-       window.removeEventListener( "load", completed, false );
-       jQuery.ready();
-}
-
-jQuery.ready.promise = function( obj ) {
-       if ( !readyList ) {
-
-               readyList = jQuery.Deferred();
-
-               // Catch cases where $(document).ready() is called after the 
browser event has already occurred.
-               // we once tried to use readyState "interactive" here, but it 
caused issues like the one
-               // discovered by ChrisS here: 
http://bugs.jquery.com/ticket/12282#comment:15
-               if ( document.readyState === "complete" ) {
-                       // Handle it asynchronously to allow scripts the 
opportunity to delay ready
-                       setTimeout( jQuery.ready );
-
-               } else {
-
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", 
completed, false );
-
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", completed, false );
-               }
-       }
-       return readyList.promise( obj );
-};
-
-// Kick off the DOM ready check even if the user does not
-jQuery.ready.promise();
-
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, 
emptyGet, raw ) {
-       var i = 0,
-               len = elems.length,
-               bulk = key == null;
-
-       // Sets many values
-       if ( jQuery.type( key ) === "object" ) {
-               chainable = true;
-               for ( i in key ) {
-                       jQuery.access( elems, fn, i, key[i], true, emptyGet, 
raw );
-               }
-
-       // Sets one value
-       } else if ( value !== undefined ) {
-               chainable = true;
-
-               if ( !jQuery.isFunction( value ) ) {
-                       raw = true;
-               }
-
-               if ( bulk ) {
-                       // Bulk operations run against the entire set
-                       if ( raw ) {
-                               fn.call( elems, value );
-                               fn = null;
-
-                       // ...except when executing function values
-                       } else {
-                               bulk = fn;
-                               fn = function( elem, key, value ) {
-                                       return bulk.call( jQuery( elem ), value 
);
-                               };
-                       }
-               }
-
-               if ( fn ) {
-                       for ( ; i < len; i++ ) {
-                               fn( elems[i], key, raw ? value : value.call( 
elems[i], i, fn( elems[i], key ) ) );
-                       }
-               }
-       }
-
-       return chainable ?
-               elems :
-
-               // Gets
-               bulk ?
-                       fn.call( elems ) :
-                       len ? fn( elems[0], key ) : emptyGet;
-};
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( owner ) {
-       // Accepts only:
-       //  - Node
-       //    - Node.ELEMENT_NODE
-       //    - Node.DOCUMENT_NODE
-       //  - Object
-       //    - Any
-       /* jshint -W018 */
-       return owner.nodeType === 1 || owner.nodeType === 9 || !( 
+owner.nodeType );
-};
-
-
-function Data() {
-       // Support: Android < 4,
-       // Old WebKit does not have Object.preven